【问题标题】:Pass/loop 2 register output lines (has list of values each) to next task in Ansible将 2 个寄存器输出行(每个都有值列表)传递/循环到 Ansible 中的下一个任务
【发布时间】:2020-03-05 07:58:11
【问题描述】:

我正在尝试将 2 个寄存器列表值传递给一个任务。但是当我同时传递 list 时,它并没有循环到寄存器值,而只是传递了完整的列表数组。

数据(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']

我怎样才能让数据(所有者和文件夹名称)循环并按顺序一一传递给味精(以及正确的所有者到文件夹名称)。

【问题讨论】:

    标签: ansible ansible-2.x ansible-inventory ansible-facts ansible-template


    【解决方案1】:

    问:“我怎样才能让数据(所有者和文件夹名称)循环并按顺序一一传递给 msg(以及正确的所有者到 folername)。”

    答:还有更多选择。

    1) 使用zip。例如

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

    2) 可以find 目录和json_query循环 中注册result。例如

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

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2016-03-10
      • 2020-02-19
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      相关资源
      最近更新 更多