我编写了一些python代码来与Openstack实例进行交互;使用shade库。
电话
myinstance = shade.openstack_cloud(cloud='mycloud', **auth_data)
在我的本地Ubuntu安装上正常工作;但是我们的后端失败了#34;服务器(运行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 = strict)
文件" /usr/local/lib/python3.5/site-packages/shade-1.20.0-py3.5.egg/shade/openstackcloud.py" ;,第312行,在初始化 self._local_ipv6 = _utils.localhost_supports_ipv6()
文件" /usr/local/lib/python3.5/site-packages/shade-1.20.0-py3.5.egg/shade/_utils.py",第254行,在localhost_supports_ipv6中 在netifaces.gateways()中返回netifaces.AF_INET6 ['默认']
属性错误:模块' 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
- 但错误信息仍在那里。
答案 0 :(得分:2)
如果您浏览OpenStack os-client-config documentation,他们就提到了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
事情正在发挥作用。当然,这只是一种解决方法;但也提交了一份错误报告。