使用nova版本“ 2”对设置和功能nova客户端的调用没有float_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和许多第三方教程向实例添加浮动ip的方式。

最佳答案

AttributeError:“客户端”对象没有属性“ 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])

关于python - nova客户端上的OpenStack Nova float_ips不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48692372/

10-11 20:19