带项目的Ansible邮件回调插件

时间:2018-01-05 15:06:09

标签: plugins callback ansible

我正在运行Ansible 2.4.1.0。

我有以下但由于某种原因我没有得到预期的行为。

也许我错了或假设不正确?
我期待邮件回调插件输出失败消息(“Ansible:Alert - Rogue Port {{item}}”)。

请有人建议更改或解决方法吗?

- name: check allowed ports
  tags: ports
  fail:
    msg: "Ansible: Alert - Rogue Port {{ item }}"
  with_items: "{{ ports_var.stdout_lines }}"
  failed_when:
     - "item not in ports_lookup_var"

如下所示,生成的邮件中没有失败消息。

$> ansible-playbook playbooks/rpc.yml --limit=warp.?????.local --tags ports

TASK [check allowed ports] *****************************************************
failed: [warp.?????.local] (item=127.0.0.1:1196) => {"changed": false, "failed": true, "failed_when_result": true, "item": "127.0.0.1:1196", "msg": "Ansible: Alert - Rogue Port 127.0.0.1:1196"}
ok: [warp.?????.local] => (item=*:22)
ok: [warp.?????.local] => (item=127.0.0.1:25)
ok: [warp.?????.local] => (item=127.0.0.1:8090)
    to retry, use: --limit @/home/ansible/playbooks/rpc.retry

PLAY RECAP *********************************************************************
warp.gsoc.local            : ok=1    changed=1    unreachable=0    failed=1

收到的邮件。

Date: Thu, 14 Dec 2017 18:40:36 +0200 (SAST)
From: "Ansible: node03.??????.local" <root@ansible.?????.local>
To: root@ansible.??????.local
Subject: Failed: All items completed

Playbook: rpc.yml
Task: check allowed ports
Module: fail
Host: node03.???????.local

The following task failed:

        check allowed ports (fail)

with the following message:

        All items completed

A complete dump of the error:

        Failed: {"msg": "All items completed", "failed": true, "changed": false}

1 个答案:

答案 0 :(得分:0)

这不是邮件插件问题。这就是Ansible如何评估带循环的任务的失败。

我在这里看不到循环的原因 - 您可以使用difference filter获取“恶意端口”列表,并在该列表不为空时失败。

条件是:

ports_var.stdout_lines | difference(ports_lookup_var) | length > 0

你可以在Jinja2模板中使用表达式的第一部分来很好地格式化错误信息(然后使用循环,但在模板中);或者只是将列表转换为字符串:

fail:
  msg: "Ansible: Alert - Rogue Ports: {{ rogue_ports | join(', ') }}"
when: rogue_ports | length > 0
vars:
  rogue_ports: "{{ ports_var.stdout_lines | difference(ports_lookup_var) }}"

有专门为合规性验证而创建的工具,Ansible可能不是此类任务的最佳选择。