如前一章所述,函数为用户提供了开发自定义函数的权限. Puppet可以通过使用自定义函数扩展其解释能力.自定义函数有助于增加和扩展Puppet模块和清单文件的功能.
需要保留的东西很少在编写函数之前请记住.
在Puppet中,函数由编译器执行,这意味着所有函数都在Puppet master上运行并且他们不需要处理任何Puppet客户端.函数只能与代理进行交互,前提是信息是事实形式.
Puppet master捕获自定义函数,这意味着需要重新启动Puppet master ,如果在Puppet函数中做了一些更改.
将在服务器上执行函数,这意味着服务器上应该存在该函数所需的任何文件,如果函数需要直接访问客户端机器,则无法执行任何操作.
有两种不同类型的函数可用,一种是Rvalue返回值的函数和不返回任何内容的语句函数.
包含函数的文件名应与函数名相同在文件中.否则,它将不会自动加载.
所有自定义函数作为单独的 .rb 文件实现,并在模块之间分发.需要将自定义函数放在lib/puppet/parser/function中.可以从以下位置从 .rb 文件加载函数.
$ libdir/puppet/parser/函数
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!")