puppet一些常用的参数
通过@,realize来定义使用虚拟资源
虚拟资源主要来解决在安装包的时候,互相冲突的问题
简单说下,在定义资源的时候加上@
例如:
@package { "apache2-mpm-worker": ensure => installed }
它会告诉 Puppet 这个资源存在,但不希望用它做任何事情。不回去应用, Puppet 将会读取并记住虚拟资源定义,但实际上不会创建这个资源,直到你明确指出要创建此资源。
如何使用呢,这时realize排上用场
realize( Package["apache2-mpm-worker"] ) #realize括号内资源必须大写
要创建这个资源,使用如下的 realize 函数:它就会调用虚拟资源,这时系统会去安装它
虚拟资源管理用户
使用虚拟资源来管理用户的权限,只有在应用的时候我们才realize,我们可以先把用户全部创建成虚拟资源,这样的话不会再节点上应用,当我们需要哪些节点应用的时候,我们就使用realize来调用。
定义:
class user::virtual
{
@user { "john": }
@user { "graham": }
@user { "steven": }
}
在某些类中调用它
class user::developers
{
realize( User["graham"],
User["steven"] )
}
当文件更新时运行命令
前面我们提到过,一旦配置文件改变服务就会重启的notify,现在我们在多介绍点参数
这里我们还是借助exec参数来通过shell命令来完成,每次运行 Puppet,exec 资源都会被运行,除非指定了如下参数中的一个:
creates
onlyif
unless #这个我们用过。除非
refreshonly => true
refreshonly 参数的意思是:仅当从其他资源(例如一个文件资源)获得一个 notify 才执行 exec 资源。
实例重新加载nginx配置文件
mkdir /etc/puppet/modules/nginx
mkdir /etc/puppet/modules/nginx/files
mkdir /etc/puppet/modules/nginx/manifests
mkdir /etc/puppet/modules/nginx/templates
接着在manifests里面创建pp文件
[root@pup manifests]# cat nginx.pp
class nginx {
package { "nginx":
ensure => installed } #安装 service { "nginx":
enable => true,
ensure => running, #启动可以加上restart => "/etc/init.d/nginx reload"
} exec { "reload nginx":
command => "/usr/sbin/service nginx reload",
require => Package["nginx"],
refreshonly => true, #仅当它获得通知才会运行
} file { "/etc/nginx/nginx.conf":
source => "puppet:///modules/nginx/nginx.conf",
notify => Exec["reload nginx"], #如果配置文件发生改变,就提供所需的通知(notify)
require => Package["nginx"],
}
}
更多的使用地方
每当遇到资源更新就要采取某些行动的情况,你就可以使用这个类似的模式。可能的用途包括:
触发服务重新加载配置文件
运行语法检查,然后再重新启动服务
连接 config 片段
运行测试
链接 exec 资源
文件递归分发到客户端-- recurse 参数
当你需要使用 Puppet 分发一批位于同一目录下的多个文件时, 就应该考虑使用文件资源的递归特性来替代逐个文件的分发。 如果你在一个目录上设置了 recurse 参数, Puppet 会复制此目录及其子目录中的所有文件到节点目录
purge 参数可以确保在分发目录中没有被 Puppet 管理的文件,清楚干净分发的目录
如果有一个子目录,其中包含了你不想 purge 的文件, 可以将此子目录作为 Puppet 的一个 file 资源单独进行定义, 这样这个子目录中的内容就会保留
如下
[root@pup manifests]# cat tree.pp
class admin::tree{
file { "/tmp/tree":
#ensure => present,
ensure => directory,
source => "puppet:///modules/admin/tree",
recurse => true,
purge => true,
}
#如果有一个子目录或者文件,其中子目录包含了你不想 purge(删除) 的文件, 可以将此子目录作为 Puppet 的一个 file 资源单独进行定义, 这样这个子目录中的内容就会保留:,文件的话也是类似,如下,这样就不会删除客户端/tmp/tree/ceshi.txt文件,不加这段的话,话删除
file {"/tmp/tree/ceshi.txt":
ensure => file,
#ensure => directory,
}
}