gpt4 book ai didi

ruby - 控制多机 Vagrant block 执行顺序

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:05 24 4
gpt4 key购买 nike

我有一个多机 vagrant 设置,其中包含一些我需要更改执行顺序的 block 。

由于 vagrant 顺序是从外到内,最嵌套的 block 最后执行。

我需要一种方法来使供应 block 更加嵌套,以便它们最后执行。我尝试添加 mach.vm.define 但这些 block 没有执行,我不明白为什么。

正常执行,顺序错误

Vagrant.require_version ">= 1.6.0"
VAGRANTFILE_API_VERSION = "2"

require 'yaml'

machines = YAML.load_file('vagrant.yaml')

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
machines.each do |machine|

config.vm.define machine["name"] do |mach|

machine['run_this'].each do |run_this|
mach.vm.provider "virtualbox" do |v, override|
# should run first
end
end

# Do a puppet provision to install the rest of the software
mach.vm.provision "puppet" do |puppet|
# puppet stuff
end

mach.vm.box = 'ubuntu/trusty64'

end
end

理想的解决方案,但不执行额外的嵌套 block

Vagrant.require_version ">= 1.6.0"
VAGRANTFILE_API_VERSION = "2"

require 'yaml'

machines = YAML.load_file('vagrant.yaml')

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
machines.each do |machine|

config.vm.define machine["name"] do |mach|

machine['run_this'].each do |run_this|
mach.vm.provider "virtualbox" do |v, override|
# should run first but it doesn't because it's in an extra provider block
end
end

mach.vm.define :prov do |prov| # This block doesn't execute

# Do a puppet provision to install the rest of the software
prov.vm.provision "puppet" do |puppet|
# puppet stuff
end

end

mach.vm.box = 'ubuntu/trusty64'

end
end
end

有没有办法使配置更深一层,以便它在提供程序 block 的内容之后运行?

编辑:任何特定于提供商的内容(例如,另一个提供商 block )或任何导致重复代码的内容都是 Not Acceptable 。

最佳答案

我不知道你在第一个 block 上到底在做什么,所以我假设它可以与内部 block (与 :run_this 属性交互的 block )反转).

通过这个小改动,我们可以将所有执行 block 放在同一层。您将在下面找到我试图模拟您的问题的代码。

Vagrant.require_version ">= 1.6.0"
VAGRANTFILE_API_VERSION = "2"

require "yaml"

machines = YAML.load_file("vagrant.yml")

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

machines.each do |machine|

config.vm.define machine["name"] do |mach|

mach.vm.box = "ubuntu/trusty64"
mach.vm.provision :shell, inline: "echo A"

mach.vm.provider :virtualbox do |v, override|

v.name = machine["name"]
override.vm.provision :shell, inline: "echo B"

machine["run_this"].each do |run_this|
override.vm.provision :shell, inline: "echo C"
end

# puppet stuff should come here (all on the same level)
override.vm.provision :shell, inline: "echo D"

end

end

end

end

关于ruby - 控制多机 Vagrant block 执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32203536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com