puppet自动化运维之资源关系

心已入冬 提交于 2021-01-08 07:56:15

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标签的学习,请听下回分解!!!

 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!