将ansible列表的默认值定义为字典

时间:2019-04-02 16:27:52

标签: ansible ansible-2.x

我正在使用所附图片中显示的代码:Code used for my loop

我需要每次迭代都从0开始计数,而不是从1开始计数。我的意思是以下几行:

tmp_list: "{{ tmp_list | default([]) + [dict(name=item.key,seq=lookup('sequence','count='+item.value|string,wantlist=true))] }}"

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

不清楚您要的是什么。

如果您只是想获取当前循环的迭代次数+ 1,则可以使用以下方法进行操作:

#!/usr/bin/env ansible-playbook
---
- name: Lets do some loops
  hosts: localhost
  become: false
  gather_facts: false
  vars:
    my_list:
    - one
    - two
    - three
  tasks:
  - name: Loop plus one
    debug:
      msg: "{{ item }} {{ loop_index + 1 }}"
    loop: "{{ my_list }}"
    loop_control:
      index_var: loop_index



PLAY [Lets do some loops] ********************************************************************************************

TASK [Loop plus one] *************************************************************************************************
ok: [localhost] => (item=one) => {
    "msg": "one 1"
}
ok: [localhost] => (item=two) => {
    "msg": "two 2"
}
ok: [localhost] => (item=three) => {
    "msg": "three 3"
}

PLAY RECAP ***********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0   

您可以在Ansible官方文档的Loop Control部分中找到更多信息。

答案 1 :(得分:0)

我找到了解决方法:

- set_fact:
    tmp_list: "{{ tmp_list | default([]) + [dict(name=item.key,seq=lookup('sequence','start=0 count='+item.value|string,wantlist=true))] }}"
    with_dict: "{{ objs }}"