Puppet – 自定义函数

Puppet – 自定义函数


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

编写自定义函数

在编写函数之前,有几件事需要牢记。

  • 在 Puppet 中,函数由编译器执行,这意味着所有函数都在 Puppet master 上运行,它们不需要处理任何 Puppet 客户端。功能只能与代理交互,前提是信息以事实的形式存在。

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

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

  • 有完全两种不同类型的函数可用,一种是返回值的 Rvalue 函数和不返回任何内容的语句函数。

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

放置自定义函数的位置

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

  • $libdir/puppet/解析器/函数
  • 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!")

觉得文章有用?

点个广告表达一下你的爱意吧 !😁