Ansible:如何在循环中自动调用字典键
作为ansible automation的一部分,将以以下格式生成一个变量文件,并保存为Ansible:如何在循环中自动调用字典键,ansible,Ansible,作为ansible automation的一部分,将以以下格式生成一个变量文件,并保存为somedictvars.yml,如果我在任务中单独指定每个键,我可以使用循环 但是,由于它是自动生成的,而且密钥的数量也不同(有时可能有一个员工,有时可能有多个员工的详细信息),所以我正在寻找一种方法,只指定循环下使用的密钥的前缀 somedictvars.yml - employee1: name: Martin D'vloper job: Developer skills:
somedictvars.yml
,如果我在任务中单独指定每个键,我可以使用循环
但是,由于它是自动生成的,而且密钥的数量也不同(有时可能有一个员工,有时可能有多个员工的详细信息),所以我正在寻找一种方法,只指定循环下使用的密钥的前缀
somedictvars.yml
- employee1:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- employee2:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
我的ansible playbook如下所示,手动指定每个dict var键
- name: include vars from YAML config files.
include_vars: somedictvars.yml
- name: debug
debug:
msg: "{{ item.name }}"
loop:
- "{{ employee1 }}"
- "{{ employee2 }}"
输出:
任务[调试]
*********************************************************************************************************************************************************************
ok: [UKXWD1EM01] => (item={u'skills': [u'python', u'perl', u'pascal'], u'job': u'Developer', u'name': u"Martin D'vloper"}) => {
"msg": "Martin D'vloper"
}
ok: [UKXWD1EM01] => (item={u'skills': [u'lisp', u'fortran', u'erlang'], u'job': u'Developer', u'name': u'Tabitha Bitumen'}) => {
"msg": "Tabitha Bitumen"
}
请帮助如何在循环下使用通用名称。。像employee[0-9]
一样,如果我的文件有1个键,它将在调试中打印,如果它有3个键,我将只打印3个键['name']
否则,请建议我是否可以将文件格式更改为任何其他格式,以符合ansible。因此,循环可以自动为文件中任意数量的可用变量键工作
请帮忙
提前感谢。阅读文件并创建变量
employees
。任务
- slurp:
src: somedictvars.yml
register: somedictvars
- set_fact:
employees: "{{ somedictvars.content|b64decode|from_yaml }}"
- debug:
var: employees
- set_fact:
employees2: "{{ employees2|default([]) +
[{'employee': my_key.0}|combine(my_val.0)] }}"
vars:
my_key: "{{ item.keys()|list }}"
my_val: "{{ item.values()|list }}"
loop: "{{ employees }}"
- debug:
var: employees2
给予
还有更多的选择如何继续。
1) 使词典符合目的。任务
- slurp:
src: somedictvars.yml
register: somedictvars
- set_fact:
employees: "{{ somedictvars.content|b64decode|from_yaml }}"
- debug:
var: employees
- set_fact:
employees2: "{{ employees2|default([]) +
[{'employee': my_key.0}|combine(my_val.0)] }}"
vars:
my_key: "{{ item.keys()|list }}"
my_val: "{{ item.values()|list }}"
loop: "{{ employees }}"
- debug:
var: employees2
给予
循环列表。比如说
- debug:
msg: "{{ item.name }}"
loop: "{{ employees2 }}"
- debug:
msg: "{{ item }}"
loop: "{{ employees|json_query('[].*.name')|flatten }}"
给予
2) 不用改变字典的结构,而是可以使用。比如说
- debug:
msg: "{{ item.name }}"
loop: "{{ employees2 }}"
- debug:
msg: "{{ item }}"
loop: "{{ employees|json_query('[].*.name')|flatten }}"
给出了相同的结果