Vagrant Puppet 应用清单时出现错误环境

Vagrant Puppet 应用清单时出现错误环境

我使用 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

相关内容