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