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



我正在使用附图所示的代码:用于我的循环的代码

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

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

感谢您的帮助。

目前还不完全清楚你的要求是什么。

如果您只是想获取当前循环迭代的编号 + 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 官方文档的环路控制部分找到更多信息。

我找到了一个解决方案:

- 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 }}"

最新更新