Базовый сценарий#

Базовый сценарий позволяет ознакомиться с основами использования утилиты CLI awx для управления Automation Controller.

Описание сценария#

Этот сценарий содержит следующие действия:

  1. Настройка окружения для получения доступа к Automation Controller с помощью утилиты awx.

  2. Создание организации, с которой связываются все создаваемые далее ресурсы.

  3. Создание инвентаря и добавление в него двух управляемых узлов.

  4. Создание полномочий следующих типов:

  5. Создание проекта.

    Код проекта загружается из репозитория ПАО Группа Астра, доступного по адресу https://source.astragroup.ru/aa-gca/AA/aac-samples.

  6. Создание шаблона задания, использующего наборов сценариев playbooks/demo_helloworld.yml.

  7. Запуск задания на основе шаблона и вывод результатов его выполнения.

Подготовка к работе#

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

  1. Настройте управляемые узлы согласно инструкции.

  2. На сайте https://source.astragroup.ru/ настройте доступ к сервису Git по SSH:

    1. Авторизуйтесь, используя свою учетную запись.

    2. В правом верхнем углу нажмите на кнопку с аватаром и в открывшемся меню выберите Edit profile.

    3. На панели навигации выберите SSH Keys.

    4. Заполните форму добавления ключа SSH:

      • Key – содержимое публичного ключа SSH, используемого для доступа к репозиторию.

      • Title – необязательное название ключа.

      • Expiration date – срок действия ключа. Если это поле не заполнено, ключ действует неограниченно долго.

    5. Нажмите кнопку Add key.

  3. На вашей рабочей станции установите пакет automation-controller-cli согласно инструкции.

Авторизация#

Чтобы управлять Automation Controller с помощью утилиты awx, выполните следующие действия:

  1. Импортируйте в переменные окружения необходимые сведения о контроллере:

    export CONTROLLER_HOST=https://<address>
    export CONTROLLER_USERNAME=<username>
    export CONTROLLER_PASSWORD=<password>
    

    Здесь:

    • <address> – IP-адрес или FQDN контроллера;

    • <username> – название учетной записи администратора;

    • <password> – пароль администратора контроллера.

  2. Сгенерируйте персональный токен доступа:

    awx login
    

    Эта команда возвращает токен в формате JSON, например:

    {
      "token": "70L1bQv6cj***EHkFaqSGrNZ2S5l4n"
    }
    

    Сохраните значение поля token в надежном месте – в случае утраты его нужно будет сгенерировать заново. Восстановить существующий токен невозможно.

  3. Экспортируйте токен в переменную окружения CONTROLLER_OAUTH_TOKEN:

    export CONTROLLER_OAUTH_TOKEN=<token>
    

Создание организации#

  1. Создайте организацию Jupiter:

    awx organizations create --name 'Jupiter'
    
  2. Для получения идентификатора организации выполните команду:

    awx organizations list --all -f human
    

    Она возвращает таблицу следующего вида:

    id name
    == =======
    1  Default
    2  Jupiter
    

Описание инвентаря#

Подготовьте описание инвентаря с помощью следующих действий:

  1. Создайте инвентарь Jupiter Inventory, принадлежащий организации Jupiter (ID=2):

    awx inventory create \
       --name 'Jupiter Inventory' \
       --organization 2
    
  2. Для получения идентификатора созданного инвентаря выполните команду:

    awx inventory list --all -f human
    

    Она возвращает таблицу следующего вида:

    id name
    == =================
    1  Demo inventory
    2  Jupiter Inventory
    
  3. Добавьте в Jupiter Inventory (ID=2) два управляемых узла:

    awx host create \
       --name '<node_name>' \
       --inventory 2 \
       --variables '<node_variables>'
    

    Здесь:

    • <node_name> – название управляемого узла, например, node01;

    • <node_variables> –переменные управляемого узла в формате JSON или YAML, например:

      {
        "ansible_host": "192.168.56.101"
      }
      

Создание полномочий#

