Ansible 又是一次可行的迭代

Ansible 又是一次可行的迭代,ansible,Ansible,我总是在Ansible中与迭代作斗争,这次也一样 无论如何,我有一个自定义事实作为字典列表my_list返回,我需要迭代它来构建一个以key='name'命名的新变量 [localhost] => { "ansible_facts": { "my_list": [ { "name": "asd-ASX030-vc-0", "key_2": [

我总是在Ansible中与迭代作斗争,这次也一样

无论如何,我有一个自定义事实作为字典列表
my_list
返回,我需要迭代它来构建一个以
key='name'命名的新变量

[localhost] => {
    "ansible_facts": {
        "my_list": [
            {
                "name": "asd-ASX030-vc-0",  
                "key_2": [
                    "A", 
                    "B"
                ]
            }, 
            {
                "name": "asd-ASX030-vc-1", 
                "key_2": [
                    "C", 
                    "D"
                ]
            }
        ]
    }
...
}
我可以运行单个列表索引

  tasks:
    - set_fact: set_fact: {"{{item[1]['name'].split('-')[2:] | join('_')}}":"{{item[1]['key_2']}}"}
      loop: "{{ my_list }}"
我要的是

vc_0 = ["A", "B"]
vc_1 = ["C", "D"]
简单:

set_fact: {"{{item['name'].split('-')[2:] | `enter code here`join('_')}}":"{{item['key_2']}}"}
loop: "{{ my_list }}"
不起作用:
“该任务包含一个带有未定义变量的选项。错误为:'list object'没有属性'key_2'


我想避免硬编码列表索引,如何动态地实现这一点?

我认为您可以使用Jinja表达式来构造变量:

set_fact:
  var2:  {% for item in ansible_facts %}\
         {{ item.name }}\
         {% if not loop.last %},\
         {% endif %}\
         {% endfor %}

我认为您可以使用Jinja表达式来构造变量:

set_fact:
  var2:  {% for item in ansible_facts %}\
         {{ item.name }}\
         {% if not loop.last %},\
         {% endif %}\
         {% endfor %}
这就是您要查找的代码(没有格式)

>cat play.yml

- hosts: localhost
  vars:
    my_list:
      - name: "asd-ASX030-vc-0"
        key_2: [ "A", "B" ]
      - name: "asd-ASX030-vc-1"
        key_2: [ "C", "D" ]
  tasks:
    - debug:
        msg: "{{ item.name }} = {{ item.key_2 }}"
      loop: "{{ my_list }}"
>ansible playbook play.yml | grep msg

msg: asd-ASX030-vc-0 = [u'A', u'B']
msg: asd-ASX030-vc-1 = [u'C', u'D']
这就是您要查找的代码(没有格式)

>cat play.yml

- hosts: localhost
  vars:
    my_list:
      - name: "asd-ASX030-vc-0"
        key_2: [ "A", "B" ]
      - name: "asd-ASX030-vc-1"
        key_2: [ "C", "D" ]
  tasks:
    - debug:
        msg: "{{ item.name }} = {{ item.key_2 }}"
      loop: "{{ my_list }}"
>ansible playbook play.yml | grep msg

msg: asd-ASX030-vc-0 = [u'A', u'B']
msg: asd-ASX030-vc-1 = [u'C', u'D']

我在我的集合事实循环中有一个输入错误,而不是在
循环中:“{{my_list}}”
我有
循环:-“{my_list}}”
它创建了另一个列表。我在集合事实循环中有一个输入错误,而不是在
循环中:{{my_list}}”
我有
循环:“{{my_list}}”
它创建了另一个列表。