vagrantのfabric provisionerを自作してみたので開発手順を書いておきます。
hnakamur/vagrant-fabric-provisioner
試行錯誤しながら作ったので、もっとよい方法があるかもしれません。その場合はぜひご指摘お願いします。
ひな形作成
gemの名前を指定してbundle gemを実行します。
$ bundle gem vagrant-fabric-provisioner
create vagrant-fabric-provisioner/Gemfile
create vagrant-fabric-provisioner/Rakefile
create vagrant-fabric-provisioner/LICENSE.txt
create vagrant-fabric-provisioner/README.md
create vagrant-fabric-provisioner/.gitignore
create vagrant-fabric-provisioner/vagrant-fabric-provisioner.gemspec
create vagrant-fabric-provisioner/lib/vagrant/fabric/provisioner.rb
create vagrant-fabric-provisioner/lib/vagrant/fabric/provisioner/version.rb
vagrant-fabric-provisioner/lib/vagrant/fabric/provisioner.rb
を
vagrant-fabric-provisioner/lib/vagrant-fabric-provisioner.rb
に、
vagrant-fabric-provisioner/lib/vagrant/fabric/provisioner/
を
vagrant-fabric-provisioner/lib/vagrant-fabric-provisioner/
にリネームします。これをしないとプラグインが実行されませんでした。
実装
ビルトインのprovisionerのソース
https://github.com/mitchellh/vagrant/tree/master/plugins/provisioners
と
親クラス
https://github.com/mitchellh/vagrant/tree/master/lib/vagrant/plugin/v2
のソースを参照しつつ、実装します。
プラグインのgemのビルド
gemspecファイルを指定してgem buildを実行します。
$ gem build vagrant-fabric-provisioner.gemspec
WARNING: description and summary are identical
Successfully built RubyGem
Name: vagrant-fabric-provisioner
Version: 0.0.2
File: vagrant-fabric-provisioner-0.0.2.gem
プラグインのgemのインストール
$ vagrant plugin install vagrant-fabric-provisioner-0.0.2.gem
Installing the 'vagrant-fabric-provisioner-0.0.2.gem' plugin. This can take a few minutes...
Installed the plugin 'vagrant-fabric-provisioner (0.0.2)'!
プロビジョン実行
Vagrantfileには予め自分のprovisionerを実行するように設定しておきます。例えばvagrant-fabric-provisionerの場合はこんな感じです。
Vagrant.configure("2") do |config|
config.vm.box = "centos6.4"
config.vm.network :private_network, ip: "192.168.33.28"
config.vm.provision :fabric do |s|
#s.uses_dynamic_port = true
#s.args = ['-D', '--colorize-errors', '-H', '127.0.0.1', 'show_hostname']
s.uses_dynamic_port = false
s.args = ['-D', '--colorize-errors', '-H', '192.168.33.28', 'show_hostname']
end
end
対象のVMは予め予めvagrant upで起動しておきます。
Vagrantfileのあるディレクトリで以下のコマンドを実行すればprovisionが走ります。
$ vagrant provision
試行錯誤
プラグインは~/.vagrant.d/gems/gems/以下にインストールされています。
この例では~/.vagrant.d/gems/gems/vagrant-fabric-provisioner-0.0.2/です。
このディレクトリ内のprovisionerのrubyソース(この例ではlib/vagrant-fabric-provisioner/provisioner.rb)を編集して、vagrant provision
を実行すれば編集した内容で実行できました。