Vagrant

vagrantのprovisionerを自作する

More than 5 years have passed since last update.

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を実行すれば編集した内容で実行できました。