Установка Ansible AWX на Debian 7.1

в 2:58, , рубрики: Ansible, Debian, linux, scm, метки: , ,

Решили мы как то упростить администрирование небольшой группы серверов на FreeBSD. Серверов этих самых, вроде бы и не много, но всё же часто бывает нужно выполнить ряд однотипных задач на всех разом.
Долго думали, выбирали, сравнивали, и всё же пришли к варианту установить систему Ansible. А для наглядности к ней прикрутить web-мордочку с названием AWX.
Но вот незадача, сервера у нас на FreeBSD, а в качестве “рабочего” Linux’а выбран Debian. Ansible AWX поддерживает в качестве официальных RHEL/Fedora и Ubuntu.
Как мы все помним, Ubuntu вышла из Debian, а значит должна помнить о предке. Будем разбираться как поставить AWX на Debian.
Исходные данные: свежеустановленный Debian 7.1 Wheezy с включенной вариантами конфигурации “SSH сервер” и “Системные утилиты”.

Инсталятор AWX представляет собой sh скрипт (чуть подробнее об этом ниже), но единственное что делает этот скрипт — запускает playbook для ansible, из чего следует, что перед запуском этого скрипта следует установить сам ansible.

root@awx:~# apt-get install ansible
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
E: Не удалось найти пакет ansible

Но тут ждёт неожиданность в wheezy его нет, так что придётся подключать репозитарий testing. Я использую зеркала яндекса, так что в свой файл /etc/apt/sources.list я добавил строку:

deb http://mirror.yandex.ru/debian/ testing main contrib non-free

Далее, обновляем списки пакетов:

root@awx:~# apt-get update

И ставим сам ansible с необходимыми зависимостями:

root@awx:~# apt-get install ansible

Соглашаемся со всем, что нам вменяют и ждём завершения установки. После чего скачиваем awx, его к сожалению в пакетах нет.

wget http://ansibleworks.com/releases/awx/setup/awx-setup-latest.tar.gz

Распаковываем

root@awx:~# tar xzvf awx-setup-latest.tar.gz

Смотрим, с чем нам предстоит иметь дело.

root@awx:~/awx-setup-1.3.1# ls
group_vars  myhosts  README.md  roles  setup.sh  site.yml

Прочитав файл README.md мы узнаем, что нам необходимо изменить данные аутентификации для PostgreSQL в файле group_vars/all, а так же предупреждение о том, что pg_hba.conf и supervisord.conf будут перезаписаны. Так, что если ставите не на чистую систему, следует сделать соответствующие бейкапы.

Пока всё понятно, теперь рассмотрим из чего состоит инсталятор про который уже упоминалось выше:

root@awx:~/awx-setup-1.3.1# cat setup.sh
#!/bin/bash

getopts "e:" EXTRA_ARGS
if [ "$OPTARG" != "" ]; then
  echo "Running with extra args: ${OPTARG}"
  sudo ANSIBLE_ERROR_ON_UNDEFINED_VARS=True ansible-playbook -i myhosts -c local -v -e "$OPTARG" site.yml
else
  sudo ANSIBLE_ERROR_ON_UNDEFINED_VARS=True ansible-playbook -i myhosts -c local -v site.yml
fi

Из содержимого видно, что главная и единственная задача этого файла запустить playbook site.yml на группу узлов указанных в файле myhosts (в котором только 127.0.0.1) из этой же директории. Следующий параметр -c local указывает механизм доставки команд на целевую машину, в нашем случае ansible и целевая машина это одно и тоже.

Так же из любопытного, можно заметить, что предлагается использовать sudo. Но так как у нас чистая установка Debian в неё это самое sudo, в отличии от Ubuntu, не входит. Значит либо удаляем команду, либо доставляем sudo.
Я удалил вызов sudo, а так же добавил для более подробной отладки ещё две буквы “v”.
Вид файла после моего редактирования:

getopts "e:" EXTRA_ARGS
if [ "$OPTARG" != "" ]; then
  echo "Running with extra args: ${OPTARG}"
ANSIBLE_ERROR_ON_UNDEFINED_VARS=True ansible-playbook -i myhosts -c local -vvv -e "$OPTARG" site.yml
else
  ANSIBLE_ERROR_ON_UNDEFINED_VARS=True ansible-playbook -i myhosts -c local -vvv site.yml
fi

Теперь перейдём к самому интересному, файлу site.yml

root@awx:~/awx-setup-1.3.1# cat site.yml
---
# This playbook deploys the AWX application (database, web and worker) to a
# single server.

- hosts: all
  tasks:
    - name: group hosts by distribution
      group_by: key="{{ ansible_distribution }}-{{ ansible_distribution_version }}"

- hosts: RedHat-6*:CentOS-6*:SL-6*
  user: root
  roles:
    - { role: packages_el6 }
    - { role: postgres, pg_hba_location: "/var/lib/pgsql/data/pg_hba.conf" }
    - { role: awx_install }
    - { role: supervisor, sup_init_name: "supervisord", sup_conf_location: "/etc/supervisord.conf" }
    - { role: httpd, httpd_init_name: "httpd" }
    - { role: iptables }
    - { role: misc }

