xm list源码分析
2015-12-20 10:29
239 查看
xm list源码分析
XenAPI.py:442 parseServer():
从/etc/xen/xm-config.xml读取配置,得到
serverType: Xen-API
serverURI: http://localhost:9363/ username: me
password: mypassword
python\xen\xm\main.py:2979
2979: main() 判断是否打印help
2956: xm_lookup_cmd() 查找命令对应的函数-->xm_list()
3003:_run_cmd 根据serverType:
如果Xen-API:
server = XenAPI.Session(serverURI)
parseAuthentication()
*server.login_with_password()
如果XMLRPC:
server = ServerProxy(serverURI) <------ xmlrpclib.ServerProxy
跳到xm_list()执行
python\xen\xm\main.py:853 xm_list()
命令行参数解析
如果show_vcpus --> 跳到xm_vcpu_list()
801:getDomains()
如果 Xen-API:
*所有虚机:server.xenapi.VM.get_all_records()
*所有虚机的Metrics:server.xenapi.VM_metrics.get_all_records()
根据二者得到所有虚机的信息
根据参数中的虚机名称过滤并转换为sxp格式 map2sxp
如果 XMLRPC:
server.xend.domain(dom, full)
或者server.xend.domains_with_state(True, state, full)
如果--long参数 map(PrettyPrint.prettyprint, doms)
如果--label参数
xm_label_list->parse_doms_info->server.xend.security.get_domain_label->输出
否则:xm_brief_list->parse_doms_info->输出
*server.login_with_password()登陆的过程:
getattr(self, 'session.%s' % method)(*params) --> __getattr__ --> xmlrpcclient.ServerProxy.__getattr__(self, name)-->xmlprc服务器执行
*所有虚机:server.xenapi.VM.get_all_records()的过程
通过xm.XenAPI(xmlrpcclient)向服务器发送RPC请求
XMLPRCServer.py服务器端注册的处理函数server.register_instance(XendAPI.XendAPIAsyncProxy(self.xenapi)) -----> 同步接口??
通过XendTaskManager创建task并启动,具体的处理在XendAPI中
VM.get_all_records通过_get_all_records():通过VM_get_all()得到所有UUID,再根据UUID和VM_get_record()得到最终的信息 O(N*N)
VM_get_all():XendDomain.instance().list('all')得到所有UUID
更新domains(需要更新Xen Store Daemon中的数据)
循环遍历domains和managed_domains,得到所有虚机的UUID
VM_get_record(): XendDomain.instance().get_vm_by_uuid()
循环遍历domains和managed_domains,如果uuid一致,则输出
注:domains和managed_domains信息有重合,这儿本可以直接用uuid作为key来得到字典的values,但是程序里面却用循环遍历values再比较uuid。难道values中存放的uuid与作为key的uuid不一致??
*VM_metrics类的请求被转发给XendVMMetrics
调用XendVMMetrics的所有get_*方法合并得到Metrics
相关类:
VM: A virtual machine (or ’guest’)
VM metrics:The metrics associated with a VM
libxc
libxc(libxenctrl):libxc是一个C语言库,它提供了一些简单易用的API,使用户程序可以方便的和Hypervisor进行通信。主要封装了dom0中的/proc/xen/privcmd,/dev/xen/evtchn以及/dev/xen/gntdev提供的IOCTL接口。
原文地址:http://www.cnblogs.com/feisky/archive/2011/11/27/2265053.html
XenAPI.py:442 parseServer():
从/etc/xen/xm-config.xml读取配置,得到
serverType: Xen-API
serverURI: http://localhost:9363/ username: me
password: mypassword
python\xen\xm\main.py:2979
2979: main() 判断是否打印help
2956: xm_lookup_cmd() 查找命令对应的函数-->xm_list()
3003:_run_cmd 根据serverType:
如果Xen-API:
server = XenAPI.Session(serverURI)
parseAuthentication()
*server.login_with_password()
如果XMLRPC:
server = ServerProxy(serverURI) <------ xmlrpclib.ServerProxy
跳到xm_list()执行
python\xen\xm\main.py:853 xm_list()
命令行参数解析
如果show_vcpus --> 跳到xm_vcpu_list()
801:getDomains()
如果 Xen-API:
*所有虚机:server.xenapi.VM.get_all_records()
*所有虚机的Metrics:server.xenapi.VM_metrics.get_all_records()
根据二者得到所有虚机的信息
根据参数中的虚机名称过滤并转换为sxp格式 map2sxp
如果 XMLRPC:
server.xend.domain(dom, full)
或者server.xend.domains_with_state(True, state, full)
如果--long参数 map(PrettyPrint.prettyprint, doms)
如果--label参数
xm_label_list->parse_doms_info->server.xend.security.get_domain_label->输出
否则:xm_brief_list->parse_doms_info->输出
*server.login_with_password()登陆的过程:
getattr(self, 'session.%s' % method)(*params) --> __getattr__ --> xmlrpcclient.ServerProxy.__getattr__(self, name)-->xmlprc服务器执行
*所有虚机:server.xenapi.VM.get_all_records()的过程
通过xm.XenAPI(xmlrpcclient)向服务器发送RPC请求
XMLPRCServer.py服务器端注册的处理函数server.register_instance(XendAPI.XendAPIAsyncProxy(self.xenapi)) -----> 同步接口??
通过XendTaskManager创建task并启动,具体的处理在XendAPI中
VM.get_all_records通过_get_all_records():通过VM_get_all()得到所有UUID,再根据UUID和VM_get_record()得到最终的信息 O(N*N)
VM_get_all():XendDomain.instance().list('all')得到所有UUID
更新domains(需要更新Xen Store Daemon中的数据)
循环遍历domains和managed_domains,得到所有虚机的UUID
VM_get_record(): XendDomain.instance().get_vm_by_uuid()
循环遍历domains和managed_domains,如果uuid一致,则输出
注:domains和managed_domains信息有重合,这儿本可以直接用uuid作为key来得到字典的values,但是程序里面却用循环遍历values再比较uuid。难道values中存放的uuid与作为key的uuid不一致??
*VM_metrics类的请求被转发给XendVMMetrics
调用XendVMMetrics的所有get_*方法合并得到Metrics
相关类:
VM: A virtual machine (or ’guest’)
VM metrics:The metrics associated with a VM
libxc
libxc(libxenctrl):libxc是一个C语言库,它提供了一些简单易用的API,使用户程序可以方便的和Hypervisor进行通信。主要封装了dom0中的/proc/xen/privcmd,/dev/xen/evtchn以及/dev/xen/gntdev提供的IOCTL接口。
原文地址:http://www.cnblogs.com/feisky/archive/2011/11/27/2265053.html
相关文章推荐
- python从入门到精通(DAY 2)
- Android中数据的存储操作
- CentOS7编译安装MariaDB 及系统初始化
- laravel(2) 变量传递
- 为大数据处理实验准备虚拟机局域网
- 【JAVA笔记——道】泛型接口设计(未完成)
- hadoop hdfs 常用操作java代码
- C/C++学习(七)单链表的头插法,尾插法,元素插入、删除和查找 .
- sqoop 使用
- 在MapReduce中实现logistic回归和LOESS
- try catch finally的用法
- 关于各种文件用Editplus的方式打开出现“向程序发送命令时出现问题”的解决方法
- HA高可用群集NAT模式lvs部署
- 正则表达式
- 《C prime plus (第五版)》 ---第12章 存储类.链接和内存管理
- comm的用法
- 解决eclipse闪退的4种方法
- TCP之RST发送场景
- SQL之rand,round,floor,ceiling,cast小数处理函数
- LINIQE(二)