【问题标题】:Ansible how to get equivalent of nested for-loop in playbookAnsible如何在剧本中获得等效的嵌套for循环
【发布时间】:2021-02-11 19:33:39
【问题描述】:

我正在编写 ansible-playbook 并尝试完成以下任务:

  • 现有目录 /home/user1 , /home/user2, ... , /home/user20
  • 我想在每个目录中创建子目录 /foo1 、 ... 、 /foo5

现在我可以使用with_nested 循环,在其中我提供了两个列表,其中包含我需要的所有索引,但这很愚蠢。 相反,我想定义两个数字范围或序列,然后使用它们的笛卡尔积中的值对循环相关任务。

这是否合理可行,如果可以,我该怎么做?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    参见ansible-doc -t lookup sequenceForcing lookups to return lists,例如

        - debug:
            msg: "Create /home/user{{ item.0 }}/foo{{ item.1 }}"
          with_nested:
            - "{{ query('sequence', 'start=1 end=3') }}"
            - "{{ query('sequence', 'start=1 end=2') }}"
    

    给予

      msg: Create /home/user1/foo1
      msg: Create /home/user1/foo2
      msg: Create /home/user2/foo1
      msg: Create /home/user2/foo2
      msg: Create /home/user3/foo1
      msg: Create /home/user3/foo2
    

    下面的参数化任务给出了相同的结果

        - debug:
            msg: "Create /home/user{{ item.0 }}/foo{{ item.1 }}"
          with_nested:
            - "{{ query('sequence', user_range) }}"
            - "{{ query('sequence', dir_range) }}"
          vars:
            user_start: 1
            user_end: 3
            user_range: "start={{ user_start }} end={{ user_end }}"
            dir_start: 1
            dir_end: 2
            dir_range: "start={{ dir_start }} end={{ dir_end }}"
    

    【讨论】:

    • 谢谢,这正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多