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

 心之约会446 发布于 2022-12-31 08:56

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

例如,我在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上运行脚本以启用无密码SSH到node2,node3和node4.

我知道您可以在配置每个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.在上面的方法中,这只能用于node1,但不适用于node2(因为node1不会被配置).

如果有一个Vagrant插件允许在我的集群中的所有节点之间进行密码SSH,那甚至会更好.

1 个回答
  • 这个问题只有一岁了,无论如何我发现它是因为我遇到了同样的问题,所以这是我用来解决问题的工作环境,有人可能会觉得有用。

    我们需要“ 游荡的触发器 ”才能使其正常工作。流浪汉触发器的作用是,它们会触发您正在创建的每台计算机,但是我们要确定所有计算机何时启动。我们可以通过检查每个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)上并行执行的提供程序。

    2022-12-31 09:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有