ansible - ansible处理程序发生错误后如何运行命令

标签 ansible

我有一个简单的剧本,它复制 nginx 服务器的一些配置文件,然后发出 service nginx reload 命令:

---
- hosts: mirrors
  tasks:
    - name: Installs nginx web server
      apt: pkg=nginx state=installed update_cache=true
      notify:
        - start nginx

    - name: Copy vhost file
      copy: src=vhost/test.vhost dest=/etc/nginx/sites-available/ mode=0644

    - name: Symlink vhost file to enabled sites
      file: src=/etc/nginx/sites-available/test.vhost dest=/etc/nginx/sites-enabled/test.vhost state=link
      notify:
        - reload nginx

  handlers:
    - name: start nginx
      service: name=nginx state=started

    - name: reload nginx
      service: name=nginx state=reloaded

现在的问题是,test.host 文件可能包含错误,并且 nginx 无法正确重新加载。如果发生这种情况,我想运行命令 systemctl status nginx.service 并在 ansible playbook 执行时查看它的输出。如何添加这个“错误处理程序”?

最佳答案

如果处理程序输出告诉您有关失败的信息,您可以使用 ignore_errorsregister 关键字进行一些不错的错误处理。

将处理程序设置为不结束失败并在返回错误代码时结束播放,而是将输出注册为变量:

handlers:
  - name: reload nginx
    service: name=nginx state=reloaded
    ignore_errors: True
    register: nginx_reloaded

然后回到任务部分,调用flush_handlers来执行所有排队的处理程序,否则这些处理程序将等到播放结束。添加一个任务,当您的 nginx_reloaded 变量具有非零返回代码时,向服务器询问 Nginx 的状态,然后使用调试模块打印该信息:

- name: Symlink vhost file to enabled sites
  file: src=/etc/nginx/sites-available/test.vhost dest=/etc/nginx/sites-enabled/test.vhost state=link
  notify:
    - reload nginx

- meta: flush_handlers

- name: Get the Nginx service status if it failed to failed.
  command: "systemctl status nginx.service"
  register: nginx_status
  when: nginx_reloaded.rc != 0

- debug: var=nginx_status
  when: nginx_reloaded.rc != 0

当然,更好的解决方案是修复配置文件中的这些错误 - 与通过 SSH 连接到目标主机进行检查相比,通过 Ansible 输出找出它们存在局限性。

关于ansible - ansible处理程序发生错误后如何运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382231/

相关文章:

amazon-web-services - 删除后 Kubernetes 集群仍在运行

ansible - 当条件 Ansible 无法使用 OR 时?

ansible - 我如何通过 Ansible 在气隙系统上安装 snap 包

ansible - 有没有办法在 Ansible 2.9 中将十进制字符串转换为十六进制字符串?

docker - 如何使用ansible修改tomcat docker容器的配置文件?

amazon-ec2 - Ansible EC2 动态库存最低 IAM 策略

ansible - Ansible 中的 when 条件出现错误

amazon-web-services - 追加/编辑 aws 路由表条目

python - Jinja2:格式化+加入列表的项目

ansible - padding/ljust 使用 ansible 模板和 jinja