• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > Nova client源码分析---nova list命令,nova---nova

Nova client源码分析---nova list命令,nova---nova

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含nova list,nova service list,ftpclient.listfiles,client list,the client list等服务器相关知识,网友希望可以进行参考

Nova client源码分析---nova list命令,nova---nova


个人见解,可能会有错误。刚刚开始学习nova,就先从api入手学习吧。


1、D:\代码\python-novaclient\python-novaclient\novaclient\v1_1\shell.py,最上边怎么调用不太清楚了,先从这里开始。

def do_list(cs, args):
    """List active servers."""
    imageid = None
    flavorid = None
    #查找镜像
    if args.image:
        imageid = _find_image(cs, args.image).id
    #查找套餐类型
    if args.flavor:
        flavorid = _find_flavor(cs, args.flavor).id
    search_opts</span> = {
            'all_tenants': args.all_tenants,
            'reservation_id': args.reservation_id,
            'ip': args.ip,
            'ip6': args.ip6,
            'name': args.name,
            'image': imageid,
            'flavor': flavorid,
            'status': args.status,
            'tenant_id': args.tenant,  #租赁人id
            'host': args.host,
            'instance_name': args.instance_name}
    #过滤条件
    filters = {'flavor': lambda f: f['id'],
               'security_groups': utils._format_security_groups}
    #存放过滤后的结果
    formatters = {}
    <span style="font-family: Arial, Helvetica, sans-serif;">#formatters 字典的关键字</span>
    field_titles = []
    if args.fields:
        for field in args.fields.split(','):
            #让field 格式化成某种字符串
            field_title, formatter = utils._make_field_formatter(field,
                                                                 filters)
            field_titles.append(field_title)
            formatters[field_title] = formatter

    id_col = 'ID'

    #同一目录下 servers.py里面的list方法,下一个函数讲解这里。
    #这里的返回值是server 的列表
    servers = cs.servers.list(search_opts=search_opts)</span></strong>
    convert = [('OS-EXT-SRV-ATTR:host', 'host'),
               ('OS-EXT-STS:task_state', 'task_state'),
               ('OS-EXT-SRV-ATTR:instance_name', 'instance_name'),
               ('hostId', 'host_id')]
    _translate_keys(servers, convert)
    #这个columns 应该是列的意思,和打印有关吧。
    if field_titles:
        columns = [id_col] + field_titles
    else:
        columns = [id_col, 'Name', 'Status', 'Networks']
    formatters['Networks'] = utils._format_servers_list_networks
    #这里负责具体输出nova list 命令的输出。
    utils.print_list(servers, columns,
                     formatters, sortby_index=1)


2、D:\代码\python-novaclient\python-novaclient\novaclient\v1_1\servers.py  ---- ServerManager类中的list方法。

    def list(self, detailed=True, search_opts=None):
        """
        # detailed 负责是否返回详细服务器信息,reservation_id仅仅返回对应id的。
        Get a list of servers.
        Optional detailed returns details server info.
        Optional reservation_id only returns instances with that
        reservation_id.


        :rtype: list of :class:`Server`
        """
        #search_opt 的内容见上一个函数的绿色字体,是一个字典。
        if search_opts is None:
            search_opts = {}


        qparams = {}
        #这里吧search_opt 的字典内容拷贝到qparams
        for opt, val in search_opts.iteritems():
            if val:
                qparams[opt] = val
        
        #这里把我们的选项进行url编码,因为要发送http请求嘛
        query_string = "?%s" % urllib.urlencode(qparams) if qparams else ""


        detail = ""
        if detailed:
            detail = "/detail"
        #这里继续调用_list方法,该函数下边继续分析。这个函数第一个参数是url,第二个参数是response_key
        return self._list("/servers%s%s" % (detail, query_string), "servers")

3、D:\代码\python-novaclient\python-novaclient\novaclient\base.py ----- _list 方法

    def _list(self, url, response_key, obj_class=None, body=None):
        #根据body是否为空调用post或者get方法,这两个函数都调用一个函数,只不过传参不太一样---_cs_request
        if body:
            _resp, body = self.api.client.post(url, body=body)
        else:
            _resp, body = self.api.client.get(url)


        if obj_class is None:
            obj_class = self.resource_class
        
        #参考上边的传参,可以发现这个response_key的内容应该是“servers”
        #到这里我们获取了数据。
        data = body[response_key]
        # NOTE(ja): keystone returns values as list as {'values': [ ... ]}
        #           unlike other services which just return the list...
        #上边的注释讲的很清楚,如果data是个字典,具体的server的内容是里面的对应key='values'的字段值,结果是一个list
        if isinstance(data, dict):
            try:
                data = data['values']
            except KeyError:
                pass


        #这里没有仔细看了,最后一句话是返回结果。with语句和try finally 一样能够处理异常情况的上下文清理工作。
        with self.completion_cache('human_id', obj_class, mode="w"):
            with self.completion_cache('uuid', obj_class, mode="w"):
                return [obj_class(self, res, loaded=True)
                        for res in data if res]

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Nova client源码分析---nova list命令,nova---nova

相关文章

  • 产品级敏捷案例: 企业云存储,案例企业云存储
  • Spark编程指南V1.4.0(翻译),编程指南v1.4.0
  • ganglia安装教程,ganglia教程
  • Hadoop之——HBase笔记(补充),hadoophbase
  • HDFS命令行接口详解,hdfs命令行详解
  • 上海第五次Spark meetup会议资料分享,sparkmeetup
  • 新增数据页面360浏览器样式异常,新增360浏览器样式
  • spark core源码分析7 Executor的运行,sparkexecutor
  • 豆瓣Redis解决方案Codis源码剖析:Dashboard,rediscodis
  • hadoop2.x HDFS快照介绍,hadoop2.xhdfs快照

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • Name node is in safe mode.错误处理方式 hadoop,nodehadoop
    • win系统下启动linux上的kafka集群及使用,linuxkafka
    • spark_RDD数据操作
    • hadoop文件损坏解决办法,
    • 玩转OpenStack网络Neutron(4)--网络隧道技术 VXALN &amp; GRE,openstackvxaln
    • hive 报错/tmp/hive on HDFS should be writable. Current permissions are: rwx--x--x,hdfswritable
    • Hadoop2.6 Ha 安装,hadoop2.6ha安装
    • XenServer网卡Bonding,xenserverbonding
    • ElasticSearch的分布式安装
    • 2015.6.5,2015.6.5世界环境日

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有