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. Привилегии суперпользователя понадобятся для установки пакетов.
Далее четыре последовательных шага:
- Установка веб-сервера httpd
- Его запуск и добавление в автозагрузку (за счет enabled=yes)
- Копирование файла index.html с мастера на ноды — в /var/www/html/index.html
- Сохранение правил 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.
Пример файла для установки NGINX — nginx.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 проверяет наличие файла конфигурации в следующих расположениях:
- Проверяется переменная окружения ANSIBLE_CONFIG, которая может указывать на файл конфигурации.
- ./ansible.cfg – в текущей директории
- ~/.ansible.cfg — в домашней директории
- /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 и перечислил большинство из них здесь для вашего легкого доступа. в этих статьях будет много примеров сборников, относящихся к модулям и одной теме.
- Примеры модуля архивирования — Ansible
- Примеры модуля Ansible Unarchive
- Примеры модулей оболочки
- Ansible + Vagrant Playbook для подготовки Apache
- Ansible Copy SSH Keys между удаленными серверами, пример
- Как копировать файлы между удаленными хостами с помощью ansible
- Ansible changed_when и failed_when в playbook
- Примеры руководств по модулю Ansible Command Module
- Как использовать GIT с Ansible playbook
- Примеры модулей шаблонов — Ansible
- Примеры модуля поиска — Ansible
- Как читать и обрабатывать файл JSON с помощью ansible, пример
- Примеры модулей Ansible apt
- Примеры модуля Ansible Find
- Как обрабатывать данные JSON с помощью JSON_Query ansible
- Пример сценария для Ansible AWS EC2
- Ansible async Примеры опроса
- Как загрузить файл с URL-адреса с помощью ansible playbook
- Ansible lineinfile — Как добавить, заменить, обновить строку в файле с помощью ansible
- Ansible replace module — как заменить тексты в ansible
- Как завершить задачу 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. Нужно быть очень осторожным с форматом и выравниванием, что делает его очень чувствительным.
Он содержит следующие разделы:
- Каждый playbook начинается с 3 дефисов ‘-‘
- Host section — Определяет целевые машины, на которых будет запускаться playbook.Это основано на файле инвентаризации Ansible.
- Раздел переменных — Это необязательно и может объявлять все переменные, необходимые в playbook. Мы также рассмотрим несколько примеров.
- Раздел задач — В этом разделе перечислены все задачи, которые должны быть выполнены на целевой машине. Он определяет использование модулей. У каждой задачи есть имя, которое представляет собой небольшое описание того, что задача будет делать, и будет отображаться в списке во время выполнения playbook.
Например,
Если нам нужно установить и настроить Tomcat, он будет состоять из следующих задач:
- Загрузка и установка Tomcat
- Настройка Tomcat
- Запустите Tomcat
Аналогично, еще один Пример использования Tomcat, используемого в непрерывной доставке DevOps, задачи могут быть следующими:
- Остановить приложение
- Удалить приложение
- Установить новую версию файла WAR.
- Запустить приложение
Пример формата 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
- SQL
- UML
- VB.Net
- VBScript
- Веб-службы
- WPF
000
000
0003 SQL
000
0003 SQL
000
Обязательно учите!
.