📜  Puppet-自定义功能

📅  最后修改于: 2020-10-31 14:10:22             🧑  作者: Mango


如上一章所述,函数为用户提供了开发自定义功能的特权。木偶可以通过使用自定义功能来扩展其解释能力。自定义函数有助于增强和扩展Puppet模块和清单文件的功能。

编写自定义功能

在编写函数之前,需要记住的事情很少。

  • 在Puppet中,功能由编译器执行,这意味着所有功能都在Puppet主服务器上运行,因此它们不需要与任何Puppet客户端打交道。如果信息以事实的形式出现,功能只能与代理进行交互。

  • Puppet主机捕获自定义功能,这意味着,如果对Puppet函数了一些更改,则需要重新启动Puppet主机。

  • 函数将在服务器上执行,这意味着该函数所需的任何文件都应存在于服务器上,如果该函数需要直接访问客户端计算机,则该文件将无法执行任何操作。

  • 共有两种完全不同的函数类型,一种是Rvalue函数,该函数返回值,而Statement函数,该函数不返回任何值。

  • 该文件包含函数的名称应该是相同的文件中的函数的名称。否则,它将不会自动加载。

放置自定义功能的位置

所有自定义函数都实现为单独的.rb文件,并分布在模块之间。需要将自定义函数放在lib / puppet / parser / 函数。可以从以下位置的.rb文件加载功能。

  • $ libdir / puppet / parser / functions
  • Ruby $ LOAD_PATH中的puppet / parser / functions子目录

创建一个新功能

使用puppet :: parser :: Functions模块内的newfunction方法可以创建或定义新功能。需要将函数名称作为符号传递给newfunction方法,并将代码作为块运行。以下示例是一个函数,该函数用于将字符串写入/ user目录中的文件。

module Puppet::Parser::Functions 
   newfunction(:write_line_to_file) do |args| 
      filename = args[0] 
      str = args[1] 
      File.open(filename, 'a') {|fd| fd.puts str } 
   end 
end

一旦用户声明了函数,就可以在清单文件中使用它,如下所示。

write_line_to_file('/user/vipin.txt, "Hello vipin!")