Puppet - 函数
Puppet 支持函数,就像任何其他编程语言一样,因为 Puppet 的基础开发语言是 Ruby。它支持两种类型的函数,即 statement 和 rvalue 函数。
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'])