我已经编写了一些Python代码来与Openstack实例进行交互;使用shade库。
通话
myinstance = shade.openstack_cloud(cloud='mycloud', **auth_data)
在我的本地Ubuntu安装上工作正常;但在我们的“后端”服务器(运行RHEL 7.2)上失败。
_create_connection中的文件“ mystuff / core.py”,第248行
myinstance = shade.openstack_cloud(cloud ='mycloud',** auth_data)
在openstack_cloud中的文件“ /usr/local/lib/python3.5/site-packages/shade-1.20.0-py3.5.egg/shade/init.py”,第106行
返回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 ['default']
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
-但错误消息仍然存在。 最佳答案
如果您通过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语句return netifaces.AF_INET6 in netifaces.gateways()['default']`
简单
return False
东西正在工作。当然,这只是一种解决方法。但是也提交了错误报告。
关于python - 连接到OpenStack失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43584375/