Ansible: печать только пользовательских переменных

#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'