Разное

Ansible playbook: Запуск и работа с Ansible Playbooks

Содержание

Запуск и работа с Ansible Playbooks

В инструкции описано применение и работа с Ansible Playbook, а также кратко рассмотрена их структура.

Вы можете прочитать о том, как установить Ansible на Ubuntu 18.04 в другой нашей инструкции.

Что такое Ansible Playbooks?

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

Часто плейбуки используют для выполнения начальной настройки серверов — добавления пользователей и каталогов, управлением пакетами программного обеспечения и файлами.

Playbook — это YAML-файл, который обычно имеет следующую структуру:

---
- hosts: [target hosts]
  remote_user: [yourname]
  tasks:
    - [task 1]
    - [task 2]

Например, следующий playbook будет входить на все серверы группы marketingservers и обеспечивать запуск веб-сервера Apache:

---
- hosts: [marketingservers]
  remote_user: webadmin
  tasks:
    - name: Ensure the Apache daemon has started
      service: name=httpd state=started
      become: yes
      become_method: sudo

В плейбуке выше приведен пример задания (task):

tasks:
  - name: Ensure the Apache daemon has started
    service: name=httpd state=started
    become: yes
    become_method: sudo

Каждое задание должно иметь имя, которое впоследствии регистрируется и может помочь отслеживать прогресс. После строки имени (name) находится модуль, который будет запущен, в данном случае это служебный модуль. Другие атрибуты разрешают больше опций, в примере Ansible разрешается использовать привилегии sudo.

Запуск Ansible Playbook

Запустить готовый плейбук можно используя следующую команду:

ansible-playbook playbook.yml

Например:

ansible-playbook nginx.yml

Однако, если есть необходимость отфильтровать список хостов, чтобы сценарий применялся только к одному из этих хостов, можно добавить флаг и указать подмножество хостов в файле:

ansible-playbook -l host_subset playbook.yml

Например:

ansible-playbook -l host3 nginx.yml

Регистрация результатов

Когда вы устанавливаете и настраиваете службы вручную, почти всегда необходимо знать результат действий. Настроить эту функциональность можно с помощью регистрации.

Для каждой задачи при желании возможно зарегистрировать ее результат (сбой или успех) в переменной, которую можно проверить позже. При использовании этой функциональности рекомендуется указывать Ansible игнорировать ошибки для такой задачи, так как обычно выполнение playbook прерывается в случае возникновения каких-либо проблем.

Таким образом, если необходимо проверить, выполнилась ли задача или нет и принять решение о последующих шагах, необходимо использовать функциональность регистрации.

Например, укажем playbook загрузить файл index.php, если он существует. Если эта задача не выполнится, то начнется загрузка файла index.html:

---
- hosts: droplets
  tasks:
    - name: Installs nginx web server
      apt: pkg=nginx state=installed update_cache=true
      notify:
        - start nginx

    - name: Upload default index.php for host
      copy: src=static_files/index.php dest=/usr/share/nginx/www/ mode=0644
      register: php
      ignore_errors: True

    - name: Remove index.html for host
      command: rm /usr/share/nginx/www/index.html
      when: php|success

    - name: Upload default index.html for host
      copy: src=static_files/index.html dest=/usr/share/nginx/www/ mode=0644
      when: php|failed

  handlers:
    - name: start nginx
      service: name=nginx state=started

Этот сценарий пытается загрузить файл PHP на хост. Ansible регистрирует успех операции в переменной с именем php. Если эта операция прошла успешно, следующая задача — удалить файл index.html. Если операция завершилась неудачно, будет загружен файл index.html.

Ansible playbook пример

Для Ansible playbook пример, который нагляднее всего демонстрирует возможности — настройка какого-то пакета с нуля на удаленных машинах. Возьмем веб-сервер httpd.

Установка Ansible и начальная конфигурация выполнены ранее. Используется CentOS 7.

 

Управление осуществляется от имени системного пользователя ansadmin, такой же создан на каждой ноде.

su — ansadmin

В первом playbook зададим последовательность задач, выполнение которых позволит получить веб-сервер в минимальной конфигурации.

mcedit httpd.yml

- hosts: app
  user: ansadmin
  become_method: sudo
  tasks:
    - name: 1. Install latest version of apache
      yum: name=httpd state=present
      become: true
    - name: 2. start apache
      service: name=httpd state=started enabled=yes
      become: true
    - name: 3. copy standart index.html
      copy: src=/tmp/index.html dest=/var/www/html/index.html mode=0664
      become: true
    - name: 4. save iptables
      command: iptables-save
      become: true

 

Сначала директивой hosts указывается группа машин, на которых применяется playbook. Это группа app, в нее входит только сервер node1.

Далее пользователь и опция become, которая позволит выполнять команды с sudo. Привилегии суперпользователя понадобятся для установки пакетов.

 

Далее четыре последовательных шага:
  1. Установка веб-сервера httpd
  2. Его запуск и добавление в автозагрузку (за счет enabled=yes)
  3. Копирование файла index.html с мастера на ноды — в /var/www/html/index.html
  4. Сохранение правил iptables

 

Добавим index.html, он будет доставляться на ноды за счет Ansible

mcedit /tmp/index.html

<h2>index file</h2>
<p>Here we have our custom index.html file which will be delivered by Ansible</p>

 

Запускаем проверку написанного файла, она подобна выполнению команд с ключем —dry-run. Симулирует указанные действия не внося фактически изменений в систему

 

ansible-playbook httpd.yml —check

PLAY [app] […skipped…]

TASK [Gathering Facts] […skipped…]
ok: [node1]

TASK [1. Install latest version of apache] […skipped…]
ok: [node1]

TASK [2. start apache] […skipped…]
changed: [node1]

TASK [3. copy standart index.html] […skipped…]
changed: [node1]

TASK [4. save iptables] […skipped…]
skipping: [node1]

PLAY RECAP […skipped…]
node1 : ok=4 changed=2 unreachable=0 failed=0

 

 

Теперь playbook можно выполнить, ошибок возникнуть не должно

ansible-playbook httpd.yml

 

! На CentOS может использоваться firewalld.

Если сетевой экран есть, он не позволит подключиться.  В playbook можно добавить команду разрешающую доступ к порту 80 или просто останавливающую firewalld. Затем вновь применить playbook к ноде

 

 

Фрагмент файла может выглядеть так:

- name: 5. stop firewalld
  command: service firewalld stop
  become: true

 

Теперь можно обратиться к внешнему IP адресу сервера node1. При обращении будет направлен запрос к файлу index.html, который ранее создавался на мастер хосте

Данный пример использования playbook в Ansible показывает, как выполнять конфигурацию подконтрольных машин.

Для крупных систем принцип работы работы тот же. Увеличивается только сложность playbook.

сценарии (playbook) и обработчики (handler)

Playbook в терминологии Ansible — то же самое, что cookbook в Chef.

Это файл-сценарий, в котором описывается набор действий для одного или группы хостов, синтаксис Yaml.

Пример файла для установки NGINXnginx.yml:

---
- hosts: testbox
  tasks:
   - name: Install Nginx
     yum: pkg=nginx state=latest

Обратите внимание на три тире в начале — они обязательны, так как в Yaml ими обозначают начало файла, а перед каждым новым «блоком» — одно тире.

В данном случае мы создаём задачу (task) с вызовом модуля yum, которому передаём аргументы pkg=nginx state=latest.

В качестве хостов, на которые мы будем устанавливать NGINX, можно указать группу (указанные между [] в файле /etc/ansible/hosts), либо имена хостов:

# cat /etc/ansible/hosts | grep test
[testbox]

Запускаем:

$ ansible-playbook -s nginx.yml

PLAY [testbox] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [cent_ans_client1]

TASK: [Install Nginx] *********************************************************
changed: [cent_ans_client1]

PLAY RECAP ********************************************************************
cent_ans_client1           : ok=2    changed=1    unreachable=0    failed=0

В логе клиента видим, что NGINX был установлен:

# cat /var/log/yum.log | grep nginx
Mar 07 16:40:56 Installed: nginx-filesystem-1.0.15-11.el6.noarch
Mar 07 16:41:05 Installed: nginx-1.0.15-11.el6.i686

При вызове сценария мы использовали опцию -s, что бы выполнить задачу под sudo, но можно дополнить задачу, указав опцию sudo.

Удалим NGINX. Меняем state на absent, и перед описание задачи — добавляем sudo: yes:

---
- hosts: testbox
  sudo: yes
  tasks:
   - name: Install Nginx
     yum: pkg=nginx state=absent

