Ansible: как определить, какой экземпляр EC2 является текущим узлом для извлечения частного IP - PullRequest
0 голосов
/ 18 февраля 2019

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

Для полного списка у меня есть следующее:

- name: Gather EC2 facts on all nodes
  ec2_instance_facts:
    region: "{{ aws.region }}"
    filters:
      "tag:Type": nodeType
      "tag:Name": '{{ aws.ec2.nodes.name }}'
      "instance-state-name": running
  register: ec2_facts

Затем соберите все IP-адреса и добавьте их в группу:

- name: Gather IPs for all hosts
  add_host: hostname={{ item.public_ip_address }} groups=allIpAddresses
  loop: "{{ ec2_facts.instances }}"
  when:
    - item.state.name == "running"

Затем эта переменная groups используется в другомиграть и использовать для замены значений в шаблоне Ansible:

- seeds: "{{ allIpAddresses[0] }},{{ allIpAddresses[1] }},{{ allIpAddresses[2] }},{{ allIpAddresses[3] }}"

Однако я не могу извлечь или определить, какой публичный и частный IP-адрес для "текущего" хоста.

1 Ответ

0 голосов
/ 19 февраля 2019

Используйте ec2_metadata_facts , чтобы собрать факты в переменных, связанных для каждого экземпляра.В качестве альтернативы, если вы хотите использовать ec2_instance_facts, вы должны сделать lookup на основе inventory_hostname:

семпла воспроизведения:

- name: gather ec2 facts per instance
  hosts: my_aws_instances
  gather_facts: no
  tasks:
    - ec2_metadata_facts:
    - name: debug
      debug: var=ansible_ec2_public_ipv4
    - name: debug
      debug: var=ansible_ec2_local_ipv4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...