Создание и использование пользовательских фактов

AnsibleBeginner
Практиковаться сейчас

Введение

Пользовательские факты позволяют управляемым узлам публиковать локальные данные для Ansible. Факты, размещенные в директории /etc/ansible/facts.d, становятся доступными через ansible_local после этапа сбора фактов.

В этой лабораторной работе вы установите небольшой файл пользовательского факта и используете его во втором плее для формирования отчета.

Создание проекта для пользовательских фактов

На этом этапе вы создадите проект для установки и чтения пользовательского факта.

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,files,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF

Пользовательские факты устанавливаются на управляемом узле, поэтому для этой лабораторной работы требуется как исходный файл в проекте, так и плейбук, который скопирует его в /etc/ansible/facts.d.

Создание исходного файла локального факта

На этом этапе вы создадите файл факта в формате INI. Имя секции и ключи будут доступны в переменной ansible_local.rhce_custom.general. Перед выполнением команд на этом этапе вернитесь в директорию проекта Ansible. Это обеспечит стабильность выполнения команд, даже если LabEx запускает каждый шаг отдельно.

cd /home/labex/project/rhce-ansible
cat > files/rhce_custom.fact <<'EOF'
[general]
course=rhce-ansible
track=custom-facts
EOF

Файл использует синтаксис в стиле INI. После сбора фактов имя секции general и ее ключи становятся доступными в ansible_local.rhce_custom.general.

cat files/rhce_custom.fact

Написание плейбука для установки и чтения факта

На этом этапе вы напишете плейбук, состоящий из двух плеев. Первый плей устанавливает файл факта с повышением привилегий; второй плей повторно собирает факты, чтобы ansible_local включил новые данные. Перед выполнением команд на этом этапе вернитесь в директорию проекта Ansible.

cd /home/labex/project/rhce-ansible
cat > playbooks/custom-fact.yml <<'EOF'
---
- name: Install custom fact
  hosts: managed
  become: true
  gather_facts: false
  tasks:
    - name: Ensure facts directory exists
      ansible.builtin.file:
        path: /etc/ansible/facts.d
        state: directory
        mode: '0755'

    - name: Install RHCE custom fact
      ansible.builtin.copy:
        src: ../files/rhce_custom.fact
        dest: /etc/ansible/facts.d/rhce_custom.fact
        mode: '0644'

- name: Read custom fact after gathering facts
  hosts: managed
  gather_facts: true
  tasks:
    - name: Write custom fact report
      ansible.builtin.copy:
        dest: /home/labex/project/rhce-ansible/reports/custom-fact.txt
        content: |
          course={{ ansible_local.rhce_custom.general.course }}
          track={{ ansible_local.rhce_custom.general.track }}
        mode: '0644'
EOF

Первый плей устанавливает файл факта с использованием become, так как /etc/ansible/facts.d является системным путем. Второй плей снова собирает факты; без этого повторного сбора ansible_local не включил бы только что установленный факт в текущий запуск.

ansible-playbook playbooks/custom-fact.yml --syntax-check

Запуск плейбука с пользовательским фактом

На этом этапе вы установите пользовательский факт и сформируете отчет из ansible_local. Первый плей изменяет системное хранилище фактов, а второй плей подтверждает, что Ansible может их прочитать. Перед выполнением команд на этом этапе вернитесь в директорию проекта Ansible.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/custom-fact.yml | tee reports/custom-fact-run.txt

Первый запуск должен внести изменения в систему, установив файл факта и записав отчет. Сохраненный вывод полезен, если второй плей не может найти ansible_local.

cat reports/custom-fact.txt

Отчет должен содержать значения course и track из локального файла факта, что доказывает, что Ansible успешно собрал и использовал пользовательский факт.

Прямая проверка ansible_local

На этом этапе вы используете модуль setup с фильтром для прямого просмотра дерева пользовательских фактов. Перед выполнением команд на этом этапе вернитесь в директорию проекта Ansible.

cd /home/labex/project/rhce-ansible
ansible managed -m ansible.builtin.setup -a 'filter=ansible_local' | tee reports/ansible-local.txt

Вывод модуля setup представляет собой необработанное дерево фактов. Фильтрация по ansible_local позволяет сфокусировать вывод на локально предоставленных пользовательских фактах.

grep -E 'rhce_custom|custom-facts|rhce-ansible' reports/ansible-local.txt

Вывод команды grep должен показать имя пользовательского факта и значения, которые вы записали. Это основной способ прямой проверки, который следует использовать, если плейбук не видит ansible_local.

Резюме

Вы установили локальный пользовательский факт, повторно собрали факты, использовали ansible_local в плейбуке и проверили пользовательский факт с помощью модуля setup.