让我们在defaults / main.yml角色中有类似的内容:
num: 0
config:
0:
a: true
b: 'x'
1:
a: false
b: 'y'
2:
a: false
b: 'z'
现在,我在剧本调用中发送-e num=1
,并且我想根据该值在角色中其他位置使用值a
和b
,例如:
aValue: '{{config[num].a}}'
bValue: '{{config[num].b}}'
我该怎么做?我尝试过
aValue: '{{config[num].a}}'
但出现错误:'dict object' has no attribute u'1'
aValue: '{{config["num"].a}}'
但出现错误:'dict object' has no attribute 'num'
答案 0 :(得分:2)
如果引用这些配置键,它们将变成字符串:
config:
"0":
a: true
或者,如果您的剧本的其余部分确实希望它们成为数字,则可以通过两种方式使num
实际上成为数字:
ansible -e '{"num": 1}'
导致ansible将--extra-vars
解析为JSON,其中"num"
实际上将是Number
(在JSON的意义上)
或在jinja2表达式中强制num
:
aValue: '{{ config[ (num|int) ].a }}'