puppet一些常用的参数

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 }

 

posted @ 2017-01-21 15:17  Dicky_Zhang  阅读(948)  评论(0)    收藏  举报