使用 Vagrant 运行特定的配置块

Mik*_*keW 1 chef-infra vagrant

我想在新配置的服务器上的 Vagrant 文件中运行一个单独的配置块。目前,当我从 CI 服务器运行它时

vagrant up
Run Code Online (Sandbox Code Playgroud)

以下块执行成功

config.vm.provider :linode do |provider, override|   
    #creates a new instance etc .. the following block runs on this instance
end
config.vm.provision :chef_solo do |chef|
    chef.provisioning_path = "/tmp/deploy"
    chef.cookbooks_path = ["cookbooks"]
    chef.add_recipe = "mydeployagent" 
end
Run Code Online (Sandbox Code Playgroud)

现在我想在之后运行一个单独的供应商。(CI服务器中的一个单独任务)即

config.vm.provision :chef_solo do |chef|
    chef.provisioning_path = "/tmp/deploy"
    chef.cookbooks_path = ["cookbooks"]
    chef.add_recipe = "mydeploydatabaseagent" 
end
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚我需要什么

  1. 运行 vagrant up 以便它只执行第一个配置块

  2. 运行 vagrant 以便它只在 1 中创建的实例上运行第二个配置块。

提前致谢

Dra*_*ter 6

来自Vagrant 文档

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "bootstrap", type: "shell" do |s|
    s.inline = "echo hello"
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您只希望在指定了多个供应商的情况下运行特定供应商,则可以使用 --provision-with 标志。例如,如果您有一个 shell 和 Puppet 配置器,并且只想运行一个 shell,则可以执行 vagrant provision --provision-with shell。--provision-with 的参数可以是供应商类型(例如“shell”)或供应商名称(例如上面的“bootstrap”)。