Назад | Перейти на главную страницу

Ansible, AWS, другой хост на основе тега

Я создаю сценарии Ansible, которые создают инфраструктуру нашей системы в AWS. Очевидно, задействованы динамические инвентаризации с использованием ec2.py.

Сначала я создаю служебный сервер, затем веб-сервер, и у меня есть отдельная книга для каждого из них. У меня есть файлы на веб-сервере, для которых необходимо добавить частный IP-адрес служебного сервера с помощью шаблона.

Как лучше всего получить частный IP-адрес служебного сервера для использования в playbook веб-сервера?

IP-адреса серверов являются частью обнаруживаемых фактов о хостах. Эти факты извлекаются автоматически при запуске playbook, если вы явно не отключите 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

}

Было три проблемы:

  1. Вам нужна информация с другого сервера для использования на текущем сервере, который вы настраиваете.
  2. Другой сервер, с которого вам нужна информация, размещен в AWS.
  3. Другой сервер, о котором вам нужно получить доступ к информации, имеет имя переменной.

Решение 3 - указать переменную в командной строке, используя дополнительные переменные, например: 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]