Ansible 发送 notification 到 Slack
Slack 是当前火红的线上通讯服务,在台湾业界 1 也有许多开发团队在使用。除了可以用它与内部成员沟通外,透过发送通知讯息 (notification)、聊天机器人 (Chatbot) 等的资讯整合后,更发展出 ChatOps 2 一词来形容这样子的生态系。这次就让冻仁分享一下 Ansible 整合 Slack 的小小心得。
▲ 上图为 Ansible 发送 notification 到 Slack 的范例。
slack module 是什么?
slack module 是用来发送讯息到 Slack 上的通知模组 (notification modules),并借由整合 Slack Incoming Webhook 功能进行使用。
Ansible 怎么整合 Slack?
撰写发送 notification 到 Slack 的 Playbook:请依步骤 2 取得的参数设定
slack_domain
,slack_token
和slack_channel
等变数,若要发送 notification 到某个 Channel,可改用#channel_name
。$ vi send_notification_to_slack.yml --- - name: Send notification to Slack hosts: localhost vars: slack_domain: 'example.slack.com' slack_token: 'xxxxxxxxxxxxxxxxxxxxxxxx' slack_channel: "@username" post_tasks: - name: send notification to slack slack: domain: "" token: "" username: "ansible" channel: "" color: "normal" msg: "Send a notification with Ansible !" # vim: ft=ansible :
取得 Slack 的相关设定。
登入 Slack 后,进入 Mamage (管理) 界面。
进入 Custom Integrations (自定整合),并找到 Incoming WebHooks。
点击 Add Configuration 新增一个 WebHooks 给 Ansible 使用。
新增好 WebHooks 后的画面如下。
将页面往下卷至 Integration Settings (整合设定) 。
设定 Post to Channel (预设发送频道) :可先用 @username 进行测试。
取得 Webhook URL:以底下的 URL 为例,其中的
CCCCCCCCCCCCCCCCCCCCCCCC
即为 slack module 中的token
,也就是 send_notification_to_slack.yml Playbook 里所缺少的slack_token
!https://hooks.slack.com/services/AAAAAAAAA/BBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC
最后上传一张 Ansible 的图示以利辨识。
执行 Playbook。
$ ansible-playbook send_notification_to_slack.yml PLAY [Send notification to Slack] ********************************** TASK [setup] ******************************************************* ok: [localhost] TASK [send notification to slack] ********************************** ok: [localhost] PLAY RECAP ********************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0
在 Slack 接收从 Ansible 送出的 notification。
现在我们的成功把 Ansible 和 Slack 整合好了!
顺带一提,若不想在每个 Playbooks 都重复宣告
slack_domain
,slack_token
和slack_channel
等变数,可使用「Ansible 使用 Template 系统」一章提到的vars_files
进行改写。
后话
让 Ansible 发送 notifications 到 Slack 后,我们除了可以提醒自己有哪些 Playbooks 完成外,更可便于其它成员追踪相关任务的进度和执行状态等。
相关连结
1. 冻仁之前任职的 commandp Inc. 即为 Slack 的商业用户之一。 ↩
2. ChatOps 一詞凍仁曾在「怎么部署 Ansible 环境?」一章有提过,相信已有不少公司会借由 Slack 这类的服务进行协同作业。 ↩