了解如何创建字典关键字列表



我可能缺少一些简单的东西。我有vars.yml中的字典

deploy_env:
dev:
schemas:
year1:
- main
- custom
year2:
- main
- custom
- security
year3:
- main
- custom

然后在我的剧本中。yml,我有一些类似的东西

- set_fact:
years: "{{ deploy_env.dev.schemas }}"

- name: Create schemas
shell: "mysql ....params go here... {{ item }}"
with_nested:
- "{{ years }}"

如果vars.yml中的模式是一个简单的列表(即:(,则以上内容可以很好地工作

deploy_env:
dev:
schemas:
- year1
- year2
- year3

但是,一旦我在每年的下面添加额外的项目(使其成为一本字典(?((,我就会开始出现错误:

- "{{ years }}

我基本上想用year1year2year3值填充{years}}

我看了很多例子,但我看的每一个都很复杂,都是关于如何创建字典的,这没有帮助。

可以创建字典键的列表。例如,

- set_fact:
years: "{{ deploy_env.dev.schemas.keys()|list }}"
- debug:
var: item
loop: "{{ years }}"

给出(节略(

item: year1
item: year2
item: year3

列表与字典

引用问题:

"。。。我每年都会在下面添加额外的项目(使它成为一本词典(?(">

添加项目不会将列表更改为字典。列表中的一个项目由YAML中的短划线-引入。

列表示例:

schemas:
- year1
- year2
- year3

带有单个列表的哈希列表示例:

schemas:
- year1:
- main
- custom
- year2:
- main
- custom
- security
- year3:
- main
- custom

字典示例:

schemas:
year1:
- main
- custom
year2:
- main
- custom
- security
year3:
- main
- custom

备注:

  • 一些过滤器将字典作为参数(需要列表(转换为其键的列表。例如,过滤器差异操纵列表
- debug:
msg: "{{ deploy_env.dev.schemas|difference(['year2']) }}"

给出

msg:
- year1
- year3

  • 完整的测试剧本示例
- hosts: localhost
vars:
deploy_env:
dev:
schemas:
year1: [main, custom]
year2: [main, custom, security]
year3: [main, custom]
tasks:
- set_fact:
years: "{{ deploy_env.dev.schemas.keys()|list }}"
- debug:
var: item
loop: "{{ years }}"
- debug:
msg: "{{ deploy_env.dev.schemas|difference(['year2']) }}"

最新更新