簡體   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