我在标准客户端-服务器模式下使用 Puppet 3.7,使用环境,并使用 Hiera 处理数据。我使用 Vagrant 直接从我的 Puppet 存储库测试 Puppet 清单。
我最近开始使用 Hiera 并更改了我的 Vagrantfile(和 Vagrant 目录)以使用它。它现在似乎可以与 Hiera 一起使用,但出现了另一个问题:Vagrant 认为我的虚拟机处于实验阶段时处于环境生产中。(这以前工作得很好)
Puppet 存储库看起来像
~/code/puppet
└── environments
├── experimental
│ ├── manifests
│ │ └── site.pp
│ ├── modules
│ └── Puppetfile
├── production
│ ├── manifests
│ │ └── site.pp
│ ├── modules
│ └── Puppetfile
└── testing
├── manifests
│ └── site.pp
├── modules
└── Puppetfile
我的 Vagrant 设置存储在另一个目录中。我在此目录中创建了一个指向 ~/code/puppet 的符号链接 (ln -s),名为 puppet。Vagrantfile 看起来
config.vm.define "standalone", primary: true do |config|
config.vm.box = "debian_wheezy+vbox_jessie+puppet_3.7"
config.vm.hostname = "standalone.puppet.vagrant"
config.vm.network "private_network", ip:"192.168.10.21"
config.vm.synced_folder "puppet/hieradata", "/etc/puppet/hieradata"
config.vm.provision :puppet, :options => ["--yamldir /hieradata"] do |puppet|
puppet.manifests_path = "puppet/environments/experimental/manifests"
puppet.manifest_file = "site.pp"
puppet.module_path = [ "puppet/environments/experimental/modules", "puppet/environments/production/modules", "puppet/modules" ]
puppet.hiera_config_path = "puppet/hiera.yaml"
end
end
我想我最近在使用 Hiera 后所做的更改对 Vagrant 来说是不正确的,也许黑客(链接 puppet 代码目录)是原因,但我看不出应该如何组织。
有没有人知道这个问题以及如何解决它?
谢谢
更新
我变了
puppet.manifests_path = "puppet/environments/#{env}/manifests"
并删除 puppet.working_directory 以启动/配置我的 VM。
和
puppet.module_path = [ "puppet/modules", "puppet/environments/production/modules" ]
它似乎让我的虚拟机可以访问我需要的生产和当前环境模块。
您可以为您的 puppet 运行指定所有选项。你可以使用这样的东西:
这意味着您的模块位于“puppet/modules/#{env}”中,而您的清单位于“puppet/manifests/#{env}. 现在,“env”是一个可以在 Vagrantfile 中设置的变量:
或者:您可以将所有变量(例如“env”)放在一个 yaml 文件中并加载它。
作为参考,您可以在此处找到所有 puppet 提供选项:https ://www.vagrantup.com/docs/provisioning/puppet_apply.html
我来这里是为了解决类似的问题。我能够通过使用数组连接多个模块路径。这样modulepath就会变成
modulepath = ../puppet/environments/dev/modules:../puppet/modules
你的路径会有所不同。
我的流浪环境将永远
dev
如此,所以我可以在这里对这个模块路径进行硬编码。我的 Vagrantfile 看起来像这样: