iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 16
1

現代 IT 人一定要知道的 Ansible 自動化組態技巧

16. Ansible 如何發送 notification 到 Slack?

Slack 是當前火紅的線上通訊服務,在台灣業界 [^1] 也有許多開發團隊在使用。除了可以用它與內部成員溝通外,透過發送通知訊息 (notification)、聊天機器人 (Chatbot) 等的資訊整合後,更發展出 ChatOps [^2] 一詞來形容這樣子的生態系。這次就讓凍仁分享一下 Ansible 整合 Slack 的小小心得。

automate_with_ansible_practice-21.jpg
▲ 上圖為 Ansible 發送 notification 到 Slack 的範例。

slack module 是什麼?

slack module 是用來發送訊息到 Slack 上的通知模組 (notification modules),並藉由整合 Slack Incoming Webhook 功能進行使用。

Ansible 怎麼整合 Slack?

  1. 撰寫發送 notification 到 Slack 的 Playbook:請依步驟 2 取得的參數設定 slack_domain, slack_tokenslack_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: "{{ slack_domain }}"
            token: "{{ slack_token }}"
            username: "ansible"
            channel: "{{ slack_channel }}"
            color: "normal"
            msg: "Send a notification with Ansible !"
    
    # vim: ft=ansible :
    
  2. 取得 Slack 的相關設定。

    1. 登入 Slack 後,進入 Manage (管理) 介面。

      2016-12-16-ansible-slack-1.png

    2. 進入 Custom Integrations (自訂整合),並找到 Incoming WebHooks。

      2016-12-16-ansible-slack-2.png

    3. 點擊 Add Configuration 新增一個 WebHooks 給 Ansible 使用。

      2016-12-16-ansible-slack-3.png

    4. 新增好 WebHooks 後的畫面如下。

      2016-12-16-ansible-slack-4.png

    5. 將頁面往下捲至 Integration Settings (整合設定)

      2016-12-16-ansible-slack-5.png

    6. 設定 Post to Channel (預設發送頻道) :可先用 @username 進行測試。

    7. 取得 Webhook URL:以底下的 URL 為例,其中的 CCCCCCCCCCCCCCCCCCCCCCCC 即為 slack module 中的 token,也就是 send_notification_to_slack.yml Playbook 裡所缺少的 slack_token

      https://hooks.slack.com/services/AAAAAAAAA/BBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC
      
    8. 最後上傳一張 Ansible 的圖示以利辨識。

      2016-12-16-ansible-slack-6.png

  3. 執行 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
    
  4. 在 Slack 接收從 Ansible 送出的 notification。

    2016-12-16-ansible-slack-7.png

  5. 現在我們的成功把 Ansible 和 Slack 整合好了!

順帶一提,若不想在每個 Playbooks 都重複宣告 slack_domain, slack_tokenslack_channel 等變數,可使用「14. 怎麼使用 Ansible 的 Template
系統?
」一章提到的 vars_files 進行改寫。

後語

讓 Ansible 發送 notifications 到 Slack 後,我們除了可以提醒自己有哪些 Playbooks 完成外,更可便於其它成員追蹤相關任務的進度和執行狀態等。

相關連結

[^1]: 凍仁之前任職的 commandp Inc. 即為 Slack 的商業用戶之一。
[^2]: ChatOps 一詞凍仁曾在「03. 怎麼部署 Ansible 環境?」一章有提過,相信已有不少公司會藉由 Slack 這類的服務進行協同作業。


上一篇
15. 怎麼在 Playbooks 使用 Handlers?
下一篇
17. Ansible 如何發送 notification 到 HipChat?
系列文
現代 IT 人一定要知道的 Ansible 自動化組態技巧31

1 則留言

0
凍仁翔
iT邦新手 4 級 ‧ 2016-12-17 00:04:41

先寫個 30%,接下來洗個澡再奮鬥了,話說台北怎麼可以這麼冷啊!/images/emoticon/emoticon68.gif

是該來寫 Day17 的文章了!我們晚點見!XD

我要留言

立即登入留言