Syntax highlighting of d31b894 ~( devops/ansible/playbooks)
= Ansible Playbook = ## Полезные ссылки [[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 }}} == operation == '''Состав операции''' ||Наименование || Описание || ======================== ||`name` || Комментарий, описывающий операцию. Выводится перед запуском|| ||`hosts` || Список (группа) хостов|| ||`become` || Если "истина", то операция выполняется "под root-ом"|| ||`vars` || Список переменных и значений|| ||`vars_files` || Список файлов переменных, напр. сюда можно поместить `secrets.yml`|| == vars == Определение переменных в конфигурации сценария: {{{ 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" }}} == cycles == {{{ - 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 }}} == recipes == Создание символической ссылки на файл {{{ - 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 - ... }}}
