Ansible Playbook
Полезные ссылки
Пример
Сценарий представляет собой набор операций. Операция - это словарь, сценарий - массив.
# --- запуск сценария ansible-playbook web-tls.myl # --- запуск сценария с установкой переменной ansible-playbook example.yml -e token=123456 # --- получение справки по модулю `service` ansible-doc service
Плейбук:
- 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
- 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 - ...
