puppet自動化運維之資源關係

1.引用資源

當咱們引用一個資源時,須要大寫資源類型的首字母,例如File[sshdconfig]。當看到一個大寫的資源類型,須要明白那實際上就是一個資源引用小寫字母是用來定義的。資源只能定義一次,重複定義相同的資源會致使錯誤。ssh

 

       大寫           引用資源學習

       小寫           定義資源ui

 

 

 

1)、資源的引用

    基本格式:          Type ["title",…, "title"]this

注:Type:表示資源的類型,且第一個字母必須大寫spa

title:表示該資源的title,多個title,可用逗號分隔,必須存在server

經常使用於require => Type ["title",…, "title"]ip

表示require以後的引用,必須先存在或正確執行ci


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.資源默認值

    爲某類資源指定一個默認的參數。使用沒有標題的大寫資源首字母方式。資源

格式:
it

       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標籤的學習,請聽下回分解!!!

相關文章
相關標籤/搜索