tl;dr
昨日, 以下のようなブロクを認めました. また, vagrant から goss というコマンドラインツールを実行出来るプラグインを作ってみました.
このプラグインを作ったのは, shell provisioner から実行していた goss を個別に実行したかったからということが理由の一つでした.
config.vm.provision :shell, inline: <<~BASH sudo yum install -y wget httpd && \ goss --gossfile spec/goss.yaml --vars node.yml validate --format documentation BASH
これを,
config.vm.provision :shell, inline: <<~BASH sudo yum install -y wget httpd && \ BASH config.vm.provision :goss do |goss| goss.root_path = '/vagrant' goss.spec_file = '/spec/goss.yaml' goss.vars_file = '/node.yml' goss.goss_path = '/bin/goss' end
このように書けば, 以下のように実行出来ることを期待していました.
$ vagrant provision --provision-with=shell # こっちで wget と Apache のインストール $ vagrant provision --provision-with=goss # こっちで goss の実行
実際に, 上記のように期待する動作を得ることが出来ましたが... なんかモヤモヤした気持ちが残っていました.
モヤモヤ
vagrant のようなプロダクトが
同じ provisioner タイプを複数実行出来ないはずがない.
という気持ちで眠れずに改めてドキュメントを読んでみました.
Basic Usage
ドキュメントの Basic Usage に明記されていました.
以下, provisioner の基本形です.
Vagrant.configure("2") do |config| config.vm.provision "bootstrap", type: "shell", run: "never" do |s| s.inline = "echo hello" end end
config.vm.provision
のオプションとして, name
, type
, そして, before
, after
が指定可能です. 上記のサンプルコードだと, 以下のような値が設定されていることになります.
name
=bootstrap
type
=shell
The --provision-with flag can be used if you only want to run a specific provisioner if you have multiple provisioners specified. For example, if you have a shell and Puppet provisioner and only want to run the shell one, you can do vagrant provision --provision-with shell. The arguments to --provision-with can be the provisioner type (such as "shell") or the provisioner name (such as "bootstrap" from above).
上記はドキュメントの一部を抜粋したものですが, --provision-with
パラメータの値として指定するのは, name
の値を指定する旨, 記載されています. ちなみに, --provision-with
パラメータには name
及び type
を指定することが可能なようです.
$ vagrant provision --help Usage: vagrant provision [vm-name] [--provision-with x,y,z] --provision-with x,y,z Enable only certain provisioners, by type or by name. -h, --help Print this help
やっぱり...
プラグイン作るまでもなかったようです... ということで, 以下のような Vagrantfile を書いて試してみました.
Vagrant.configure('2') do |config| config.vm.box = 'centos/7' config.vm.provider "virtualbox" do |vb| vb.memory = '512' end config.vm.provision 'mitamae', type: 'shell' do |s| s.inline = <<~BASH echo 'Run mitamae!!!' BASH end config.vm.provision 'goss', type: 'shell' do |s| s.inline = <<~BASH echo 'Run goss!!!' BASH end end
以下のように, --provision-with
で mitamae
と goss
を切り替えて実行可能なことが確認出来ました.
ということで
ドキュメントはちゃんと読もう案件でした. 昨日作ったプラグインはプラグインで細々と育てていこうと思います.
おつかれ, 昨日の自分.