- hosts: Ubuntu-12*:Ubuntu-13*
  user: root
  roles:
    - { role: packages_ubuntu }
    - { role: postgres, pg_hba_location: "/etc/postgresql/9.1/main/pg_hba.conf" }
    - { role: awx_install }
    - { role: supervisor, sup_init_name: "supervisor", sup_conf_location: "/etc/supervisor/conf.d/awx.conf" }
    - { role: httpd, httpd_init_name: "apache2" }
    - { role: misc }

Варианта для Debian’а не видно, но тут уже видно 2 готовых варианта сценария, для основанных на RHEL и для Ubuntu, а как известно Ubuntu является прямым потомком Debian'a. Ставить будем именно по убунтовскому варианту установки, для этого добавим упоминание о нашей ОС в этот playbook:

- hosts: Ubuntu-12*:Ubuntu-13*:Debian*

Так как postgresql мы будем ставить версии 9.3 немного исправим путь до его конфигурационных файлов

    - { role: postgres, pg_hba_location: "/etc/postgresql/9.3/main/pg_hba.conf" }

В остальном, для нас тут больше ничего интересного.
Пройдёмся по отдельным ролям, и первой будет packages_ubuntu

root@awx:~/awx-setup-1.3.1# cat roles/packages_ubuntu/tasks/main.yml
---
# Tasks to install required packages for awx

- name: install ubuntu awx apt repository
  template: src=awx_repo.j2 dest=/etc/apt/sources.list.d/awx_repo.list

- name: install python-pip package for ubuntu 12.04
  apt: name=python-pip
  when: ansible_lsb.codename == "precise"

- name: install django 1.5.4 via pip for ubuntu 12.04
  pip: name=django version=1.5.4
  when: ansible_lsb.codename == "precise"

- name: install django via apt for ubuntu 12.10 or later
  apt: name=python-django
  when: ansible_lsb.codename != "precise"

- name: install required packages via apt
  apt: name={{ item }}
  with_items:
    - apache2
    - libapache2-mod-wsgi
    - postgresql
    - python-psycopg2
    - python-setuptools
    - python-ldap
    - supervisor
    - git
    - subversion
    - mercurial

- name: install awx package via apt
  apt: name=awx update_cache=yes force=yes state=latest

Первая интересная нам строка template: src=awx_repo.j2 dest=/etc/apt/sources.list.d/awx_repo.list — подключения репозитария, смотрим в файл:

root@awx:~/awx-setup-1.3.1# cat roles/packages_ubuntu/templates/awx_repo.j2
deb {{ aw_repo_url }}/deb {{ansible_lsb.codename}} non-free

Установка Ansible AWX на Debian 7.1

Вроде всё ясно, 2 переменные, в первом случае URL репозитария указанного в файле group_vars/all, во втором случае кодовое имя операционной системы, у нас это whezzy, но так как в репозитарии для wheezy ничего нет, мы будем маскироваться под Ubuntu Raring Ringtail.
После “маскировки” файл принимает следующий вид.

root@awx:~/awx-setup-1.3.1# cat roles/packages_ubuntu/templates/awx_repo.j2
deb {{ aw_repo_url }}/deb raring non-free

В следующей части проверяется, не Precise Pangolin ли у нас:

- name: install python-pip package for ubuntu 12.04
  apt: name=python-pip
  when: ansible_lsb.codename == "precise"

- name: install django 1.5.4 via pip for ubuntu 12.04
  pip: name=django version=1.5.4
  when: ansible_lsb.codename == "precise"

- name: install django via apt for ubuntu 12.10 or later
  apt: name=python-django
  when: ansible_lsb.codename != "precise"

Так как у него (Precise Pangolin) в репозитарии Django старой версии, и авторы AWX ставят более новую (1.5.4) альтернативным путём. Нам эта проблема не грозит, так что можно ничего не менять. Так же меняем условие в файле обработчика для httpd, c Ubunu на Debian:

root@awx:~/awx-setup-1.3.1# cat roles/httpd/handlers/main.yml
---
# Handlers for common notifications.

- name: restart httpd
  service: name=httpd state=restarted
  when: ansible_distribution in ["CentOS","RedHat"]

- name: restart apache2
  service: name=apache2 state=restarted
  when: ansible_distribution in ["Ubuntu"]

В последней строчке Ubuntu меняем на Debian.
Аналогичные действия нужно произвести и для следующей роли postgres:

root@awx:~/awx-setup-1.3.1# cat roles/postgres/tasks/main.yml
# Tasks for configuring PostgreSQL server.

- name: init postgresql
  command: service postgresql initdb creates=/var/lib/pgsql/data/PG_VERSION
  when: ansible_distribution != "Ubuntu"
  tags: postgresql

Скрещиваем пальцы и запускаем

root@awx:~/awx-setup-1.3.1# ./setup.sh


PLAY RECAP ********************************************************************
127.0.0.1                  : ok=30   changed=12   unreachable=0    failed=0

Инсталятор настройки apache помещает в папку

root@awx:~/awx-setup-1.3.1# ls /etc/apache2/conf.d
awx.conf  awx-plain.conf

Содержимое данной папки не включается в основной конфиг апача, так что нам нужно их переместить:

mv /etc/apache2/conf.d/awx* /etc/apache2/sites-enabled/

Дальше ничего сложно, конфигурируем апач, удаляем дублирующиеся вызовы модулей и пользуемся.

Автор: nefformat

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js