Puppet学习之资源(4)

1.Puppet常用命令
puppet help
puppet help apply 查看apply命令详细帮助文档
agent  #客户端进程,负责从master获取数据
apply  #运行本地manifests
     --noop 试运行命令,实际并不生效
     --logdest 日志发送方式
ca   #本地证书管理
catalog  #编译、保存、查看puppet代码,转换成catalog
cert  #证书颁发,用于签署证书
certificate#提供访问证书ca的管理
certificate_request #管理证书请求
config配置选项
facts系统信息检查
file在filebucket中检索和存储文件
inspect发送报告
key删除、保存、创建证书秘钥
kick远程控制agent,远程出发puppet agent命令
mster服务端进程
modules从Forge创建、安装、查询模块
node管理节点
parser解析器管理
plugin插件管理
reoucre将系统资源转换成puppet代码
describe打印当前系统可用资源,以及每个资源的属性

2.puppet常用资源类型
user, group, file, service, exec, cron, notify
资源关系依赖参数:
reuqire :引用一个或者多个依赖的对象,保证该资源在被依赖的对象执行成功之后被应用。即require引用的对象执行之后,当前对象才被应用。
before : 与require相反,保证该资源在被依赖的对象执行之前被应用。即本资源执行成功之后,before引用的对象才会被应用。
元参数require和before只能表示依赖关系,而不能触发
subscribe : 类似require,当引用的对象发生改变时,对当前的对象执行相应的动作
notify : 类似before,该资源对象发生改变时,通知某个资源进行更新。
举例:
file {
'/etc/sshd/sshd_config':
ensure => file,
require => Package['sshd'],
notify => Service['sshd'],
source => 'puppet://$fileserver/files/sshd/sshd_config',
}
service {
'sshd':
ensure => running,
enbale => true,
hasrestart => true,
hasstatus => true,
subscribe => File['/etc/ssh/sshd_config'],
}
package{'sshd': ensure => installed}

在puppet中将按照如下顺序应用以上3个资源:
Package['sshd']->File['/etc/sshd/sshd_config']~>Service['sshd']
其中->标示require依赖,~>标示notcify触发

注意:
手字符大小写区别:
在site.pp中定义全局的资源默认值时
Exec { path => "/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"}
在定义资源依赖关系时也要大写,即reuqire,before,subscribe
require => Package['sshd']

3.虚拟资源
虚拟资源用来管理多重配置共同依赖统一资源的方法。如果多个类依赖同一个资源时可以避免写过个资源,也可以解决资源重定义的错误。
3.1使用方法:
在资源声明开头加上”@“使资源虚化
然后使用以下两种方法之一实例化虚拟资源
(1)”飞船“语法<||>
(2)realize函数
例如:
定义虚拟资源
@user {'Luke': ensure => present}
使用虚拟资源
User <|(group == dba or group == sysadmin) or title == Luke|>
realize User[Luke]

3.2使用define也能实现虚拟资源
如果在一个模块中有多个相同的定义,可以使用define。但是在host没有进行define引用时,puppet会编译所有预先定义的define资源。

4.常用资源使用方法
4.1用户资源
user 、 group
ensure属性值present标示创建,absent删除
4.2软件安装
不同操作系统,支持的资源属性不同,例如RHEL支持yum,Ubuntu支持dpkg
ensure:设置软件包状态。installed标示安装,也可以写成present;absent卸载;purged干净的移除;latest安装最新的软件;还可以指定具体软件版本。
例如:  package {'nginx': ensure >= '1.2.5'}
provider可以指定软件包管理器:
例如:在ubuntu系统中使用apt-get
package {'nginx':
provider => apt-get,
ensure => present,
}

4.2.1指定本地软件包进行安装
package {'rack':
ensure => installed,
provider =>gem,
source => "/home/ruby/rack-1.2.1.gem"
}

4.2.2指定远程软件包安装
package{
'screen':
ensure => present,
provider => rpm,
source => 'http://$fileserver/screen.rpm'
}

4.2.3安装多个软件包
package {
['nginx', 'mysql', 'apache2']:
ensure => present,
}

4.3文件管理
file可用参数
ensure:值可以为file, directory, link,present, absent
content: 文件的内容,与source和target属性互斥
force:强制执行
path: 文件路径,必须使用双引号(”),不定义title时path等于资源的title
purge:清空目录中未在puppet manifests中定义的文件目录,和recurse =>true同时使用
recurse: 递归目录,值为true, false, inf, remote
replace: 判断当本地文件已经存在时是否覆盖
source:源文件,决定从哪儿下载文件至本地,或者从本地读取
sourceselect:source属性可以设置多个,soucreselect可以设置是否只复制第一个有效的source,还是复制所有有效的source到目标服务器,有效值为first或者all
target:指定目标状态,link专用
type:只读文件状态检查类型

