puppet一些常用的参数

时间:2023-01-16 19:20:07

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,
}
}