Puppet:stdlib已安装但在命名空间中不可用?

THX*_*THX 5 namespaces std include puppet

作为一个木偶新手,我有一个问题,包括stdlib插件

我想使用stdlib的file_line,因此我尝试包含stdlib并调用它

class service_mon
{
  include stdlib
  file_line 
  {
    "${name}_services": path=> ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到一条错误消息,表示无法找到stdlib

错误:无法从远程服务器检索目录:SERVER上的错误400:在/etc/puppet/workspace/dev/src/modules/mymanifest/manifests/deploy.pp:87上找不到my.node.name的类stdlib node my.node.name

这让我很奇怪,因为应该安装stdlib(?)......或?

puppet module install puppetlabs-stdli

puppet module list
/etc/puppet/modules
??? puppetlabs-stdlib (v4.2.2)
/usr/share/puppet/modules (no modules installed)

puppet config print modulepath
/etc/puppet/modules:/usr/share/puppet/modules
Run Code Online (Sandbox Code Playgroud)

所以,我猜原则上所有必要的文件都是'那里',但我怎么能说服Puppet包含stdlib呢?

Fel*_*ank 4

Puppet 模块不像 java 模块那样工作——include stdlib只有当class stdlib模块中确实有一个做了有用的事情时才有意义,但事实并非如此。

注意:许多 Puppet 模块确实有这样一个类作为中心入口点,但这stdlib是一个值得注意的例外。

您只需调用 stdlib 中的解析器函数即可使用它们。至于类型,如果满足以下条件,这些类型就可供 Puppet 使用:

  • 该模块安装在您的内部$modulepath并且
  • 您已pluginsync在代理上启用

您可以file_line毫不费力地使用。