プロビジョニングの終了をiOS/Androidに通知するVagrantのpluginつくった

tcnksm/vagrant-pushover

Vagrantのプロビジョニングはものすごく時間がかかる.その時間を使って美味しい珈琲を淹れたい.でも,席を外したらいつプロビジョニングが終わったかわからない.プロビジョニングの終了を告げる通知が欲しい.

少し前からPushoverというiOS/Androidアプリで遊んでいる.シンプルなHTTP POSTを介してアプリに通知が送れる(詳しくは,“Pushover使ってみた”に書いた).メールで通知でもよかったんだけど,せっかくなので,Pushoverに通知が送れるVagrantプラグインを作った.

以下のような通知を受け取ることができる.

インストール

Vagrantのプラグインとしてインストールする.

$ vagrant plugin install vagrant-pushover

使い方

以下のようにVagrantfileに設定を記述するだけ.

Vagrant.configure("2") do |config|
    config.pushover.set do |p|
        p.user  = "YOUR KEY"
        p.token = "YOUR APP TOKEN"
    end
end                        

userはPushoverにサインアップ後にDashboardから,tokenはアプリケーションの登録をすると取得できる.

既存コマンドのフックとして記述してあるので,他に特別なことをする必要はなく,いつも通りにコマンドを実行するだけでよい.通知が行われるのは,プロビジョニングが行われる以下の場合のみ.

  • vagrant up
  • vagrant up --provision
  • vagrant reload --provision
  • vagrant provision

ただしvagrant upは,マシンの状態が:runningでない場合,プロビジョニングが一度も行われていない場合に通知が行われる.

他にも,通知のメッセージのタイトルや本文,通知音もVagrantfileの設定から行うことができる.API通りに実装してあるので,詳しくは公式ドキュメントを参照してください.

Vagrantfileを共有したい場合

tokenuserがベタ書きされているのはよろしくないので,別ファイルとして記述できるようにもしてある.

以下のコマンドで設定ファイルを吐き出す.

$ vagrant pushover-init

設定ファイルは,.vagrant/pushover.rbとして吐き出されるので,中身を編集してtokenuserを記述する.設定の読み込みを有効にするには,Vagrantfileを以下のように記述するだけ.

Vagrant.configure("2") do |config|
    config.pushover.read_key
end

以上.

Vagrantのプラグインを作るのはとても簡単(実際2日もかかってない).また,プラグインを作ることでVagrantの内部でどのようなことが行われているのか大分理解できる.作成には,“実践Vagrant”を参考にした.公式ドキュメントも充実している.すべてのVagrantのコマンドはプラグインとして実装されているので,作るときは参考になる.Mitchell Hashimotoさんが自らつくったプラグインvagrant-awsも参考になった.プラグインの作り方は,そのうちまとめる.

Pushoverを使ってるひとにしか使えないかなりニッチなプラグインだけど,プロビジョニング中に美味しい珈琲を淹れたいひとは是非使ってください.バグなどはGithubのissueか@deeeetまでお願いします.

参考