类可以把多个相关的资源定义在一起,组成一个类,一起使用,例如,把sshd和他的配置文件做成一个ssh类,其他的地方要用到就直接包含ssh类就可以了,方便写出更简洁的代码,便于维护。类是可以继承。但少用
class是一个资源的集合,它代表节点上一个单独的配置项目,SSH服务或者NFS包等等,class在一个结点上仅仅形成1次(即在相同的系统上仅能使用一次),因为已经完成的配置应该仅仅存在一次。
1. 定义类(class)
①、定义多个子类:
类定义以class关键字开始,内容放在花括号里面。
格式:
class 类名 { type { "title ": attribute => "value", ... attribute => "value"; }
...(各种资源)
type { "title ": attribute => "value", ... attribute => "value"; } } |
例:
class unix { file { "/etc/passwd": owner => "root", group => "root", mode => 644; "/etc/shadow": owner => "root", group => "root", mode => 440; } } |
②、定义子类:
class motd::file2 { file{ "/etc/file2": owner => "puppet", group => "puppet", ensure => link, target => "/etc/passwd", } }
class motd { file{ "/etc/file2": owner => "puppet", group => "puppet", ensure => link, target => "/etc/passwd", } } |
格式:
class 类名::子类名{ type { "title ": attribute => "value", ... attribute => "value"; }
...(各种资源)
type { "title ": attribute => "value", ... attribute => "value"; } } |
class motd::file2 { file{ "/etc/file2": owner => "puppet", group => "puppet", ensure => link, target => "/etc/passwd", } }
class motd { file{ "/etc/file2": owner => "puppet", group => "puppet", ensure => link, target => "/etc/passwd", } } |
2. 继承(inherits)
类也有用基类(父类)和子类来实现简单的继承和覆盖的模型,一个子类可以继承基类的值并且能够实现它一个或者多个值对基类的值进行覆盖。
子类的作用:完成某个任务,基本同父类的作用,但只是某些参数的不同。
class 类名(新建)inherits 父类名(已存在){ Type ["title"] { attribute => "value",} } |
注:Type:表示资源的类型,且第一个字母必须大写,且必须存在于父类中
{ attribute => "value",}:表示修改父类的某些属性的值
①{ attribute => "value",…, attribute => "value",} 表示修改父类的某些属性的值
②{ attribute => undef,…,attribute => undef,} 表示取消父类的某个属性的值
③{ attribute +> "value"}
{ [attribute +> "value",…, attribute +> "value",]} 表示增加父类没有的某些属性的值或者中概括([])中的数组值
例:
class freebsd inherits unix { File["/etc/passwd"] { group => undef } }
class freebsd inherits unix { File["/etc/passwd","/etc/shadow"] { group => wheel } }
class apache { service { "apache": require => Package["httpd"] } }
#可以使用操作符‘+>’(‘再赋值’)来追加资源的参数,当追加多个依赖时,使用中括号和逗号 class apache-ssl inherits apache { Service[apache] { require +> [ File["apache.pem"], File["/etc/httpd/conf/httpd.conf"] ] } }
|
在上面的例子中,包含类unix的节点的password文件的组名将被设置为“wheel”,而包含类freebsd的节点的password文件的组名则不会被设置(既保持原来的值,不去修改)。
3. 禁用资源
为继承和覆盖最常见的用法是禁止服务或者其它资源:
class apache::disabled inherits apache Service["apache2"] { enable => false, ensure => stopped, }} |
至此,puppet的类就结束了,接下来的是函数的学习,请听下回分解!!!