我已经编写了一些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/

10-12 18:44