Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Errbotで得られる、ChatOps入門

252e6c31a6452aa80deb9ad0107975c7?s=47 attakei
September 06, 2017

 Errbotで得られる、ChatOps入門

PyconJP Reject Conference 2017 (https://techplay.jp/event/630686) で発表したスライドです

252e6c31a6452aa80deb9ad0107975c7?s=128

attakei

September 06, 2017
Tweet

Transcript

  1. Errbotによって得られる、 ChatOpsライフ入門 PyconJP Reject Conference 2017 株式会社ニジボックス 武居和也

  2. Agenda l自己紹介 l【PR】ニジボックスについて lChatBotとChatOps lErrbotについて lErrbotの始め方 lcommandを作る l便利な機能を知る

  3. > 自己紹介 lKazuya Takei l株式会社ニジボックス lインフラ関係 l事業外全般 lエンジニアに啓蒙する系 l@attakei lTwitter/GitLab/GitHub/Qiita

    l技術的に面白そうなら、雑に手を出すタイプ
  4. > 【PR】ニジボックスについて lNIJIBOX Co., Ltd. lhttps://nijibox.jp lリクルートグループ発の新規事業開発会社 lやってること l新規事業開発の支援 lO2Oキャンペーン受託

    l自社サービス/パッケージ l レシポ l Biztom
  5. > 雑) ChatBot と ChatOps ChatBot = Chat + Bot

    Øチャット(Chat)サービスのインターフェースを介して 自動で動作するプログラム(Bot) ⦁ 自然対話が主目的 ⦁ ChatOpsが主目的 ChatOps = Chat + Ops Øチャット(Chat)サービスをベースに システム運用(Ops)をしていくこと
  6. Errbotについて

  7. > Errbotについて lPython製のChatBotフレームワーク lhttp://errbot.io/ lhttps://github.com/errbotio/errbot lhubot, rubotyなどが類似ライブラリ lバージョン: 5.1.2 (2017/09/06現在)

    l現行バージョンはPython3.3以降のみ対応 lプラグイン方式
  8. > Errbotについて (2) Backend plugin Storage plugins User plugins

  9. > Backend plugins <Built in> •Slack •HipChat •Telegram •XMPP •IRC

    •Text •Local GUI <Community> •Gitter •Skype •Discord •Mattermost •Cisco Spark
  10. > Storage plugins <Built in or Official> •Shelf •SQL •Google

    Cloud Datastore <Community> •Redis •RethinkDB
  11. Errbotの始め方

  12. Errbotの始め方 (1) 最速で始める $ mkdir mybot $ pip install errbot

    $ errbot --init $ sed -i -e 's/CHANGE ME/@you/g' config.py $ errbot -T
  13. Errbotの始め方 (2) 構造 + config.py | + data/ | +

    plugins/ + err-example/ + example.plug + example.py <-- 設定ファイル <-- 永続データやらなんやら <-- プラグインの置き場その1
  14. Errbotの始め方 (3) l.plugファイルには、プラグインの情報を記述 lErrbot上の名前と使用するモジュール lhelpコマンド時の説明 [Core] Name = Example Module

    = example [Documentation] Description = This is a simple plugin
  15. Errbotの始め方 (ex) lGitリポジトリに.plugと対応する.pyファイルが有る なら、reposコマンドでcloneからのプラグインインス トールが可能

  16. commandを 作ってみる

  17. > Errbotのcommand Errbotのコマンドは、デコレータで定義 l@botcmd l@arg_botcmd l@re_botcmd これらを知ってれば、プラグインを作れる

  18. > @botcmd botcmdがBotPluginのメソッドを勝手にcommandと みなす 最終的に何か返せばOKなので、 出来ることの制限は(ほぼ)無い class Example(BotPlugin): @botcmd def

    hello(self, msg, args): return 'Hello {}!'.format(msg.frm) >>> !hello Hello you!
  19. > @botcmd メソッド名に _ (アンダースコア)があると、 勝手に半角スペース扱い lcloudfront_create -> cloudfront create

    lcloudfront_invalidate -> cloudfront invalidate https://github.com/attakei/errbot-cloudfront/ サブコマンドっぽい!
  20. > @arg_botcmd argparseライクな記述で、commandに引数を指定 することが可能 class Route53(BotPlugin): @arg_botcmd('zone', type=str) def route53_create(self,

    msg, zone): # Expression return 'Now creating'
  21. > template Jinja2が利用可能 import boto3 class Route53(BotPlugin): @botcmd(template='route53_list') def route53_list(self,

    msg, zone): client = boto3.client('route53') result = client.list_hosted_zones() return {'zones': result['HostedZones']} **List of zones** {% for zone in zones %} - {{ zone.Id }}: {{ zone.Name }} {% endfor %}
  22. > schedule 「定期的に◦ ◦ をさせる」「10分後に◦◦させる」 をやりたいときに from errbot import BotPlugin,

    botcmd, arg_botcmd import demo class Example(BotPlugin): @arg_botcmd('min', type=int) def noodle_timer(self, msg, min): self.start_poller(min * 60, self.finished, (msg.frm, min,)) return 'Start {} mins'.format(min) def finished(self, frm, min): self.send(frm, 'Finished') self.stop_poller(self.finished, (frm, min,))
  23. > extra lWebhook lFlow ※今回はスキップ

  24. > Repositories lhttps://github.com/errbotio/errbot lhttps://github.com/attakei/errbot-route53 lhttps://github.com/attakei/errbot-cloudfront lhttps://github.com/attakei/ lhttps://gist.github.com/attakei/6d43b8733d891b9 8a9b6a3bcf9b902a3

  25. ご清聴、ありがとうございました 日本でErrbotユーザーが増えることを願いつつ