Glide Note

glidenote's blog

GitHubのissueやpull reqにcommentが付いたらIRC hoooks経由で通知されるように設定した

もともとmizzyさんが作ったプログラムで GitHubの業務用Repository上のイベントはIRCに通知されるようになっていたんですが、 @tnmtからGitHubのhooksだけで出来るようになったとの情報をゲットしたので早速設定してみた。

@soh335さんのブログ を見ると、下記のような形で、hooksの設定確認や設定変更が出来る模様。

1
2
curl -u username https://api.github.com/repos/:owner/:reponame/hooks
curl -u username https://api.github.com/repos/:owner/:reponame/hooks/:id -X PATCH -d '{ "add_events": ["issues"] }'

たとえば私の場合は下記のような感じで、hooksの詳細を確認

1
curl -u "glidenote" -in https://api.github.com/repos/paperboy-hogemoge/hogemoge-ops/hooks

下記のような形で返ってくる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[
  {
    "url": "https://api.github.com/repos/paperboy-hogemoge/hogemoge-puppet/hooks/367xxx",
    "test_url": "https://api.github.com/repos/paperboy-hogemoge/hogemoge-puppet/hooks/367xxx/test",
    "id": 367xxx,
    "name": "irc",
    "active": true,
    "events": [
      "push"
    ],
    "config": {
      "server": "irc.hogemoge.co.jp",
      "port": "6668",
      "room": "hogemoge-ops",
      "nick": "github",
      "branch_regexes": "",
      "nickserv_password": "",
      "password": "*************************",
      "ssl": "1",
      "notice": "1"
    },
    "last_response": {
      "code": 504,
      "status": "timeout",
      "message": "Service Timeout"
    },
    "updated_at": "2013-06-25T07:01:21Z",
    "created_at": "2012-08-02T06:59:43Z"
  }
]

idが分かったので、下記のような形で設定

1
2
3
4
curl -u "glidenote" -in https://api.github.com/repos/paperboy-hogemoge/hogemoge-ops/hooks/367xxx -X PATCH -d '{ "add_events": ["issues"] }'
curl -u "glidenote" -in https://api.github.com/repos/paperboy-hogemoge/hogemoge-ops/hooks/367xxx -X PATCH -d '{ "add_events": ["issue_comment"] }'
curl -u "glidenote" -in https://api.github.com/repos/paperboy-hogemoge/hogemoge-ops/hooks/367xxx -X PATCH -d '{ "add_events": ["commit_comment"] }'
curl -u "glidenote" -in https://api.github.com/repos/paperboy-hogemoge/hogemoge-ops/hooks/367xxx -X PATCH -d '{ "add_events": ["pull_request_review_comment"] }'

issueが作られたり、issueにコメントが付くとhooks経由でIRCに通知されるようになった。

GitHub Enterpriseでも同じように設定出来るかと思ったけど、まだ対応してなかった。 ちなみにGitHub Enterpriseの場合は下記のような感じで詳細確認が出来た。

1
curl -u "glidenote" -in https://hostname/api/v3/repos/:owner/:repos/hooks

参考

open-browser-github.vim を GitHub Enterpriseで使う

GitHubから社内のGitHub EnterpriseサーバにRepositoryを移行したときに、 open-browser-github.vimが動かなくなっていることに気づいた。

READMEを読むとGitHub Enterpriseを普通にサポートしており、 下記みたいな感じで設定出来るとのこと。

1
git config --local hub.host my.git.org

実際に私の環境では下記のように設定。

1
2
cd path/to/repo
git config --local hub.host ghe.tokyo.pb

:OpenGithubFileでファイルが開くようになって再び快適生活に戻った。

新卒研修でtmuxの話をした

新卒研修をした。 インフラ関連の話は、他のインフラメンバーが散々していたと思うので、 趣向を変えて私はターミナルマルチプレクサの話(といいつつtmuxだけ)の話を。

いつも通りというか、ほとんど実演なので、死霊だけだとあんまり参考にならないかもしれない。 次回のtmux勉強会は新卒の中から誰かやってくれると思う。

rbenvの管理にpuppet-rbenvを使うようにした

新規でRubyを使うサーバを構築中で、RPMを作らずrbenvで管理しようと思って、 いろいろ方法を模索していたら、puppet-rbenvというものを見つけて 大変便利だったので、導入の作業ログをメモとして残しておく。

