You are here

Playbook: vars, handlers и notify. Lesson 5

Linux: 

Ansible playbook: vars, handlers и notify. Урок 5

В данной статье коротко рассмотрим два важных момента:

  • Копирование файлов на удаленный сервер в каталог www
  • Рестарт Nginx/Apache только, если произвели копирование файла

Создаем новый файл:

  1. sudo nano 4_nginx_www.yml

Заполняем сам файл (есть комментарии внутри кода):

  1. ---
  2. - name: Vars
  3. hosts: all
  4. become: yes
  5.  
  6. vars:
  7. source_file: ./index.html
  8. destin_file: /var/www/html
  9.  
  10. tasks:
  11. # 1. Скопировать файл с текущего сервера на удаленный в www
  12. - name: Copy files in www
  13. copy: src={{ source_file }} dest={{ destin_file }}
  14. # 3. Укажем якорь для запуска handlers, по name "restart nginx" п.2
  15. notify: restart nginx
  16. # 2. Создадим handlers, будет делать рестарт, если выполним п.1
  17. handlers:
  18. - name: restart nginx
  19. service: name=nginx state=restarted

Пояснения:
vars

  • source_file: - это переменная, имя которой вы сами указываете. Внутри мы указываем ссылку на файл, который лежит в текущей директории, откуда мы производим запуск playbook.
  • destin_file: - это переменная которая указывает на каталог www (будет использоваться для удаленного сервера)

copy

  • src={{ source_file }} - что скопировать, подтянется переменная с описанием файла
  • dest={{ destin_file }} - куда скопировать, подтянется переменная с указанием пути до папки www
  • mode=0555 - права на файл

handlers

  • - name: - название, которое будет якорем
  • service: - что сделать при обращении к этому якорю

notify

  • Ставим под тем "- name: Copy files in www", после выполнения которого хотим запустить якорь "restart nginx"

Использование связки "handlers и notify", позволяет выполнять действие только в нужный момент.

Проверяем наш код:

  1. ansible-playbook 4_nginx_www.yml
  2.  
  3. PLAY [Vars] ***********************************************************************************************
  4.  
  5. TASK [Gathering Facts] ************************************************************************************
  6. ok: [debi]
  7.  
  8. TASK [Copy files in www] **********************************************************************************
  9. changed: [debi]
  10.  
  11. RUNNING HANDLER [restart nginx] ***************************************************************************
  12. changed: [debi]
  13.  
  14. PLAY RECAP ************************************************************************************************
  15. debi : ok=3 changed=2 unreachable=0 failed=0

Проверяем наш файл на удаленном сервере:

  1. # подключаемся по SSH
  2. ssh debiuser@192.168.0.6
  3. Linux debi 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2 (2019-08-28) x86_64
  4.  
  5. The programs included with the Debian GNU/Linux system are free software;
  6. the exact distribution terms for each program are described in the
  7. individual files in /usr/share/doc/*/copyright.
  8.  
  9. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  10. permitted by applicable law.
  11. Last login: Tue Oct 15 23:10:20 2019 from 192.168.0.10
  12. # Выводим содержимое файла через cat
  13. debiuser@debi:~$ cat < /var/www/html/index.html
  14. <!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
  15. <html>
  16. <head>
  17. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  18. <title>Тестовая страница</title>
  19. </head>
  20. <body>
  21. <h1>Это тег заголовка первого уровня для содержимого страницы</h1>
  22. <p>Первый абзац</p>
  23. <p>Второй абзац</p>
  24. <p>Третий абзац и т. д.</p>
  25. </body>
  26. </html>
  27. debiuser@debi:~$

Источник: http://linuxsql.ru