Установка ролей и коллекций контента

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

Введение

Контент Ansible может поставляться в виде ролей и коллекций. В изолированных лабораторных средах использование локальных архивов с контентом безопаснее, чем загрузка из интернета.

В этой лабораторной работе вы упакуете локальную роль, установите её с помощью файла требований, изучите предустановленные коллекции и примените установленную роль.

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

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

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

В этой лабораторной работе мы разделяем исходный код роли и установленный контент. vendor_src/local_message представляет собой контент, который вы получили или создали, в то время как roles/local_message будет являться установленной копией, которую фактически загружает Ansible.

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

На этом этапе вы создадите исходный код небольшой роли вне каталога roles. Это имитирует получение контента роли из доверенного источника. Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible. Это обеспечит стабильность команд, даже если LabEx запускает каждый шаг отдельно.

cd /home/labex/project/rhce-ansible
cat > vendor_src/local_message/tasks/main.yml <<'EOF'
---
- name: Ensure local message directory exists
  ansible.builtin.file:
    path: /home/labex/project/rhce-ansible/managed/local-message
    state: directory
    mode: '0755'

- name: Write message from installed role
  ansible.builtin.copy:
    dest: /home/labex/project/rhce-ansible/managed/local-message/message.txt
    content: |
      installed_role=local_message
    mode: '0644'
EOF
cat > vendor_src/local_message/meta/main.yml <<'EOF'
---
galaxy_info:
  author: LabEx
  description: Local role for RHCE Ansible prep
  license: MIT
  min_ansible_version: '2.16'
dependencies: []
EOF

Исходный код роли имеет ту же базовую структуру, что и обычная роль: логика задач в tasks/main.yml и метаданные роли в meta/main.yml. Задача записывает видимое сообщение, чтобы вы могли убедиться, что установленная роль выполнилась.

tar -czf vendor_src/local_message.tar.gz -C vendor_src local_message

Архив имитирует автономный пакет роли. Использование локального архива делает лабораторную работу детерминированной, при этом обучая рабочему процессу с requirements.yml.

ls -l vendor_src/local_message.tar.gz

Установка роли из файла требований

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

cd /home/labex/project/rhce-ansible
cat > requirements.yml <<'EOF'
---
roles:
  - name: local_message
    src: file:///home/labex/project/rhce-ansible/vendor_src/local_message.tar.gz
EOF

Источник file:// указывает ansible-galaxy на локальный архив. Это тот же принцип, что и при использовании удаленного источника, но без зависимости от доступа к сети.

ansible-galaxy role install -r requirements.yml -p roles --force

Опция -r считывает требования, -p roles выбирает каталог установки, а --force делает команду повторяемой, если вы решите перезапустить лабораторную работу.

find roles/local_message -maxdepth 2 -type f -print

Вы должны увидеть файлы tasks/main.yml и meta/main.yml установленной роли. Плейбук будет использовать путь к установленной роли, а не исходный каталог vendor_src.

Проверка установленного контента коллекций

На этом этапе вы изучите установленную коллекцию. Образ RHEL10 уже включает распространенные коллекции, поэтому данная лабораторная работа позволяет избежать загрузки из интернета, демонстрируя при этом обнаружение коллекций. Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible.

cd /home/labex/project/rhce-ansible
ansible-galaxy collection list ansible.posix | tee reports/collection-list.txt
ansible-doc ansible.posix.acl | sed -n "1,20p"

Коллекции упаковывают модули в рамках пространства имен. В данном случае ansible.posix.acl означает модуль acl из коллекции ansible.posix, а ansible-doc подтверждает, что Ansible может найти свою документацию локально.

Применение установленной роли

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

cd /home/labex/project/rhce-ansible
cat > playbooks/use-installed-role.yml <<'EOF'
---
- name: Use a locally installed role
  hosts: managed
  gather_facts: false
  roles:
    - role: local_message
EOF

Плейбук ссылается только на local_message, так как roles_path указывает на каталог установки. Это делает плейбук независимым от расположения архива.

ansible-playbook playbooks/use-installed-role.yml | tee reports/installed-role-run.txt

Выполнение должно завершиться с failed=0 и создать файл сообщения, сгенерированный задачей установленной роли.

cat managed/local-message/message.txt

Резюме

Вы упаковали и установили локальную роль через requirements.yml, изучили установленный контент коллекций и применили установленную роль с помощью плейбука.