vagrant - 如何在 Puppet 配置的 Vagrant 项目中跨环境共享 list

标签 vagrant manifest puppet environment

考虑以下 Puppet 配置的 Vagrant 项目目录结构:

environments/
  dev/
    manifests/
      site.pp   <- Some standard Puppet stuff in here.
  prod/
    manifests/
      site.pp   <- Very similar to dev/manifests/site.pp, but with some prod differences
manifests/
  default.pp    <- Empty, but a place I'd like to keep common parts of the site.pp files
modules/
Vagrantfile     <- See below.
Puppetfile

以及以下(简化的)Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

envs = ["local", "dev"]

Vagrant.configure(2) do |config|
  config.vm.box = "puppetlabs/centos-7.0-64-puppet"

  envs.each do |env|
    config.vm.define env do |node|
      node.vm.provision "puppet" do |puppet|
        puppet.environment_path = "environments"
        puppet.module_path = "modules"
        puppet.environment = env
      end
    end
  end
end

如果我想将两个 site.pp 文件的公共(public)部分提取到一个文件中,可以使用哪些选项?

<小时/>

我尝试了以下策略,但没有成功:

1 - 每个环境都有一个 list ,“继承”自单个项目范围的 list

经过一番阅读后,我什至不确定这是否可能。曾经有一个 import 命令,我觉得它可能就是我正在寻找的东西,但在较新版本的 Puppet 中已被弃用。

2 - 每个环境一个项目范围的 list 和一个 Hiera 文件

我认为这是两个选项中最没有吸引力的,因为它意味着区分环境的唯一方法是通过数据,并且有些事情可以通过 list 中的差异更好地表达。

但是我什至无法让它工作。给定 dev/prod/ 文件夹中的以下 environment.conf 文件:

manifest = ../../manifests/default.pp

给我一​​个关于无法找到 default.pp 文件的错误。

<小时/>

基本上我需要一种方法来停止环境之间的重复。我的项目实际上比上面的更复杂,因为 list 变得相当大且笨重,而且我有两个以上的环境。我还觉得我在这里使用 Vagrant(它有自己的方式将选项传递给 Puppet)这一事实让事情变得更加复杂。

如有任何帮助,我们将不胜感激。

最佳答案

所以,这就是我的做法。这不是我最初想要的,但我对 Puppet 还很陌生,甚至不相信我想要的东西是可能的。

我决定使用 hiera 数据来区分环境,现在使用单个 list (default.pp)。这两个 site.pp 文件完全是空的,仅作为占位符,因此 Git 保留 devprod 文件夹。我只是将以下内容添加到 Vagrantfile 中,而不是让 environment.conf 文件指向 list :

puppet.manifest_file = "default.pp"

我也开始将东西放入自己的模块中,而不是拥有一个巨大的整体 list 。

关于vagrant - 如何在 Puppet 配置的 Vagrant 项目中跨环境共享 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32924077/

相关文章:

使用 Ansible 与 Vagrant 虚拟机的 ssh 连接失败

java - Android 服务可以有多个权限吗?

converter - puppet Chef 转换器

node.js - puppet :命令 npm 丢失

ruby - 卸载工头

php - Vagrant、PhpStorm、HHVM 和 Xdebug

vagrant - 在 Vagrant 中,使用 NFS 时是否可以跳过文件夹?

installation - vagrant:在 Mac OSX 10.10.4 上安装后找不到命令

java - Manifest 文件中有多个元数据

android - 我的 android 应用程序在不同的设备上崩溃