例子:
file {
"test":
ensure => directory
path => '/tmp/test'
source => 'puppet:///modules/apache/files/test'
}

4.4服务管理
可用参数:
binary: 守护进程路径,仅用于不支持init的系统
enable:应用于开机启动,true或者false
ensure:服务状态,停止false,运行true
path:指定init脚本路径
pattern: 设置搜索进程的匹配字符串,当init脚本不支持restart/status命令时,用来在进程列表中找到此服务进程以重启或者确认状态
例子:
service {
‘apahce2':
ensure => running,
enable => true,
hasrestart => true,
path => "/etc/init.d",
restart => "/etc/init.d/apache2 reload",
}

4.5定时脚本,cron
puppet会将任务写入/var/spool/cron目录中与用户对应的文件中
可用参数
command : 需要执行的命令,通常使用双引号
environment: 运行的环境变量,例如PATH=‘/bin:/usr/bin:/usr/sbin’
user:默认为root
target:指定用户的cron项,默认为用户的的shell
例子:
假设晚上11点到早上8点之间每两小时,以及早上8点执行一次ntpdate
crontab写法:
0 23-7/2,8 * * * /usr/sbin/ntpdate ntpserver.domain.com
对应的puppet写法如下:
cron {
'ntpdate':
command => "/usr/sbin/ntpdate ntpserver.domain.com",
user => root,
hour => '23-7/2,8',
minute =>0,
}

4.6命令执行
执行外部命令,建议尽量少用exec资源。创建exec资源是为了完成一些puppet无法完成的事情。
同时,在使用exec资源时尽量使用refreshonly和creates属性,少用onlyif和unless属性。
exec常用属性如下:
creates:文件不存在时才执行,指定命令生成的文件
onlyif:命令执行成功返回0时执行
unless:命令执行不成功返回非0时执行
command:执行的命令,必须是完整的、合法的命令。命令必须包含绝对路径或在path中定义了搜索路径。
                    如果命令执行成功,所有的输出会被记录在实例的正常(normal)日志里;如果执行失败(即返回值与我们指定的不同),那么所有的输出会在错误(err)日志中被记录。
cwd:指定命令执行的当前目录,如果目录不存在,则执行会失败
environment:为命令设定额外的环境变量,指定path,回覆盖path的定义,多个环境变量应该以数组的形式来设定。
logoutput:是否记录输出,默认为on_failure,还可以指定为true或false
path:指定命令的搜索路径,如果不指定时命令必须是全部路径,可以采用全路径数组,使用冒号进行分隔。
refresh:定义如何更新此命令,在exec接收到其他资源并通知刷新的情况下,默认再执行一次,但可以定义一个不等同的命令。
refreshonly:该参数可以使命令变为仅刷新触发,也就是只有在一个依赖的对象被改变时,命令才会被执行。仅当命令与其他对象有依赖关系时,这个参数才有意义。
timeout:命令执行超时时间,默认为300s
tries:尝试执行次数
例子:
解压缩文件至/tmp目录。如果”/tmp/files“文件不存在,则执行exec命令。如果文件存在,则不执行。
exec {
'tar -zxf /tmp/nginx-1.3.8.tar.gz':
cwd => "/tmp",
creates => "/tmp/files"
path => ['/usr/bin, /usr/sbin, /bin'],
}

5.标签tag和运行阶段stage
5.1tag
标签可以用来标记资源的分组或分类。
也可以在执行puppet kick时指定标签进行kick。
一个资源可以有任意数量的tag

5.2stage
大范围的控制执行顺序,可以让一组类在另外一组类之前执行,在运行阶段对类的顺序呢进行定制
运行阶段默认为 "main",如果不指定,所有=资源都会关联至”main“阶段运行
运行阶段包含两个部分:
(1)一个名为stage的资源类型
(2)一个名为stage的元参数,用于指定一个类到某个阶段运行
例子:
stage {"first" : before => Stage['main']}
stage {"last": require => Stage['main']}
class {"install_repro": stage => "first"}
class {"deploy" : stage => "last"}




猜你喜欢

转载自blog.csdn.net/biheyu/article/details/41613097