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