vagrant - 单个 Vagrantfile 中的两个操作系统
问题描述
是否可以在一个 Vagrantfile 中运行两个不同的操作系统?当我有以下 Vagrantfile 时,它会同时创建为 debain10,我真的想要一个 centos8和一个 debian10。这是我正在使用的(失败的)Vagrantfile:
#-*-mode:ruby-*-
#vi:setft=ruby:
VAGRANTFILE_API_VERSION="2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Configure the CentOS Machines.
config.vm.box = "generic/centos8"
config.ssh.insert_key = false
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.provider :virtualbox do |v|
v.memory = 512
v.linked_clone = true
v.customize ["modifyvm", :id, "--nested-hw-virt", "on"]
end
# Ideally this should be a centos8 machine
config.vm.define "centos8-server" do |config|
config.vm.hostname = "centos8-server"
config.vm.network :private_network, ip: "192.168.20.100"
end
# Ideally this should be a debian10 machine
config.vm.box = "generic/debian10"
config.vm.define "debian10-server" do |config|
config.vm.hostname = "debian10-server"
config.vm.network :private_network, ip: "192.168.20.200"
end
config.vm.provision "shell" do |s|
ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
s.inline = <<-SHELL
echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
echo #{ssh_pub_key} >> ~vagrant/.ssh/authorized_keys
SHELL
end
end
我想这样做的原因是我需要针对一组 CentOS 和 Debian 机器测试单个 ansible playbook。我不确定这是否可能,因为它没有在文档中明确显示为不受支持。在此之前,我一直在运行两个 Vagrantfile,但我很想看看它是否可以在单个文件中实现。
解决方案
将源框定义重新定位到单个机器块下。通过示例查看此处(仅显示它更容易)-我编写了一个更简单的示例,如果您愿意,您可能需要修改:
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# box 1 - centos
config.vm.define "centos" do |centos|
centos.vm.box = "centos/7"
centos.vm.hostname = "centos"
centos.vm.network :private_network, ip: "192.168.75.10"
# setting name of vm to inspect in virtualbox
centos.vm.provider :virtualbox do |vb|
vb.name = "centos"
end
# box 2 - ubuntu
end
config.vm.define "ubuntu" do |ubuntu|
ubuntu.vm.box = "ubuntu/trusty64"
ubuntu.vm.hostname = "ubuntu"
ubuntu.vm.network :private_network, ip: "192.168.75.11"
# setting name of vm to inspect in virtualbox
ubuntu.vm.provider :virtualbox do |vb|
vb.name = "ubuntu"
end
end
end
推荐阅读
- c# - 可以使用 MVVM 在 ViewModel 属性中调用服务吗?
- java - Java webapp header nosniff 不为 js 和 css 文件工作
- django - Django:如何在 forms.py 上获取用户 ID?
- python - 在 Numpy 中平铺
- arcgis - 为数据调用 RESTful Web 服务(Oauth 2.0 密码授予类型)
- javascript - 如何正确调用具有输入值条件的函数
- javascript - 将较大的字节数组转换为字符串
- node.js - FFmpeg节点js将视频文件(.mp4)转换为m3u8:输出格式m3u8不可用
- react-native - 限制选中的复选框数量并保存值
- html - 悬停时在多个图像之间交叉