shimgo
7/15/2017 - 11:09 AM

Vagrantにフックを追加する

Vagrantにフックを追加する

vagrant-notifyのソースを参考にした。
まずはアクションの定義。初期化とcallが必須。 callの最後で受け取ったアプリケーションの処理を継続するためにcallを呼ぶ必要がある。

class SayHelloAction
  def initialize(app, env)
    @app = app
  end

  def call(env)
    p "helloooo"
    @app.call(env)
  end
end

次にプラグインの定義。
action_hookに処理を追加する。第2引数は:provisioner_run以外にもいろいろあってタイミングを指定できる。詳しくは以下を参照。 https://www.vagrantup.com/docs/plugins/action-hooks.html ブロック内では:run_provisionnerアクションの後にSayHelloActionのフックを追加している。
nameが無いと動かないので注意。

class Plugin < Vagrant.plugin('2')
  name 'say hello'
  action_hook :say_helo, :provisioner_run do |hook|
    hook.after :run_provisioner, SayHelloAction
  end
end

上記はVagrantfile内に書いても良い。