= Ansible Playbook =
<<TableOfContents(2)>>
== Полезные ссылки ==
[[https://docs.ansible.com/ansible/latest/user_guide/playbooks.html|Working with Playbooks|class=" moin-https"]]
== Пример ==
Сценарий представляет собой набор ''операций''. Операция - это ''словарь'', сценарий - ''массив''.
{{{#!highlight bash
# --- запуск сценария
ansible-playbook web-tls.myl
# --- запуск сценария с установкой переменной
ansible-playbook example.yml -e token=123456
# --- получение справки по модулю `service`
ansible-doc service
}}}
Плейбук:
{{{#!highlight yaml
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service:
name: httpd
state: started
handlers:
- name: restart apache
service:
name: httpd
state: restarted
}}}
== Операции ==
||Наименование || Описание ||
========================
||`name` || Комментарий, описывающий операцию. Выводится перед запуском||
||`hosts` || Список (группа) хостов||
||`become` || Если "истина", то операция выполняется "под root-ом"||
||`vars` || Список переменных и значений||
||`vars_files` || Список файлов переменных, напр. сюда можно поместить `secrets.yml`||
== Переменные ==
Определение переменных в конфигурации сценария:
{{{
vars:
key_file: /some/file/nginx.key
cert_file: /some/file/nginx.crt
conf_file: /some/file/default
server_name: localhost
}}}
Определение переменных через файл:
{{{
# some-playbook.yml
...
vars_files:
- nginx.yml
# nginx.yml
key_file: /some/file/nginx.key
cert_file: /some/file/nginx.crt
conf_file: /some/file/default
server_name: localhost
}}}
Отладочный вывод переменных
{{{
- debug: var=myvarname
}}}
Регистрация переменных. В переменной ''login'' будет содержаться хэш с полями: ''changed, cmd, rc, stderr, stdout'' и прочими.
{{{
- name: show return value of command module
hosts: server1
tasks:
- name: capture output of id command
command: id -un
register: login
- debug: var=login
# - debug: msg="Logged in as user {{ login.stdout }}"
}}}
Параметризация `hosts`
[[https://stackoverflow.com/questions/33222641/override-hosts-variable-of-ansible-playbook-from-the-command-line|source|class=" moin-https"]]
{{{
- hosts: '{{ host }}'
tasks:
- debug: msg="Host is {{ ansible_fqdn }}"
}}}
{{{
ansible-playbook deplyment.yml -i hosts --extra-vars "host=droplets"
}}}
== Циклы ==
{{{
- name: install apt packages
apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
become: True
with_items:
- git
- libjpeg-dev
- libpq-dev
- nginx
- ...
}}}
Альтернатива через список переменных
{{{
- name: Install a list of packages
apt:
name: "{{ packages }}"
vars:
packages:
- foo
- foo-tools
}}}
== Рецепты ==
Создание символической ссылки на файл
{{{
- name: enable the nginx file
file:
src: /etc/nginx/sites-available/domain.conf
dest: /etc/nginx/sites-enabled/domain.conf
state: link
become: True
}}}
'''Отложенный ''gather_facts'''''
Может потребовать отложить запуск ''gather_facts'' в случаях, когда например на целевой системе не установлен python, но по ходу сценария требуется обратиться к переменным из фактов.
{{{
...
gather_facts: False
tasks:
- name: do raw 1
- name: do raw 2
# получения фактов и системе
- setup:
- name: do command
- ...
}}}