需要了解有关 ansible 中的处理程序的更多信息

需要了解有关 ansible 中的处理程序的更多信息

以下是我在 nginx 角色中承担的任务

# tasks file for nginx
- name: Backup and update nginx configuration file
  template:
     src: templates/proxy.conf.j2
     dest: "{{ nginx_conf }}"
     backup: true
     owner: root
     group: root
     mode: 0644

- name: Running nginx -t to validate the config
  shell: 'nginx -t'
  register: command_output
  become: true
  notify: Reload nginx

- debug:
   var: command_output.stderr_lines

我有一个名为 handlers 的单独目录,其中包含以下内容。

- name: Reloading nginx service only if the syntax is ok
  systemd:
    name: nginx.service
    state: reloaded'
    when: command_output.stderr | regex_search("syntax is ok")

不确定变量 command_output 是否会被处理程序读取。

答案1

不会,因为command_output在处理程序中不存在。您可以修改检查任务的错误处理,然后定义“改变”validate符合您的条件,但在这种情况下,我只会使用template任务并跳过其余部分。

- name: Backup and update nginx configuration file
  template:
     src: templates/proxy.conf.j2
     dest: "{{ nginx_conf }}"
     backup: true
     owner: root
     group: root
     mode: 0644
     validate: nginx -t
     notify: Reload nginx

注意:需要将处理程序的名称更改为Reload nginx才能使其正常工作。

相关内容