Проверка после обновления#

На этой стадии происходит проверка работоспособности платформы после обновления на версию 2.0.

../../../_images/infra-prep-green.svg ../../../_images/copy-green.svg ../../../_images/pre-upgrade-green.svg ../../../_images/upgrade-green.svg ../../../_images/post-upgrade-green.svg ../../../_images/verification-blue.svg

После завершения обновления и ручной настройки необходимо убедиться, что все сервисы работают корректно.

Проверка сервисов#

Проверьте состояние всех компонентов Astra Automation 2.0:

sudo ./aa-setup --status

Ожидаемый результат: все сервисы в состоянии running или healthy.

Также можно выполнить проверку различных компонентов платформы через API шлюза:

curl -sk https://aa.example.com/api/gateway/v1/ping/
curl -sk https://aa.example.com/api/controller/v2/ping/
curl -sk https://ac.example.com/api/v2/ping/
curl -sk https://hub.example.com/api/galaxy/v3/plugin/ansible/content/published/collections/
curl -sk https://aa.example.com/api/eda/v1/activations/

Проверка авторизации#

Убедитесь, что пользователи могут авторизоваться на платформе:

TOKEN=$(curl -sk -X POST https://aa.example.com/api/gateway/v1/tokens/ \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"<password>"}' | jq -r '.token')

curl -sk -H "Authorization: Bearer ${TOKEN}" https://aa.example.com/api/controller/v2/me/
curl -sk -H "Authorization: Bearer ${TOKEN}" https://aa.example.com/api/gateway/v1/role_assignments/

Функциональные тесты#

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

  • Запуск шаблона задания:

    JOB_ID=$(curl -sk -X POST -H "Authorization: Bearer ${TOKEN}" \
      https://ac.example.com/api/v2/job_templates/1/launch/ | jq -r '.id')
    
  • Мониторинг выполнения:

    watch -n 2 "curl -sk -H 'Authorization: Bearer ${TOKEN}' \
      https://ac.example.com/api/v2/jobs/${JOB_ID}/ | jq '{status, failed, elapsed}'"
    
  • Последние 5 заданий:

    curl -sk -H "Authorization: Bearer ${TOKEN}" \
      'https://ac.example.com/api/v2/jobs/?page_size=5&order_by=-id' | \
      jq '.results[] | {id, name, status, failed}'
    

Проверка сред исполнения#

Проверьте среды исполнения:

  • Список EE:

    curl -sk -H "Authorization: Bearer ${TOKEN}" \
      https://ac.example.com/api/v2/execution_environments/ | jq '.results[] | {name, image}'
    
  • Проверка pull образа:

    podman login hub.example.com -u <registry_user> -p <registry_pass>
    podman pull hub.example.com/ee-minimal-rhel8:latest
    

Действия при ошибках#

При обновлении в журналах PostgreSQL могут появляться ошибки вида:

ERROR: invalid value for parameter "DateStyle": "ISO, \""
query: "SET DateStyle=E'ISO,\\';..."
sql_state_code: 22023

Причиной этому может быть ошибка в шаблоне конфигурации aa-setup – двойное экранирование обратного слеша при формировании параметра подключения к PostgreSQL.

Проблема возникает из-за некорректного экранирования параметра DateStyle на разных этапах обработки конфигурации. Последовательность выглядит следующим образом:

  1. В шаблоне конфигурации aa-setup параметр DateStyle задается со значением с пробелом:

    -c datestyle=ISO,\ MDY
    

    Обратный слеш используется для экранирования пробела.

  2. При обработке шаблона Ansible выполняет собственное экранирование строк, в результате чего значение параметра изменяется и передается дальше в искаженном виде.

  3. При установке соединения с базой данных библиотека psycopg2 повторно экранирует полученное значение и формирует строку SQL с незавершенной escape-последовательностью.

  4. PostgreSQL получает некорректное значение параметра DateStyle и возвращает ошибку 22023: invalid value for parameter "DateStyle".

    Корректные значения параметра DateStyle: ISO, MDY или ISO, DMY.

Форматы DateStyle#

Необходимо использовать следующие корректные форматы:

  • 'ISO, MDY' – формат ISO с порядком месяц-день-год;

  • 'ISO, DMY' – формат ISO с порядком день-месяц-год;

  • 'ISO,MDY' – формат ISO без пробела.

Некорректный формат: E'ISO,\\' – незавершенная строка с управляющей последовательностью (escape-последовательностью).

Причины возникновения#

Описанная ошибка может возникать в следующих случаях:

  • при использовании Managed PostgreSQL (например, Yandex Cloud, AWS RDS);

  • при строгих настройках PostgreSQL (standard_conforming_strings = on);

  • в некоторых версиях psycopg2.

Влияние на компоненты Astra Automation 2.0#

Описанная ошибка влияет на следующие компоненты Astra Automation:

  • Gateway:

    • ошибки при установке соединения с БД;

    • невозможность аутентификации пользователей;

    • сбои в API /api/gateway/v1/*.

  • Automation Controller:

    • проблемы при записи истории заданий (timestamps в формате ISO);

    • ошибки при планировании задач по расписанию;

    • сбои при создании или обновлении объектов с датами.

  • Event-Driven Automation:

    • невозможность записи событий в таблицу core_activation_request_queue;

    • ошибки при создании активаций сводов правил;

    • проблемы с журналированием событий.

  • Automation Hub:

    • ошибки при синхронизации коллекций (метаданные с датами);

    • проблемы с версионированием артефактов;

    • сбои при публикации контента.

Ошибка может полностью заблокировать работу компонентов после обновления, так как все операции с датами будут завершаться с ошибкой 22023.

Диагностика#

Для диагностики описанной проблемы выполните следующие действия:

  1. Проверьте журналы всех компонентов:

    sudo journalctl -u automation-gateway -n 100 | grep -i "datestyle\|22023"
    
    sudo journalctl -u automation-controller -n 100 | grep -i "datestyle\|22023"
    
    sudo journalctl -u automation-eda-controller -n 100 | grep -i "datestyle\|22023"
    
    sudo journalctl -u automation-hub -n 100 | grep -i "datestyle\|22023"
    
  2. В настройках PostgreSQL проверьте текущее значение DateStyle на уровне кластера:

    psql -h <pg_host> -U <user> -d <database> -c "SHOW DateStyle;"
    

    Ожидаемый вывод: ISO, MDY или ISO, DMY.

  3. Проверьте конфигурацию компонентов:

    sudo cat /etc/tower/conf.d/postgres.py | grep -A 5 OPTIONS
    
    sudo cat /etc/pulp/settings.py | grep -A 5 OPTIONS
    

    В выводах указанных команд не должно быть строки 'options': '-c datestyle=ISO,\\ MDY'. Если данная строка присутствует, см. Решение.

Решение#

Для всех компонентов (Gateway, Automation Controller, Event-Driven Automation, Private Automation Hub) выполните следующие действия:

  1. Исправьте некорректное значение в конфигурационных файлах /etc/tower/conf.d/postgres.py (для Gateway, Automation Controller и Event-Driven Automation) и /etc/pulp/settings.py (для Private Automation Hub). Для этого замените некорректную строку 'OPTIONS': {'options': '-c datestyle=ISO,\\ MDY'} на 'OPTIONS': {'options': '-c datestyle=ISO,MDY'}.

  2. Перезапустить все компоненты:

    sudo systemctl restart automation-gateway
    
    sudo systemctl restart automation-controller
    
    sudo systemctl restart automation-eda-controller
    
    sudo systemctl restart automation-hub
    
  3. Убедитесь в исправлении ошибок, проверив журналы всех компонентов платформы:

    sudo journalctl -u automation-gateway -f | grep -i datestyle
    
    sudo journalctl -u automation-controller -f | grep -i datestyle
    
    sudo journalctl -u automation-eda-controller -f | grep -i datestyle
    
    sudo journalctl -u automation-hub -f | grep -i datestyle
    

Для автоматизации вышеописанных действий можно воспользоваться следующим сценарием:

fix_datestyle.sh#
#!/bin/bash
# fix_datestyle.sh

for config in /etc/tower/conf.d/postgres.py /etc/pulp/settings.py; do
  if [ -f "$config" ]; then
    echo "Fixing $config"
    sudo sed -i "s/'options': '-c datestyle=ISO,\\\\\\\\ MDY'/'options': '-c datestyle=ISO,MDY'/g" "$config"
  fi
done

sudo systemctl restart automation-gateway
sudo systemctl restart automation-controller
sudo systemctl restart automation-eda-controller
sudo systemctl restart automation-hub

echo "DateStyle fixed on all components"

Примечание

Для использования этого сценария выполните следующие команды:

chmod +x fix_datestyle.sh
sudo ./fix_datestyle.sh

Альтернативное решение#

Альтернативным решением проблемы является удаление параметра options из конфигурационных файлов. В таком случае PostgreSQL по умолчанию будет использовать ISO.

'OPTIONS': {
    'sslmode': 'prefer',
    'sslrootcert': '/etc/ssl/certs/ca-certificates.crt'
    # Параметр options удален
}

Особенности Yandex Managed Postgresql#

Для исправления ошибки при использовании Yandex Managed Postgresql требуется выполнить дополнительные шаги:

  1. В Yandex Cloud Console проверьте параметры кластера:

    1. На панели навигации нажмите Managed Service for PostgreSQL и выберите необходимый кластер PostgreSQL.

    2. Перейдите в раздел Settings и выберите PostgreSQL settings.

    3. Убедитесь, что для параметра DateStyle установлено значение ISO, DMY или ISO, MDY. Если значение параметра не установлено, установите его через консоль.

  2. Удалите параметр options из конфигурационных файлов, как описано в разделе Альтернативное решение.

  3. Убедитесь, что у пользователей БД есть соответствующие права. Для этого для каждого компонента БД выполните следующую команду:

    GRANT CREATE ON SCHEMA public TO <user>;
    

Проверка#

Для проверки настройки убедитесь в корректной работе с датами для каждого компонента платформы Astra Automation:

  1. Для Gateway проверьте аутентификацию:

    curl -sk -X POST https://gateway.example.com/api/gateway/v1/tokens/ \
      -H "Content-Type: application/json" \
      -d '{"username":"admin","password":"<password>"}'
    
  2. Для Automation Controller создайте тестовое задание:

    curl -sk -u admin:<password> -X POST \
     https://controller.example.com/api/v2/job_templates/1/launch/
    
  3. Для Event-Driven Automation создайте активацию сводов правил:

    1. На панели навигации выберите Automation Decisions ‣ Rulebook Activations.

    2. Нажмите кнопку Create и создайте активации сводов правил.

  4. Для Private Automation Hub синхронизируйте коллекции.

Все операции должны выполняться без ошибок 22023.

Важно

  • Описанные действия необходимо выполнить на всех узлах всех компонентов.

  • Исправление требуется каждый раз после обновления, так как aa-setup перезаписывает конфигурацию.