Vagrant:为多个VM重用puppet_server块

时间:2015-09-22 10:06:13

标签: vagrant puppet

我有一个Vagrantfile,定义了两个VM。我想用木偶大师来配置那些。当我只有一个VM时,我可以使用

config.vm.provision "puppet_server" do |puppet|
 puppet.puppet_server           = "puppet.srv"
 puppet.puppet_node             =  config.vm.hostname
 puppet.client_cert_path        = "../puppet/ssl/ca/signed/#{config.vm.hostname}.pem"
 puppet.client_private_key_path = "#{config.vm.hostname}.key"
 puppet.options                 = "--test"
end

我想为这两个虚拟机重用此块,但由于每个虚拟机的client_cert_path和client_private_key_path需要不同,因此无法重复使用。

当我尝试使用这些设置执行Vagrantfile时,我得到了

  

本机配置有误。请修理   出现以下错误并再试一次:

     

puppet server provisioner:

     
      
  • 找不到指定的客户端证书路径
  •   
  • 找不到指定的客户端私钥路径
  •   
  • " puppet_node"
  • 指定客户端证书或密钥时是必需的   

这让我相信config.vm.hostname未定义

如何在不重复代码块的情况下实现这一目标?

1 个答案:

答案 0 :(得分:2)

我在wchar_t阻止后添加了Helper类:

Vagrant.configure

然后为每个vms

调用Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # regular configuration here end class Helper def self.provision_puppet(vm) vm.provision "puppet_server" do |puppet| puppet.puppet_server = "puppet.test" puppet.puppet_node = vm.hostname puppet.client_cert_path = "../puppet/ssl/ca/signed/#{vm.hostname}.pem" puppet.client_private_key_path = "ssl/#{vm.hostname}.key" puppet.options = "--test" end end end
Helper.provision_vm