我使用 Puppet 3.7 的标准客户端-服务器模式,使用环境并使用 Hiera 处理数据。我使用 Vagrant 直接从我的 Puppet 存储库测试 Puppet 清单。
我最近开始使用 Hiera,并更改了我的 Vagrantfile(和 Vagrant 目录)以使其能够正常工作。现在它似乎可以与 Hiera 配合使用,但出现了另一个问题:Vagrant 认为我的 VM 处于生产环境中,而实际上它处于实验环境中。(以前这很正常)
Puppet 存储库如下所示
~/code/puppet
└── environments
├── experimental
│ ├── manifests
│ │ └── site.pp
│ ├── modules
│ └── Puppetfile
├── production
│ ├── manifests
│ │ └── site.pp
│ ├── modules
│ └── Puppetfile
└── testing
├── manifests
│ └── site.pp
├── modules
└── Puppetfile
我的 Vagrant 设置存储在另一个目录中。我在此目录中创建了一个名为 puppet 的符号链接 (ln -s) 到 ~/code/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" ]
它似乎让我的虚拟机访问我需要的生产和当前环境模块。
答案1
您可以为 Puppet 运行指定所有选项。您可以使用类似下面的选项:
srv.vm.provision :puppet do |puppet|
puppet.working_directory = "/vagrant/puppet"
puppet.module_path = "puppet/modules"
puppet.manifests_path = "puppet/manifests"
puppet.manifest_file = "site.pp"
puppet.hiera_config_path = "puppet/hiera.yaml"
puppet.options = "--debug --verbose --environment #{env}"
end
这意味着您的模块位于“puppet/modules/#{env}”中,而您的清单位于“puppet/manifests/#{env}”中。现在,“env”是您可以在 Vagrantfile 中设置的变量:
env = "production"
或者:您可以将所有变量(如“env”)放入 yaml 文件中并加载它。
作为参考,你可以在这里找到所有傀儡提供选项:https://www.vagrantup.com/docs/provisioning/puppet_apply.html
答案2
我来这里是为了解决类似的问题。我能够使用数组连接多个模块路径。因此模块路径将变成
modulepath = ../puppet/environments/dev/modules:../puppet/modules
您的路径将会有所不同。
我的流浪环境将始终如此dev
,所以我可以在这里对该模块路径进行硬编码。
我的 Vagrantfile 如下所示:
Vagrant.configure(2) do |config|
config.vm.box = "centos7"
config.vm.synced_folder("../../puppet/trunk/server/hieradata", "/etc/puppet/hieradata")
config.vm.provision "puppet" do |puppet|
puppet.environment = "dev"
puppet.environment_path = "../../puppet/trunk/server/environments"
puppet.hiera_config_path = "../../puppet/trunk/server/hiera.yaml"
puppet.module_path = [ "../../puppet/trunk/server/environments/dev/modules", "../../puppet/trunk/server/modules" ]
end
end