Puppet - 自定义功能

如前一章所述,函数为用户提供了开发自定义函数的权限. 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!")