[英]Set SSH Host IP Address on Rackspace for Ansible
当使用rax
模块启动服务器并获取库存时,如何告诉Ansible连接到隔离网络上的IP地址而不是服务器的公共IP?
注意:Ansible正在同一个隔离网络上的服务器上运行。
我使用Ansible和rax
模块在Rackspace Cloud中启动服务器,然后将其添加到隔离/专用网络。 然后我将其添加到库存并开始配置它。 我做的第一件事是锁定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'
这在第一次创建和配置新实例时运行良好。 不幸的是,下次我尝试连接到这些服务器时,连接被拒绝,因为Ansible正在尝试SSH没有监听的IP地址。 这是因为:
ansible_ssh_host
... rax.py
库存脚本已将ansible_ssh_host
设置为Rackspace返回的accessIPv4
... accessIPv4
设置为服务器的公共IP地址。 现在,我不知道该怎么做。 Rackspace确实允许API调用更新服务器并设置其accessIPv4
,所以我认为在创建服务器之后我可以运行另一个local_action
。 不幸的是, RAX模块不会出现允许更新服务器,即使它没有这取决于pyrax而这又取决于novaclient ,并novaclient只允许更新服务器的名称 ,而不是accessIPv4
。
当然有人之前做过这件事。 在通过rax
模块获取动态库存时,告诉Ansible在隔离网络上连接的正确方法是什么?
您可以手动编辑rax.py文件,并从以下位置更改第125 行和第163行 :
hostvars['ansible_ssh_host'] = server.accessIPv4
至:
hostvars['ansible_ssh_host'] = server.addresses['private'][0]['addr']
这应该使ansible_ssh_host的值成为私有IP。
我对此的第一个想法就是像对待你需要设置的隧道一样对待它。
当您使用rax
模块时,它会创建一个名为“raxhosts”的组 。 默认情况下,使用该公共ipv4地址访问这些。
您可以使用该组创建另一个组(通过add_host
),但指定要实际访问它的IP。
- name: Redirect to raxprivhosts
local_action:
module: add_host
hostname: "{{ item.name }}"
ansible_ssh_host: "{{ item.rax_addresses['private'][0]['addr'] }}"
ansible_ssh_pass: "{{ item.rax_adminpass }}"
groupname: raxprivhosts
with_items: raxhosts
然后将剧本作为您的后续行动应用于这些群组。
让我知道这对你有什么影响,我只是把它作为替代方法手动更改你的rax.py。
您可以在/etc/tower/settings.py中设置环境变量以使用专用网络。 它可能是
AWX_TASK_ENV['RAX_ACCESS_NETWORK'] = 'YOURNETWORK'
要么
AWX_TASK_ENV['RAX_ACCESS_NETWORK'] = 'private'
然后,您将通过ansible-tower-service restart
重新启动服务然后您需要刷新可以通过Tower界面执行的清单。 您现在将看到主机IP设置为您在变量中指定的网络。
在最新版本的ansible中,您需要更改:
hostvars['ansible_ssh_host'] = server.accessIPv4
至:
hostvars['ansible_ssh_host'] = server.addresses['private'][0]['addr']
和
hostvars[server.name]['ansible_ssh_host'] = server.accessIPv4
至:
hostvars[server.name]['ansible_ssh_host'] = server.addresses['private'][0]['addr']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.