Запускаем, но теперь без -s:

$ ansible-playbook nginx.yml

PLAY [testbox] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [cent_ans_client1]

TASK: [Install Nginx] *********************************************************
changed: [cent_ans_client1]

PLAY RECAP ********************************************************************
cent_ans_client1           : ok=2    changed=1    unreachable=0    failed=0

На клиенте проверяем лог:

# cat /var/log/yum.log | grep nginx
Mar 07 16:40:56 Installed: nginx-filesystem-1.0.15-11.el6.noarch
Mar 07 16:41:05 Installed: nginx-1.0.15-11.el6.i686
Mar 07 16:46:11 Erased: nginx

Больше о сценариях можно найти тут>>>.

Hadnler

Задачу можно дополнить обработчиками, которые будут срабатывать, если задача была выполнена успешно.

Возвращаясь к примеру с NGINX — можно добавить обработчик, который будет вызываться после установки, и который запустит NGINX.

Дополним наш сценарий:

---
- hosts: testbox
  sudo: yes
  tasks:
   - name: Install Nginx
     yum: pkg=nginx state=latest
     notify:
         - NGINX start

  handlers:
    - name: NGINX start
      service: name=nginx state=started

Мы вернули state=latest, и добавили notify (уведомление) с именем NGINX start.

В конце — мы добавляем обработчик, которому даём имя NGINX start, ууказывая имя службы name=nginx и требуемое состояние — state=started.

Запускаем:

$ ansible-playbook nginx.yml

PLAY [testbox] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [cent_ans_client1]

TASK: [Install Nginx] *********************************************************
changed: [cent_ans_client1]

NOTIFIED: [NGINX start] *******************************************************
changed: [cent_ans_client1]

PLAY RECAP ********************************************************************
cent_ans_client1           : ok=3    changed=2    unreachable=0    failed=0

На ноде проверяем:

# cat /var/log/yum.log | grep nginx
Mar 07 16:40:56 Installed: nginx-filesystem-1.0.15-11.el6.noarch
Mar 07 16:41:05 Installed: nginx-1.0.15-11.el6.i686
Mar 07 16:46:11 Erased: nginx
Mar 07 17:07:39 Installed: nginx-1.0.15-11.el6.i686
# service nginx status
nginx (pid  3691) is running...

Можно использовать несколько обработчиков для одной задачи. Например — мы хотим установить NGINX, запустить его и добавить в rc-скрипты для запуска при рестарте системы.

Редактируем файл, и добавляем:

     notify:
       - nginx start
       - nginx startup

А в конце — новый обработчик:

    - name: nginx startup
      service: name=nginx enabled=yes

После выполнения — проверяем:

# chkconfig --list nginx
nginx           0:off   1:off   2:on    3:on    4:on    5:on    6:off

В сценариях можно указывать несколько задач. Допишем наш nginx.yml, и добавим в него несколько новых задач:

---
- hosts: testbox
  sudo: yes
  tasks:

   - name: add nginx release repo
     shell: rpm -Uvh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm creates=/etc/yum.repos.d/nginx.repo
     register: nginx_repo

   - name: Install nginx
     yum: pkg=nginx state=latest
     when: nginx_repo|success
     notify:
         - nginx start

  handlers:
    - name: nginx start
      service: name=nginx state=started

Тут мы используем несколько нвых директив Ansible: register — создаёт новую переменную, в которую записывает результат выполнения задачи, и when — проверяет значение заданной переменной, и выполняет задачу, если стостояние будет success.

Продробнее про условия выполнения можно почитать тут>>>.

На клиенте удаляем NGINX:

# yum erase nginx

И проверяем новый playbook:

$ ansible-playbook nginx.yml

PLAY [testbox] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [cent_ans_client1]

TASK: [add nginx release repo] ************************************************
changed: [cent_ans_client1]

TASK: [Install nginx] *********************************************************
changed: [cent_ans_client1]

NOTIFIED: [nginx start] *******************************************************
changed: [cent_ans_client1]

PLAY RECAP ********************************************************************
cent_ans_client1           : ok=4    changed=3    unreachable=0    failed=0

На ноде проверяем:

# yum repolist
...
nginx                      nginx repo                            69
...
# service nginx status
nginx (pid  4029) is running...

Ещё немного дополним наш сценарий — добавим создание корневой директории для сайтов с помощью модуля file.

Опять удаляем NGINX на клиенте:

# yum erase nginx

И редактируем файл nginx.yml на сервере с Ansible:

---
- hosts: testbox
  sudo: yes
  vars:
    root: /var/www/vhosts

  tasks:

   - name: add nginx release repo
     shell: rpm -Uvh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm creates=/etc/yum.repos.d/nginx.repo
     register: nginx_repo

   - name: Install nginx
     yum: pkg=nginx state=latest
     when: nginx_repo|success
     register: nginxinstalled
     notify:
       - nginx start

   - name: Create Web Root
     when: nginxinstalled|success
     file: path={{root}}  mode=775 state=directory owner=nginx group=nginx
     notify:
       - nginx restart

  handlers:
    - name: nginx start
      service: name=nginx state=started

    - name: nginx restart
      service: name=nginx state=restarted

Мы добавили новую переменную root: /var/www/vhosts, новую переменную состояния nginxinstalled в задачу Install nginx, и новую задачу Create Web Root, которая создаёт каталог /var/www/vhosts, устанавливает права 755 и меняет владельца, и новый обработчик, который перезапустит NGINX после создания каталога.

Запускаем:

$ ansible-playbook nginx.yml

PLAY [testbox] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [cent_ans_client1]

TASK: [add nginx release repo] ************************************************
ok: [cent_ans_client1]

TASK: [Install nginx] *********************************************************
changed: [cent_ans_client1]

TASK: [Create Web Root] *******************************************************
changed: [cent_ans_client1]

NOTIFIED: [nginx start] *******************************************************
changed: [cent_ans_client1]

NOTIFIED: [nginx restart] *****************************************************
changed: [cent_ans_client1]

PLAY RECAP ********************************************************************
cent_ans_client1           : ok=6    changed=4    unreachable=0    failed=0

Проверяем:

# ls -l /var/www/
total 4
drwxrwxr-x. 2 nginx nginx 4096 Mar  7 17:48 vhosts
# service nginx status
nginx (pid  4737) is running...

Введение / Блог компании Infobox / Хабр

Ansible – популярный инструмент для автоматизации настройки и развертывания ИТ-инфраструктуры.

Основные задачи, которые решает Ansible:

  • Управление конфигурациями. Максимально быстрая и правильная настройка серверов до описанной конфигурации.
  • Провижнинг. Управление процессом развертывания новых облачных серверов (например через API, с помощью Docker или LXC).
  • Развертывание. Инсталляция и обновление ваших приложений без простоя наилучшим образом.
  • Оркестрация. Координация компонентов вашей инфраструктуры для выполнения развертываний. Например проверка, что веб-сервер отключен от балансировщика нагрузки, до апгрейда ПО на сервере.
  • Мониторинг и уведомления.
  • Логгирование. Централизованный сбор логов.

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


Важность подобных инструментов только увеличивается в облаке с появлением возможности быстро создавать необходимые сервера, развертывать необходимое ПО, использовать и удалять, когда необходимость отпала, оплачивая только используемые ресурсы. В нашей статье мы рассмотрим основную функциональность Ansible в контексте практического использования на облачных серверах в InfoboxCloud.

Что нам потребуется для настройки

Мы надеемся, что у вас уже есть учетная запись в InfoboxCloud. Если еще нет — создайте ее.

Для работы Ansible нам понадобится управляющий сервер. Создайте его (рекомендуется использовать Ubuntu 14.04 или CentOS 7). Также создайте как минимум пару серверов с Linux, которые и будут настраиваться с помощью Ansible. Данные для доступа к серверам будут отправлены на ваш email.

Подключитесь к управляющему серверу по SSH.

Установка Ansible

Ubuntu 14.04 LTS

Для установки, на управляющем сервере введите:

apt-key update && apt-get update && apt-get -y upgrade && apt-get -y install python-software-properties && apt-get -y install software-properties-common && apt-add-repository -y ppa:rquillo/ansible && apt-get update && apt-get -y install ansible

CentOS 7

Для установки, на управляющем сервере введите:

yum -y update && yum -y install epel-release && yum -y install ansible
Как работает Ansible

