Puppet - 清单文件

在 Puppet 中,所有使用 Ruby 编程语言编写并以 .pp 扩展名保存的程序都称为 清单。一般来说,所有以创建或管理任何目标主机为目的的 Puppet 程序都称为清单。所有用 Puppet 编写的程序都遵循 Puppet 编码风格。

Puppet 的核心是声明资源的方式以及这些资源如何表示其状态。在任何清单中,用户都可以拥有一组不同类型的资源,这些资源使用类和定义分组在一起。

在某些情况下,Puppet 清单甚至可以包含条件语句以实现所需状态。然而,最终一切都归结为确保所有资源都以正确的方式定义和使用,并且定义的清单在转换为目录后应用时能够执行其设计的任务。

清单文件工作流程

Puppet 清单由以下组件组成 −

  • 文件(这些是纯文件,Puppet 与它们无关,只是将它们拾取并放置在目标位置)

  • 资源

  • 模板(这些可用于在节点上构建配置文件)。

  • 节点(定义与客户端节点相关的所有定义此处)

注意事项

  • 在 Puppet 中,所有清单文件都使用 Ruby 作为其编码语言,并以 .pp 扩展名保存。

  • 许多清单中的"Import"语句用于在 Puppet 启动时加载文件。

  • 为了导入目录中包含的所有文件,您可以以另一种方式使用 import 语句,例如 import 'clients/*'。这将导入该目录中的所有 .pp 文件。

Manifest

编写清单

使用变量

在编写清单时,用户可以在清单中的任何位置定义新变量或使用现有变量。Puppet 支持不同类型的变量,但其中一些变量经常使用,例如字符串和字符串数组。除此之外,还支持其他格式。

字符串变量示例

$package = "vim"  

package {  $package: 
   ensure => "installed" 
}

使用循环

当希望对同一组代码进行多次迭代直到满足定义的条件时,可以使用循环。它们还用于执行具有不同值集的重复任务。为 10 个不同的事情创建 10 个任务。可以创建一个任务,然后使用循环使用想要安装的不同包重复该任务。

最常见的是使用数组来重复具有不同值的测试。

$packages = ['vim', 'git', 'curl']  

package { $packages: 
   ensure => "installed" 
}

使用条件语句

Puppet 支持传统编程语言中的大部分条件结构。条件可用于动态定义是否执行特定任务或是否应执行一组代码。如 if/else 和 case 语句。此外,像 execute 这样的条件还将支持与条件类似的属性,但仅接受命令输出作为条件。

if $OperatingSystem != 'Linux' { 
   warning('This manifest is not supported on this other OS apart from linux.') 
} else { 
   notify { 'the OS is Linux. We are good to go!': }
}