Подготовка и первое развертывание целевой платформы#
На этом шаге утилита развертывания устанавливает целевую платформу в контейнерах с постоянными секретами исходной платформы. На следующем шаге дампы из миграционного архива заменят содержимое баз данных, созданных при этом развертывании.
Подготовка узла#
Подготовьте узел целевой платформы по инструкции для базовой топологии. Установите на него утилиту развертывания той же версии Astra Automation, что и у исходной платформы, по инструкции по подготовке установочного узла.
Описание инвентаря#
Подготовьте описание инвентаря целевой платформы по инструкции для контейнерного развертывания. Описание инвентаря целевой платформы не должно содержать описания узлов исходной платформы.
Для миграции описание инвентаря должно удовлетворять следующим требованиям:
Все группы компонентов, включая группу
database, содержат один и тот же узел.Названия баз данных и их владельцев совпадают с исходной платформой. Описание инвентаря либо не задает переменные
automation*_pg_databaseиautomation*_pg_username, либо задает им те же значения, что и описание инвентаря исходной платформы.Контроллер Event-Driven Automation входит в группу
automationedacontroller.Глобальные переменные
admin_usernameиadmin_passwordзадают учетную запись администратора.Переменная
ansible_ssh_private_key_fileсодержит абсолютный путь к закрытому ключу SSH, так как утилиту развертывания запускают черезsudo.
Пример описания инвентаря исходной платформы в базовой топологии модели развертывания из deb-пакетов:
[automationgateway]
gw.example.com
[automationcontroller]
ctrl.example.com
[automationcontroller:vars]
node_type=control
peers='execution_nodes'
[execution_nodes]
exec.example.com
[automationhub]
hub.example.com
[automationedacontroller]
eda.example.com
[database]
db.example.com
[all:vars]
ansible_ssh_private_key_file='/path/to/private/ssh/key'
ansible_user='admin'
ansible_python_interpreter=/usr/bin/python3
redis_mode=standalone
admin_email='admin@example.com'
admin_username='admin'
admin_password='AAp@ssW0rd'
# Platform Gateway
automationgateway_main_url='https://gw.example.com'
automationgateway_pg_host='db.example.com'
automationgateway_pg_database='automationgateway'
automationgateway_pg_username='automationgateway'
automationgateway_pg_password='gateDBpaS$12345'
# Automation Controller
pg_host='db.example.com'
pg_database='awx'
pg_username='awx'
pg_password='ctrlDBpaS$123456'
# Private Automation Hub
automationhub_pg_host='db.example.com'
automationhub_pg_database='automationhub'
automationhub_pg_username='automationhub'
automationhub_pg_password='hUbPa55I2345b'
# Контроллер Event-Driven Automation
automationedacontroller_pg_host='db.example.com'
automationedacontroller_pg_database='automationedacontroller'
automationedacontroller_pg_username='automationedacontroller'
automationedacontroller_pg_password='edapassword'
Пример описания инвентаря целевой платформы:
# Все компоненты целевой платформы на одном узле
[automationgateway]
aa.example.com
[automationcontroller]
aa.example.com
[automationhub]
aa.example.com
[automationedacontroller]
aa.example.com
# СУБД, развертываемая средствами платформы, на том же узле
[database]
aa.example.com
[all:vars]
ansible_ssh_private_key_file='/home/admin/.ssh/id_ed25519'
ansible_user='admin'
ansible_python_interpreter=/usr/bin/python3
admin_email='admin@example.com'
admin_username='admin'
admin_password='AAp@ssW0rd'
redis_mode=standalone
# Установка из офлайн-пакета
# bundle_install='true'
Целевая платформа использует названия баз данных и их владельцев по умолчанию, поэтому ее описание инвентаря не задает переменные automation*_pg_database и automation*_pg_username.
При установке из офлайн-пакета раскомментируйте переменную bundle_install, как описано в инструкции для окружения без доступа к интернету.
Примечание
Переменную aa_disable_no_log при миграции не используйте.
Она выводит в журнал развертывания значения секретов, которые утилита развертывания получает из миграционного архива.
Передача миграционного архива#
Установочный узел исходной платформы должен подключаться по SSH к узлу целевой платформы.
Скопируйте миграционный архив и его контрольную сумму на узел целевой платформы, проверьте целостность и распакуйте архив:
scp ~/migration-export.tar.gz ~/migration-export.tar.gz.sha256 <target_host>:
ssh <target_host>
sha256sum -c migration-export.tar.gz.sha256
umask 077
tar xzf migration-export.tar.gz
cd migration-export && sha256sum -c --quiet sha256sum.txt && cd ~
Здесь <target_host> – доменное имя или IP-адрес узла целевой платформы.
Команду scp выполните на установочном узле исходной платформы, остальные команды – на узле целевой платформы.
Команда sha256sum -c --quiet не выводит ничего, если все контрольные суммы совпали.
Первое развертывание#
В каталоге /opt/rbta/aa/astra-automation-setup/ запустите развертывание и передайте утилите файл с постоянными секретами исходной платформы:
sudo ./aa-setup --containerized \
--inventory=</path/to/inventory> \
-- --extra-vars @$HOME/migration-export/migration-preseed-secrets.yml
Здесь </path/to/inventory> – путь к описанию инвентаря целевой платформы.
Развертывание считается успешным, если для всех узлов в поле failed указано значение 0.
Утилита развертывания сохраняет секреты в хранилище секретов Podman при первом развертывании и при повторных запусках их не изменяет.
Поэтому файл с секретами необходимо передать именно при первом развертывании.
Если при первом развертывании утилита не получила этот файл, удалите целевую платформу с помощью аргумента --uninstall и разверните ее заново.
Важно
Не начинайте работу с целевой платформой после первого развертывания. На следующем шаге данные исходной платформы заменят содержимое ее баз данных.
Проверка секретов#
Убедитесь, что компоненты целевой платформы получили секреты исходной платформы. Команды сравнивают контрольные суммы значений и не выводят сами значения.
cd ~/migration-export
check_secret() {
expected=$(python3 -c 'import json, sys; print(json.load(open("migration-preseed-secrets.yml"))[sys.argv[1]], end="")' "$2" | sha256sum | cut -d ' ' -f 1)
actual=$(podman secret inspect --showsecret --format '{{.SecretData}}' "$1" | tr -d '\n' | sha256sum | cut -d ' ' -f 1)
if [ "$expected" = "$actual" ]; then echo "$1: OK"; else echo "$1: MISMATCH"; fi
}
check_secret controller_secret_key controller_secret_key
check_secret gateway_secret_key gateway_secret_key
check_secret hub_secret_key hub_secret_key
check_secret hub_database_fields __hub_database_fields
check_secret eda_secret_key eda_secret_key
Ожидаемый результат:
controller_secret_key: OK
gateway_secret_key: OK
hub_secret_key: OK
hub_database_fields: OK
eda_secret_key: OK
Если проверка выводит MISMATCH для какого-либо секрета, не продолжайте миграцию.
Удалите целевую платформу и повторите первое развертывание с файлом секретов.