В этой серии блогов основное внимание уделяется представлению сложных проектов DevOps как простых и доступных с помощью простого языка и большого количества изображений. Ты можешь это сделать!

Всем привет!

В этом руководстве рассказывается, как запустить Ansible AWX (версия Ansible Tower от RedHat с открытым исходным кодом) на локальном компьютере с помощью Vagrant. Это может быть здорово, чтобы поиграть с AWX и протестировать его. Вы также можете использовать этот эфемерный экземпляр AWX на своей рабочей станции для создания сценариев «что, если», не тратя ни копейки и не касаясь какой-либо производственной инфраструктуры.

Во-первых, давайте поговорим о том, что такое AWX и как Vagrant может помочь нам без особых усилий создать этот экземпляр.

AWS: платформа Ansible

RedHat поддерживает платформу с открытым исходным кодом для запуска заданий Ansible под названием AWX. Этот код доступен для просмотра и использования бесплатно. На основе этой кодовой базы RedHat создает и поддерживает коммерческий продукт Ansible Tower. Эти проекты очень похожи, но я большой поклонник проектов с открытым исходным кодом, поэтому вы услышите, что я в основном называю это AWX.

Ansible: приложения YAML

Ansible — еще один инструмент с открытым исходным кодом от RedHat. Это безагентный инструмент для управления приложениями и автоматизации. Из-за своей гибкости он был встроен в некоторые другие потоки автоматизации, в частности, в создание образов и локальную подготовку, например. Бродяга.

Довольно круто видеть, как один и тот же инструмент создает локальную операционную систему в потоке Vagrant, а также подключается к десяткам или сотням удаленных серверов и инструктирует их о том, как подготовить и настроить их приложения и конфигурацию.

Виртуальный бокс

Virtualbox — это инструмент виртуализации с открытым исходным кодом для вашей рабочей станции. Иногда это немного грубовато, но с открытым исходным кодом, поэтому хорошо поддерживается множеством инструментов. И вам не нужно иметь дело с неуклюжей веб-страницей лицензирования VMware (и моделью годового лицензирования для обновлений? Да ладно.)

Vagrant: безболезненная эфемерная инфраструктура

HashiCorp поддерживает инструмент с открытым исходным кодом под названием Vagrant, который помогает разворачивать виртуальные среды, в том числе сложные многоузловые развертывания, а также настраивать в них приложения.

В рамках этого блога мы рассмотрим, как развернуть коробку CentOS7, около дюжины пакетов, затем 4 (!) контейнера, которые управляют платформой AWX Ansible runner, настроим ее и запустим, чтобы вы могли получить к ней доступ. на вашей локальной рабочей станции.

Это тонны работы, но она почти полностью заскриптована и автоматизирована благодаря взаимодействию Vagrant и Ansible. Давайте начнем.

Покупка лицензии

Лол, я просто шучу. Весь этот софт бесплатный, как пиво и речь. Давайте на самом деле немного поработаем.

Установите Vagrant + VirtualBox + Ansible

Вы можете скачать и установить vagrant здесь.

Вы можете скачать и установить виртуальный бокс здесь.

Ansible можно запустить только из Unix-подобной системы, включая системы MacOS (извините, ребята из Windows!). Это означает, что нам также нужно установить Ansible. Это немного сложнее, так как это не автономный установщик. Вы можете использовать pip или мой любимый менеджер пакетов: brew.

Инструкции по скачиванию и установке здесь.

Теперь, когда наши инструменты в порядке, давайте синхронизируем некоторый код и начнем.

На плечах великанов

Самостоятельное строительство всего этого заняло бы огромное количество времени. К счастью, нам это не нужно! Джефф Герлинг создал и опубликовал большое количество ролей Ansible, чтобы делать все, что нам нужно, включая развертывание AWX.

Он поддерживает огромный репозиторий интересных вещей здесь:



Синхронизируйте этот репозиторий с вашим компьютером с помощью git:

git clone [email protected]:geerlingguy/ansible-vagrant-examples.git

Затем давайте скажем инструменту ansible-galaxy прочитать наши требования к проекту AWX и установить их. CD в ​​папку AWX (ansible-vagrant-examples/awx) и выполните следующую команду:

ansible-galaxy install -r requirements.yml

Вы увидите, что инструмент ansible-galaxy загружает несколько требований. Это будет выглядеть примерно так:

kyler@computer awx % ansible-galaxy install -r requirements.yml
- downloading role 'repo-epel', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-repo-epel/archive/3.0.0.tar.gz
- extracting geerlingguy.repo-epel to /Users/kyler/Downloads/awx2/kymidd/ansible-vagrant-examples/awx/roles/geerlingguy.repo-epel
- geerlingguy.repo-epel (3.0.0) was installed successfully
- downloading role 'git', owned by geerlingguy
(etc)

Соскоблить ржавчину

