Экспорт объектов из AWX#
На этом этапе объекты AWX выгружаются через REST API в файлы YAML с помощью роли filetree_create коллекции infra.controller_configuration.
Экспорт выполняет только чтение: AWX продолжает работать в штатном режиме.
Сценарий экспорта#
Создайте на управляющем узле файл сценариев (playbook) export.yml:
---
- name: Экспорт объектов AWX
hosts: localhost
connection: local
gather_facts: false
vars:
controller_hostname: "{{ awx_url }}"
controller_validate_certs: false
output_path: "{{ export_dir | default('/var/tmp/awx-export') }}"
flatten_output: true
input_tag:
- organizations
- users
- teams
- roles
- credential_types
- credentials
- execution_environments
- notification_templates
- projects
- inventory
- inventory_sources
- hosts
- groups
- job_templates
- workflow_job_templates
- schedules
- labels
pre_tasks:
- name: Создание временного токена доступа AWX
awx.awx.token:
description: "Экспорт объектов для миграции"
scope: read
state: present
controller_host: "{{ awx_url }}"
controller_username: "{{ awx_admin_user | default('admin') }}"
controller_password: "{{ awx_admin_password }}"
validate_certs: false
- name: Использование токена для экспорта
ansible.builtin.set_fact:
controller_oauthtoken: "{{ controller_token.token }}"
roles:
- infra.controller_configuration.filetree_create
post_tasks:
- name: Отзыв временного токена доступа
awx.awx.token:
existing_token: "{{ controller_token }}"
state: absent
controller_host: "{{ awx_url }}"
controller_username: "{{ awx_admin_user | default('admin') }}"
controller_password: "{{ awx_admin_password }}"
validate_certs: false
Здесь:
flatten_output: true– режим вывода, при котором все объекты одного типа записываются в один файл; такой формат удобен для правки и последующего импорта;input_tag– перечень типов объектов для выгрузки; настройки AWX (тегsettings) сознательно не выгружаются – они не совместимы с Astra Automation;роль
filetree_createпринимает только аутентификацию по токену, поэтому сценарий создает временный токен доступа AWX и отзывает его по завершении.
Примечание
Отзыв токена выполняется с аутентификацией по имени пользователя и паролю: токен с областью применения read не имеет права удалить сам себя.
Запуск экспорта#
Для запуска экспорта выполните команду:
ansible-playbook export.yml \
-e awx_url=https://<awx> \
-e awx_admin_password=<password> \
-e export_dir=/var/tmp/awx-export
Здесь:
<awx>– адрес контроллера AWX, при необходимости с портом TCP;<password>– пароль администратора AWX; для рабочих сред рекомендуется передавать пароль через файл, зашифрованный Ansible Vault.
Результат экспорта#
Сценарий создает в каталоге экспорта набор файлов YAML – по одному на тип объекта:
/var/tmp/awx-export/
├── credentials.yaml
├── current_credential_types.yaml
├── current_execution_environments.yaml
├── groups.yaml
├── hosts.yaml
├── inventories.yaml
├── inventory_sources.yaml
├── job_templates.yaml
├── labels.yaml
├── notification_templates.yaml
├── organizations.yaml
├── projects.yaml
├── schedules.yaml
├── team_roles.yaml
├── teams.yaml
├── user_roles.yaml
├── users.yaml
└── workflow_job_templates.yaml
Каждый файл содержит список объектов в формате переменных коллекции infra.controller_configuration.
Ссылки между объектами записаны по названиям, а не по числовым идентификаторам, поэтому файлы переносимы между инсталляциями.
Проверьте, что экспорт не оставил маркеров ToDo: – их роль filetree_create вставляет вместо значений, которые не удалось получить через API:
grep -R 'ToDo: ' /var/tmp/awx-export/
Ожидаемый результат: пустой вывод. Если маркеры найдены, исправьте отмеченные места вручную до импорта.
Рекомендуется сохранить копию каталога экспорта до внесения правок:
cp -r /var/tmp/awx-export /var/tmp/awx-export.orig