jch*_*ain 5 rackspace-cloud openstack-nova ansible pyrax novaclient
使用该rax模块启动服务器并获取清单时,如何告诉Ansible连接到隔离网络上的IP地址,而不是服务器的公共IP?
注意:正在从同一隔离网络中的服务器运行Ansible。
我在rax模块上使用Ansible在Rackspace Cloud中启动服务器,然后将其添加到隔离/专用网络中。然后,将其添加到清单并开始配置。我要做的第一件事是锁定SSH,部分是通过告诉SSH仅绑定到隔离网络上提供给主机的IP地址。问题是,这意味着ansible无法通过公共IP地址进行连接,因此我也将其设置ansible_ssh_host为私有IP。(将主机添加到清单时会发生这种情况。)
- name: Add servers to group
local_action:
module: add_host
hostname: "{{ item.name }}"
ansible_ssh_host: "{{ item.rax.addresses.my_network_name[0].addr }}"
groups: launched
with_items: rax_response.success
when: rax_response.action = 'create'
Run Code Online (Sandbox Code Playgroud)
在第一次创建和配置新实例时,此方法就很好。不幸的是,下次我尝试连接到这些服务器时,连接被拒绝,因为Ansible正在尝试使用SSH无法监听的IP地址。发生这种情况是因为:
ansible_ssh_host...rax.py清单脚本已设置ansible_ssh_host为accessIPv4Rackspace返回的...accessIPv4为服务器的公共IP地址。现在,我不确定该怎么办。Rackspace确实允许API调用来更新服务器并设置服务器accessIPv4,所以我认为我可以local_action在创建服务器后再运行一个服务器。不幸的是,rax模块似乎不允许更新服务器,即使这样做,它也依赖于pyrax,而后者又取决于novaclient,而novaclient仅允许更新服务器的名称,而不是accessIPv4。
肯定有人这样做过。通过rax模块获取动态清单时,告诉Ansible在隔离网络上进行连接的正确方法是什么?
您可以手动编辑rax.py文件并将第 125 行和第 163 行更改为:
hostvars['ansible_ssh_host'] = server.accessIPv4
Run Code Online (Sandbox Code Playgroud)
到:
hostvars['ansible_ssh_host'] = server.addresses['private'][0]['addr']
Run Code Online (Sandbox Code Playgroud)
这应该使 ansible_ssh_host 的值成为私有 IP。
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |