Ansible: использование переменной в объявлении другой переменной - PullRequest
0 голосов
/ 17 апреля 2020

Я застрял, пытаясь использовать переменную в другом объявлении переменной. Вот код в моей пьесе:

- hosts: operate
  roles:
    - { role: dns, vargroup: 'test' }

- hosts: test
  roles:
    - common
    - certbot
    - ...

А теперь самые первые строки моей роли в DNS:

- debug: var=vargroup

- name: Extracting IP(s) {{vargroup}}
  vars:
    extractip: "{{ hostvars[groups['{{ vargroup }}'][0]]['ip'] }}"
  set_fact:
    newip: "{{ item.expose }}"
  with_items: 
    - '{{ extractip }}'

Vargroup правильно напечатан в отладке и названии моей задачи. Но в части извлечения у меня есть эта ошибка:

{
    "msg": "'dict object' has no attribute '{{ vargroup }}'",
    "_ansible_no_log": false
}

Очевидно, я пробовал жестко закодировать строку как:

    extractip: "{{ hostvars[groups['test'][0]]['ip'] }}"

И это сработало как шарм. Я действительно не знаю, как использовать эту переменную в моем объявлении var:)

1 Ответ

1 голос
/ 17 апреля 2020

Это, вероятно, связано с тем, как работает кавычки в YAML. После подстановки переменной '{{ extractip }}' станет '{{ hostvars[groups['{{ vargroup }}'][0]]['ip'] }}'. Он будет пытаться интерпретировать '{{ vargroup }}' как простую строку вместо переменной.

Просто используйте двойные кавычки, и это будет работать

  with_items: 
    - "{{ extractip }}"

, поскольку Ansible не поддерживает вложение "{ {}} ", но вы можете просто удалить эту часть и просто использовать "{{ hostvars[groups[vargroup][0]]['ip'] }}".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...