繁体   English   中英

在Rackspace上为Ansible设置SSH主机IP地址

[英]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地址。 这是因为:

  1. Ansible尝试连接到ansible_ssh_host ...
  2. rax.py库存脚本已将ansible_ssh_host设置为Rackspace返回的accessIPv4 ...
  3. Rackspace已将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM