Ansible цикл по зарегистрированным переменным из стандартного вывода в печати отладки - PullRequest
0 голосов
/ 25 октября 2019

enter image description here Команда,

У меня есть задача, которая извлекает хосты из вывода json_query stdoud_lines.

Затем я зацикливаюсь на каждом имени хоста и выполняю sshКоманды подключения плюс оболочки на каждом из этих хостов.

Наконец, чтобы вывести выходные данные каждого хоста, я отлаживаю результаты. [i] для каждого хоста. Есть ли способ я могу зациклить на результатах [i], где я = моя динамическая переменная, имеющая запись хоста? Я хочу зациклить на отладке. Любая подсказка, пожалуйста?

задача: "ssh и запустить команду оболочки и вручную перечислить результаты каждого хоста"

      - name: "RAID mount check for fscache on GPU Nodes"
        shell: ssh -F {{ ssh_cfg_path.stdout }} {{ item.node_name }}.{{ ssh_host }} "df -kh /raid/"
        ignore_errors: no
        register: raid_info
        failed_when: raid_info.rc != 0
        with_items: "{{ gpu_nodes }}"

      - name: raid_info result
        debug:
          var: raid_info

      - name: raid_info results0_stdout_lines
        debug:
          var: raid_info.results[0].stdout_lines
      - name: raid_info results1_stdout_lines
        debug:
          var: raid_info.results[1].stdout_lines

вывод:


    TASK [team-services-pre-install-checks : raid_info results0_stdout_lines] ****
    Friday 25 October 2019  17:03:07 +0000 (0:00:00.041)       0:00:25.292 ******** 
    ok: [localhost] => {
        "raid_info.results[0].stdout_lines": [
            "Filesystem      Size  Used Avail Use% Mounted on", 
            "/dev/sdb1       7.0T  175G  6.5T   3% /raid"
        ]
    }

    TASK [team-services-pre-install-checks : raid_info results1_stdout_lines] ****
    Friday 25 October 2019  17:03:07 +0000 (0:00:00.040)       0:00:25.333 ******** 
    ok: [localhost] => {
        "raid_info.results[1].stdout_lines": [
            "Filesystem      Size  Used Avail Use% Mounted on", 
            "/dev/sdb1       7.0T  176G  6.5T   3% /raid"
        ]
    }

Ниже подход не работаетили перечисляет любой вывод.


      - name: raid_info results loop over all hosts output/result
        debug:
          var: raid_info.results[{{ item }}].stdout_lines
        with_items: "{{ raid_info }}"

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

1 Ответ

1 голос
/ 25 октября 2019

Похоже, вы были близки, и вам просто нужно немного скорректировать свою логику. With_items будет циклически перебирать список того, что вы передаете ему, поэтому, если вы переместите больше вашей структуры переменных в список with_items, как это:

- name: raid_info results loop over all hosts output/result
  debug:
    msg: "{{ item.stdout }}"
  with_items: "{{ raid_info.results }}"
  loop_control: 
    label: "{{ item.item.node_name }}"

Это будет перебирать индексированный список, который являетсярезультаты, созданные с помощью with_items предыдущего задания.

...