Ansible 字典键作为变量

4
让我们在默认角色defaults/main.yml文件中添加以下内容:
num: 0
config:
  0:
    a: true
    b: 'x'
  1:
    a: false
    b: 'y'
  2:
    a: false
    b: 'z'

我现在在playbook调用中发送了-e num=1, 我想在角色的其他地方使用基于这个值的ab,例如:

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'

1个回答

6
如果您引用这些配置键,它们将变成字符串:
config:
  "0":
     a: true

如果你的剩余的playbook确实需要它们是数字,你可以用两种方式使num成为一个真正的数字:

ansible -e '{"num": 1}' 可以让ansible将--extra-vars解析为JSON格式,这里的"num"将会是一个Number(按照JSON的定义)

或者在jinja2表达式中强制将num转换为数字:

aValue: '{{ config[ (num|int) ].a }}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接