Статьи

Демонстрация Ansible функций с контрольными и тестовыми виртуальными машинами

Я создал небольшой проект, чтобы продемонстрировать некоторые возможности Ansible, новую горячность DevOps, включая виртуальные машины Vagrant для запуска Ansible и для тестирования конфигурации. Либо идти прямо к

https://github.com/jakubholynet/ansible-example-with-vm

или продолжайте читать здесь.

У этого проекта есть три вещи, представляющие интерес:

  1. Нетривиальная конфигурация Ansible, демонстрирующая несколько полезных функций и приемов
  2. Виртуальная машина Vagrant / VirtualBox с Ansible & co. чтобы его было легко запустить (даже в Windows)
  3. Еще одна виртуальная машина, которая может быть использована для проверки конфигурации

И конечно вся сантехника, которая заставляет их работать вместе. Это может быть хорошей базой для ваших собственных проектов 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|slaveenv =  vagrant|staging|production). Используйте теги для обозначения части конфигурации , так что эти части могут быть выбраны и выполнены без остатка (f.ex.  jboss_modulejboss_configurationvagrant).

Файл секретных локальных учетных данных : в конфигурацию входят переменные из файла  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

Тебе понадобится

Как это настроено

Виртуальная машина 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».

  1. Запустите тест  centos-vm — перейдите в каталог и запустите vagrant up
  2. Выполнить  ansible-vm — перейти в каталог и запустить,  vagrant up а затем vagrant ssh
  3. В 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

источники

https://github.com/jakubholynet/ansible-example-with-vm