shell命令输出的ansible循环

时间:2018-12-22 05:04:40

标签: ansible

我正在学习ansible,我想知道如何迭代shell命令的结果。这是我尝试过的。我有这本剧本:

[root@d61311ae17e2 /]# cat loop.yaml
---
- name: Loop Example
  hosts: localhost
  tasks:
    - name:
      command: cat /vcs.txt
      register: vcs
    - name: Nonsense to demo loop
      template:
         src: /foo.j2
         dest: /foo.{{ item.1 }}
      with_indexed_items: "{{ vcs }}"

/vcs.txt文件包含以下内容:

[root@d61311ae17e2 /]# cat vcs.txt
vc-one
vc-two
vc-three
vc-four

我希望会发生的是创建四个文件:foo.vc-one,foo.vc-two,foo.vc-three和foo.vc-four。但是当我运行ansible-playbook loop.yaml时发生的事情是这样的:

PLAY [Loop Example] *********************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************
ok: [127.0.0.1]

TASK [command] **************************************************************************************************************************************************
changed: [127.0.0.1]

TASK [Nonsense to demo loop] ************************************************************************************************************************************
fatal: [127.0.0.1]: FAILED! => {"msg": "with_indexed_items expects a list"}
        to retry, use: --limit @/loop.retry

PLAY RECAP ******************************************************************************************************************************************************
127.0.0.1                  : ok=2    changed=1    unreachable=0    failed=1

1 个答案:

答案 0 :(得分:0)

我需要这样做with_indexed_items: "{{ vcs.stdout.split('\n')}}"