Главная

Wednesday, 5 August 2020

AWX - первый старт.

Всем привет.

Используя время от времени Ansible ссылки из сети тебя перекидывают на AWX. Что за зверь такой?  Если просто то AWX это GUI для Ansible. AWX впервые был представлен в сентябре 2017 года - это open source проект, распространяющийся под лицензией Apache-2.0 и являющийся апстримом для коммерческого проекта Ansible Tower. 

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

По мере масштабирования среды до размеров предприятия то же самое происходит и с операторами Ansible. Когда все те, кто отвечает за исполнение Ansible имеют его установленным на свои собственные машины, причём все они обладают копиями установленных плейбуков, внезапно само управление таким окружением превращается в ночной кошмар! Как вы сможете знать что все применяют самые последние версии плейбуков? Откуда вы узнаете кто что запускал и каков результат? Что если изменения потребуют долгих часов? Можете ли вы передать задания Ansible в команду NOC (Network Operations Center) или это невозможно, так как им потребуется обучение тому как применять Ansible?

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

Основные возможности AWX:

  • Интеграция с системами контроля версий (git/mercurial/subversion).
  • Отслеживание статуса выполнения плейбуков в реальном времени.
  • Настройка расписания для автоматического запуска плейбуков.
  • Выполнение нескольких плейбуков в рамках одного workflow.
  • Удаленное выполнение команд без плейбуков (Ansible ad hoc).
  • Поддержка механизма callbackов, позволяющих новым серверам запрашивать конфигурации со своей стороны.
  • Управление Inventory для Ansible, в том числе с возможностью интеграции с платформами AWS/Azure/OpenStack и т.д., а также поддержка собственных скриптов для генерации Dynamic Inventory.
  • Гибкая система разграничения прав доступа. Интеграция с LDAP/SAML/Active Directory и т.д.
  • Встроенная поддержка уведомлений для Email/Slack/PagerDuty/HipChat/MatterMost/IRC.
  • Интеграция с внешними системами агрегации логов: Logstash/Splunk/Loggly/Sumologic.

Рекомендуемые к изменению перед установкой AWX переменные в awx/installer/inventory:

admin_password=password01

-это устанавливаемое по умолчанию значение пароля для пользователя admin - вам он потребуется для самого первого входа в систему, поэтому обеспечьте установку чего- то запоминающегося и безопасного!

pg_password=awxpass

-это значение пароля для обеспечивающей базы данных PostgreSQL - обеспечьте нечто уникальное и безопасное.

postgres_data_dir="~/.awx/pgdocker"

-это каталог в вашей локальной файловой системе, в котором контейнер PostgreSQL будет хранить свои данные - по умолчанию он устанавливается на каталог /tmp, который в большинстве систем будет автоматически очищаться на регулярной основе. Это часто разрушает базу данных PostgreSQL, а потому настройте его на что- то особенное для AWX (например, /var/lib/awx/pgdocker).

#project_data_dir=/var/lib/awx/projects

-для выгрузки плейбуков вручную в AWX не требующих системы контроля версий, такие плейбуки должны располагаться где- то в установленной файловой системе. Чтобы избежать их копирования в некий контейнер, данная переменная соответствует значению локальной папки, определяемой для того чтобы она была расположена в контейнере, мы будем применять устанавливаемое по умолчанию значение (папку /var/lib/awx/projects).

rabbitmq_password

-это значение пароля для лежащей в основе службы RabbitMQ - убедитесь что установили нечто уникальное и безопасное.

secret_key=awxsuper

-это секретный ключ, применяемый для шифрования учётных сведений в базе данных PostgreSQL. Он должен быть одним и тем же при различных обновлениях AWX, поэтому обеспечьте его сохранность в каком- то безопасном месте, так как он потребуется при последующих каталогизациях AWX. Сделайте его каким- нибудь длинным и безопасным.


В данный момент поддерживается несколько вариантов установки, я выбрал с Docker/Docker Compose. И получил в результате 4 работающих контейнера.

sudo docker ps -a
[sudo] password for user1: 
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                  NAMES
285bcfd95af4        ansible/awx:13.0.0   "tini -- /usr/bin/la…"   5 days ago          Up 3 seconds        8052/tcp               awx_task
90218405176c        ansible/awx:13.0.0   "tini -- /bin/sh -c …"   5 days ago          Up 3 seconds        0.0.0.0:80->8052/tcp   awx_web
f62b6f5e1b50        redis                "docker-entrypoint.s…"   5 days ago          Up 3 seconds        6379/tcp               awx_redis
c4bb9184c35b        postgres:10          "docker-entrypoint.s…"   5 days ago          Up 3 seconds        5432/tcp               awx_postgres


Особенности AWX.

Для того чтобы управлять Windows-хостами надо доставить в оба контейнера awx-task и awx-web pywinrm:
AWX docker commands, docker containers awx-task & awx-web: 
sudo docker exec -it 285bcd95af4 /bin/bash
pip install pywinrm

А вот docker-py надо удалить.
docker_service - Unable to load docker-compose.
>sudo pip3 uninstall docker docker-py docker-compose
PS: в моем случае удалился только docker-py 

Есть одна неприятная особенность при установке AWX из коробки. Переменная Рostgres_data_dir по умолчанию выставлена в /tmp/pgdocker и в какой-то момент можно получить «FATAL: could not open file „base/16384/2601“: No such file or directory», поэтому рекомендуется заранее менять эту директорию.

Если в хотите размещать плейбуки локально то при попытке указать нужную папку в джобе получите сообщение:
“WARNING: There are no available playbook directories in /var/lib/awx/projects. 
Either that directory is empty, or all of the contents are already assigned to other projects. Create a new directory there and make sure the playbook files can be read by the “awx” system user, or have Tower directly retrieve your playbooks from source control using the SCM Type option above.”

Для исправления этой ситуации надо выполнить несколько шагов: 
1. Enable the project directory in inventory file (awx/installer/inventory):

project_data_dir=/var/lib/awx/projects

2. Create a directory at 'project_data_dir=/var/lib/awx/projects' path

#mkdir new_project

3. Create a yml-file at project_data_dir=/var/lib/awx/projects/new_project

4. Deploy AWX:

#ansible-playbook -i inventory awx/installer/install.yml

5. Now create a project and provide the created directory.

Что еще? Для исполнения джобов локально надо указать в переменных либо хоста либо самого джоба:
ansible_connection: local
ansible_python_interpreter: '{{ ansible_playbook_python }}'


Если вам стало интересно то вот тут рабочее руководство по установке AWX и запуску вашего первого плейбука. Если вы решите развернуть ее в виртуалке, то учтите что AWX стартует тяжело, поэтому используйте диск для установки не менее 20 Гб и ОЗУ 4 Гб.

Удачи.

No comments:

Post a Comment

А что вы думаете по этому поводу?