2017年4月7日金曜日

Ruby で docker events を取得して Slack に通知してみた

概要

前回 Ruby で docker のイベント情報を取得する方法を紹介しました
今回は

環境

  • Mac OS X 10.12.3
  • docker 17.03
  • ruby 2.2.3
    • docker-api 1.33.2
    • slack-api 1.2.4

ライブラリのインストール

  • vim Gemfile
gem "docker-api"
gem "slack-api"
  • bundle install

コード

  • vim docker-status-bot.rb
require 'docker'
require 'slack'

@token = "xoxp-..."
Slack.configure {|config| config.token = @token }
Docker.options = { :read_timeout => 900 }

def post(msg)
  params = {
    :token => @token,
    :channel => "#general",
    :username => "docker-status",
    :text => msg,
    :icon_url => 'http://www.gakusmemo.com/wp-content/uploads/2016/08/115HU350-0.jpg'
  }
  puts "post"
  Slack.chat_postMessage params
end

Docker::Event.stream { |event|
  case event.status
  when "start" then
    puts "start"
    msg = "A container #{event.actor.attributes["name"]} is started"
    post msg
  when "destroy" then
    puts "destroy"
    msg = "A container #{event.actor.attributes["name"]} is destroyed"
    post msg
  else
    #puts "status: #{event.action}"
  end
}

token はこちら から取得します

特に説明するポイントはないと思います
Slack に通知するためのメソッドを作成して条件に一致したコンテナのステータスになったら、コンテナ名と共に Slack に通知するだけです

実行

  • bundle exec ruby events.rb

動作確認

docker run --rm alpine date な感じのコンテナを起動すると Slack 上に以下のように通知されると思います

docker-status-slack-notification.png

最後に

Ruby で docker events の情報を Slack に通知するところまでやってみました
今回は Slack に通知する例を紹介しましたが、IFTTT でも MQTT でも何にでも連携することは可能かなと思います

こういうのができると自動化などが捗って良いですね

0 件のコメント:

コメントを投稿