首页 > 解决方案 > Ansible 列表以 dict 和递增每个元素的值

问题描述

我有一个列表 list_info = ["config1", "config2"] 并且我想转换为一个字典,它为每个项目增加一个值,并从像 100 这样的数字开始。要有这样的字典:

list_info 是在 set_fact 之前定义的变量

- name: Print
  vars:
    start: 100
  set_fact:
    dict_info: "{{ dict(list_info|zip(_serial)) }}"
  vars:
    _len: "{{ list_info|length }}"
    _serial: "{{ range(start, start + _len|int) }}"

该任务包括一个带有未定义变量的选项。错误是:“开始”未定义\n\n错误似乎在

标签: listdictionaryansible

解决方案


您在同一任务上有两个 vars 部分,这是错误。

---
- hosts: localhost
  gather_facts: false

  vars:
    list_info:
      - config1
      - config2
      - config3
      - config11
      - config21
      - config31

  tasks:
    - name: Print
      set_fact:
        dict_info: "{{ dict(list_info| zip(_serial)) }}"
      vars:
        start: 100
        _len: "{{ list_info|length }}"
        _serial: "{{ range(start, start + _len|int) | list }}"

    - name: DEBUG
      debug:
        msg: "{{ dict_info }}"

和输出:

TASK [Print] *************************************************************************
ok: [localhost]

TASK [DEBUG] *************************************************************************
ok: [localhost] => {
    "msg": {
        "config1": 100,
        "config11": 103,
        "config2": 101,
        "config21": 104,
        "config3": 102,
        "config31": 105
    }
}

PLAY RECAP ***************************************************************************

推荐阅读