novaclient开发中遇到的问题小结

作者: 七八音 | 来源:发表于2018-05-03 22:27 被阅读46次
    1. 使用官网实例代码,并不能新建client;
    from novaclient import client
    nova = client.Client(VERSION, USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)
    

    解决方法:

    import novaclient.v2 as nvclient 
    from keystoneclient.auth.identity import v3 
    from keystoneclient import session 
    import os 
    def get_keystone_creds():
            d = {}
            d['username'] = 'USERNAME' 
            d['password'] = 'PASSWORD' 
            d['auth_url'] = 'http://controller:35357/v3' 
            d['project_name'] = 'admin' 
            d['project_domain_id'] = "default" d['user_domain_id'] = "default"
            return d 
    def getNova():
            kd_creds = get_keystone_creds()
            auth = v3.Password(**kd_creds)
            sess = session.Session(auth=auth)
            nova = nvclient.client.Client(2,session=sess) 
            return nova
    

    通过keystone建立会话认证,新建client客户端;

    1. 需要得到所有servers的详细信息;

    解决方法:

    (1)查看官方文档找到相应的python api;

    (2)找到其响应结果,同时了解了其属性的意义;

    在获取“OS-EXT-SRV-ATTR:host”的时候遇到了问题----报错:TypeError: 'Server' object has no attribute 'getitem';最后google到解决方法---通过getattr(ser,'accessIPv4') ,终于得到了想要的结果!!!其他扩展属性:“OS-EXT-SRV-ATTR:hypervisor_hostname”也可以通过这种方法得到。

    from utils import *
    nova = getNova()
    servers = nova.servers.list(detailed=True)
    
    for ser in servers:
            print ser.id
            print ser.name
            print nova.images.get(ser.image['id']).name
            print nova.flavors.get(ser.flavor['id']).name
            print ser.key_name
            print ser.status
            print ser.created
            print getattr(ser,'accessIPv4')
            name = getattr(ser,'OS-EXT-SRV-ATTR:host')
            print name
    #       print ser.availability_zone
    #       print ser["OS-EXT-SRV-ATTR:hypervisor_hostname"] 
            print ser.addresses['public'][0]['addr']
            print ser.addresses
    
    
    

    3. 想要找满足需求的api,然后想知道是怎么调用的?

    解决方法:

    (1)查看官方文档,介绍api的整体架构、分类,然后根据分类再详细去看,比如:我想通过得到所有的flavor,在文档中找“flavors”分类,在里面找到class novaclient.v2.flavors.FlavorManager(api) 里的list函数;
    (2)查看github库里的源码;
    (3)google;

    1. 感想
      (1)官方文档应该是第一选择,通过官方文档可以很好地入门;我从一点不了解openstack、novaclient,通过查看novaclient的文档,能根据自己的需求找到相应的函数,并能调用,满足自己的需求,可以说明官方文档的重要性;
      (2)English很重要:官方文档是英文的;英文搜索出的资料更全,解决方法更多;上面的解决方案都是通过英文搜索出来的!
      (3)google很厉害;
      (4)小窍门:如果不知道要搜索的内容的英文应该怎么写?我们可以通过谷歌翻译、有道翻译把中文翻译成英文,然后再改改,就能搜索出解决方案了哟!!!是不是很聪明?我都佩服我自己!!!

    相关文章

      网友评论

      • 5cb29b5c894e:这个没问题 写的是对的 但因为版本更新 需要改一些 小细节
        其实就改了 api的名称

        from novaclient import client
        from keystoneauth1 import loading
        from keystoneauth1 import session
        import os
        from utils import *
        def get_keystone_creds():
        d = {}
        d['username'] = 'admin'
        d['password'] = 'admin'
        d['auth_url'] = 'http://192.168.192.148/identity/'
        d['project_name'] = 'admin'
        d['project_domain_id'] = "default"
        d['user_domain_id'] = "default"
        return d
        def getNova():
        kd_creds = get_keystone_creds()
        loader = loading.get_plugin_loader('password')
        auth = loader.load_from_options(**kd_creds)
        sess = session.Session(auth=auth)
        nova = client.Client(2,session=sess)
        return nova

        nova = getNova()
        servers = nova.servers.list(detailed=True)
        flavors = nova.flavors.list()
      • IT人故事会:老铁,顶,互相多学习!

      本文标题:novaclient开发中遇到的问题小结

      本文链接:https://www.haomeiwen.com/subject/hwfrrftx.html