最近、Vagrantのprovisionerを使ってパッケージの作成などをいくつか行っているのですが、その際にVMを落とし忘れ、ホストしてるマシンの余計なリソースを使ってしまっていることがあります。
なので、provisionerでサーバをdestroy/haltするやつを書いてみました。
rubygems: https://rubygems.org/gems/vagrant-destroy-provisioner
github: https://github.com/kazeburo/vagrant-destroy-provisioner
勝手にshutdownしてイメージを破棄するデモ動画です。
インストールはvagrant pluginコマンドから行います。
$ vagrant plugin install vagrant-destroy-provisioner
使い方はこんな感じ
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "CentOS-6.4-x86_64-v20131103"
config.vm.box_url = "http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20131103.box"
config.vm.provision "shell", inline: "echo 'Hello Provisioner'"
config.vm.provision "destroy"
end
VMのshutdownだけをするモードも一応サポートしていて
config.vm.provision "destroy", destroy: false
とすると、vagrant halt相当のみ実行されます。destroyオプションのデフォルトはtrueです。
Docker
Provisionerを使う場合は、destroy: false
とrun: "always"
を使うと多分便利。先日のPerl-Buildのfatpackの例だと
config.vm.provision "docker", run: "always" do |d|
d.build_image "/perl-build/author",
args: "-t perl-build"
end
config.vm.provision "shell", run: "always",
inline: "docker run -v /perl-build:/perl-build perl-build"
config.vm.provision "destroy", destroy: false, run: "always"
となります。毎度 vagrant up に —provision オプションを付けなくても良いので楽。
vagrant-destroy-provisionerを使うと、VMの使い捨てが自動化されて非常に便利。どうぞご利用ください。
以下のgems、サイトを参考にしました。