Как получить доступ к stdout со всех хостов на локальном сервере - PullRequest
0 голосов
/ 26 декабря 2018

Моя книга воспроизведения выглядит следующим образом

- hosts: nodes
  become: yes
  tasks:
  - name: Run Shell Script to get IPs with 4xx and 5xx errors

    script: /home/ubuntu/ips.sh
    args:
      chdir: /home/ubuntu
    register: ips

  - name:
    shell: echo  "{{ hostvars[groups['nodes'][0]].ips.stdout}}" > pip.txt
    delegate_to: localhost

Есть 10 хостов.Есть ли способ получить доступ к Ips.stdout со всех 10 хостов с моего локального сервера.Я могу получить первый хост по вышеуказанной команде.Как я могу получить доступ ко всем 10 хостам stdout из одной переменной?

1 Ответ

0 голосов
/ 26 декабря 2018

Как я могу получить доступ ко всем 10 стандартным хостам из одной переменной?

Да, используя map("extract"), затем map(attribute=):

- shell: echo "{{ groups.nodes | map('extract', hostvars, 'ips') | map(attribute='stdout') | join(', ') }}" > pip.txt
  delegate_to: localhost
  run_once: true

Вам понадобится run_once: true в противном случае, да, он будет делегирован вашему локальному компьютеру, но он также будет выполнять это действие один раз для каждого хоста в инвентаре, что бесполезно.

Если вам интересно, вы также можете использовать copy:, чтобы сделать его более понятным, так как он фактически не изменит ваш файл, если узнает, что содержимое не изменилось:

- copy:
    dest: pip.txt
    content: "{{ groups.nodes | map('extract', hostvars, 'ips') | map(attribute='stdout') | join(', ') }}"
  delegate_to: localhost
  run_once: true
...