Приведенный ниже сценарий должен сгенерировать файл с содержимым:
a,b
ssh_host_key
ssh_rsa_host_key
Однако то, как я создаю имена переменных, приводит либо к синтаксическим ошибкам / ошибкам шаблонов, либо к «имени переменной не существует»:
---
- hosts: localhost
connection: local
vars:
CentOS:
ciphers: "a,b"
hostkeys:
- "ssh_host_key"
- "ssh_rsa_host_key"
tasks:
- copy:
dest: "{{ playbook_dir }}/test.out"
content: |
# This works:
{{ CentOS.ciphers }}
# This results in 'No variable found with this name':
{{ lookup('vars', ansible_distribution + '.ciphers') }}
# Templating errors:
{% for hostkey in {{ lookup('vars', ansible_distribution + '.hostkeys') }} %}
{{ hostkey }}
{% endfor %}
# Templating errors:
{% for hostkey in {{ hostvars[inventory_hostname][ansible_distribution + '.hostkeys'] }} %}
{{ hostkey }}
{% endfor %}
Как правильно «собрать» имена переменных? Или есть лучший способ сделать это?
На мой вопрос ответил Мартин Крижек из группы новостей Ansible. Правильный синтаксис:
---
- hosts: localhost
connection: local
vars:
CentOS:
hostkeys:
- "ssh_host_key"
- "ssh_rsa_host_key"
tasks:
- copy:
dest: "{{ playbook_dir }}/test.out"
content: |
{% for hostkey in lookup('vars', ansible_distribution)['hostkeys'] %}
{{ hostkey }}
{% endfor %}