Назад | Перейти на главную страницу

Ansible не перезапускает службу правильно

Я пытаюсь перезапустить службу vsftpd с помощью обработчика на основе изменений в файле конфигурации. У меня в tasks / main.yaml есть следующий код:

- name: copy vsftpd.conf
  template: src=vsftpd.conf.j2 dest={{vsftpd_config_file}} backup=yes
  become: yes
  notify: restart vsftpd
  tags: [ 'configuration', 'package', 'vsftpd' ]

и это в handlers / main.yaml:

---
- name: restart vsftpd
  service: name={{ vsftpd_service_name }} state=restarted

переменные определены как таковые в defaults / main.yaml:

vsftpd_config_file: '/etc/vsftpd/vsftpd.conf'
vsftpd_service_name: 'vsftpd'

Обработчик вызывается, когда я запускаю playbook:

...
TASK [linux-vsftpd : copy vsftpd.conf] **********************************************************************************************************************
changed: [ftp_host]
...
RUNNING HANDLER [linux-vsftpd : restart vsftpd] *************************************************************************************************************
changed: [ftp_host]

но сервис не перезапускается:

[elliott.barrere@ftp_host ~]$ ps aux | grep vsftpd
248003150 10437 0.0  0.0 103304   896 pts/0    S+   14:23   0:00 grep vsftpd
root     51182  0.0  0.0  52120   852 ?        Ss   12:25   0:01 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Я могу перезапустить службу вручную, используя служебный скрипт и обновления метки времени, как я и ожидал:

[elliott.barrere@ftp_host ~]$ sudo service vsftpd restart
[sudo] password for elliott.barrere: 
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
[elliott.barrere@ftp_host ~]$ ps aux | grep vsftpd
root     38995  0.0  0.0  52120   852 ?        Ss   14:23   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
248003150 46878 0.0  0.0 103300   884 pts/0    S+   14:23   0:00 grep vsftpd
[elliott.barrere@ftp_host ~]$ 

Есть идеи, почему Ansible не перезапускает службу или, что еще хуже, почему не сообщает о сбое?

Ах, ну, как только я разместил вопрос, я понял, что у меня проблема: мне не хватает "стать: да" в моем обработчике:

---
- name: restart vsftpd
  become: yes
  service: name={{ vsftpd_service_name }} state=restarted

Добавление этой строки устраняет проблему, и Ansible может перезапустить службу.

По какой-то причине похоже, что сценарий инициализации vsftpd не завершается должным образом при запуске от имени пользователя без полномочий root:

[elliott.barrere@ftp_host ~]$ service vsftpd restart
Shutting down vsftpd:                                      [FAILED]
Starting vsftpd for vsftpd: 500 OOPS: config file not owned by correct user, or not a file
                                                           [FAILED]
[elliott.barrere@ftp_host ~]$ echo $?
0

Так что отследить это было трудно.