他部署はビルドサーバで、rbenvを利用してインストールしたファイルを一式tar.gzで固めて、 デプロイして、展開ってのをやってて、台数が多い場合はこれが高速で良いんですが、 今回は2台だけで、ビルドサーバ用意して、tar.gzを一斉配布方式だと 用意するmanifestとdistのファイルが多くてちょっと非効率だった。

導入環境はpuppetは下記のバージョンを利用

  • puppet-server-2.6.18-3.el6.noarch
  • puppet-2.6.18-3.el6.noarch

puppet-rbenvの導入

1
2
cd path/to/puppet-module
puppet module install alup-rbenv

使ってるpuppetのバージョンのせいか、構文エラーが出たので、下記の用に修正

rbenv用のmanifestを用意

下記のようなmanifestを用意。サービス名だけ伏せて、実際に使ってるmanifestそのままなので、コピペしても動かないのでご注意ください

puppetの実行

これでpuppetを実行すると

1
/home/hogemoge-api/.rbenv

配下に指定したrbenvやらgemがインストールされる。 便利!!

急ぎで構築しないといけなかったので、rbenvのmanifest作成に時間がかからずに済んで良かった。

参考

NagiosのアラートをIRC BOT経由で制御する

IRC BOTを作って仕事をさせるようにしたの続き。 @mikedaさんと@hirose31さんのやりとりを見ていて、 Nagiosアラートをコマンドラインから停止出来ることを知った!!

@mikedaさんの上記記事を参考にせっかくなので、下記みたいに書いて、IRC BOTさんに作業をしてもらうことに。 ブラウザでもちゃんと確認するので、返り値とかチェックしてないけど。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'cinch'

bot = Cinch::Bot.new do
  configure do |c|
    c.server = "xxxxxxxxxxxxxxx"
    c.ssl.use = true
    c.port = 6668
    c.password = 'xxxxxxxxxxxxx'
    c.channels = ["#xxxxxxxxxxx"]
    c.nick = 'nagios-cli-bot'
    c.realname = 'nagios-cli-bot'
    c.user = 'nagios-cli-bot'
  end

  # disable nagios alert
  on :message, /^disable (.+)/ do |m, query|
    system("echo \"[$(date +%s)] DISABLE_HOST_SVC_NOTIFICATIONS;#{query}.hogemoge.jp\" > /var/nagios/rw/nagios.cmd")
    system("echo \"[$(date +%s)] DISABLE_HOST_NOTIFICATIONS;#{query}.hogemoge.jp\" > /var/nagios/rw/nagios.cmd")
    system("echo \"[$(date +%s)] DISABLE_HOST_SVC_NOTIFICATIONS;#{query}.hogemoge.lan\" > /var/nagios/rw/nagios.cmd")
    system("echo \"[$(date +%s)] DISABLE_HOST_NOTIFICATIONS;#{query}.hogemoge.lan\" > /var/nagios/rw/nagios.cmd")
    m.reply "DISABLE NOTIFICATIONS #{query}.hogemoge.jp and #{query}.hogemoge.lan"
  end

  # enable nagios alert
  on :message, /^enable (.+)/ do |m, query|
    system("echo \"[$(date +%s)] ENABLE_HOST_SVC_NOTIFICATIONS;#{query}.hogemoge.jp\" > /var/nagios/rw/nagios.cmd")
    system("echo \"[$(date +%s)] ENABLE_HOST_NOTIFICATIONS;#{query}.hogemoge.jp\" > /var/nagios/rw/nagios.cmd")
    system("echo \"[$(date +%s)] ENABLE_HOST_SVC_NOTIFICATIONS;#{query}.hogemoge.lan\" > /var/nagios/rw/nagios.cmd")
    system("echo \"[$(date +%s)] ENABLE_HOST_NOTIFICATIONS;#{query}.hogemoge.lan\" > /var/nagios/rw/nagios.cmd")
    m.reply "ENABLE NOTIFICATIONS #{query}.hogemoge.jp and #{query}.hogemoge.lan"
  end

end

bot.start

disable web001でアラートを停止、enable web001でアラートを再開出来るようになった。

稼働してみた後によく考えてみると、気軽に監視を停止出来るのは結構危険なので、 常駐はさせずにメンテの時にアラートを一斉に停止させたり、再開させる作業があるので、そのときだけ働いてもらうようにした。

ここ2週間くらいメンテで使ってるけどなかなか便利。 よく使うようならwakeup nagios-cli-botとかsleep nagios-cli-botでIRC BOTの稼働を制御するようにしてみよう。