Vagrant : reusing a puppet_server block for multiple VMs

标签 vagrant puppet

我有一个 Vagrantfile,其中定义了两个虚拟机。我想使用 puppet 大师来配置那些。当我只有一个虚拟机时,我可以使用

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

我想为两个虚拟机重用此 block ,但不能,因为每个虚拟机的 client_cert_path 和 client_private_key_path 需要不同。

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

There are errors in the configuration of this machine. Please fix the following errors and try again:

puppet server provisioner:

  • The specified client cert path could not be found
  • The specified client private key path could not be found
  • "puppet_node" is required when a client cert or key is specified

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

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

最佳答案

我在 Vagrant.configure block 之后添加了一个 Helper 类:

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

config.vm.define "vpn", autostart: false do |vpn|
  # various configurations
  Helper.provision_puppet vpn.vm
end

关于 Vagrant : reusing a puppet_server block for multiple VMs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32714102/

相关文章:

webpack - 为什么 LiveReload 在使用 Vagrant 的 vue-cli 项目中不起作用?

vagrant - 在 Vagrantfile 中指定 --no-parallel 标志

puppet 找不到类(class)

Jenkins nodelabel 插件 .jpi 从哪里来?

node.js - 从 node.js 配置 VM 实例的推荐方法和工具?

windows - 在命令行上将变量传递给 puppet

Windows 10 中的 Vagrant 'Timed out while waiting for the machine to boot'

ssh - 无用信息框和远程主机之间的Ansible同步模块失败

linux - 如何在 Linux RHEL 服务器上安装 Vagrant

postgresql - 使用 puppet 通过 VM 中的设置脚本初始化 postgresql 数据库