[英]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.