1.引用资源
当我们引用一个资源时,需要大写资源类型的首字母,例如File[sshdconfig]。当看到一个大写的资源类型,需要明白那实际上就是一个资源引用。小写字母是用来定义的。资源只能被定义一次,重复定义相同的资源会导致错误。
大写 : 引用资源 小写 : 定义资源
|
1)、资源的引用:
基本格式: Type ["title",…, "title"]
注:Type:表示资源的类型,且第一个字母必须大写
title:表示该资源的title,多个title,可用逗号分隔,必须存在。
常用于require => Type ["title",…, "title"]
表示require之后的引用,必须先存在或正确执行
2)、实例:
#定义 file { 'sshdconfig': path => $operatingsystem ? { solaris => '/usr/local/etc/ssh/sshd_config', default => '/etc/ssh/sshd_config', }, owner => 'root', group => 'root', mode => '0644', } service { 'sshd': #引用 subscribe => File['sshdconfig'], } |
2.资源默认值
为某类资源指定一个默认的参数。使用没有标题的大写资源首字母方式。
格式:
Type { 属性 => 值,…, 属性 => 值;}
注:Type:表示资源的类型,且第一个字母必须大写,不需要title.
例如,为所有的执行命令设置默认的path参数:
vi /etc/puppet/manifests/site.pp Exec { path => '/usr/bin:/bin:/usr/sbin:/sbin' } exec { 'echo this works'} |
第一行代码为exec资源提供一个默认的path参数。exec资源需要一个完整的限定路径或者能够通过path参数找到具体的可执行文件。资源定义时若有必要可以覆盖path的默认设置。这种情况下我们可以为所有的配置指定一个默认path参数,特殊情况时覆盖它就可以了。
默认值不是全局的,它只在当前范围和当前范围下面有效。如果你想为所有的配置设置默认值,唯一选择是在任意类的外面定义它们,或在/etc/puppet/manifests/site.pp中定义。
3.资源之间相互关系
1)、puppet 资源之间简单依赖关系:
puppet 资源之间简单依赖关系,主要是有下面的三个参数:
before:在某个资源之前执行,before => 要引用的资源(首字母大写)
after: 在某个资源之后执行,after => 要引用的资源(首字母大写)
require: 某个资源必须存在或者正确执行后,才执行。常用 require => 要引用的资源(首字母大写)
|
before、after、和require,均可用于各个资源中。
为了便于理解,下面就给大家看个代码示例:
代码示例:
file {"/etc/ssh/sshd_config": ..... require => Package["openssh-server"], #引用package {"openssh-server": …} } package { “openssh-server”: …… before => File["/etc/ssh/sshd_config"], } |
上面例子我们可以知道:/etc/ssh/sshd_config必须在openssh-server这个软件包安装后,才会生成。
after和before相反,就不举例说明了。那大家会有个问题,那/etc/ssh/sshd_config有改动的时候,那要怎么办呢,接下来就为大家介绍,puppet资源之间触发更新动作。
class admin::ntp { package { "ntp": ensure => installed, require => File["/etc/ntp.conf"], } service { "ntp": ensure => running, require => Package["ntp"], } file { "/etc/ntp.conf": source => "puppet:///modules/admin/ntp.conf", notify => Service["ntp"], require => Package["ntp"], } } |
Package["ntp"] -> File["/etc/ntp.conf"] ~> Service["ntp"]
2)、puppet 资源之间触发更新:
puppet资源之间触发更新主要是由下面二个参数。在执行Services,Exec资源中非常有用。
notify:用来通知某个资源进行更新。
subscribe:资源有更新时,通知另一个资源执行相应的动作。
|
其实这两个效果参数效果是一样的。接下来看下代码示例,更好的理解上面的两个参数。
file {"/etc/ssh/sshd_config": ..... notify => Service[sshd], } service {"sshd": ...... subscribe => File["/etc/ssh/sshd_config"], } |
上面的例子,我们可以看到,当/etc/ssh/sshd_config文件发生更新时,就会通知sshd服务,进行reload.
至此,puppet的资源关系就结束了,接下来的是tag标签的学习,请听下回分解!!!
来源:oschina
链接:https://my.oschina.net/u/727880/blog/264590