【问题标题】:Vagrant file with multi OS machines?带有多操作系统机器的流浪文件?
【发布时间】:2021-12-16 13:44:38
【问题描述】:

我已经和 Vagrant 一起玩了一段时间,一切都如预期的那样。它只是工作。但是现在当我尝试在同一个文件上创建几个 Linux 和几个 Windows 节点时,问题就开始了。通常它与配置有关,如果告诉我 apt 不是 PowerShell 可以做的,则尝试与 winrm 或 winbox 联系 Linux。这些盒子在它们自己的范围内

  • Vagrant.configure("2") 做 |config|
  • Vagrant.configure("2") 做 |windows|

等等

任何想法如何解决这个问题?

【问题讨论】:

    标签: vagrant vagrant-provision


    【解决方案1】:

    您似乎混淆了Vagrant configuration (with version) 和[Vagrant VM 定义](https://www.vagrantup.com/docs/multi-machine#defining-multiple-machines]

    您将有 1 个配置用于您的 Vagrantfile 和多个 VM 定义。

    这是我过去使用的 4 个虚拟机的示例(3 个基于 centos,1 个 Windows 虚拟机)

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    require 'yaml'
    settings = YAML.load_file File.join(File.dirname(__FILE__), "puppet/hieradata/common.yaml")
    
    selenium_version = settings['selenium_version']
    
    Vagrant.configure("2") do |config|
    
      config.vm.box = settings['host_box'] || "pws/centos65"
      config.ssh.username = settings['ariba_user']
    
      config.vm.define "db" do |db|
        db.vm.hostname = settings['db_hostname']
        db.vm.network "private_network", ip: settings['host_db_address']
    
        db.vm.synced_folder "dump/", "/dump"
    
        db.vm.provider "vmware_workstation" do |vm|
          vm.vmx["memsize"] = "3072"
        end
    
        db.vm.provider "virtualbox" do |vb|
          vb.memory = "3072"
        end
    
        db.vm.provision "shell", path: "puppet/script/install-puppet-modules-db.sh"
        db.vm.provision :puppet do |puppet|
          puppet.manifests_path = "puppet/manifests"
          puppet.manifest_file = "base-db.pp"
          puppet.module_path = "puppet/modules/db"
          puppet.hiera_config_path = "puppet/hiera.yaml"
          #puppet.options = "--verbose --debug"
        end
      end
    
      config.vm.define "app", primary: true do |app|
        app.vm.hostname = settings['ariba_hostname']
        app.vm.network "private_network", ip: settings['host_app_address']
        app.vm.synced_folder "puppet/install_ariba", "/home/ariba/install_sources"
    
        app.ssh.forward_agent = true
        app.ssh.forward_x11 = true
    
        app.vm.provider "vmware_workstation" do |vm|
          vm.vmx["memsize"] = "4096"
        end
    
        app.vm.provider "virtualbox" do |vb|
          vb.memory = "3072"
        end
    
        app.vm.provision "shell", path: "puppet/script/install-puppet-modules-app.sh"
        app.vm.provision :puppet do |puppet|
          puppet.manifests_path = "puppet/manifests"
          puppet.manifest_file = "base-app.pp"
          puppet.module_path = "puppet/modules"
          puppet.hiera_config_path = "puppet/hiera.yaml"
          #puppet.options = "--verbose --debug"
        end
        app.vm.provision "shell", path: "puppet/script/run-ariba-app.sh", privileged: false, run: 'always'
      end
    
      config.vm.define "win_10" do |win10|
        win10.vm.box = "windows_10"
        
        win10.vm.synced_folder "puppet/install_ariba/test", "/test"
    
        win10.vm.provision "shell", path: "puppet/install_ariba/test/install_win_jdk.ps1", privileged: false
        win10.vm.provision "shell", path: "puppet/install_ariba/test/install_browsers.ps1", privileged: false
    
        win10.vm.provision "shell", path: "puppet/install_ariba/test/start_win_selenium.bat", run: 'always', args: ["#{selenium_version}", settings['host_hub_address']]
      end
    
      config.vm.define "hub" do |hub|
        hub.vm.hostname = settings['hub_hostname']
        hub.vm.network "private_network", ip: settings['host_hub_address']
    
        hub.vm.provider "vmware_workstation" do |vm|
          vm.vmx["memsize"] = "1024"
        end
    
        hub.vm.provider "virtualbox" do |vb|
          vb.memory = "3072"
        end
    
        hub.vm.synced_folder "puppet/install_ariba/test", "/test"
    
        hub.vm.provision "shell", path: "puppet/script/install-puppet-modules-hub.sh"
        hub.vm.provision :puppet do |puppet|
          puppet.manifests_path = "puppet/manifests"
          puppet.manifest_file = "base-hub.pp"
          puppet.module_path = "puppet/modules/hub"
          puppet.hiera_config_path = "puppet/hiera.yaml"
          #puppet.options = "--verbose --debug"
        end
        hub.vm.provision "shell", path: "puppet/script/run-test.sh", privileged: false, run: 'always', args: "#{selenium_version}"
      end
    end
    

    Linux 配置是通过 shell 脚本或 puppet 完成的,而 Windows 配置是通过 PowerShell 脚本或 bat 文件完成的。注意 VM 是如何定义的,以及我们如何在其对应的块中使用变量名。

    Vagrant doc中所述

    对于类似 POSIX 的机器,shell 配置器执行脚本 SSH。对于配置为使用 WinRM 的 Windows 客户机, shell 配置程序通过 WinRM 执行 PowerShell 和 Batch 脚本。

    【讨论】:

    • 不错的一个!谢谢。我当前的文件现在是这样的(在阅读您的评论之前这样做了)这是正确的方向吗? (只是试图获取 Windows 图像,所以不确定这是否可行):) 这是我的 file(此处粘贴的字符不足)谢谢
    • 是的,文件的结构看起来不错
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多