Плейбуки
Плейбуки совсем не похожи на ad-hoc команды из прошлой части. Если модули Ansible это инструменты, то плейбуки - это инструкции по их использованию. Они подходят для выкатывания сложных конфигураций и оркестрации хостов. В отличие от разовых команд, плейбуки принято хранить в системе контроля версий.
Синтаксис
Плейбуки пишут на YAML. В мануале предлагается установить и использовать утилиты для валидации, типа ansible-lint, но для начала хватит простой подстветки. Отличный источник для вдохновения и примеров - ansible-examples.
Плейбук состоит из набора шагов, которые должны привести хост к состоянию его конечному состоянию, то есть к его роли. В мануале пишут про отсылки к спортивным играм, отсюда и термины. В каждом шаге может быть несколько задач.
Если взять часть команд из 2-ой статьи и собрать их, то получится:
---
- hosts: debs
tasks:
- name: check terminal setup
shell:
cmd: echo $TERM
- name: install acme package
apt:
name: acme
state: present
update_cache: true
- name: install sudo package
apt:
name: sudo
state: present
- name: setup biozz user
user:
name: biozz
groups: sudo
password: "{{ 'test' | password_hash('sha512') }}"
Сохраним это в playbook.yml
и запустим (убрал повторяющийся вывод):
ansible-playbook playbook.yml
PLAY [debs] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [deb1]
ok: [deb2]
TASK [xxx] ****************************************************
changed: [deb1]
changed: [deb2]
PLAY RECAP *********************************************************************
deb1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
deb2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Если в последней команде оставить без двойных кавычек, то получим ошибку. Что сразу же говорит о том, что есть шаблонные выражения и надо не забывать их экранировать кавычками.
ERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:
JSON: Expecting value: line 1 column 1 (char 0)
Syntax Error while loading YAML.
found character that cannot start any token
The error appears to be in '/Users/biozz/other/ansible/playbook.yml': line 20, column 29, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
groups: sudo
password: {{ 'test' | password_hash('sha512') }}
^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:
with_items:
- {{ foo }}
Should be written as:
with_items:
- "{{ foo }}"
Мы уже довольно много команд выполнили под root-ом, что считается небезопасным подходом. А у нас уже есть пользователь, поэтому можно переключиться на него для выполнения команд:
---
- hosts: debs
remote_user: biozz
become: yes
become_method: sudo
https://docs.ansible.com/ansible/latest/user_guide/playbooks.html#working-with-playbooks
https://github.com/ansible/ansible-examples/tree/master/