Vagrantのshell provisionerはシェルスクリプト以外も指定出来る

1号による以下の「記事数/はてブ数の可視化」によりビリとして肩身が狭い2号です。

Vagrantのprovisionerは各種あり、大体はChef, Ansible, Puppet等の構成管理ツールが使われることが多いためそれほど登場の機会の無いshell provisioner、名前の通りシェルスクリプトに記載した内容に沿ってVMをprovisioningしていきますが、実はこの実行はshebangを見ているため、シェルスクリプト以外を指定することが出来ます。

「男なら黙ってオールPythonでprovisioningだ!」という硬派な方は、例えば以下のようなyumのAPIを直接叩くスクリプトを書き

#!/usr/bin/python
import yum

yb=yum.YumBase()
searchlist=['name']
arg=['vim-enhanced']
matches = yb.searchGenerator(searchlist,arg)
for (package, matched_value) in matches :
    if package.name == 'vim-enhanced' : yb.install(package)
    yb.buildTransaction()
    yb.processTransaction()

Vagrantfileに以下の様に指定することで

config.vm.provision :shell do |shell|
  shell.path = "provision.py"
end

邪道なシェルスクリプトを使うことなくvimをインストールすることが出来るというわけです。多分誰もやらんだろうけど。