Первый Ansible playbook

Давайте создадим Ansible playbook.yml файл. Создайте его в той же папке, что и ваш Vagrantfile, и поместите в него следующий код:

---
- hosts: all
  sudo: yes
  tasks:
  - name: Ensure NTP (for time synchronization) is installed.
    yum: name=ntp state=present
  - name: Ensure NTP is running.
    service: name=ntpd state=started enabled=yes

Давайте рассмотрим, какие действия выполнит этот playbook на нашей VM.

Убедитесь, что вы находитесь в том же каталоге, что и Vagrantfile и playbook.yml, и выполните в терминале:

vagrant provision

На выходе вы должны увидеть следующее:

Ansible только что исполнил playbook, проанализировал синтаксис YAML и запустил несколько команд с помощью SSH, чтобы настроить сервер в соответствии с заданными инструкциями. Давайте пройдемся по playbook, шаг за шагом:

  • --- : Первая строка является маркером, показывающим, что остальная часть документа будет отформатирована в YAML (прочитайте руководство по началу работы на YAML).

  • - hosts: all : В этой строке указываются хосты, к которым применяется этот playbook. Здесь все работает, поскольку Vagrant использует свой собственный инвентарный файл Ansible (вместо того, который был создан ранее в /etc/ansible/hosts), который определяет Vagrant VM.

  • sudo: yes : Поскольку нам необходим привилегированный доступ для установки NFS и изменения конфигурации системы, в этой строке говорится, что Ansible будет использовать sudo для всех задач в этом playbook.

  • tasks: : Задачи после этой строки будут выполняться на всех хостах (или, в нашем случае, на одной виртуальной машине).

  • - name: Ensure NTP daemon (for time synchronization) is installed.

  • yum: name=ntp state=present : Эта команда эквивалентна запуску программы yum install ntp, но является гораздо более умной; Ansible проверит, установлен ли NTP, и, если нет, установит его. Вот как бы выглядел этот код в shell script:
  • if ! rpm -qa | grep -qw ntp; then
    yum install ntp
    fi
    
  • - name: Ensure NTP is running.

  • service: name=ntpd state=started enabled=yes: Эта конечная задача проверяет и гарантирует, что служба ntpd запущена, и устанавливает ее для запуска при загрузке системы. Сценарий shell script будет следующий:
  • # Start ntpd if it's not already running.
    if ps aux | grep -v grep | grep "[n]tpd" > /dev/null
    then
        echo "ntpd is running." > /dev/null
    else
        /sbin/service ntpd restart > /dev/null
        echo "Started ntpd."
    fi
    # Make sure ntpd is enabled on system startup.
    chkconfig ntpd on
    

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

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

---
- hosts: all
  sudo: yes
  tasks:
  - yum: name=ntp state=present
  - service: name=ntpd state=started enabled=yes

results matching ""

    No results matching ""