Я создал небольшой проект, чтобы продемонстрировать некоторые возможности Ansible, новую горячность DevOps, включая виртуальные машины Vagrant для запуска Ansible и для тестирования конфигурации. Либо идти прямо к
https://github.com/jakubholynet/ansible-example-with-vm
или продолжайте читать здесь.
У этого проекта есть три вещи, представляющие интерес:
- Нетривиальная конфигурация Ansible, демонстрирующая несколько полезных функций и приемов
- Виртуальная машина Vagrant / VirtualBox с Ansible & co. чтобы его было легко запустить (даже в Windows)
- Еще одна виртуальная машина, которая может быть использована для проверки конфигурации
И конечно вся сантехника, которая заставляет их работать вместе. Это может быть хорошей базой для ваших собственных проектов Ansible.
Отказ от ответственности: я новичок в Ansible.
Немного предыстории: Ansible и Vagrant
Ansible — это инструмент devops для настройки серверов по SSH с использованием только Python. Он похож на Puppet и Chef, но вам не нужно ничего устанавливать на серверах (по сути, каждый * nix имеет Python 2.4+ и SSH, и он даже работает со старым RHEL 5.9), конфигурация по умолчанию выталкивается из элемента управления Машина вместо того, чтобы тянуть за серверы, и она имеет сильный акцент на простоту. Он менее зрелый, чем Puppet, имеет меньше плагинов и пока не поддерживает Windows, но простота, минимальные требования и модель push являются вескими причинами для его рассмотрения.
Vagrant — это инструмент командной строки для создания, настройки и управления виртуальными машинами, например. используя VirtualBox . Он также интегрирует их с хост-машиной путем совместного использования каталогов, переадресации портов и ssh без пароля. По сути, вам нужно немного текстовых файлов и получить полностью функциональную, настроенную и интегрированную среду в виртуальной машине.
Продемонстрированные особенности и хитрости
Бродяга — Ansible советы по интеграции
Установите config.ssh.forward_agent = true
в, ansible-vm
чтобы было проще сделать доступными ваши ключи для Ansible для SSH на удаленных компьютерах. (См. «Локальное тестирование» ниже для получения более подробной информации.)
Добавьте mount_options: ['dmode=0775','fmode=0664']
для монтирования каталога с конфигурацией Ansible, чтобы файл инвентаризации не казался исполняемым для Ansible.
анзибль
Общие сведения : Используйте роли, чтобы разделить конфигурацию на отдельные задачи (jboss, vagrant), используйте переменные для обработки изменений между средами и использования роли (например, порты JBoss, jboss_host_type
= master|slave
, env
= vagrant|staging|production
). Используйте теги для обозначения части конфигурации , так что эти части могут быть выбраны и выполнены без остатка (f.ex. jboss_module
, jboss_configuration
, vagrant
).
Файл секретных локальных учетных данных : в конфигурацию входят переменные из файла secret_vars.yml
, который добавляется в него, .gitignore
чтобы он не был зарегистрирован в Git, и каждый пользователь должен создать свою собственную локальную копию на основе secret_vars.yml.example
. Таким образом, конфиденциальные учетные данные никогда не покидают локальную машину.
Повторное использование через параметризованное включение и моделирование creates
для get_url
. Чтобы избежать необходимости сохранять загруженные архивы, я использую, stat
чтобы проверить наличие файла / каталога и while
пропустить, get_url
если он существует. Все дело в файле включения задачи, roles/jboss/tasks/fetch-module.yml
который параметризован так, чтобы его можно было повторно использовать для извлечения и распаковки трех разных модулей — смотрите roles/jboss/tasks/modules.yml
.
Несколько сред — здесь vagrant
и staging
через два разных файла инвентаризации.
Gotchas
Если кажется, что Ansible зависает при выполнении команды, убедитесь, что команда не пытается запросить ввод данных пользователем, как в моем случае с тем, unzip
что я хотел знать, что делать с существующими файлами (исправлено, если запустить его с помощью -o
принудительной перезаписи их) ,
Автоматическая настройка JBoss
Конфигурация JBoss с использованием Ansible, поэтому можно автоматически применить его к серверу. Некоторые из файлов (-> шаблоны) параметризованы переменными, которые определены для f.ex. in group_vars/appservers
, файл инвентаризации хоста (f.ex. vagrant
) и secret_vars.yml
.
BEWARE : Копировать secret_vars.yml.example
в secret_vars.yml
и установить правильные учетные данные там.
анзибль
Prerequisities
Тебе понадобится
- (Windows: ssh, например, из установщика Putty)
- VirtualBox (например, 4.3.6)
- Бродяга (например, 1.4.3)
- Плагин vagrant vbguest (после установки vagrant запустите
vagrant plugin install vagrant-vbguest
)
Как это настроено
Виртуальная машина Vagrant / VirtualBox ansible-vm
имеет установленную Ansible и может использоваться для запуска ее на тестовой виртуальной машине или в стадии подготовки. Сама тестовая ВМ centos-vm
может использоваться для локального тестирования изменений перед подготовкой. Как описано выше, вам нужно будет создать secret_vars.yml
с секретными учетными данными.
Под Linux / Mac вы можете установить и использовать Ansible напрямую, без ansible-vm
.
Кратко о Бродяге
Vagrant — это инструмент командной строки, который может создавать, настраивать и управлять виртуальными машинами VirtualBox.
Ты должен знать:
- Запуск
vagrant up
вcentos-vm
илиansible-vm
для создания, настройки и запуска виртуальной машины
- Запустите
vagrant reload
послеup
первого запуска , если были установлены новые гостевые дополнения
- Запустите
- Запустите
vagrant ssh
ssh на компьютере как пользовательvagrant
с полными правами sudo. - Запустите,
vagrant halt
чтобы остановить виртуальную машину, иvagrant destroy
если вы хотите уничтожить ее (воссоздать ее с нуля)
Обратите внимание, что Vagrant автоматически совместно использует каталог vm как /vagrant
с виртуальной машиной (и мы также предоставляем этот каталог как /Infrastructure
) и может перенаправлять порты с гостевой виртуальной машины на хост, чтобы вы могли получить доступ к службам, работающим на виртуальной машине, через locahost:<the forwarded port>
которые мы часто используем centos-vm
.
Структура конфигурации
Большая часть конфига находится внутри «ролей», таких как «jboss» и «vagrant», см. ./roles/
Каталог.
использование
Тестирование локально
Используйте тест CentOS VM. Чтобы разрешить выполнение ansible без пароля на тестовой ВМ, рекомендуется использовать ssh-agent, добавив к нему ключ vagrant через ssh-add ~/.vagrant.d/insecure_private_key
.
Windows: используйте Git Bash и включите ssh-agent, как описано в справке GitHub, добавив в него строку ssh-add ~/.vagrant.d/insecure_private_key
. Используйте тот же Bash (?) , Чтобы запустить vagrant up
под ansible-vm
.
Также можно запустить ansible с помощью --ask-pass
или -k
, пароль «vagrant».
- Запустите тест
centos-vm
— перейдите в каталог и запуститеvagrant up
- Выполнить
ansible-vm
— перейти в каталог и запустить,vagrant up
а затемvagrant ssh
- В Ansible VM запустите
cd /Infrastructure
и запустите f.ex.ansible-playbook -vi vagrant site.yml
Примечание. ansible-vm
Настройка предполагает, что IP-адрес хост-машины, видимый с виртуальной машины, равен 10.0.2.2
(протестируйте с помощью f.ex. route
)
Прогон, репетиция
Ansible может попытаться предсказать некоторые изменения, которые он должен будет сделать:
ansible-playbook -vi staging site.yml -u <your user name> [--ask-sudo-pass] --check --diff
Применение изменений в постановке
Внутри Infrastructure/
каталога запустите:
ansible-playbook -vi staging site.yml -u <your user name> [--ask-pass] [--ask-sudo-pass] [--tags <comma-separated tags>] [--private-key=key file]
Заметки:
- Ansible будет ssh как предоставленный пользователь для компьютеров, перечисленных в промежуточном файле («-u jakub» => «ssh jakub @ app (1 | 2) .staging.example.com»)
--ask-pass
необходимо, если ssh запрашивает пароль, т.е. если вы не настроили ssh без пароля--ask-sudo-pass
(или-K
) необходимо, если ваш пользователь не имеет доступа sudo без пароля на сервере- Вы можете использовать
--tags
для выполнения только подмножество задач (при условии, что они были помечены); напр .:--tags newrelic,jboss_module,jboss_configuration