vagrantのprovisionerを自作する

  • 10
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

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