我希望使用Vagrant创建多个相同的VM集群。
例如,假设我想要创建两个虚拟机,假设主机名为n1和n2作为一个群集(clusterA)。然后,我想基本上重复相同的设置,但将接下来的2个VM命名为第二个群集(clusterB)上的n3和n4。这两个集群具有完全相同的设置(即磁盘数量、网络设置、rpms和安装的软件包等),但是有两个独立的身份。
在某些情况下,我可能需要对每个集群做一些小的修改。
组织Vagrantfile的干净方法是什么?有什么建议吗?
发布于 2020-11-07 02:53:34
这里有一种方法。
首先,我在基本项目文件夹create-cluster.sh中创建了一个shell脚本。此脚本将接受群集名称作为输入,并执行以下操作:
mkdir ./$cluster_namecp ./Vagrantfile-template ./$cluster_namecp ./settings.yaml ./$cluster_name
(复制此处的任何其他设置文件,即settings.yaml)
cd ./$cluster_name <--即clusterA、clusterB、etc...
vagrant up因此,您最终得到了以下目录:
myproject/
|--- create-cluster.sh
|--- delete-cluster.sh
|--- Vagrantfile-template
|--- settings.yaml
|--- <any other external files required to build VM>
|
|--- clusterA
| |-- Vagrantfile (copied from ../Vagrantfile-template)
|
|--- clusterB
| |-- Vagrantfile (copied from ../Vagrantfile-template)Vagrantfile-模板加载settings.yaml文件以导入任何唯一的设置。通过这种方式,可以将Vagrantfile写入以支持任意数量的节点、磁盘等。例如:
settings.yaml:
---
num-nodes: 2Vagrantfile-tempale:
require "yaml"
$settings = YAML.load_file "settings.yaml"
num_nodes = $settings['num-nodes']
# Customize configuration specific settings
Vagrant.configure("2") do |config|
config.vm.box = "centos/8"
(1..num_nodes).each do |i|
config.vm.define node-#{i} do |node|
node.vm.hostname = node#{i}
<other common setup, i.e. provisioners>
end
end这种方法允许一个通用的Vagrantfile设置,但也允许您单独管理每个集群,即vagrant halt、vagrant destroy等。
https://stackoverflow.com/questions/64720167
复制相似问题