- Puppet 教程
- Puppet - 首页
- 基础 Puppet
- Puppet - 概述
- Puppet - 架构
- Puppet - 安装
- Puppet - 配置
- Puppet - 环境配置
- Puppet - Master
- Puppet - Agent 设置
- Puppet - SSL 证书设置
- 安装和配置 r10K
- Puppet - 验证设置
- Puppet - 编码风格
- Puppet - 清单文件
- Puppet - 模块
- Puppet - 文件服务器
- Puppet - Facter 和事实
- 高级 Puppet
- Puppet - 资源
- Puppet - 资源抽象层
- Puppet - 模板
- Puppet - 类
- Puppet - 函数
- Puppet - 自定义函数
- Puppet - 环境
- Puppet - 类型和提供程序
- Puppet - RESTful API
- Puppet - 实时项目
- Puppet 有用资源
- Puppet - 快速指南
- Puppet - 有用资源
- Puppet - 讨论
Puppet - 类
Puppet 类被定义为资源的集合,这些资源被分组在一起以使目标节点或机器达到期望的状态。这些类定义在 Puppet 清单文件中,该文件位于 Puppet 模块内。使用类的主要目的是减少任何清单文件或任何其他 Puppet 代码中相同的代码重复。
以下是一个 Puppet 类的示例。
[root@puppetmaster manifests]# cat site.pp class f3backup ( $backup_home = '/backup', $backup_server = 'default', $myname = $::fqdn, $ensure = 'directory', ) { include '::f3backup::common' if ( $myname == '' or $myname == undef ) { fail('myname must not be empty') } @@file { "${backup_home}/f3backup/${myname}": # To support 'absent', though force will be needed ensure => $ensure, owner => 'backup', group => 'backup', mode => '0644', tag => "f3backup-${backup_server}", } }
在上面的示例中,我们有两个客户端,用户需要存在。可以注意到,我们重复使用了相同的资源两次。一种不执行相同任务的方法是将这两个节点组合起来。
[root@puppetmaster manifests]# cat site.pp node 'Brcleprod001','Brcleprod002' { user { 'vipin': ensure => present, uid => '101', shell => '/bin/bash', home => '/home/homer', } }
以这种方式合并节点来执行配置不是一个好的做法。这可以通过创建类并在节点中包含创建的类来简单地实现,如下所示。
class vipin_g01063908 { user { 'g01063908': ensure => present, uid => '101', shell => '/bin/bash', home => '/home/g01063908', } } node 'Brcleprod001' { class {vipin_g01063908:} } node 'Brcleprod002' { class {vipin_g01063908:} }
需要注意的是类结构是什么样的,以及我们如何使用 class 关键字添加了一个新的资源。Puppet 中的每个语法都有其自己的功能。因此,选择的语法取决于条件。
参数化类
如上例所示,我们已经了解了如何创建类并将其包含在节点中。现在,在某些情况下,我们需要在每个节点上具有不同的配置,例如,当需要在每个节点上使用相同的类拥有不同的用户时。此功能在 Puppet 中使用参数化类提供。新类的配置将如下例所示。
[root@puppetmaster ~]# cat /etc/puppet/manifests/site.pp class user_account ($username){ user { $username: ensure => present, uid => '101', shell => '/bin/bash', home => "/home/$username", } } node 'Brcleprod002' { class { user_account: username => "G01063908", } } node 'Brcleprod002' { class {user_account: username => "G01063909", } }
当我们在节点上应用上述 site.pp 清单时,每个节点的输出将如下所示。
Brcleprod001
[root@puppetagent1 ~]# puppet agent --test Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for puppetagent1.testing.dyndns.org Info: Applying configuration version '1419452655' Notice: /Stage[main]/User_account/User[homer]/ensure: created Notice: Finished catalog run in 0.15 seconds [root@brcleprod001 ~]# cat /etc/passwd | grep "vipin" G01063908:x:101:501::/home/G01063909:/bin/bash
Brcleprod002
[root@Brcleprod002 ~]# puppet agent --test Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for puppetagent2.testing.dyndns.org Info: Applying configuration version '1419452725' Notice: /Stage[main]/User_account/User[bart]/ensure: created Notice: Finished catalog run in 0.19 seconds [root@puppetagent2 ~]# cat /etc/passwd | grep "varsha" G01063909:x:101:501::/home/G01063909:/bin/bash
还可以设置类参数的默认值,如下面的代码所示。
[root@puppetmaster ~]# cat /etc/puppet/manifests/site.pp class user_account ($username = ‘g01063908'){ user { $username: ensure => present, uid => '101', shell => '/bin/bash', home => "/home/$username", } } node 'Brcleprod001' { class {user_account:} } node 'Brcleprod002' { class {user_account: username => "g01063909", } }
广告