Ansible循环遍历第一个任务输出数组

时间:2017-06-26 17:42:55

标签: loops ansible

我想在第二个任务中循环第一个任务输出。在第一个任务中获取数组中的主机名和IP。在数组的第二个任务循环中,打印数组中的每个项目在单独的行中。

这里是我的代码。

- name: Store known hosts of 'all' the hosts in the inventory file
  hosts: localhost
  connection: local

  vars:
    ssh_known_hosts_command: "ssh-keyscan -T 10"
    ssh_known_hosts_file: "{{ lookup('env','HOME') + '/.ssh/known_hosts' }}"
    ssh_known_hosts: "{{ groups['all'] }}"

  tasks:

  - name: For each host, find the ip
    shell: 'echo -e "{{ item }}\n`dig +short {{ item }}`"'
    with_items: "{{ ssh_known_hosts }}"
    register: ssh_known_host_results
    ignore_errors: yes

  - name: print message
    debug:
      msg: "{{ item.stdout_lines[0] + ' test' }}"
    with_items: "{{ ssh_known_host_results.results }}"

在第二个任务中,我如何循环遍历ssh_known_host_results.results数组?

感谢 SR

我正在寻找类似的东西:

- name: print message
    debug:
      msg: "{{ item+ ' test' }}"
      with_items: "{{outer_item.stdout_lines "    
    with_items: "{{ ssh_known_host_results.results }}"
    loop_control:
    loop_var: outer_item

当我添加忽略localhost时它没有给出数组项。如何将hostname和ip作为两个数组元素返回?

 - name: For each host, find the ip
    shell: 'echo -e "{{ item }}\n`dig +short {{ item }}`"'
    with_items: "{{ ssh_known_hosts }}"
    when: not item == 'localhost'
    register: ssh_known_host_results
    ignore_errors: yes

  - name: print message
    debug:
      msg: "{{ item + ' test' }}"
    with_items: "{{ ssh_known_host_results.results | map(attribute='stdout_lines') | list }}"

1 个答案:

答案 0 :(得分:0)

Ansible中未实现对动态嵌套循环的支持。

要遍历每一行,您可以展平结果:

- name: print message
  debug:
    msg: "{{ item + ' test' }}"
  with_items: "{{ ssh_known_host_results.results | map(attribute='stdout_lines') | list }}"