Основная идея Ansible – наличие одного или нескольких управляющих серверов, из которых вы можете отправлять команды или наборы последовательных инструкций (playbooks) на удаленные сервера, подключаясь к ним по SSH.


Файл Host inventory содержит информацию об обслуживаемых серверах, где команды будут исполнены. Файл конфигурации Ansible может быть полезен для указания настроек вашего окружения.

Наборы инструкций (playbooks) состоят из одной или более задач, которые описываются с помощью функциональность модуля ядра Ansible или сторонних модулей, которые могут потребоваться в специфических ситуациях. Сами по себе наборы инструкций — последовательные наборы команд, в которых могут быть проверки условий: если условие не выполняется, определенные команды могут пропускаться.

Также вы можете использовать Ansible API для запуска скриптов. Если скрипту-обертке (wrapper) может потребоваться запуск playbook, это можно сделать через API. Сами playbooks описываются декларативно в формате YAML. Ansible поддерживает сценарии развертывания новых облачных серверов и конфигурирования их на основании ролей. Часть работы может быть проведена в локальном режиме на управляющем сервере, а остальная — на созданном сервере после его первой загрузки. Ведется работа над модулем провижнинга для InfoboxCloud.

Настройка Ansible

Файл конфигурации описывается в INI–формате. Вы можете переопределить часть или всю конфигурацию в параметрах playbook или переменных окружения.
При исполнении команд Ansible проверяет наличие файла конфигурации в следующих расположениях:

  1. Проверяется переменная окружения ANSIBLE_CONFIG, которая может указывать на файл конфигурации.
  2. ./ansible.cfg – в текущей директории
  3. ~/.ansible.cfg — в домашней директории
  4. /etc/ansible/ansible.cfg — в каталоге, сгенерированном при установке ansible через менеджер пакетов.

Настройка через переменные окружения

Большинство параметров конфигурации можно установить через переменные окружения, используя префикс ANSIBLE_ перед названием параметра конфигурации (большими буквами).
Например:
export ANSIBLE_SUDO_USER=root
После этого переменная ANSIBLE_SUDO_USER может быть использована в playbook.

Настройка в ansible.cfg

Параметров конфигурации Ansible множество. Давайте рассмотрим некоторые из них:

  • hostfile: Параметр указывает на путь к inventory file, в котором содержится список адресов хостов, к которым Ansible может подключиться.

    Например: hostfile = /etc/ansible/hosts
  • library: Путь к директории, где хранятся модули Ansible. Например: library = /usr/share/ansible
  • forks: Количество процессов, которые может породить Ansible. По-умолчанию установлено 5 процессов.

    Например: forks = 5
  • sudo_user: Пользователь по умолчанию, от которого Ansible запускает команды на удаленных серверах.

    Например: sudo_user = root
  • remote_port: Порт для соединения по SSH (по умолчанию 22).

    Например: remote_port = 22
  • host_key_checking: Параметр позволяет отключить проверку SSH–ключа на хосте. По-умолчанию проверка выполняется.

    Например: host_key_checking = False
  • timeout: Значение таймаута попытки подключения по SSH.

    Например: timeout = 60
  • log_path: Путь для хранения файлов логов. По-умолчанию Ansible не хранит их совсем, но указав этот параметр можно активировать запись логов.

    Например: log_path = /var/log/ansible.log

Пишем первый файл конфигурации Ansible

Давайте создадим наш первый файл конфигурации Ansible в InfoboxCloud. Подключитесь по SSH к созданному управляющему серверу с установленным Ansible. Создайте директорию для наших экспериментов ‘ansible’ и перейдите в нее:

mkdir ~/ansible
cd ~/ansible

Также создайте папку для хранения модулей Ansible и папку для хранения логов:

mkdir ~/ansible/modules
mkdir ~/ansible/logs

Создайте файл ansible.cfg со следующим содержимым:

[defaults]
hostfile = ~/ansible/inventory
sudo_user = root
log_path = ~/ansible/logs/ansible.log

Указываем обслуживаемые сервера в host inventory

Для экспериментов ранее мы создали пару серверов, которые и будем настраивать. Нужно сообщить Ansible их адреса и сгруппировать их. Для этого создайте файл inventory нашей директории ~/ansible/inventory со следующим содержимым:

[experiments]
ip_первой_машины
ip_второй_машины

ip_адреса серверов можно посмотреть в панели управления InfoboxCloud.


Обратите внимание, что для использования управляющего сервера Ansible с серверами в одном регионе можно указать локальные IP–адреса и работать по внутренней сети.

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

Это делается с помощью команды:

ssh-keygen

На все вопросы можно просто нажать Enter.

Теперь необходимо скопировать публичный ключ на настраиваемые сервера. Это можно сделать с помощью утилиты ssh-copy-id с управляющего сервера Ansible для каждого настраиваемого сервера:

ssh-copy-id root@ip_адрес_настраиваемого_сервера

Проверить корректность можно, залогинившись в настраиваемый сервер с управляющего по SSH. Если пароль больше не спрашивается — все в порядке.

В InfoboxCloud можно создавать новые сервера с уже указанным публичным ключом. Для этого создайте чистый сервер. Скопируйте на него публичный SSH-ключ, как показано выше. Далее создайте образ ОС:

Теперь в разделе «Образы серверов» панели управления можно при необходимости нажать «Создать сервер» на нашем образе и получить готовую к конфигурации машину для Ansible.

Давайте теперь проверим корректность настройки Ansible полностью.

Можно попинговать обслуживаемые сервера:

ansible experiments -m ping

или отправить в echo «Hello World»:

ansible experiments -a "/bin/echo Hello, World!"

Управление конфигурациями

Работаем с playbooks

Исполнение Playbooks – одна из основных задач Ansible. Playbooks содержат списки задач. Каждая задача внутри Ansible использует кусок кода-модуля. Сами Playbooks описываются в формате YAML, но модули могут быть написаны на любом языке программирования. Важно, чтобы формат сообщений от модулей был в JSON.

YAML

Playbook пишется на YAML. Давайте посмотрим на основные правила написания YAML-файлов.

Для Ansible практически каждый YAML файл начинается со списка. Каждый элемент списка — список пар «ключ-значение», часто называемая словарем.

Все YAML файлы должны начинаться с «—«. Это часть формата YAML и означает начало документа.

Все члены списка должны находится с одинаковым отступом от начала строки, и должны начинаться с пробела или «-«. Комментарии начинаются с «#».

Например:

---
#Message
- Hosting
– Cloud

Словарь представлен в виде «ключ:» (двоеточие и пробел) «значение»:

---
#Message
site: habr
blog: infobox

При необходимости словари могут быть представлены в сокращенной форме:

---
#Comment
{site: habr, blog: infobox}

Можно указать логические значение (истина/ложь) так:

---
need_access: no
use_service: yes
file_conf: TRUE
read_value: True
kill_process: false

Целиком наш пример YAML–файла будет выглядеть так:

---
#About blog
site: habr
blog: infobox
must_read: True
themes:
 - hosting
 - cloud
 - it
 - geeks
brands:
 - infobox
 - infoboxcloud

