2

我编写了一些 python 代码来与 Openstack 实例交互;使用阴影库。

通话

myinstance = shade.openstack_cloud(cloud='mycloud', **auth_data)

在我的本地 Ubuntu 安装上运行良好;但在我们的“后端”服务器(运行 RHEL 7.2)上失败。

文件“mystuff/core.py”,第 248 行,在 _create_connection myinstance = shade.openstack_cloud(cloud='mycloud', **auth_data)

文件“/usr/local/lib/python3.5/site-packages/shade-1.20.0-py3.5.egg/shade/init .py”,第 106 行,在openstack_cloud中返回 OpenStackCloud(cloud_config=cloud_config, strict=严格的)

文件“/usr/local/lib/python3.5/site-packages/shade-1.20.0-py3.5.egg/shade/openstackcloud.py”,第 312 行,在init self._local_ipv6 = _utils.localhost_supports_ipv6()

localhost_supports_ipv6 中的文件“/usr/local/lib/python3.5/site-packages/shade-1.20.0-py3.5.egg/shade/_utils.py”,第 254 行,在 netifaces.gateways 中返回 netifaces.AF_INET6( )['默认']

AttributeError:模块“netifaces”没有属性“AF_INET6”

该系统的管理员告诉我那里没有启用 IPv6;也许这解释了失败。我做了一些研究,但找不到任何可以防止失败的东西。

欢迎任何想法。

更新:我编辑了我的clouds.yml;它看起来像这样:

# openstack/shade config file 
# required to connect provisioning using the shade module
client:
    force_ipv4: true
clouds:
    mycloud:
        auth:
        user_domain_name: xxx
        auth_url: 'someurl'
    region_name: RegionOne

我也试过export OS_FORCE_IPV4=True- 但错误信息仍然存在。

4

1 回答 1

2

如果您浏览 OpenStack os-client-config 文档,他们已经提到了IPV6相关问题。

IPv6 是未来,如果您的云支持它并且您的本地网络支持它,您应该始终使用它。这两者都很容易检测到,所有友好的软件都应该做正确的事情。但是,有时您可能存在于拥有 IPv6 堆栈的位置,但某些邪恶导致它实际上无法运行。在这种情况下,您可以设置一个配置选项来解除您的 force_ipv4 或 OS_FORCE_IPV4 布尔环境变量。

因此,使用这些boolean配置,您可以强制使用适当的网络协议。将以下行添加到您的clouds.yaml文件中

 client:
   force_ipv4: true

将强制IPV4并希望它能解决您的问题。

由 OP 编辑​​:不幸的是,以上没有帮助;通过返工修复它shade-1.20.0-py3.5.egg/shade/_utils.py:我更改了返回语句

return netifaces.AF_INET6 in netifaces.gateways()['default']` 

到一个简单的

return False

东西在起作用。当然,这只是一种解决方法;但也提交了错误报告。

于 2017-04-24T09:46:23.740 回答