Ansible for带多个序列的循环

时间:2018-11-09 04:37:31

标签: python ansible jinja2

在Python中,我使用以下代码:打印1至5和11至15

for i in range(1, 6) + range(11, 16):
     print i 

ansible Playbook中是否有类似的方法来实现相同的目的。

我看到with_sequence可用,如下所示,我可以使用

with_sequence: start=1 end=5 

但是我无法在一个循环中实现这一目标,我可能最终会使用两个循环,一个循环用于start = 1 end = 5,第二个循环用于start = 11 end = 15

2 个答案:

答案 0 :(得分:0)

这可能是一个选择:

tasks:
  - debug: msg="{{ '%02d' | format(item) }}"
    loop: "{{ range(1, 6)|list + range(11, 16)|list }}"

答案 1 :(得分:0)

在给定的ansible循环选项中,with_sequence被循环替换,并且范围功能对应于ansible doc https://docs.ansible.com/ansible/2.7/user_guide/playbooks_loops.html#with-sequence

- name: a play that runs entirely on the ansible host
  hosts: 127.0.0.1
  connection: local
  tasks:
  - name: range task
    debug: 
       msg: "{{ item }}"
    loop: 
      - "{{range(1, 6)|list + range(11, 16)|list }}"

输出

PLAY [a play that runs entirely on the ansible host] *************************************************************************************************

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

TASK [range task] ************************************************************************************************************************************
ok: [127.0.0.1] => (item=[1, 2, 3, 4, 5, 11, 12, 13, 14, 15]) => {
    "msg": [
        1, 
        2, 
        3, 
        4, 
        5, 
        11, 
        12, 
        13, 
        14, 
        15
    ]
}

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

可用版本: ansible 2.7.1