Как стать автором
Обновить

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

Время на прочтение6 мин
Количество просмотров12K
Решили мы как то упростить администрирование небольшой группы серверов на 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




Вроде всё ясно, 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/


Дальше ничего сложно, конфигурируем апач, удаляем дублирующиеся вызовы модулей и пользуемся.
Теги:
Хабы:
Всего голосов 8: ↑7 и ↓1+6
Комментарии0

Публикации