Coloque isso perto do topo do seu Vagrantfile:
module LocalCommand
class Config < Vagrant.plugin("2", :config)
attr_accessor :command
end
class Plugin < Vagrant.plugin("2")
name "local_shell"
config(:local_shell, :provisioner) do
Config
end
provisioner(:local_shell) do
Provisioner
end
end
class Provisioner < Vagrant.plugin("2", :provisioner)
def provision
result = system "#{config.command}"
end
end
end
Em seguida, basta invocar em seu Vagrantfile assim:
config.vm.provision "list-files", type: "local_shell", command: "ls"
E através da linha de comando assim:
vagrant provision --provision-with list-files
Isso é uma espécie de hack, pois parece um plug-in, mas na verdade não é (ele não aparece quando você faz vagrant plugin list
). Eu não recomendo fazê-lo desta maneira, exceto que ele tem a vantagem de não precisar instalar um plugin, então seu Vagrantfile funcionará em qualquer máquina que suporte a última versão de configuração (versão 2 a partir da gravação deste). Embora isso pareça promissormente portátil, há também todo o problema de plataforma cruzada do comando real que você está emitindo. Você precisa levar em consideração se você quer que seu Vagrantfile seja portátil, mas isso deve começar.