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

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

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

在我将 Vagrant 指向的 puppet 清单目录中(见下文),我有两个想要执行的清单: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 

目前,我将 site.pp 作为调用 hierasetup.pp 的清单。我的 site.pp 如下所示:

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

import "hierasetup.pp"

include jboss

但是我收到有关“import”弃用的错误:

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

根据“可以尝试的替代方法”下引用的 URL,它显示“要将节点定义保存在单独的文件中,请指定一个目录作为主清单“。

进一步主要清单上的 puppet 文档说:

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

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

puppet provisioner:* 缺少已配置的 Puppet 清单。请指定现有清单的路径:/some/path/puppet_files/manifests/default.pp

所以:

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

更新:感谢 Shane,问题 #2(Vagrant 的代码没有被赶上,无法指向 puppet 清单目录)已在 Vagrant 的 GitHub 问题跟踪器网站上报告,并且已经得到修补:https://github.com/mitchellh/vagrant/issues/4169

答案1

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

是的,你懂的。看看这里

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

此外,manifestmodulepath也逐渐被目录环境和清单目录行为所取代,请参阅这里

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

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


其次,Vagrant 是否已经“赶上”了这一新变化,以适应目录引用以及 Puppet 不再使用“import”?

没有,从他们的文档中可以看到:

manifest_file (字符串) - 将作为 Puppet 运行入口点的清单文件的名称。此清单文件应存在于配置的 manifests_path 中

对于使用 Vagrant,您目前只能处理弃用警告,这很不幸。但是,导入直到 4.x 才会被删除,所以这给了 Vagrant 一些时间来赶上。

相关内容