openstack - nova diagonstics 命令流程分析
2013-01-24 09:53
393 查看
nova diagonstics ubuntu12.04 流程分析
super: argparse.ArgumentParser
2. argparse.ArgumentParser:__init__
super: _ActionsContainer 中注册action 和函数之间的对应关系
例如:self.register('action', 'help', _HelpAction)
3. 在parser中增加argument
例如:parser.add_argument('--os-username',
metavar='<auth-user-name>',
default=utils.env('OS_USERNAME', 'NOVA_USERNAME'),
help='Defaults to env[OS_USERNAME].')
2. bind默认的namespace
3. 将action(即parser.add_argument)赋值给namespace.
4. 将parser._defults action 赋值给namespace.
5. parse args
a 替换args,如果它和文件相关
b 迭代args,区分为A|O
c 获取argument的位置信息
d 解析完成得到:namespace,extras
其中1.1: novaclient.v1_1.client.Client
2: novaclient.v1_1.client.Client
b import novaclient.v1_1.client.Client
(1) 初始化Client,创建不同资源的管理类default 和 extensions.
为什么extensions都会找到contrib中的所有文件呢?
例如:self.flavors = flavors.FlavorManager(self)
c 使用client.HTTPClient创建http请求。
(1) 初始化HTTPClient
(2) 初始化logging haddler:StreamHandler
b 查看cache
c 使用urlparse解析url,得到对应的数据scheme, netloc, path, query, frag
d 拼接出admin_url
e 使用_v2_auth来做授权检查,其中self.auth_system='keystone'|plugin_auth。
f 在_v2_auth中url和body,使用_authenticate()发送。
g 使用_time_request中的self.request来发送请求,并获取json格式的{'access':....}响应。
h 设置has_keyring为以后的request.
a 调用_find_server中的find_resource(),分别传入serverManager 和name
b 使用manager的find方法获取匹配的server信息
c 调用serverManager.diagnostics(server)来获取诊断信息
(1) uri: /servers/%s/diagnostics
(2) self.api.client.get()方法发送请求
(3) 在client.py 的HTTPClient 类中,存在get,post,put,delete犯法
(4) 使用_cs_request中的_time_request来发送请求。
1. 获取基本的parser,使用python的argparser模块
1. NovaClientArgumentParser:__init__super: argparse.ArgumentParser
2. argparse.ArgumentParser:__init__
super: _ActionsContainer 中注册action 和函数之间的对应关系
例如:self.register('action', 'help', _HelpAction)
3. 在parser中增加argument
例如:parser.add_argument('--os-username',
metavar='<auth-user-name>',
default=utils.env('OS_USERNAME', 'NOVA_USERNAME'),
help='Defaults to env[OS_USERNAME].')
2. parse已知的参数:result: (options, args)
1. 列出args2. bind默认的namespace
3. 将action(即parser.add_argument)赋值给namespace.
4. 将parser._defults action 赋值给namespace.
5. parse args
a 替换args,如果它和文件相关
b 迭代args,区分为A|O
c 获取argument的位置信息
d 解析完成得到:namespace,extras
3. 设置debug
4. 创建可利用的subcommands,基于版本。
5. 预留hooks by self._run_extension_hooks('__pre_parse_args__')
6. 设置endpoint_type和service_type
7. 判断授权情况 by os_username;os_password;os_tenant_name
8. 判断api版本
9. 使用client.Client创建请求,novaclient.client.py
a 基于版本获取client class by get_client_class其中1.1: novaclient.v1_1.client.Client
2: novaclient.v1_1.client.Client
b import novaclient.v1_1.client.Client
(1) 初始化Client,创建不同资源的管理类default 和 extensions.
为什么extensions都会找到contrib中的所有文件呢?
例如:self.flavors = flavors.FlavorManager(self)
c 使用client.HTTPClient创建http请求。
(1) 初始化HTTPClient
(2) 初始化logging haddler:StreamHandler
10. 检查是否授权,调用client.authenticat()
a 解析keys为listb 查看cache
c 使用urlparse解析url,得到对应的数据scheme, netloc, path, query, frag
d 拼接出admin_url
e 使用_v2_auth来做授权检查,其中self.auth_system='keystone'|plugin_auth。
f 在_v2_auth中url和body,使用_authenticate()发送。
g 使用_time_request中的self.request来发送请求,并获取json格式的{'access':....}响应。
h 设置has_keyring为以后的request.
11. 执行args对应的函数,使用args.func,很神奇的。。。
它会找到do_${args}的命令。此处为do_diagnostics()a 调用_find_server中的find_resource(),分别传入serverManager 和name
b 使用manager的find方法获取匹配的server信息
c 调用serverManager.diagnostics(server)来获取诊断信息
(1) uri: /servers/%s/diagnostics
(2) self.api.client.get()方法发送请求
(3) 在client.py 的HTTPClient 类中,存在get,post,put,delete犯法
(4) 使用_cs_request中的_time_request来发送请求。
相关文章推荐
- Openstack之Nova创建虚机流程分析(02)
- live555源码分析----SETUP命令处理流程
- openstack核心路由和扩展路由及路由对应的api函数调用流程分析
- nutch爬取内容分析和爬取流程命令实现
- redis命令执行流程分析
- live555源码分析----SETUP命令处理流程
- Openstack之Nova创建虚机流程分析
- 基于Linux与Busybox的Reboot命令流程分析
- sip命令与音视频rtp通话完整流程分析
- openstack之nova-api服务流程分析
- Openstack之Nova创建虚机流程分析
- 【OpenStack源码分析之六】从虚拟机启动流程看安全认证
- 基于Linux与Busybox的Reboot命令流程分析
- Memcached 源码分析--命令流程分析
- 基于Linux与Busybox的Reboot命令流程分析
- openstack Nova分析之 创建虚拟机流程(4)
- 基于Linux与Busybox的Reboot命令流程分析
- memcached源代码分析-----set命令处理流程
- live555源码分析----SETUP命令处理流程
- openstack-nova-API解析流程分析