gpt4 book ai didi

ruby - 是否可以在 Vagrant 完成所有配置后在虚拟机上运行脚本?

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

我正在使用 Vagrant v1.5.1 创建虚拟机 (VM) 集群。在供应了所有 VM 之后,是否可以在其中一台机器上运行单个脚本?我要运行的脚本将设置从一个 VM 到所有其他 VM 的无密码 SSH。

例如我在Vagrant(CentOS 6.5)中配置的节点如下。

  • 节点1
  • 节点2
  • 节点3
  • 节点4

我的 Vagrantfile 如下所示。

(1..4).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.box = "centos65"
...omitted..
end
end

完成所有这些后,我需要在 node1 上运行一个脚本,以启用到 node2、node3 和 node4 的无密码 SSH。

我知道您可以在配置每个 VM 时运行脚本,但在这种情况下,我想在配置所有 VM 之后运行脚本,因为我需要启动并运行所有 VM 才能运行最后一个脚本。

这在 Vagrant 中可行吗?

我意识到我也可以向后迭代。

r = 4..1
(r.first).downto(r.last).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.box = "centos65"
...omitted..
if i == 1
node.vm.provision "shell" do |s|
s.path = "/path/to/script.sh"
end
end
end
end

这会很好用,但实际上,我还需要设置从 node2 到 node1、node3 和 node4 的无密码 SSH。在上面的方法中,这只适用于节点 1,但不适用于节点 2(因为节点 1 不会被配置)。

如果有一个 Vagrant 插件允许在我的集群中的所有节点之间使用密码 SSH,那就更好了。

最佳答案

这个问题已经有一年了,无论如何我发现它是因为我有同样的问题,所以这是我用来解决问题的解决方法,有人可能会觉得它有用。

我们需要“vagrant triggers”才能正常工作。 vagrant 触发器的问题是它们会为您正在创建的每台机器触发,但我们想确定所有机器都已启动的时刻。我们可以通过检查每个 UP 事件来做到这一点,如果该事件对应于最后一个正在创建的机器:

Vagrant.configure("2") do |config|

(1..$machine_count).each do |i|

config.vm.define vm_name = "w%d" % i do |worker|

worker.vm.hostname = vm_name
workerIP = IP
worker.vm.network :private_network, ip: workerIP

worker.trigger.after :up do
if(i == $machine_count) then
info "last machine is up"
run_remote "bash /vagrant/YOUR_SCRIPT.sh"
end
end

end
end
end

这适用于不支持在 Vagrant(VBox、VMWare)上并行执行的提供程序。

关于ruby - 是否可以在 Vagrant 完成所有配置后在虚拟机上运行脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25088568/

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