everything start from keystone(3)

本文详细解析了如何使用Keystoneclient在OpenStack环境中进行身份验证和资源访问,包括通过token、用户名和密码的方式,以及如何利用auth_ref进行多客户端认证。此外,文章还介绍了上下文的概念及其在Keystone中的应用。

如果你使用rest call,无论是curl,requests还是自己实现httpclient,前面已经说了拿token,再用token去call命令(早起的时候比这个还要复杂,涉及到scope,unscope的

问题),如果你用keystone client比如:

keystone_client=keystoneclient.v2_0.client.Client(xxxxx);

如何传递参数,xxx是什么。

这个时候你脑子可能会想起一堆东西,比如像我原来一样有疑问,

1. 在配置keystone的时候,我们生成了一个admin_token,而且在create tenant的时候,有:

export OS_SERVICE_TOKEN=ADMIN_TOKEN

export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

然后执行 keystone tenant-create xxx

2. 配置好了之后,我们ssh到controller上,使用source keystonerc_admin或者source keystonerc_demo

然后执行keystone tenant-list

3.还能怎么用client


其实最好的办法还是看源码,不过这个问题看keystone client的Client类注释就大概知道了,因为在注释中给出了三种keystone client的调用方法,对应的

也有个1,2,3:

1. 对应上面的第一条,

        >>> from keystoneclient.v2_0 import client
        >>> admin_client = client.Client(
        ...     token='12345secret7890',
        ...     endpoint='http://localhost:35357/v2.0')

        >>> admin_client.tenants.list()

严格来说这种使用方式,比较危险,可以说只要一个token就获得了超级权限,很多时候配置好了之后可以选择将次token删除(貌似可以设置过期时间,没有深究)

2.对应上面第二条,

        >>> from keystoneclient.v2_0 import client
        >>> keystone = client.Client(username=USER,
        ...                          password=PASS,
        ...                          tenant_name=TENANT_NAME,
        ...                          auth_url=KEYSTONE_URL
)
        >>> keystone.tenants.list()

这个和rest call传递的参数很像,有user name和passwd,有tenant的信息,有auth_url(auth_url对admin和public的一样,前面已经说了原因,因为在router中

对应的是一样的controller),基本上是rest call 的翻版

3.对应上面的第三条,

        >>> from keystoneclient.v2_0 import client
        >>> keystone = client.Client(username=USER,
        ...                          password=PASS,
        ...                          tenant_name=TENANT_NAME,
        ...                          auth_url=KEYSTONE_URL)
        >>> auth_ref = keystone.auth_ref
        >>> # pickle or whatever you like here
        >>> new_client = client.Client(auth_ref=auth_ref)

这个的好处是,如果你要多个client,同时这些client都是用相同的认证,那么你可以拿到auth_ref,然后在每个需要相同认证的client处

用此auth_ref得到client。

ps:纠正一下,这里的鉴权应该是认证,而鉴权是policy做的事情,之后会说。


在说之前,我上几篇中掉了一点儿东西没说,不错就是context这个很神秘的东西,我们一般说上下文,什么是上下文,上下文这个东西是哪里来的?

其实每个模块都有这个东西,不过现在在说keystone,就来讲讲keystone中这个所谓的上下文在哪儿:

我们看拿到token的rest call通过controller执行函数(前面已经说过了):

    def authenticate(self, context, auth=None):

             xxxx

这里就有个context上下文,是不是莫名其妙,不知道这个传的什么东西,在mapper的时候也没有指定啊,那我们从client看:

在TokenManager中的方法 def authenticate,

    def authenticate(self, username=None, tenant_id=None, tenant_name=None,
                     password=None, token=None, return_raw=False):
        if token:
            params = {"auth": {"token": {"id": token}}}
        elif username and password:
            params = {"auth": {"passwordCredentials": {"username": username,
       。。。。
        args = ['/tokens', params, 'access']
        kwargs = {'return_raw': return_raw, 'log': False}
      。。。。
         token_ref = self._create(*args, **kwargs)

       。。。。

挑几行红色的看看,即知道了,所谓的context就是穿进去的这些个参数,对rest call来说,最后都会成为requst的post body(如果是post方法的话)。


到目前为止,如果ssl.enable是false的话,已经可以了,但是如果为了安全,或者是用了pki的token provider,你得配置ssl(security socket layer)相关的东西,

最后就说说keystone中的几个看起来很唬人的文件和意义好了。

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值