Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

> 自己紹介 lKazuya Takei l株式会社ニジボックス lインフラ関係 l事業外全般 lエンジニアに啓蒙する系 l@attakei lTwitter/GitLab/GitHub/Qiita l技術的に面白そうなら、雑に手を出すタイプ

Slide 4

Slide 4 text

> 【PR】ニジボックスについて lNIJIBOX Co., Ltd. lhttps://nijibox.jp lリクルートグループ発の新規事業開発会社 lやってること l新規事業開発の支援 lO2Oキャンペーン受託 l自社サービス/パッケージ l レシポ l Biztom

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Errbotについて

Slide 7

Slide 7 text

> Errbotについて lPython製のChatBotフレームワーク lhttp://errbot.io/ lhttps://github.com/errbotio/errbot lhubot, rubotyなどが類似ライブラリ lバージョン: 5.1.2 (2017/09/06現在) l現行バージョンはPython3.3以降のみ対応 lプラグイン方式

Slide 8

Slide 8 text

> Errbotについて (2) Backend plugin Storage plugins User plugins

Slide 9

Slide 9 text

> Backend plugins •Slack •HipChat •Telegram •XMPP •IRC •Text •Local GUI •Gitter •Skype •Discord •Mattermost •Cisco Spark

Slide 10

Slide 10 text

> Storage plugins •Shelf •SQL •Google Cloud Datastore •Redis •RethinkDB

Slide 11

Slide 11 text

Errbotの始め方

Slide 12

Slide 12 text

Errbotの始め方 (1) 最速で始める $ mkdir mybot $ pip install errbot $ errbot --init $ sed -i -e 's/CHANGE ME/@you/g' config.py $ errbot -T

Slide 13

Slide 13 text

Errbotの始め方 (2) 構造 + config.py | + data/ | + plugins/ + err-example/ + example.plug + example.py <-- 設定ファイル <-- 永続データやらなんやら <-- プラグインの置き場その1

Slide 14

Slide 14 text

Errbotの始め方 (3) l.plugファイルには、プラグインの情報を記述 lErrbot上の名前と使用するモジュール lhelpコマンド時の説明 [Core] Name = Example Module = example [Documentation] Description = This is a simple plugin

Slide 15

Slide 15 text

Errbotの始め方 (ex) lGitリポジトリに.plugと対応する.pyファイルが有る なら、reposコマンドでcloneからのプラグインインス トールが可能

Slide 16

Slide 16 text

commandを 作ってみる

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

> @botcmd botcmdがBotPluginのメソッドを勝手にcommandと みなす 最終的に何か返せばOKなので、 出来ることの制限は(ほぼ)無い class Example(BotPlugin): @botcmd def hello(self, msg, args): return 'Hello {}!'.format(msg.frm) >>> !hello Hello you!

Slide 19

Slide 19 text

> @botcmd メソッド名に _ (アンダースコア)があると、 勝手に半角スペース扱い lcloudfront_create -> cloudfront create lcloudfront_invalidate -> cloudfront invalidate https://github.com/attakei/errbot-cloudfront/ サブコマンドっぽい!

Slide 20

Slide 20 text

> @arg_botcmd argparseライクな記述で、commandに引数を指定 することが可能 class Route53(BotPlugin): @arg_botcmd('zone', type=str) def route53_create(self, msg, zone): # Expression return 'Now creating'

Slide 21

Slide 21 text

> 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 %}

Slide 22

Slide 22 text

> 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,))

Slide 23

Slide 23 text

> extra lWebhook lFlow ※今回はスキップ

Slide 24

Slide 24 text

> 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

Slide 25

Slide 25 text

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