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

More Decks by attakei

Other Decks in Programming

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ユーザーが増えることを願いつつ