Я пытаюсь добиться следующего с помощью Ansible:
Определить файл YAML с некоторыми переменными в точечном формате внутри него (variables.yml)
database.hosts[0]: "db0"
database.hosts[1]: "db1"
database.hosts[2]: "db2"
foo.bar: 1
foo.baz: 2
Загрузите переменные в variables.yml с помощью модуля include_vars в моей пьесе (playbook.yml) и распечатайте их в древовидной структуре
- hosts: all
gather_facts: not
tasks:
- name: "Loading vars"
run_once: true
include_vars:
file: 'variables.yml'
- name: "Testing"
debug:
msg: "{{ foo }}"
- name: "Testing"
debug:
msg: "{{ database }}"
Выполнение этих результатов в следующей ошибке:
fatal: [host0]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'foo' is undefined\n\nThe error appears to be in '.../playbook.yml': line 9, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: \"Testing\"\n ^ here\n"}
Из чего следует, что каждое свойство в файле YAML было загружено как отдельное свойство, а не как свойства внутри двух деревьев с корнями в database и foo .
Конечно, книга воспроизведения работает должным образом, если я задаю свойства следующим образом:
database:
hosts:
- "db0"
- "db1"
- "db2"
foo:
bar: 1
baz: 2
Однако мне нужно, чтобы файл переменных YAML был в пунктирный формат вместо формата c с отступом. Есть ли способ добиться этого? Например: модуль, отличный от include_vars, или какая-либо конфигурация, которую я могу добавить в файл ansible .cfg? Я уже пытался использовать hash_behaviour = merge , но это не помогло.