11
9

More than 5 years have passed since last update.

vagrantのprovisionerを自作する

Last updated at Posted at 2013-09-09

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

11
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9