Ключ словаря в качестве переменной - PullRequest
0 голосов
/ 14 ноября 2018

Давайте сделаем что-то подобное в роли по умолчанию / main.yml:

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

Теперь я отправляю -e num=1 в вызове playbook и хочу использовать значения 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'

1 Ответ

0 голосов
/ 14 ноября 2018

Если вы процитируете эти конфигурационные ключи, они станут строками:

config:
  "0":
     a: true

Или, если у вас есть остальная часть вашей пьесы, которая действительно хочет, чтобы они были числами, вы можете сделать num на самом деле быть числом двумя способами:

ansible -e '{"num": 1}', чтобы вызвать ansible для анализа --extra-vars как JSON, где "num" действительно будет Number (в смысле JSON)

или принудительно num в выражении jinja2:

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