Для доступа к управляемым узлам и Git-репозиторию с кодом проекта необходимы полномочия. Создайте их с помощью команды awx credentials create. Данные укажите в формате JSON, используя следующие поля:

  • username – название учетной записи.

  • password – пароль.

  • ssh_key_data – содержимое файла с приватным ключом SSH или путь к нему.

    При указании содержимого файла замените переходы на новую строку последовательностью \n, например:

    {
      "username": "astra",
      "ssh_key_data": "-----BEGIN OPENSSH PRIVATE KEY-----\nb3******FBg==\n-----END OPENSSH PRIVATE KEY-----"
    }
    

    При указании пути к файлу добавьте в начало строки символ @:

    {
      "username": "astra",
      "ssh_key_data": "@~/.ssh/private-key"
    }
    

    Примечание

    По умолчанию поиск выполняется относительно текущего каталога.

  • ssh_key_unlock – если приватный ключ SSH защищен паролем, укажите его в этом поле.

Пример заполнения JSON с данными полномочия#
{
  "username": "administrator",
  "ssh_key_data": "@~/.ssh/private-key",
  "ssh_key_unlock": "p@ssW0rD"
}
  1. Создайте полномочие Demo machine credential типа Машина (Machine), принадлежащее организации Jupiter (ID=2):

    awx credentials create \
       --name 'Demo machine credential' \
       --credential_type 'Machine' \
       --organization 2 \
       --inputs '<node_data>'
    

    Здесь <node_inputs> – учетные данные в формате JSON или YAML для доступа к управляемому узлу.

  2. Создайте полномочие Demo sources credential типа Система управления версиями (Source Control), принадлежащее организации Jupiter (ID=2):

    awx credentials create \
       --name 'Demo sources credential' \
       --credential_type 'Source Control' \
       --organization 2 \
       --inputs '<git_data>'
    

    Здесь <git_data> – учетные данные в формате JSON или YAML для доступа к Git-репозиторию с кодом демонстрационного проекта.

  3. Для получения идентификаторов созданных полномочий выполните команду:

    awx credentials list --all -f human
    

    Она возвращает таблицу следующего вида:

    id name
    == =======================
    2  Ansible Galaxy
    1  Demo Credential
    3  Demo machine credential
    4  Demo sources credential
    

Подготовка проекта#

  1. Создайте проект AWX CLI demo project:

    awx projects create \
       --wait \
       --organization 2 \
       --name='AWX CLI demo project' \
       --scm_type git \
       --scm_url ssh://git@source.astragroup.ru:2222/aa-gca/AA/aac-samples.git \
       --credential 4
    

    Эта команда создает проект, используя следующие ресурсы:

    Тип ресурса

    Идентификатор

    Название

    Организация

    2

    Jupiter

    Полномочие

    4

    Demo sources credential

  2. Для получения идентификатора созданного проекта выполните команду:

    awx projects list --all -f human
    

    Она возвращает таблицу следующего вида:

    id name
    == ====================
    6  Demo Project
    8  AWX CLI demo project
    

Подготовка задания#

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

  1. Создайте шаблон задания AWX CLI demo job template:

    awx job_templates create \
       --name 'AWX CLI demo job template' \
       --project 8 \
       --playbook playbooks/demo_helloworld.yml \
       --inventory 2
    

    Эта команда создает шаблон задания, используя следующие ресурсы:

    Тип ресурса

    Идентификатор

    Название

    Проект

    8

    AWX CLI demo project

    Инвентарь

    2

    Jupiter Inventory

  2. Для получения идентификатора шаблона задания выполните команду:

    awx job_templates list --all -f human
    

    Она возвращает таблицу следующего вида:

    id name
    == ====
    10 AWX CLI demo job template
    7  Demo Job Template
    

Запуск задания и проверка его статуса#

Для запуска задания на основе шаблона AWX CLI demo job template выполните команду:

awx job_templates launch \
  --credentials 3 \
  --monitor \
  10

Эта команда запускает задание, используя следующие ресурсы:

Тип ресурса

Идентификатор

Название

Шаблон задания

10

AWX CLI demo job template

Полномочия

3

Demo machine credential

Результаты выполнения задания выводятся в терминал (часть вывода опущена с целью сокращения):

------Starting Standard Out Stream------
Identity added: /runner/artifacts/4/ssh_key_data (Vagrant SSH key)

PLAY [Hello World Playbook] ****************************************************

TASK [Print Hello World] *******************************************************
ok: [managed1] => {
    "msg": "Hello World from managed1"
}
ok: [managed2] => {
    "msg": "Hello World from managed2"
}

PLAY RECAP *********************************************************************
managed1                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
managed2                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
------End of Standard Out Stream--------

Если в поле failed указано значение 0, значит задание завершилось успешно.