#ansible
#ansible
Вопрос:
Как я могу печатать переменные, объявленные только в group_vars
, host_vars
без фактов ansible?
такой код хорош:
- name: "Ansible | List all known variables and facts"
debug:
var: hostvars[inventory_hostname]
Но мне не нужны IP-адреса хоста, диски и т. Д.
Я имею в виду еще раз проверить все мои переменные, прежде чем продолжить выполнение воспроизведения.
Ответ №1:
Существует 3 категории переменных: факты ansible, специальные переменные и пользовательские переменные. Удалите как факты ansible, так и специальные переменные из hostvars, и то, что осталось, является пользовательскими переменными. Список фактов ansible доступен в переменных ansible_facts . Список специальных переменных должен быть создан (я думаю).
Создайте список специальных переменных
Если вы запустите приведенный ниже сборник задач, вы увидите список специальных переменных и пользовательских переменных
- hosts: localhost
tasks:
- debug:
msg: "{{ hostvars[inventory_hostname]|
difference(ansible_facts) }}"
Удалите пользовательские переменные и поместите список специальных переменных в файл. Например
shell> cat special_vars.yml
special_vars:
- ansible_python_interpreter
- ansible_connection
- inventory_hostname
...
Этот список специальных переменных может быть неполным и будет использоваться только для этого хоста.
Удалите факты ansible и специальные переменные из hostvars
- hosts: localhost
vars_files:
- special_vars.yml
tasks:
- set_fact:
user_var1: AAA
- debug:
msg: "{{ hostvars[inventory_hostname]|
difference(ansible_facts)
difference(special_vars) }}"
предоставляет список только пользовательских переменных
msg:
- user_var1
Пользовательские переменные будут включать также переменные конфигурации, установленные пользователем (например, переменные подключения: ansible_user или повышение привилегий: ansible_become).
Имя-пробел
Лучшей практикой является использование переменных «пространства имен». Например
- hosts: localhost
vars:
prj51_var1: AAA
prj51_var2: BBB
tasks:
- debug:
msg: "{{ item }}: {{ query('vars', item)|first }}"
loop: "{{ query('varnames', 'prj51_. $') }}"
дает
msg: 'prj51_var1: AAA'
msg: 'prj51_var2: BBB'