将2个寄存器输出行(每个行都有值列表)传递/循环到Ansible中的下一个任务



我正试图将2个寄存器列表值传递给一个任务。但当我传递这两个列表时,它并不是循环到寄存器值,而是传递列表的完整数组。

数据(ls-ld(

drwxr-xr-x  2 root           root                 4096 Jun  4  2019 dir_1
drwxr-xr-x  2 root           root                 4096 Jun  4  2019 dir_2
drwxr-xr-x  2 ram            ram                  4096 Jun  4  2019 dir_3
drwxr-xr-x  2 mike           mike                 4096 Jun  4  2019 dir_4

代码

- name: Get Owners
become: false
shell: ls -ld  | awk '{print $3}'
args:
chdir: /data
register: owner
- name: Get foldernames
become: false
shell: ls -ld | awk '{print  $9}'
args:
chdir: /data
register: foldername
- name: check if its able to loop.
debug:
msg: "{{item.a}}:{{item.b}}"
loop:
- { a: "{{ owner.stdout_lines }}", b: "{{ foldername.stdout_lines }}" }

输出

Instead of having the output looped its copying the whole (stdout_lines) list in array 
"msg": "[u'root', u'root', u'ram', u'mike']:[u'dir_1', u'dir_2', u'dir_3', u'dir_4']

如何将数据(所有者和文件夹名(循环并按顺序一个接一个地传递给msg(以及folername的右所有者(。

Q:"如何使数据(所有者和文件夹名(循环并按顺序逐个传递给消息(右所有者到文件夹名(。">

A:还有更多的选择。

1( 使用拉链。例如

- name: debug:
msg: "{{ item.0 }} - {{ item.1 }}"
loop: "{{ owner.stdout_lines|zip(foldername.stdout_lines)|list }}"

2( 可以在循环中找到已注册结果的目录和json_query。例如

- find:
path: data
file_type: directory
register: result
- debug:
msg: "{{ item.0 }} - {{ item.1 }}"
loop: "{{ result.files|json_query('[].[pw_name, path]') }}"

最新更新