如何在Ansible Tower作业完成后发送作业输出至邮箱?
在Ansible Tower中实现作业完成后发送邮件通知
当然可以实现!在Ansible Tower里有几种不同的方式来搞定作业完成后的邮件通知,比你现在每个任务发邮件要省心多了,我给你拆解下最常用的几个方法:
方法一:利用Tower内置的通知功能(最推荐)
这是最简单直接的方式,不需要修改任何Playbook,完全通过Tower的界面配置就能实现:
- 第一步:创建邮件通知模板
进入Tower界面,找到「Notifications」菜单,点击「Add」按钮,通知类型选择「Email」。然后填写SMTP服务器地址、端口、发件人邮箱、收件人邮箱(支持多个),如果需要SMTP认证的话填上用户名和密码,最后保存这个模板。 - 第二步:给作业模板绑定通知
打开你需要配置的作业模板(Job Template),切换到「Notifications」标签页,在「On Success」(作业成功时)、「On Failure」(作业失败时)甚至「On Timeout」(作业超时时)选项里,添加刚才创建的邮件通知模板。保存后,每次这个作业模板执行完成,Tower就会自动发送包含作业状态、执行时间、输出链接的邮件给指定收件人。
方法二:用Tower工作流串联作业与邮件任务
如果你需要自定义邮件内容(比如包含作业的具体输出细节),可以用工作流来实现:
- 第一步:创建一个专门发送通知的作业模板
写一个极简的Playbook,只包含mail模块任务,比如:
这里的--- - name: 发送作业完成通知 hosts: localhost tasks: - name: 发送邮件 mail: subject: "Ansible作业 {{ job_name }} 执行完成" body: | 作业名称: {{ job_name }} 执行状态: {{ job_status }} 作业链接: {{ job_url }} to: your-team@example.com from: tower-alerts@example.com smtp_server: smtp.example.comjob_name、job_status、job_url都是Tower自动提供的内置变量,直接就能用。把这个Playbook上传到Tower,创建对应的作业模板。 - 第二步:构建工作流模板
新建一个工作流模板,先添加你原来的作业模板,再添加刚才创建的邮件作业模板,设置执行顺序为「串行」(即原作业完成后再执行邮件任务)。这样就能保证原作业全部执行完毕后,才会发送自定义内容的邮件。
方法三:在Playbook内用always块实现(适合单个Playbook场景)
如果你的需求是在Playbook层面控制,不管任务成功失败都发送邮件,可以用block+always块来包裹任务:
--- - name: 主作业任务 hosts: all tasks: - block: # 这里放你的所有作业任务 - name: 执行核心任务1 command: echo "完成任务1" - name: 执行核心任务2 command: echo "完成任务2" always: - name: 作业完成后发送邮件 delegate_to: localhost mail: subject: "Playbook {{ ansible_play_name }} 执行完成" body: | 作业整体状态: {{ ansible_playbook_status }} 执行节点组: {{ ansible_inventory_sources }} to: your-email@example.com from: playbook-alerts@example.com smtp_server: smtp.example.com
这个方法会在所有任务执行完毕(不管成功还是失败)后,在本地主机执行邮件发送任务,避免每个节点都发邮件的问题。
内容的提问来源于stack exchange,提问作者Smily
相关产品推荐
相关产品推荐

