Puppet - 函数

Puppet 支持函数,就像任何其他编程语言一样,因为 Puppet 的基础开发语言是 Ruby。它支持两种类型的函数,即 statementrvalue 函数。

  • Statement 独立存在,没有任何返回类型。它们用于执行独立任务,例如在新的清单文件中导入其他 Puppet 模块。

  • Rvalue 返回值,并且只能在语句需要值(例如赋值或 case 语句)时使用。

Puppet 中函数执行的关键是,它仅在 Puppet Master 上执行,而不在客户端或 Puppet Agent 上执行。因此,它们只能访问 Puppet Master 上可用的命令和数据。有不同类型的函数已经存在,甚至用户也有权根据需要创建自定义函数。下面列出了一些内置函数。

文件函数

文件资源的文件函数用于在 Puppet 中加载模块并以字符串形式返回所需的输出。它查找的参数是 <module name>/<file> 引用,这有助于从 Puppet 模块的文件目录加载模块。

例如 script/tesingscript.sh 将从 <module name>/script/files/testingscript.sh 加载文件。函数具有读取和接受绝对路径的能力,这有助于从磁盘上的任何位置加载文件。

包含函数

在 Puppet 中,包含函数与任何其他编程语言中的包含函数非常相似。它用于声明一个或多个类,从而评估这些类中存在的所有资源,并最终将它们添加到目录中。它的工作方式是,include 函数接受类名、类列表或逗号分隔的类名列表。

使用 include 语句时要记住的一件事是,它可以在一个类中使用多次,但限制为只能包含一个类一次。如果包含的类接受参数,则 include 函数将使用 <class name>::<parameter name> 作为查找键自动查找它们的值。

在声明类时,include 函数不会导致类包含在类中,为此我们需要使用包含函数。它甚至不会在声明的类及其周围的类中创建依赖关系。

在包含函数中,只允许使用类的全名,不允许使用相对名称。

定义函数

在 Puppet 中,定义函数有助于确定给定类或资源类型的定义位置并返回布尔值。还可以使用 define 来确定特定资源是否已定义或定义的变量是否具有值。使用定义函数时要记住的关键点是,此函数至少需要一个字符串参数,可以是类名、类型名、资源引用或"$name"形式的变量引用。

定义函数检查本机和定义函数类型,包括模块提供的类型。类型和类通过其名称匹配。该函数使用资源引用匹配资源减速。

定义函数匹配

# 匹配资源类型
defined("file")
defined("customtype")

# 匹配定义和类
defined("testing")
defined("testing::java")

# 匹配变量
defined('$name')

# 匹配声明的资源
defined(File['/tmp/file'])