我正在编写一个Vagrantfile来设置一个VM。有些配置参数我不想硬编码在Vagrantfile文件中,比如内存和CPU数量。因此,我使用一个加载在Vagrantfile中的YAML文件来存储这些配置参数。YAML文件中存储的一件事是要运行的shell提供程序脚本列表。例如:
---
machine_config:
mem: 2048
cpus: 2
provisioners:
-name: shell-script-1
path: <path-to-shell-script-1>
-name: shell-script-2
path: <path-to-shell-script-2>
---供应人员的数量并不是事先就知道的:在上面的YAML中有两个,但这只是一个例子。我想要一个Vagrantfile文件,它可以运行YAML文件中的所有提供程序。我的意思是,我希望能够在不接触Vagrantfile的情况下向YAML文件添加/删除提供程序,但是Vagrantfile应该正确地运行YAML文件中的所有提供程序。我在Google上搜索了很多例子,说明如何在动态数量的VM上运行相同的硬编码的提供程序,但是找不到任何解决问题的方法。
我想要做的,是用伪迷走片文件语法编写的是:
require "yaml"
current_dir = File.dirname(File.expand_path(__FILE__))
yaml_config = YAML.load_file("#{current_dir}/machine_config.yaml")
machine_config = yaml_config["machine_config"]
additional_scripts = machine_config["provisioners"]
Vagrant.configure("2") do |config|
config.vm.box = <vm-box-to-use>
for each item $script in additional_scripts do
config.vm.provision "shell", path: $script["path"]
end
end其中,machine_config.yaml是一个YAML文件,就像这个问题的第一个例子中的那样,而$script是一个变量,在循环的每一次迭代中都有一个在machine_config.yaml中描述的提供程序。最后一点,我对Ruby和Ruby的语法一无所知(也许对那些知道Ruby和Ruby语法的人来说,我的问题的答案是微不足道的,但我在googling上找不到)。
发布于 2018-09-25 14:37:19
以下内容将起作用
require "yaml"
current_dir = File.dirname(File.expand_path(__FILE__))
yaml_config = YAML.load_file("#{current_dir}/machine_config.yaml")
machine_config = yaml_config["machine_config"]
Vagrant.configure("2") do |config|
config.vm.box = "<vm-box-to-use>"
machine_config["provisioners"].each do |script|
config.vm.provision "shell", name: script['name'], path: script['path']
end
endhttps://stackoverflow.com/questions/52489429
复制相似问题