我可以省略 site.pp 在所有节点上执行一个 class

Can I omit site.pp to execute one class on all nodes

我有 puppetserver 和三个节点。我使用 createuser class 在 master createuser.pp 文件上创建了文件。 此外,我创建了 site.pp,内容如下: 节点 'app01','app02,'app03'{ 包括创建用户 } 现在从每个应用程序服务器执行:puppet agent -tv 将创建用户。一切正常。 我的问题是我可以在不定义 site.pp 清单的情况下做同样的事情吗? 我当然可以在文件 createuser.pp 中 class 定义的末尾添加 include createuser 但是我如何 运行 它来自所有三个应用程序主机?我需要创建标签吗? 感谢您的任何提示。

can I do the same without defining site.pp manifest ?

在任何仍受支持的 Puppet 版本中,您可以在没有名为 site.pp 的文件的情况下执行此操作,但如果没有更一般意义上的“site manifest”则不行。这可以是可配置名称的单个文件(默认为“site.pp”),也可以是指定目录中所有文件的集合内容。无论哪种方式,站点清单都是目录构建的入口点。其他清单仅在需要时查阅。

I can of course add include createuser at the end of class definition in file createuser.pp

在当前的 Puppet 中,顶级范围的代码可能只出现在站点清单中(尽管一些历史版本更为宽松)。您的 class 应该 在模块中,而不是在站点清单中,在那种情况下不,您不能在同一文件中使用 include 语句使用 class 定义。您需要在站点清单中或在站点清单直接或间接声明的某些其他 class 中进行 class 声明。

but how can i run it from all three app hosts ? Do I need to create a tag ?

在代理端,标签仅对限制 有用,classes 和资源被应用。只有那些已经在其目录中的才可用——您不能使用该端的标签来应用通常不会应用的 classes 或资源。

您通过在站点清单中声明(就像您现在所做的那样)或在站点清单中直接或间接声明的另一个 class 中声明它来确保 class 在节点的目录中。