Ansible字典键作为变量

时间:2018-11-14 06:38:56

标签: automation continuous-integration ansible jinja2

让我们在defaults / main.yml角色中有类似的内容:

num: 0
config:
  0:
    a: true
    b: 'x'
  1:
    a: false
    b: 'y'
  2:
    a: false
    b: 'z'

现在,我在剧本调用中发送-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 个答案:

答案 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 }}'