Amazon-Ec2

Ansible、AWS、其他基於標籤的主機

  • June 6, 2017

我正在創建 Ansible 劇本,在 AWS 中創建我們系統的基礎設施。顯然,涉及使用 ec2.py 的動態庫存。

我首先創建了一個實用程序伺服器,然後是一個 Web 伺服器,並且我為每個伺服器都有一個單獨的劇本。我在 Web 伺服器上有文件,需要使用模板添加實用程序伺服器的私有 ip。

檢索實用程序伺服器的私有 IP 以用於 Web 伺服器的劇本的最佳方法是什麼?

出現了三個問題:

  1. 您需要來自另一台伺服器的資訊才能在您正在配置的目前伺服器中使用。
  2. 您需要資訊的另一台伺服器託管在 AWS 中。
  3. 您需要訪問有關資訊的另一台伺服器具有變數名稱。

3的解決方案是使用extra-vars在命令行中指定變數,如下所示:ansible-playbook -i ./ec2.py –extra-vars “chaos=test” aws_playground.yaml

2的解決方案是從hostvars的groups變數中找到你需要的主機名。與上面的 3 結合使用時,您需要以下內容:- debug: var=hostvars$$ groups[’tag_Name_’+chaos+’_util’ $$$$ 0 $$].ansible_all_ipv4_addresses$$ 0 $$

1的解決方案是在您正在配置的伺服器上工作之前首先從其他伺服器收集事實。以下是一本將所有這些內容集中在一個地方的劇本:


# Called like: ansible-playbook -i ./ec2.py --extra-vars "chaos=test" aws_playground.yaml
- name: Collect our facts on util
 hosts: "tag_Name_{{ chaos }}_util"
 tasks: [ ]

- name: Set up a web server
 hosts: "tag_Name_{{ chaos }}_web"
 tasks:
  - debug: var=hostvars[groups['tag_Name_'+chaos+'_util'][0]].ansible_all_ipv4_addresses[0]

伺服器的 IP 是有關主機的可發現事實的一部分。這些事實會在您執行劇本時自動檢索,除非您明確禁用gather_facts.

即便如此,您也可以顯式使用該setup模組來收集事實。

然後可以在下一個任務中使用此值。

舉個例子:

$ ansible -c local -m setup -a 'filter=ansible_*address*' localhost                                                                              
127.0.0.1 | SUCCESS => {
   "ansible_facts": {
       "ansible_all_ipv4_addresses": [
           "172.17.0.1", 
           "192.168.122.1", 
           "192.168.0.12", 
           "172.18.0.1"
       ], 
       "ansible_all_ipv6_addresses": [
           "fe80::e8b5:946f:410b:aff5"
       ]
   }, 
   "changed": false

}

引用自:https://serverfault.com/questions/784205