一、puppet资源
puppet的资源文件通常以.pp
结尾,资源是puppet 的基本元素,每个定义的资源都具有标题、类型及一系列的属性。
puppet定义资源的默认语法为:
type {'title':
attribute1 => value1,
atrribute2 => value2,
……
}
puppet的资源定义有三个特殊属性NAMEVAR、ensure和Provider,分别表示定义资源的名称、资源的目标状态和资源的管理接口。
puppet的资源定义具有以下特性:
1、puppet使用title在编译时区分每个资源,并使用命令变量(NAMEVAR)在执行时区分资源。
2、在同一类资源中其资源的title和NAMEVAR都是唯一的。
3、每个类型的资源都有部分属性具有默认值。
4、如果在某一个资源中,不指定其NAMEVAR值,则默认使用其title的值。
二、puppet的资源类型
1、group
此类型用于管理用户组资源,其常用的属性包括但不限于:
name:用于设置用户组名。
gid:用于蛇用户组ID。
system:用于设置此组是否为系统组,true or false。
ensure:目标状态,present or absent。
members:成员用户。
资源例子:
group{'charles':
ensure => present,
name => 'charles',
}
2、user
此类型用户定义用户资源,其属性包括但不限于:
name:设置用户名。
uid:设置UID。
gid:设置基本组ID。
groups:设置附加组,注意,不能包含基本组。
comment:添加注释。
expiry:设置用户账号过期时间。
home:设置用户家目录。
shell:设置用户的默认shell。
system:设置该用户是否为系统 用户。
ensure:设置该用户资源的状态。
password:设置用户的登录密码,需为加密后的密码串。
b
资源例子:
user{'charles':
ensure => present,
name => 'charles',
shell => '/bin/bash',
password => '$6$MFMKzg2y3Obrujqi$KOuDgG8kdE3v3Bl0I8LEpCe.LZOqM1ZNerBCPdfwBnmkDbC4ZhLJlXKd/yp/7JSu9PZ4JrCpVmWviCbK3Cyss.',
}
3、package
用于管理包组资源,其属性包括但不限于:
ensure:用于指明包资源的状态,包括:installed、present、latest、absent等等。
name:指明包名。
source:指定安装包的来源路径。
provider:指定如何安装包,如rpm、yum等等的方式。
资源例子:
package{'nginx':
ensure => latest,
provider => yum,
require => Package['epel']
}
package{'epel':
ensure => latest,
provider => yum,
name => 'epel-release',
}
4、service
用于管理服务资源,其属性包括但不限于:
ensure:指定服务的运行状态,running or stopped。
enable:指定服务是否开机自启动,true or false。
name:指定服务名称。
path:指定搜索启动脚本的路径。
hasrestart:用于指定带有restart命令的脚本,如果没有restart选项,则会默认调用stop和start来组合完成重启动作。true or false
restart:手动定义用于重启的命令,通常用于定义reload的操作。
subscribe => File["配置文件路径"]:当配置文件改变的时候,重启服务。
资源例子:
service{'nginx':
ensure => running,
enable => true,
name => 'nginx',
require => Package['nginx'],
}
5、file
用于管理文件资源,包括文件的属主、属组和访问权限等,其属性包括但不限于:
ensure:指定文件的状态及类型,常用值:present、absent、file、directory、link。
path:指定目标文件的路径。
source:指定源文件路径。
content:指定文件内容。
target:指定符号链接的目标文件。
owner:指定文件的属主。
group:指定文件的属组。
mode:指定文件的权限。
atime/ctime/mtime:指定文件的时间戳属性。
资源示例:
file{'test.txt':
path => '/tmp/test.txt',
ensure => file,
source => '/etc/fstab',
}
file{'test.symlink':
path => '/tmp/test.symlink',
ensure => link,
target => '/tmp/test.txt',
require => File['test.txt'],
}
file{'test.dir':
path => '/tmp/test.dir',
ensure => directory,
source => '/etc/yum.repos.d/',
recurse => true,
}
6、exec
用于定义指定的命令资源,定义的命令必须可以重复执行多次并且不产生额外的错误。其常用属性包括:
command:指明要运行的命令,不指定的话默认为namevar的值。
cwd:切换到指定的目录下执行命令。
creates:文件路径,仅此路径表示的文件不存在时,command方才执行。
user/group:运行命令的用户身份。
path:指定所使用命令的存放路径。
onlyif:此属性指定一个命令,此命令正常(退出码为0)运行时,当前command才会运行。
unless:此属性指定一个命令,此命令非正常(退出码为非0)运行时,当前command才会运行。
refresh:重新执行当前command的替代命令。
refreshonly:仅接收到订阅的资源的通知时方才运行。
资源例子:
exec{'useradd':
command => 'useradd user1 ; echo "123456"| passwd --stdin user1',
unless => 'id user1',
path => '/bin:/sbin',
}
7、cron
用于安装管理cron资源,每一个cron任务资源都必须提供 一个任务和至少一个周期属性,其常用属性包括:
command:需要周期执行的任务命令。
ensure:cron任务资源的状态。
hour/minute/monthday/month/weekday:定义时间周期属性
user:定义该cron任务以哪个用户身份运行。
target:添加为指定用户的周期任务。
name:cron周期任务的名称。
资源示例:
cron{'timesync':
command => '/usr/sbin/ntpdate 10.1.0.1 &> /dev/null',
ensure => present,
minute => '*/3',
user => 'root',
8、notify
向代理终端发送开始工作的通知信息,常用属性:
message:信息内容
name:信息名称;
三、应用例子
#配置安装nginx,并根据根据nginx.conf是否修改来决定是否需要重载nginx服务
[root@localhost manifests]# vim nginx.pp
package{'nginx':
ensure => latest,
provider => yum,
require => Package['epel'],
}
package{'epel':
ensure => latest,
provider => yum,
name => 'epel-release',
}
file{'nginx.conf':
path => '/etc/nginx/nginx.conf',
source => '/root/manifests/nginx.conf',
ensure => file,
notify => Service['nginx'],
}
service{'nginx':
ensure => running,
enable => true,
name => 'nginx',
restart => '/usr/sbin/nginx -s reload',
hasrestart => true,
}
Package['nginx'] -> File['nginx.conf'] -> Service['nginx']
[root@localhost manifests]# puppet apply -v -d --noop nginx.pp
[root@localhost manifests]# puppet apply -v -d nginx.pp