Примечание. Здесь я открыл PR для обоих задействованных репозиториев, поэтому эти изменения могут больше не понадобиться. На всякий случай я пройдусь по ним, но если вы просмотрите файлы и увидите уже сделанные изменения, то мой PR слит и вы можете перейти к следующему разделу!
PR1: https://github.com/geerlingguy/ansible-vagrant-examples/pull/84
PR2: https://github.com/geerlingguy/ansible-role-awx/ тянуть/35

Обновление, декабрь 2020 г.: оба PR теперь объединены, и вы сможете пропустить любые модификации и просто запустить сборку. Пожалуйста, дайте мне знать, если вы не можете!

Теперь мы можем запустить несколько команд и запустить это, но с тех пор, как JeffG опубликовал свой код, и теперь установщик AWX немного подзабылся. Нам нужно внести несколько изменений в основной установщик и роли, прежде чем это заработает правильно.

Во-первых, в файле ansible-vagrant-examples/awx/provisioning/playbook.yml нам нужно обновить несколько переменных. После ваших изменений ваш блок переменных должен выглядеть так:

vars:
    awx_version: "devel"
    nodejs_version: "6.x"
    docker_compose_version: "1.27.4"
    pip_install_packages:
      - name: docker
    docker_users:
      - vagrant

Затем мы перейдем к роли установщика AWX, которую поддерживает JeffG. Это здесь:

awx/roles/geerlingguy.awx/tasks/main.yml

Перейдите к этому файлу, и нам нужно будет добавить несколько задач. Последняя задача в этом файле:

- include: awx-install-playbook.yml
  when: awx_run_install_playbook

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

- name: Pause for 30 seconds to permit awx_task to start
  pause:
    seconds: 30
- name: Restart container service
  service:
    name: docker
    state: restarted

Помните, что это YAML, поэтому ваш интервал необходим. Ваш новый файл должен выглядеть так:

Теперь мы готовы построить AWX!

Бродяга: Делай дело!

Теперь Vagrant готов сотворить для нас немного волшебства. Перейдите в корень папки ansible-vagrant-examples/awx и запустите:

vagrant up

Vagrant начнет делать всевозможные интересные вещи, чтобы загрузить этот хост, построить его, настроить и все такое.

Наберитесь терпения — на моем современном macbook pro этот процесс занимает около 10 минут. Надеюсь, примерно через 10 минут вы увидите что-то вроде этого, что означает, что все прошло хорошо:

Если да, то теперь на вашем компьютере работает AWX! Уот!

Заходим на него: http://192.168.6.65. Вы можете войти с admin/паролем.

При первом посещении вы можете увидеть, что AWX выполняет некоторую работу с базой данных. Это должно занять всего несколько минут. Если прошло более 10 минут, мне иногда нужно перезапустить службу докеров, чтобы вернуть все в нужное русло. Если вам нужно (и только если вам нужно), вы можете перезапустить службу докера:

vagrant ssh
sudo service docker restart

Убираться

Когда вы закончите свою работу на день, у вас есть два варианта. Вы можете либо приостановить этот хост (чтобы сохранить ваши изменения). В следующий раз, когда вы включите его, вам не нужно будет тратить 10 минут на ожидание сборки — это просто включение виртуальной машины.

vagrant suspend

Или вы можете уничтожить этот хост. Это отличный способ начать заново, если что-то пойдет не так, и вы хотите полностью перестроиться. Обратите внимание, что в следующий раз вам нужно будет подождать 10 минут, пока этот хост снова соберется.

! Second note: This command will destroy your AWX host and data. Make sure you've backed up whatever you need on this host before running. 
vagrant destroy

Закрой это

В ближайшие недели я собираюсь пройтись по всевозможным интересным вещам с AWX и Ansible. Предстоящее великолепие:

  • Динамическая инвентаризация хостов. Чтобы ваши задания всегда предназначались для активных хостов, AWX может синхронизироваться с поставщиками облачных метаданных и объединять хосты в группы.
  • Учетные данные — AWX имеет неинтуитивный метод управления несколькими учетными данными для одного шаблона задания. Мы рассмотрим, как ими управлять и как создавать собственные шаблоны учетных данных.
  • Ansible Linting — мы можем синхронизировать AWX с системой CI, такой как GitHub или Azure DevOps, где мы можем хранить наш код Ansible, требования, сценарии инвентаризации, статические инвентаризации и многое другое. Мы даже можем протестировать код Ansible при создании PR, чтобы убедиться в правильности интервалов.

👋 Присоединяйтесь к FAUN сегодня и получайте похожие истории каждую неделю на свой почтовый ящик! Получайте еженедельную порцию обязательных к прочтению технических статей, новостей и руководств.

Подпишитесь на нас в Twitter🐦и Facebook👥и Instagram📷 и присоединяйтесь к нашим Facebook и Linkedin Группы💬

Если этот пост был полезен, пожалуйста, нажмите кнопку аплодисментов 👏 несколько раз, чтобы выразить свою поддержку автору! ⬇