Для переменных Ansible использует «{{ var }}». Если значение после двоеточия начинается с «{«, то YAML будет думать, что это словать.
Для использования переменных нужно заключить скобки в кавычки:

word: "{{ variable }}"

Этого достаточно для начала написания playbooks.

Пишем наш первый playbook

Playbooks может состоять из списка обслуживаемых серверов, переменных пользователя, задач, обработчиков (хендлеров) и т.д. Большинство настроек конфигурации можно переопределить в playbook. Каждый playbook состоит из одного или более действия (игры) в списке.

Цель игры — связать группу хостов с предопределенными ролями, представленными как вызов задач Ansible.

В качестве примера давайте рассмотрим процесс установки nginx.

Создадим директорию, где будут хранится playbooks:

mkdir ~/ansible/playbooks

Создадим файл setup_nginx.yml в директории playbooks со следующим содержанием:

---
- hosts: experiments
  tasks:

  - name: Install nginx package
    apt: name=nginx update_cache=yes
    sudo: yes

  - name: Starting nginx service
    service: name=nginx state=started
    sudo: yes

Давайте рассмотрим содержимое:

примеров руководств по Ansible — примеры руководств по Ansible

В этом посте мы увидим примеры Ansible playbook и различные модули и примеры playbook с различными модулями и несколькими хостами. Мы начнем с базового сценария Ansible и узнаем, что такое задача и игра, а что такое сборник игр и т. Д.

Что такое Ansible Playbook

Это метафора, представляющая файлы конфигурации Ansible. Он содержит список задач (игр) в том порядке, в котором они должны выполняться для набора хостов или одного хоста в зависимости от указанной конфигурации.Плейбуки написаны на YAML в удобочитаемом синтаксисе

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

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

Аналогичным образом, Ansible Playbooks — это группа специальных команд с дополнительными элементами программирования, такими как циклы, итерации, условные выражения и т. Д.

Перед написанием учебного пособия Рекомендуется взглянуть на команду Ansible AD HOC, как она работает и как их выполнять. Вы можете прочитать о команде Ansible AD HOC здесь

Проще говоря, если модули Ansible — это инструменты в вашей мастерской, playbook — это ваши инструкции по эксплуатации, а ваш инвентарь хостов — ваше сырье.

Если ansible ad hoc подходит для быстрой и единственной задачи (или) цели, доступные playbooks идеально подходят для проектов и автоматизации.

В одной playbook вы можете увидеть, как организовано несколько модулей и обработчиков. Другими словами, это называется оркестровкой.

В качестве примера. Допустим, вы хотите установить веб-сервер Apache на нескольких хостах. Следующая инструкция сделает это за вас.

Пример Ansible Playbook

 ---
  - название: Playbook
    хосты: веб-серверы
    стать: да
    стать_пользователем: корень
    задачи:
      - name: убедитесь, что у Apache последняя версия
        ням:
          имя: httpd
          состояние: последнее
      - name: убедитесь, что apache запущен
        служба:
          имя: httpd
          состояние: запущен 

, приведенного выше простого примера ansible-playbook достаточно, чтобы завершить установку Apache.Я чувствую ваш гнев из-за того, что я просто дал простой текст без объяснения того, что они делают.

Ну, я объяснил, что делает каждая строка

name Название playbook

хостов Набор хостов, обычно сгруппированных вместе в группу хостов и определенных в файле инвентаризации

стать Чтобы сообщить анзиблю, эта игра должна выполняться с повышенными привилегиями

стать_пользователем имя пользователя, на которое мы хотим переключиться, как сравнить его с sudo su - user

задач набор задач для выполнения, все задачи будут определены ниже этого

, а затем у нас есть две задачи с двумя модулями, первый модуль — yum , а второй модуль — service

в первой задаче с yum состояние latest означает, что вышеупомянутый пакет httpd должен быть установлен, если он не установлен (или), если он уже установлен, его следует обновить до последней доступной версии.Если вы не хотите, чтобы он обновлялся, если он присутствует, вы можете изменить его на состояние : присутствует

Во второй задаче с сервисным модулем мы проверяем, что служба с именем httpd запущена и работает в состоянии : запущен Ansible не перезапустит службу, если она уже запущена и работает.

Ansible Play против Ansible Playbook?

Чтобы понять ansible-playbook, вы должны понимать команды Ansible Adhoc.

Специальные команды могут запускать одну простую задачу для набора целевых хостов как одноразовую команду. Однако настоящая сила Ansible заключается в том, чтобы научиться использовать playbook для выполнения нескольких сложных задач с набором целевых хостов легко повторяемым образом.

Вот что забрать

Игра — это упорядоченный набор задач, которые должны выполняться против хостов, выбранных из вашего инвентаря.

Книга воспроизведения — это текстовый файл, содержащий список из одного или нескольких воспроизведений, запускаемых по порядку.

В приведенном ранее примере вы можете видеть, что мы выполняем все задачи для одной группы хостов с именем webservers , это называется A PLAY .

Если я хочу запустить другой набор задач для другой группы хостов. Все, что вам нужно сделать, это добавить еще одну ИГРУ.

Помните: в Playbook может быть много игр, предназначенных для запуска с разным набором групп хозяев

Каждая игра должна содержать

  • Набор хостов для настройки
  • Список задач, которые будут выполняться на этих хостах

Думайте о игре как о проводе, соединяющем хосты с задачами.

Пример Ansible Playbook с несколькими хостами и несколькими играми.

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

 ---
  # Play1 - задачи, связанные с веб-сервером
  - name: Play Web - Создание каталогов apache и имени пользователя на веб-серверах
    хосты: веб-серверы
    стать: да
    стать_пользователем: корень
    задачи:
      - name: создать имя пользователя apacheadm
        пользователь:
          имя: apacheadm
          группа: пользователи, админ
          оболочка: / bin / bash
          главная: / главная / weblogic

      - имя: установить httpd
        ням:
          имя: httpd
          состояние: установлен
        
  # Play2 - задачи, связанные с сервером приложений
  - name: Play app - Создание каталогов tomcat и имени пользователя на серверах приложений
    хосты: серверы приложений
    стать: да
    стать_пользователем: корень
    задачи:
      - name: создать имя пользователя для tomcat
        пользователь:
          имя: tomcatadm
          группа: пользователи
          оболочка: / bin / bash
          дом: / дом / кот

      - name: создать каталог для apache tomcat
        файл:
          путь: / opt / oracle
          владелец: tomcatadm
          группа: пользователи
          состояние: настоящее
          режим: 0755 

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

Как выполнить Ansible Playbook

Ansible playbook может быть запущен с помощью команды ansible-playbook . например, у вас есть команда ansible для выполнения специальной команды. Это предназначено для ansible playbooks

Давайте посмотрим, как выполнить предыдущий сценарий и установить apache на веб-серверах Группа хостов

Примечание *: группа хостов — это группа хостов и серверов, указанных в доступном файле инвентаризации.

 ➜ Ansible-Примеры git: (master) ✗ cat ansible_hosts
[веб-серверы]
mwivmweb01
mwivmweb02 

Вот настроенный файл инвентаризации Ansible с двумя хостами, сгруппированными как веб-серверы

Здесь имя группы хостов — webservers , и оно упоминается в директиве hosts: в playbook

Ниже приведен синтаксис или пример команды для запуска доступного playbook.

 ansible-playbook  sampleplaybook.yml -i ansible_hosts 

Если вы указали все группы узлов сети в файле инвентаризации по умолчанию / etc / ansible / hosts , тогда вам не нужно использовать аргумент -i . это только тогда, когда у вас есть настроенный файл инвентаря, как у меня.

См. Этот видеоблог для получения дополнительной информации о том, как выполнять playbook в реальном времени.

Как выполнить «пробный запуск» playbook без внесения фактических изменений

, вы действительно можете запустить playbook с функцией Dry Run, чтобы увидеть, какие изменения будут внесены в сервер, без необходимости выполнять фактические изменения.

для этого. вам просто нужно добавить -C в команду запуска ansible-playbook

 ansible-playbook  -C sampleplaybook.yml -i ansible_hosts 

Как выполнить проверку синтаксиса в Playbook

Если вы хотите быстро проверить, все ли в порядке с playbook. Вы можете выполнить проверку синтаксиса.

Вот пример командной строки ansible о том, как выполнить проверку синтаксиса для ansible playbook.Обратитесь к видео для практической идеи.

 ansible-playbook  --syntax-check sampleplaybook.yml -i ansible_hosts 

Как использовать переменные в Ansible Playbook

Ansible playbook поддерживает определение переменной в двух формах: либо как отдельный файл с множеством переменных и значений, например, файл свойств. или однострочное объявление переменной, как в любых распространенных языках программирования

vars для определения встроенных переменных в playbook

vars_files для импорта файлов с переменными

Предположим, мы хотим добавить несколько переменных для нашего веб-сервера, например имя сервера, файл ключей SSL, файл сертификата и т. Д.

это можно сделать с vars как это

 ---
  - название: Playbook
    хосты: веб-серверы
    стать: да
    стать_пользователем: корень
    вары:
       ключевой_файл: /etc/apache2/ssl/mywebsite.key
       cert_file: /etc/apache2/ssl/mywebsite.cert
       имя_сервера: www.mywebsite.com
    задачи:
      - name: убедитесь, что у Apache последняя версия
        ням:
          имя: httpd
          состояние: последнее
      
      

      
      - name: убедитесь, что apache запущен
        служба:
          имя: httpd
          состояние: запущен 

и переменные могут быть упомянуты в шаблоне jinja2 позже "{{имя переменной}}"

Если вы хотите сохранить переменные в отдельном файле и импортировать его с помощью vars_files

Вы должны сначала сохранить переменные и значения в том же формате, который вы записали в playbook, а затем файл можно будет импортировать с помощью vars_files, как это

 ---
  - название: Playbook
    хосты: веб-серверы
    стать: да
    стать_пользователем: корень
    vars_files:
        - apacheconf.yml
    задачи:
      - name: убедитесь, что у Apache последняя версия
        ням:
          имя: httpd
          состояние: последнее
      
      

      
      - name: убедитесь, что apache запущен
        служба:
          имя: httpd
          состояние: запущен 

контент apacheconf.yml хотел бы это

 ключевой_файл: /etc/apache2/ssl/mywebsite.key
cert_file: /etc/apache2/ssl/mywebsite.cert
имя_сервера: www.mywebsite.com 

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

Пример Ansible Playbook для настройки стека LAMP

Linux Apache Mysql / MariaDB PHP вкратце называется стеком LAMP, и он поддерживает большинство интернет-сайтов, включая Facebook.

Итак, давайте посмотрим на Образец Ansible Playbook для установки стека LAMP с необходимыми пакетами и инструментами.

Итак, что собираемся делать в этом плейбуке

  • Подключитесь к удаленному хосту и выполните следующие задачи
    • Установите все необходимые пакеты, такие как Apache (httpd), mariadb, php
    • Установка брандмауэра и включение служб HTTP
    • Запустите веб-сервер Apache HTTPD.
    • Запустите сервер MariaDB
    • Загрузите образец страницы PHP с удаленного URL-адреса
    • Доступ к созданному нами веб-сайту по URL-адресу

Вот пример Ansible Playbook для настройки LAMP Stack

 ---
- name: Настройка веб-сайта LAMP
  пользователь: vagrant
  хосты: тестовый сервер
  стать: да
  задачи:
    - name: последняя версия всех установленных пакетов
      ням:
        имя:
          - firewalld
          - httpd
          - mariadb-сервер
          - php
          - php-mysql
        состояние: последнее

    - имя: firewalld включен и работает
      служба:
        имя: firewalld
        включен: правда
        состояние: запущено

    - имя: firewalld разрешает службу http
      firewalld:
        сервис: http
        постоянный: правда
        состояние: включено
        немедленно: да

    - name: Копировать mime.файл типов
      копия:
        источник: /etc/mime.types
        dest: /etc/httpd/conf/mime.types
        remote_src: да

    - имя: httpd включен и работает
      служба:
        имя: httpd
        включен: правда
        состояние: запущено

    - имя: mariadb включен и работает
      служба:
        имя: mariadb
        включен: правда
        состояние: запущено

    - name: скопируйте php-страницу с удаленного компьютера с помощью get_url
      get_url:
        url: "https: // www.middlewareinventory.com/index.php "
        место назначения: /var/www/html/index.php
        режим: 0644

    - name: протестируйте веб-страницу / веб-сайт, который мы настроили
      uri:
        URL: http: // {{ansible_hostname}} /index.php
        status_code: 200 

Примеры воспроизведения Ansible

Я написал несколько сборников пьес для Ansible и перечислил большинство из них здесь для вашего легкого доступа. в этих статьях будет много примеров сборников, относящихся к модулям и одной теме.

  1. Примеры модуля архивирования — Ansible
  2. Примеры модуля Ansible Unarchive
  3. Примеры модулей оболочки
  4. Ansible + Vagrant Playbook для подготовки Apache
  5. Ansible Copy SSH Keys между удаленными серверами, пример
  6. Как копировать файлы между удаленными хостами с помощью ansible
  7. Ansible changed_when и failed_when в playbook
  8. Примеры руководств по модулю Ansible Command Module
  9. Как использовать GIT с Ansible playbook
  10. Примеры модулей шаблонов — Ansible
  11. Примеры модуля поиска — Ansible
  12. Как читать и обрабатывать файл JSON с помощью ansible, пример
  13. Примеры модулей Ansible apt
  14. Примеры модуля Ansible Find
  15. Как обрабатывать данные JSON с помощью JSON_Query ansible
  16. Пример сценария для Ansible AWS EC2
  17. Ansible async Примеры опроса
  18. Как загрузить файл с URL-адреса с помощью ansible playbook
  19. Ansible lineinfile — Как добавить, заменить, обновить строку в файле с помощью ansible
  20. Ansible replace module — как заменить тексты в ansible
  21. Как завершить задачу wait_for в примере плейбука

Заключение

Я надеюсь, что эта статья дала вам прочную основу для понимания того, что такое Ansible playbook, и я знаю, что у вас все еще могут быть вопросы.лучший способ учиться — это исследовать и практиковаться. Так что продолжайте писать много пьес, и вы можете поделиться ими с нами в комментариях или отправить их мне.

Если вы хотите, чтобы ваш Playbook был доступен всему миру, подумайте о загрузке его в Ansible Galaxy

.

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

Продолжайте учиться.

Оцените статью [оценки]

Ура,
Сарав АК

Следуйте за нами в Facebook или Twitter

Для более практических видео и руководств.Подпишитесь на наш канал

Найдите меня в Linkedin Мой профиль

Для консультации или найма нас [email protected]

Если вам понравилась эта статья. Покажи свою поддержку! Купи мне кофе.


Больше из инвентаря промежуточного программного обеспечения

  • Как запустить Ansible Playbook локально

    В этом посте мы увидим, как запустить playbook локально на нашем Localhost на управляющей машине. Как запустить Ansible Playbook локально — это один из вопросов, которые у меня возникали до того, как я его узнал.Позвольте мне рассказать вам, как запустить Ansible Playbook локально…

  • Примеры команд Ansible AD HOC — шпаргалка по Ansible

    Специальные команды Ansible — это однострочные команды, предназначенные для решения очень конкретной задачи. Они похожи на быстрые фрагменты и ваш компактный швейцарский армейский нож, когда вы хотите быстро выполнить задачу на нескольких машинах. Проще говоря, специальные команды Ansible — это однострочные команды оболочки Linux, а playbooks — это …

  • Ansible lineinfile несколько строк — замена нескольких строк

    В этом посте мы увидим, как использовать модуль Ansible lineinfile для одновременной замены нескольких строк.Как использовать несколько регулярных выражений или регулярное выражение одновременно. Как сопоставить несколько строк. В этом примере мы возьмем файл apache httpd.conf…

  • Примеры командного модуля Ansible

    Введение в командный модуль Ansible Модуль Ansible Command используется для выполнения команд на удаленном узле. Командный модуль используется в основном для выполнения простых команд Linux на удаленном узле / сервере, который является частью группы хостов или автономного сервера, упомянутого в группе хостов. Если хотите…

  • ansible получить IP-адрес текущего хоста или цели

    Как получить IP-адрес текущего или удаленного хоста в Ansible.Вот вопрос, на который мы обратимся в этой статье. Во время запуска Playbook у вас могло возникнуть требование получить IP-адрес подключенного и текущего удаленного хоста. Есть…

.

Ansible Dry Run — Как запустить Playbook в режиме проверки Ansible

Введение

Функция режима Ansible Dry Run или Ansible Check предназначена для проверки вашей книги перед запуском, как функция Ansible --syntax-check .

С помощью функции Ansible Dry Run вы можете запустить playbook без необходимости вносить изменения на сервере. С помощью Ansible Dry Run вы можете увидеть, меняется ли хост или нет.

Вот пример сценария, написанного для установки и запуска веб-сервера Apache HTTPD.

 ---
  - название: Playbook
    хосты: веб-серверы
    стать: да
    стать_пользователем: корень
    задачи:
      - name: убедитесь, что у Apache последняя версия
        ням:
          имя: httpd
          состояние: последнее
      - name: убедитесь, что apache запущен
        служба:
          имя: httpd
          состояние: запущен 

Наша цель — установить веб-сервер Apache и запустить его, но если мы хотим увидеть, повлияет ли он / изменит хост или вызовет ошибку.Мы можем запустить пробную версию этого пособия

без лишних слов, позвольте мне рассказать вам, как запустить Ansible Playbook в режиме Check или пробном прогоне в режиме

Где использовать Ansible Dry Run

Предположим, вы хотите запустить вышеупомянутый playbook для установки HTTPD-сервера Apache для списка хостов, на которых уже установлен Apache. Вы можете просто запустить этот сценарий в режиме проверки или выполнить пробный запуск, чтобы проверить его.

позволяет делать это практически.

Ansible Dry Run — Как выполнить playbook в режиме проверки

Это можно сделать с помощью флага -C или --check команды ansible-playbook

Как было сказано ранее, мы собираемся запустить playbook для списка хостов, на которых уже установлен Apache. Итак, мы собираемся проверить это, выполнив СУХОЙ ЗАПУСК

.

Где Ansible Dry run завершился ошибкой / не может быть использован

Ansible Dry Run попытается запустить ваш playbook как есть.Это то, что называется «сухой пробег», верно? Это цель, для которой он предназначен.

Но если у вас есть условное выполнение задачи или выполнение задачи на основе результатов в playbook, пробный прогон завершится ошибкой.

Например, давайте рассмотрим следующую книгу, в которой вы пытаетесь установить сервер приложений Weblogic на основе установки и доступности Java JDK.

Если вы используете следующую книгу в режиме проверки, иначе говоря, пробный запуск. Он завершится ошибкой в ​​середине, потому что не может удовлетворить требование для задачи install weblogic , поскольку Java еще не установлена.(так как при пробном прогоне ничего установить не удалось)

 - имя: Установить java
  стать: да
  стать_пользователем: weblogic
  Теги: installjava, приложение
  оболочка: "tar -xzf server-jre * .tar.gz"
  аргументы:
   chdir: "{{oracle_home}}"
  среда:
   JAVA_HOME: "/opt/oracle/jdk1.8.0_191"
   ПУТЬ: "{{JAVA_HOME}} / bin"

- name: создать мягкую ссылку на java
  стать: да
  стать_пользователем: корень
  Теги: linkjava
  оболочка: "ln -s {{oracle_home}} / jdk1.8.0_191 / bin / java / usr / bin / java "
  ignore_errors: правда

- имя: Проверить Java
  стать: да
  стать_пользователем: weblogic
  Теги: приложение, vjava
  команда: "java -version"
  регистрация: javaver

- отладка:
    msg: "Найдена версия Java {{javaver.stderr}}"

- имя: Установить Weblogic
  стать: да
  стать_пользователем: weblogic
  Теги: установитьweblogic, приложение
  зарегистрироваться: wlsinstall
  оболочка: «java -jar {{oracle_home}} / fmw * .jar -silent -invPtrLoc {{oracle_home}} / oraInst.loc -responseFile {{oracle_home}} / install.file -ignoreSysPrereqs -force -novalidation ORACLE_HOME = {{oracle_home}} INSTALL_TYPE = 'WebLogic Server' "
  аргументы:
    chdir: "{{oracle_home}}"
  когда: "'версия java \" 1.8.0_191 \ "' в javaver.stderr"
  failed_when: "сбой" в wlsinstall.stderr "
  changed_when: "" уже установлен "отсутствует в wlsinstall.stdout" 

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

Пока я все еще изучаю возможности использования этого Checkmod и сухого прогона.Я был бы рад, если бы вы поделились, где еще этот пробный запуск был полезен в вашем случае. Используйте поле для комментариев.

Надеюсь, эта статья поможет.

Ура,
Сарав АК

Следуйте за нами на Facebook или Twitter

Для получения дополнительных практических видео и руководств. Подпишитесь на наш канал

Найдите меня в Linkedin Мой профиль

Для консультации или найма нас [email protected]

Если вам понравилась эта статья.Покажи свою поддержку! Купи мне кофе.


Больше из инвентаря промежуточного программного обеспечения

  • Как запустить Ansible Playbook локально

    В этом посте мы увидим, как запустить playbook локально на нашем Localhost на управляющей машине. Как запустить Ansible Playbook локально — это один из вопросов, которые у меня возникали до того, как я его узнал. Позвольте мне рассказать вам, как запустить Ansible Playbook локально…

  • Примеры Ansible Playbook — образцы Ansible Playbook

    В этом посте мы увидим примеры Ansible playbook и различные модули и примеры playbook с различными модулями и несколькими хостами.Мы начнем с базового руководства по работе с Ansible и узнаем, что такое «задача и игра», что такое учебник и т. Д. Что такое Ansible Playbook It…

  • ansible поиск строки в файле или проверка, существует ли строка в файле

    Цель этого поста — показать, как искать строку в файле с помощью ansible. ansible предоставляет различные способы сделать то же самое. Мы рассмотрим три основных способа поиска строки в файле. Модуль Lineinfile Использование модуля Shell и команды grep…

  • Ansible lineinfile несколько строк — замена нескольких строк

    В этом посте мы увидим, как использовать модуль Ansible lineinfile для одновременной замены нескольких строк.Как использовать несколько регулярных выражений или регулярное выражение одновременно. Как сопоставить несколько строк. В этом примере мы возьмем файл apache httpd.conf…

  • ansible получить IP-адрес текущего хоста или цели

    Как получить IP-адрес текущего или удаленного хоста в Ansible. Вот вопрос, на который мы обратимся в этой статье. Во время запуска Playbook у вас могло возникнуть требование получить IP-адрес подключенного и текущего удаленного хоста. Есть…

.

Task Automation using Ansible Playbooks и Ansible Vaults с примерами

Изучите автоматизацию задач с помощью Ansible playbooks и Ansible vaults для защиты конфиденциальных данных:

В нашем предыдущем руководстве по Ansible № 1 мы узнали о различных компонентах Ansible и как установить и настроить этот инструмент с различными модулями. Мы также видели, как модули используются для выполнения одной функции или задачи.

В этой части мы рассмотрим автоматизацию задач с использованием сценариев Ansible и хранилищ Ansible для защиты конфиденциальных данных.

Рекомендуемое чтение => Учебное руководство по DevOps

Ansible Playbooks

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

Пособия определяют переменные, конфигурации, этапы развертывания, назначают роли, выполняют несколько задач. Для Например. КОПИРОВАТЬ / УДАЛИТЬ файлы и папки, установить пакеты, запустить службы.Таким образом, в первую очередь playbooks определены, чтобы организовать шаги для нескольких машин или серверов и привести их все в определенное желаемое состояние.

Playbook написан в формате YAML с расширением файла .yml. Нужно быть очень осторожным с форматом и выравниванием, что делает его очень чувствительным.

Он содержит следующие разделы:

  1. Каждый playbook начинается с 3 дефисов ‘-‘
  2. Host section — Определяет целевые машины, на которых будет запускаться playbook.Это основано на файле инвентаризации Ansible.
  3. Раздел переменных — Это необязательно и может объявлять все переменные, необходимые в playbook. Мы также рассмотрим несколько примеров.
  4. Раздел задач — В этом разделе перечислены все задачи, которые должны быть выполнены на целевой машине. Он определяет использование модулей. У каждой задачи есть имя, которое представляет собой небольшое описание того, что задача будет делать, и будет отображаться в списке во время выполнения playbook.

Например,

Если нам нужно установить и настроить Tomcat, он будет состоять из следующих задач:

  1. Загрузка и установка Tomcat
  2. Настройка Tomcat
  3. Запустите Tomcat

Аналогично, еще один Пример использования Tomcat, используемого в непрерывной доставке DevOps, задачи могут быть следующими:

  1. Остановить приложение
  2. Удалить приложение
  3. Установить новую версию файла WAR.
  4. Запустить приложение

Пример формата Playbook

 --- Запуск Playbook
- хосты: веб-серверы Укажите группу или серверы в соответствии с инвентаризацией для выполнения задач
  становятся истинными
  задачи:
  - имя: скопировать ZIP-файл Tomcat в место установки Краткое описание задачи
    копия: src = / home / ansible / niranjan / apache-tomcat-8.5.31.tar.gz dest = / opt / niranjan / tomcat 

В приведенном выше скрипте посмотрите на выравнивание, начиная сверху, и его необходимо поддерживать иначе вы получите синтаксические ошибки.

Для запуска любого playbook используйте следующую команду

  $ ansible-playbook   

Чтобы проверить playbook на наличие синтаксических ошибок

  $ ansible-playbook  - syntax-check  

Для просмотра списка хостов

  $ ansible-playbook  --list-hosts  

Создание Playbook с примерами

В этом разделе мы увидим несколько примеров того, как создавать playbooks, которые вам, возможно, придется запускать регулярно.Эти сценарии необходимо будет создать и запустить с управляющей машины.

Сохраните все нижеприведенные playbooks в файл .yml и запустите, как показано ниже.

  $ ansible-playbook filename.yml  

Пример 1: Создайте файл на целевых машинах или серверах, как указано в файле инвентаризации и группе веб-сервера, сохраните приведенный ниже код с расширением .yml и запустите playbook .

 - хосты: веб-серверы
  становятся истинными
  задачи:
  - name: Создать файл
    файл: путь = / home / ansible / niranjan.txt state = touch 

В приведенном выше примере мы использовали модуль file для создания файла.

Пример 2: Создайте каталог с режимом 775 и владельцем / группой как Ansible.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - имя: Создать каталог
    file: path = / home / ansible / niranjan state = directory mode = 775 owner = ansible group = ansible 

Пример 3: Создайте несколько каталогов. Чтобы создать несколько каталогов с помощью одной задачи, вы можете использовать оператор цикла with_items .Итак, когда вы запускаете приведенную ниже книгу, она интерпретируется как 3 разные задачи.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - name: создать несколько каталогов
  файл: путь = {{элемент}} состояние = каталог
  with_items:
  - '/ home / ansible / vn1'
  - '/ home / ansible / vn2'
  - '/ home / ansible / vn3' 

Пример 4: Создайте пользователя. Давайте посмотрим на модуль user для создания и удаления пользователей в playbook.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - имя: Создать пользователя
    user: name = niranjan password = niranjan groups = ansible shell = / bin / bash 

Пример 5: Удалить пользователя.Удалить пользователя очень просто, и для этого нужно, чтобы состояние было установлено на при отсутствии . Это эквивалентно команде userdel в Linux.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - имя: Удалить пользователя
    пользователь:
    name = niranjan state = absent remove = yes force = yes 

В приведенном выше сценарии remove = yes удалит домашний каталог, а force = yes удалит файлы в каталоге.

Пример 6: Скопируйте содержимое в файл с помощью модуля копирования.

Если вам нужно скопировать файл на целевые машины или серверы, используйте src и dest в модуле копирования.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - имя: копировать содержимое в файл
    copy: content = "Hello World Niranjan \ n" dest = / home / ansible / niranjan.txt 

Например,

 copy: src = / home / ansible / niranjan.txt dest = / tmp / niranjan.txt 

Пример 7: Заменить все экземпляры строки.

Используя модуль replace , мы можем заменить слово другим словом.Модулю замены потребуется 3 параметра, а именно «путь», «регулярное выражение» (чтобы найти конкретное слово) и «заменить» (предоставить другое слово для замены).

 - хосты: веб-серверы
  задачи:
  - name: Заменить пример
    заменить:
     путь: /home/ansible/niranjan.txt
     регулярное выражение: 'привет'
     replace: "world" 

Пример 8: Архив или ZIP-файлы и папки

Используя модуль Ansible archive , вы можете сжимать файлы или папки в формат «zip», «.gz» или «bz2».

Примечание : Файлы или папки для сжатия должны быть доступны на целевых серверах, и на них должны быть установлены пакеты tar, bzip2, gzip, zip file. У вас может быть отдельная задача playbook для установки этих пакетов.

 ---
- хосты: все
  становятся истинными
  задачи:
  - имя: Пример ZIP-файла Ansible
    архив:
     путь: /home/ansible/niranjan.txt
     dest: /home/ansible/niranjan.zip
     формат: zip 

Приведенный выше сборник программ заархивирует файл niranjan.txt в файл niranjan.zip

 ---
- хосты: все
  задачи:
  - имя: Пример нескольких файлов в формате Ansible.
  архив:
   дорожка:
    - /home/ansible/niranjan1.txt
    - /home/ansible/niranjan2.txt
   dest: /home/ansible/niranjan.zip
   формат: zip 

Приведенная выше книга для воспроизведения заархивирует несколько файлов в файл niranjan.zip.

 - хосты: все
  задачи:
  - name: Пример каталога Ansible zip
    архив:
     дорожка:
      - / home / ansible
     dest: /home/ansible/niranjan.zip
     формат: zip 

В приведенной выше книге все файлы в каталоге / home / ansible заархивируются.

Пример 9: Работа с датой и отметкой времени

Использование системной даты и отметки времени помогает в определенных целях состояния или регистрации. Факты Ansible предоставляют доступ к дате и времени удаленных или целевых серверов. Таким образом, мы можем использовать модуль отладки для печати вывода вместе с атрибутом var , как показано ниже.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - name: Пример даты и времени в Ansible
    отлаживать:
     var = ansible_date_time.date 

В приведенном выше сценарии отображается дата.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - name: Пример даты и времени в Ansible
  отлаживать:
   var = ansible_date_time.time 

В приведенной выше книге отображается время.

 - хосты: все
  задачи:
  - name: пример имени файла Ansible timestamp
    команда: touch niranjan {{ansible_date_time.date}}. log 

В приведенном выше сценарии воспроизведения будет создан динамический файл на основе текущей даты для , например, . niranjan2018-07-15.log

Пример 10: Пример переменных

Переменные используются для хранения значений. В приведенном ниже примере я объявляю переменную name со значением niranjan . Результатом будет niranjan .

 - хосты: все
  вары:
 имя: ниранджан
  задачи:
  - name: Пример базовой переменной Ansible
    отлаживать:
     msg: "{{name}}" 

Мы также можем иметь массив или список переменных, как в приведенном ниже примере .

 - хосты: все
  вары:
 имя:
   - Васудевамурти
   - Ниранджан
 задачи:
 - name: Пример массива Ansible
   отлаживать:
    msg: "{{name [1]}}" 

Индексирование массива начинается с НУЛЯ (0).Следовательно, выход в приведенном выше примере будет Niranjan.

Пример 11: Регистровые переменные

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

 - хосты: все
  задачи:
  - name: Базовый пример регистровой переменной Ansible
    оболочка: "найти * .txt"
    аргументы:
     chdir: "/ главная / Ansible"
    регистр: reg_output
  - отладка:
     var: reg_output 

Примечание: для отображения — используйте атрибут msg и для захвата любого значения используйте атрибут var в модуле — debug

Пример 12: Playbook для установки редактора vim и GIT на целевых серверах или машинах .

В этом сборнике мы использовали модуль yum для установки последней версии пакетов программного обеспечения.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - имя: Установить пакет
    yum: name = vim, git state = latest 

Пример 13: Установите сервер Apache. Сохраните приведенный ниже код и запустите playbook, как показано ниже.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - имя: Установить пакет
    yum: name = httpd состояние = присутствует
  - name: Запустить службу httpd
     service: name = httpd state = start 

Помимо модуля yum , модуль service также используется для запуска службы httpd.Задачи выполняются сверху вниз синхронно.

Пример 14: Установить JDK

Следующая инструкция автоматизирует установку JDK 8 на всех целевых машинах или серверах. JDK является предварительным условием для большинства других программных пакетов, таких как Maven или Tomcat.

 ---
- хосты: веб-серверы
  становятся истинными
  вары:
   download_url: http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm
  
  задачи:
  - имя: Загрузить файл JDK 8 RPM
    команда: "wget ​​--no-check-certificate --no-cookies --header 'Cookie: oraclelicense = accept-securebackup-cookie' {{download_url}}"
  - имя: Установить JDK 8
    команда: "rpm -ivh jdk-8u171-linux-x64.rpm "

Пример 15: Установить Maven

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

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - имя: Скачать Maven
    get_url: url = http: //www-us.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz dest = / opt / niranjan / apache-maven-3.5.3-bin.tar.gz
  - имя: Извлечь Maven
    команда: tar xvf /opt/niranjan/apache-maven-3.5.3-bin.tar.gz -C / opt / niranjan
  - name: перейти в меньший каталог
    команда: mv /opt/niranjan/apache-maven-3.5.3 / opt / niranjan / maven
  - имя: Обновить профиль
    копия: content = "export M2_HOME = / opt / niranjan / maven \ n" dest = / etc / profile.d / maven.sh
  # lineinfile используется для добавления дополнительных строк к существующим файлам.
  - lineinfile:
     путь: /etc/profile.d/maven.sh
  строка: 'экспорт PATH = $ {M2_HOME} / bin: $ {PATH}'
  - имя: Исходный профиль
    оболочка: источник / etc / profile.d / maven.sh
 

Пример 16: Установка Tomcat 8

Приведенная ниже инструкция помогает установить и запустить Tomcat 8 на целевых машинах или серверах.

Щелкните здесь, чтобы скопировать расположение ссылки на последнюю версию Tomcat 8. Щелкните здесь, чтобы просмотреть URL-адрес, содержащий tar-файл Tomcat 8, который я использовал в этой книге.

 ---
- хосты: веб-серверы
  становятся истинными
  gather_facts: нет
  задачи:
  - имя: Скачать Tomcat
    get_url: url = http: //www-us.apache.org/dist/tomcat/tomcat-8/v8.5.32 / bin / apache-tomcat-8.5.32.tar.gz dest = / home / ansible

  - name: распаковать скачанный файл tomcat
    команда: tar xvf apache-tomcat-8.5.32.tar.gz
 
  - name: переместить каталог Tomcat в меньший
    команда: mv apache-tomcat-8.5.32 tomcat
  
  - имя: изменить владельца и группу каталога Tomcat
    файл: путь = / home / ansible / tomcat owner = ansible group = ansible mode = 775 state = directory recurse = да
 
  - имя: Запустить Tomcat
    команда: nohup /home/ansible/tomcat/bin/startup.sh # Выполнять команду даже после выхода из приглашения оболочки
    становятся истинными
    стать_пользователем: доступный
 

Пример 17: pre_tasks, post_tasks и теги

Вы можете использовать pre_tasks и post_tasks для запуска определенных задач до или после выполнения основной задачи.

Обычно в playbook у вас выполняется так много задач. Что делать, если вам нужно выполнить только определенную задачу? Теги — это ответ на него. Давайте посмотрим на вариант ниже, в котором есть все 3 варианта. У него есть 2 задачи: одна с тегом, а другая без тега.

 ---
- имя: Pre, Post задачи и пример тегов
  хосты: localhost
  становятся истинными
  теги:
     - ниранджан
  pre_tasks:
  - debug: msg = "Начато задание с тегом - niranjan.
  задачи:
   - name: Собираюсь выполнить основную задачу
     debug: msg = "В настоящее время на целевом сервере"
  post_tasks:
  - debug: msg = "Задание выполнено с тегом - niranjan.- имя: Играть без тегов
    хосты: localhost
    становятся истинными
    задачи:
    - name: Команда для вывода списка файлов
      shell: ls -lrt> niranjan.txt 

Давайте посмотрим, что происходит при запуске playbook с опцией –list-tags

  $ ansible-playbook preposttagseg.yml --list-tags  

Результат, приведенный выше, выглядит лучше и понятнее. Игра №1 имеет тег niranjan, а игра №2 не имеет тегов.

Если вам нужно выполнить задачи с тегом niranjan, то команда для запуска будет следующей:

  $ ansible-playbook preposttagseg.yml --tags niranjan  

Второе воспроизведение не выполняется и файл не создается.

Пример 18: Обработчики

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

 ---
- хосты: веб-серверы
  задачи:
  - name: установить пакет apache
    ням: имя = httpd состояние = последнее
  - name: скопировать файл конфигурации httpd
    скопируйте: src = / home / ansible / httpd.final dest = / etc / httpd / conf / httpd.conf
  - name: скопировать файл index.html
   copy: src = / home / ansible / index.html dest = / var / www / html 
  # Эта служба ниже выполняется независимо от внесенных изменений или нет в какие-либо файлы конфигурации 

 - name: запуск и включение службы httpd
 service: name = httpd state =  перезапущен  включен = да 

Таким образом, нам нужно перезапустить службу только в том случае, если изменения внесены в файлы конфигурации. Обработчики предоставляют эту функцию.

Таким образом, правильным потоком с обработчиками будет наличие опции notify .

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - name: Установить пакет httpd
    ням: имя = httpd состояние = последнее
  - name: скопируйте файл конфигурации httpd
  скопируйте: src = / home / ansible / httpd.final dest = / etc / httpd / conf / httpd.conf
  - name: скопировать файл index.html
  копия: src = / home / ansible / index.html dest = / var / www / html
  уведомлять:
  - перезапустить httpd
  - name: Запустить службу httpd
  служба: имя = httpd состояние = запущено включено = да
  обработчики:
  - имя: перезапустить httpd
  service: name = httpd state = restarted 

Итак, сервер Apache будет установлен и запущен впервые.Даже если вы повторно запустите playbook без внесенных изменений, служба httpd не перезапустится, поскольку она уже запущена.

Если есть какие-либо изменения в файлах конфигурации или если файлы HTML изменены, то после запуска playbook обработчик уведомляется о перезапуске службы. Имя в разделе уведомлений и обработчиках должно совпадать. Обработчик написан как любая другая задача, но вызывается только при наличии изменений.

Ansible Vault

В большинстве случаев, когда важные или конфиденциальные данные необходимо защитить в playbook, их можно зашифровать, а не просто хранить в текстовом файле, доступном для чтения всем.Ansible Vault позволяет зашифровать playbook для защиты конфиденциальных данных.

Например, рассмотрим следующую задачу, в которой копируется конфиденциальное трудовое соглашение.

В таких случаях вам понадобится Ansible Vault.

 ---
- хосты: веб-серверы
  становятся истинными
  задачи:
  - имя: Копирование конфиденциального трудового соглашения
    copy: content = "Это конфиденциальное соглашение о работе" dest = / home / ansible / jobagreement.txt 

Ниже приведены шаги, которые необходимо выполнить, чтобы зашифровать указанные выше файлы playbook.

# 1) Создание новых зашифрованных файлов

Для создания новых зашифрованных файлов в хранилище используйте команду ansible-vault create .

  $ ansible-vault create jobagreement.yml  

После подтверждения пароля откроется окно редактирования для добавления содержимого в файл.

Ansible зашифрует содержимое, когда вы закроете файл. Вместо фактического содержимого вы увидите зашифрованные блоки.

# 2) Чтобы зашифровать существующий файл yml, используйте следующий:

  $ ansible-vault encrypt existingfile.yml  

Пароль снова будет запрошен для шифрования.

# 3) Просмотр зашифрованного файла

Используйте команду ansible-vault view , чтобы просмотреть фактическое содержимое файла.

  $ ansible-vault view jobagreement.yml  

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

# 4) Редактирование зашифрованных файлов

Если вам нужно отредактировать файл, используйте команду ansible-vault edit

  $ ansible-vault edit users.yml  

Введите пароль для редактирования файла.

# 5) Изменение пароля зашифрованных файлов

Используйте команду ansible-vault rekey , чтобы изменить пароль файла.

  $ ansible-vault rekey jobagreement.yml  

# 6) Запустите зашифрованный файл Ansible playbook

Используйте параметр –ask-vault-pass с командой ansible-playbook.

  $ ansible-playbook users.yml --ask-vault-pass  

# 7) Расшифровка зашифрованных файлов вручную

Используйте команду ansible-vault decrypt.

  $ ansible-vault decrypt jobagreement.yml  

Сводка

Итак, в этом руководстве мы рассмотрели два наиболее важных аспекта управления конфигурацией: Ansible Playbooks и защиту конфиденциальных данных с помощью Ansible Vaults.

Приведенные выше примеры playbook дали бы вам представление о том, как автоматизировать различные задачи в различных сценариях во время доставки программного обеспечения.

В нашем предстоящем руководстве мы увидим, как разбить Playbook на модули с помощью ролей Ansible, интегрировать с Jenkins и наиболее важный аспект работы с модулями Ansible S3 и EC2 для управления экземплярами AWS (создание и завершение экземпляров EC2).

PREV Tutorial | СЛЕДУЮЩИЙ Учебник

.Учебное пособие по

Ansible: установка, руководство, роли, команды

  • Home
  • Тестирование

      • Back
      • Agile Testing
      • BugZilla
      • Cucumber
      • 000 JB
      • 9000 Testing
      • Назад
      • JUnit
      • LoadRunner
      • Ручное тестирование
      • Мобильное тестирование
      • Mantis
      • Почтальон
      • QTP
      • Назад
      • Центр качества
      • SAP
      • SoapUI
      • Управление тестированием
      • TestLink
  • SAP

      • Назад
      • ABAP
      • APO
      • Начинающий
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • MMO
      • Crystal Reports
      • Заработная плата
      • Назад
      • PI / PO
      • PP
      • SD
      • SAPUI5
      • Безопасность
      • Менеджер решений
      • Successfactors
      • SAP Back Tutorials
      • 9007
          • Apache
          • AngularJS
          • ASP.Net
          • C
          • C #
          • C ++
          • CodeIgniter
          • СУБД
          • JavaScript
          • Назад
          • Java
          • JSP
          • Kotlin
          • Linux
          • Linux
          • Kotlin
          • Linux
          • js

          • Perl
          • Назад
          • PHP
          • PL / SQL
          • PostgreSQL
          • Python
          • ReactJS
          • Ruby & Rails
          • Scala
          • SQL
          • 000

          • SQL
          • 000

            0003 SQL

            000

            0003 SQL

            000

          • UML
          • VB.Net
          • VBScript
          • Веб-службы
          • WPF
      • Обязательно учите!

      .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *