Vagrant 可以指向 Puppet 清单的目录以供执行吗?

Sel*_*ott 9 puppet vagrant

我正在使用 Vagrant 来快速启动一些初始 Puppet 配置,并且对如何在 puppet 执行工作流中包含/运行多个清单(不仅仅是 site.pp)而不将额外的清单制作成模块并以这种方式包含它们感到困惑。

在我将 Vagrant 指向的 puppet manifests 目录中(见下文),我有两个要执行的清单:site.pp 和 hierasetup.pp。

config.vm.provision "puppet" do |puppet|
  puppet.manifests_path = "puppet_files/manifests"
  puppet.module_path    = "puppet_files/modules"
  puppet.manifest_file  = "site.pp"
  puppet.options = "--verbose --debug"
end 
Run Code Online (Sandbox Code Playgroud)

目前我让 site.pp 成为调用 hierasetup.pp 的清单。我的 site.pp 看起来像这样:

File {
  owner => 'root',
  group => 'root',
  mode  => '0644',
}

import "hierasetup.pp"

include jboss
Run Code Online (Sandbox Code Playgroud)

但是我收到关于弃用“导入”的错误:

警告:在 /tmp/vagrant-puppet-1/manifests/site.pp:33 中不推荐使用“import”。请参阅http://links.puppetlabs.com/puppet-import-deprecation (在grammar.ra:610:in `_reduce_190')

根据“要尝试的事情”下引用的 URL,它说“要将节点定义保存在单独的文件中,请指定一个目录作为主清单”。

此外,主要清单上的这个傀儡文档说:

"推荐:如果您大量使用主清单而不是依赖 ENC,请考虑将清单设置更改为 $confdir/manifests。这可以让您将顶级代码拆分为多个文件,同时避免使用 import 关键字。它也将匹配简单环境的行为。

看来 Puppet 可以引用整个目录,而不仅仅是一个特定的清单文件,因此我希望 Vagrant 会为此做出规定并允许我删除“ puppet.manifest_file = “site.pp ”行并指向将在其中执行所有 *.pp 文件的父目录。但是,在 Vagrant 中删除该行只会产生对预期的“default.pp”的抱怨:

傀儡供应商: * 配置的傀儡清单丢失。请指定现有清单的路径:/some/path/puppet_files/manifests/default.pp

所以:

  1. 首先,我是否理解正确调用多个清单的“新”(非导入)方式,因为要指向一个目录,其中将执行其中的所有 *.pp 文件?
  2. 其次,Vagrant 是否“赶上了”这一新变化以适应目录的引用以及 Puppet 对“导入”的弃用?

更新:感谢 Shane,在 Vagrant 的 GitHub 问题跟踪站点上报告了 #2(Vagrant 的代码没有被赶上以允许指向 puppet manifest 目录)的问题,并且已经修补:https : //github.com/mitchellh/vagrant /问题/4169

Sha*_*den 6

首先,我是否理解正确调用多个清单的“新”(非导入)方式,因为要指向一个目录,其中将执行其中的所有 *.pp 文件?

是的你是。见这里

如果您大量使用主清单而不是依赖 ENC,请考虑将清单设置更改为 $confdir/manifests。这使您可以将顶级代码拆分为多个文件,同时避免使用 import 关键字。

此外,manifestmodulepath也越来越有利于目录环境和清单目录行为过时了,看看这里

现在目录环境已经完成,配置文件环境已被弃用。在 puppet.conf 中定义环境块将导致弃用警告,就像在 puppet.conf 中使用 modulepath、manifest 和 config_version 设置一样。

对于很多部署来说,这是一个相当大的变化,但从长远来看应该是一个很好的改进。


其次,Vagrant 是否“赶上了”这一新变化以适应目录的引用以及 Puppet 对“导入”的弃用?

不,它没有;从他们的文档:

manifest_file (string) - 将作为 Puppet 运行入口点的清单文件的名称。这个清单文件应该存在于配置的 manifests_path 中

为了与 Vagrant 一起使用,您现在不得不处理弃用警告,这很不幸。但是,import 直到 4.x 才会被移除,所以这给了 Vagrant 一些时间来迎头赶上。

  • @SeligkeitIstInGott 完成 - https://github.com/mitchellh/vagrant/issues/4039 (2认同)