问题
当使用该rax
模块启动服务器并获取库存时,我如何告诉 Ansible 连接到隔离网络上的 IP 地址而不是服务器的公共 IP?
注意:Ansible 正在同一隔离网络上的服务器上运行。
问题
我使用带有模块的 Ansible 在 Rackspace Cloud 中启动服务器,rax
并将其添加到隔离/专用网络。然后我将它添加到库存并开始配置它。我要做的第一件事是锁定 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 尝试连接到
ansible_ssh_host
... - 但是
rax.py
库存脚本已设置ansible_ssh_host
为accessIPv4
Rackspace 返回的... - 并且 Rackspace 已设置
accessIPv4
为服务器的公共 IP 地址。
现在,我不知道该怎么办。Rackspace 确实允许API 调用来更新服务器并设置它,所以我想我可以在创建服务器后accessIPv4
运行另一个来执行此操作。local_action
不幸的是,rax模块似乎不允许更新服务器,即使它这样做了,它也依赖于pyrax ,而 pyrax又依赖于novaclient,而novaclient 只允许更新服务器的名称,而不是accessIPv4
.
以前肯定有人这样做过。rax
通过模块获取动态库存时,告诉 Ansible 在隔离网络上连接的正确方法是什么?