📅  最后修改于: 2020-10-31 14:10:22             🧑  作者: Mango
如上一章所述,函数为用户提供了开发自定义功能的特权。木偶可以通过使用自定义功能来扩展其解释能力。自定义函数有助于增强和扩展Puppet模块和清单文件的功能。
在编写函数之前,需要记住的事情很少。
在Puppet中,功能由编译器执行,这意味着所有功能都在Puppet主服务器上运行,因此它们不需要与任何Puppet客户端打交道。如果信息以事实的形式出现,功能只能与代理进行交互。
Puppet主机捕获自定义功能,这意味着,如果对Puppet函数了一些更改,则需要重新启动Puppet主机。
函数将在服务器上执行,这意味着该函数所需的任何文件都应存在于服务器上,如果该函数需要直接访问客户端计算机,则该文件将无法执行任何操作。
共有两种完全不同的函数类型,一种是Rvalue函数,该函数返回值,而Statement函数,该函数不返回任何值。
该文件包含函数的名称应该是相同的文件中的函数的名称。否则,它将不会自动加载。
所有自定义函数都实现为单独的.rb文件,并分布在模块之间。需要将自定义函数放在lib / puppet / parser / 函数。可以从以下位置的.rb文件加载功能。
使用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!")