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

Errbotで得られる、ChatOps入門

attakei
September 06, 2017

 Errbotで得られる、ChatOps入門

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

attakei

September 06, 2017
Tweet

More Decks by attakei

Other Decks in Programming

Transcript

  1. > 雑) ChatBot と ChatOps ChatBot = Chat + Bot

    Øチャット(Chat)サービスのインターフェースを介して 自動で動作するプログラム(Bot) ⦁ 自然対話が主目的 ⦁ ChatOpsが主目的 ChatOps = Chat + Ops Øチャット(Chat)サービスをベースに システム運用(Ops)をしていくこと
  2. > Backend plugins <Built in> •Slack •HipChat •Telegram •XMPP •IRC

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

    Cloud Datastore <Community> •Redis •RethinkDB
  4. Errbotの始め方 (1) 最速で始める $ mkdir mybot $ pip install errbot

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

    plugins/ + err-example/ + example.plug + example.py <-- 設定ファイル <-- 永続データやらなんやら <-- プラグインの置き場その1
  6. > @botcmd メソッド名に _ (アンダースコア)があると、 勝手に半角スペース扱い lcloudfront_create -> cloudfront create

    lcloudfront_invalidate -> cloudfront invalidate https://github.com/attakei/errbot-cloudfront/ サブコマンドっぽい!
  7. > 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 %}
  8. > 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,))