【问题标题】:OpenStack Nova floating_ips on nova client doesn't existnova 客户端上的 OpenStack Nova floating_ips 不存在
【发布时间】:2018-02-08 18:25:31
【问题描述】:

使用 nova 版本“2”调用设置和功能 nova 客户端没有 floating_ips 属性。

from novaclient import client as NovaClient
class FloatingIpProvisioner():
    def __init__(self, os_session):
        self.nova = NovaClient.Client(version="2", session=os_session)

    def AddFloatingIpToInstance(self, instance):
        self.nova.floating_ip_pools
        floating_ip = self.nova.floating_ips.create()
        instance = self.nova.servers.find(name="test")
        instance.add_floating_ip(floating_ip)
        return floating_ip

instance = NovaClient.Client(version="2", session=session).servers.find(name="ansiblemaster")
floatingIp = FloatingIpProvisioner(session).AddFloatingIpToInstance(instance)

调用上述文件时出现错误:

File "provision.py", line 68, in AddFloatingIpToInstance
    floating_ip = self.nova.floating_ips.create()
AttributeError: 'Client' object has no attribute 'floating_ips'

这是 Openstack 和许多第 3 方教程向实例添加浮动 ip 的方式。

【问题讨论】:

    标签: python api openstack


    【解决方案1】:

    AttributeError: 'Client' 对象没有属性 'floating_ips'

    大多数现代 OpenStack 部署不再使用旧版 Nova 网络实施,而是使用 Neutron 来管理网络和地址。这意味着 Nova 服务器不提供必要的 API 端点,因此 floating_ips 资源和方法不再可用。

    您需要与 Neutron 交互才能创建新的浮动 IP 地址。

    如果您正在编写自己的 OpenStack 客户端,您可能需要研究 shade 模块。这包含了许多 OpenStack API,以提供更方便的编程接口。例如,您的代码变为:

    import shade
    
    cloud = shade.openstack_cloud()    
    
    def AddFloatingIpToInstance(self, server_name, external_network='public'):
        server = cloud.get_server(server_name)
        ip = cloud.create_floating_ip(external_network)
        cloud.add_ips_to_server(server, ips=[ip])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2020-09-16
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多