Ansible цикл по результатам ec2_instance_facts - отладка различий в выводе против set_fact - PullRequest
0 голосов
/ 25 марта 2019

Я получаю разные выходные данные, используя тот же метод в отладке против set_fact.

      - name: Get EC2 instances
        ec2_instance_facts:
          filters:
            "tag:Name": "{{ item }}"
        loop:
          - value
          - value
        register: servers

      - debug:
          msg: "{{ item.instances | map(attribute='private_ip_address') | list }}"
        loop:  "{{ servers.results }}"

      - name: Set the private IPs list
        set_fact:
          private_ips: "{{ item.instances | map(attribute='private_ip_address') | list }}"
        loop: "{{ servers.results }}"

      - debug:
          var: private_ips

В начальном цикле ec2_instance_facts выводятся 6 экземпляров. Во время цикла отладки для получения частных IP-адресов все 6 IP-адресов выводятся, хотя и в 2 отдельных блока (я предполагаю, что из начального цикла - 2 выводятся в первом блоке, а затем в оставшиеся 4).

Однако при использовании set_fact я получаю только первые 2 IP-адреса. Я предполагаю, что делаю это более трудным, чем это должно быть, и это нужно делать правильно, используя первый цикл, но я застрял.

1 Ответ

0 голосов
/ 26 марта 2019

Я думаю, это можно закрыть как дубликат. Я нашел этот ответ , который был получен непосредственно от этого PR . PR был в конечном итоге закрыт, так как представленный код больше не работал с Ansible 2.x, и обходной путь (опубликованный в ответе) был принят как функциональный.

Ответ, для ясности, в основном заключается в том, что если вы запускаете set_fact с циклом, вам нужно передать этот факт в последующий set_fact, который затем создает список из ранее установленного факта, переданного через map фильтр дзиндзя.

Теперь у меня есть 2 списка, из-за того, что мой первоначальный цикл выполнялся 2x, но это другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...