我可能缺少一些简单的东西。我有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 }}
我基本上想用year1、year2和year3值填充{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']) }}"