puppet(2)-資源介紹

puppet- 資源介紹:mysql

  • 類型、屬性與狀態同實現方式分離、僅指定目標狀態linux

    type {'title':
          attribute   =>  value,
          ...
      }
  • 查看支持的資源類型:nginx

    puppet describe -l
    
      puppet describe -s TYPE
    
      puppet describe TYPE
  • 定義資源的要點:sql

    一、同一種類型中,資源名稱必須唯一;
    
      二、資源名稱是否區分大小與取決於OS;
  • 獨特屬性:shell

    package {'nginx':
          ensure  => present,
          name    => nginx,
      }
    
      命名變量:namevar,可省略,默認爲title
  • 經常使用類型:package, user, group, file, service, exec, cron, notify
  1. group的經常使用屬性:centos

    ensure: present, absent
     name: 組名
     gid: GID
     system: 是否爲系統組;true, yes; false, no
  2. user的經常使用屬性:服務器

    ensure: present, absent
     name: 用戶名
     uid: UID
     system: 是否爲系統用戶;
     gid: 基本組;
     groups: 附加組;
     home: 家目錄;
     password: 密碼;
     shell: 默認shell;
     comment: 註釋信息;
     expiry: 帳號過時期限 不經常使用
  3. file的經常使用屬性:
    管理文件從屬關係、權限及其內容。less

    管理的類型有:ide

    普通文件
     目錄
     符號鏈接等(經過ensure屬性指定)

    若是管理普通文件,文件內容能夠:測試

    直接用content屬性直接給出,
     或者用source屬性根據遠程服務器下載生成

    若是是目錄:resource屬性+recurse屬性能夠遞歸下載目錄
    核心屬性:

    resource: 能夠遞歸下載目錄同時要配合另一個recurse屬性定義是否遞歸下載構造目錄。
     recurse: 屬性是布爾型。所以recurse屬性 只有在ensure 屬性爲directory時纔有意義。
     content:直接生成的文件內容;
     source: 經過指定的URL下載文件至目標位置;願文件路徑,能夠是本地文件路徑(單機模型),也可使用puppet:///modules/module_name/file_name modules指的是模塊路徑,modele_name是模塊名稱
     ensure: file, directory, link, absent, present
     target: 符號連接文件的連接目標;通常當ensure屬性爲link時才須要指定此屬性,表示從哪裏連接,一旦定義target,那麼content和source就沒有用了,沒有任何意義。
     owner: 屬主
     group: 屬組
     mode: 權限,支持八進制個石泉縣,以及u,g,o的賦權方式
     path:目標路徑,指定文件放哪建議使用絕對路徑
     force: 強制刪除;僅用於ensure爲absent時; 不是必須屬性
     purge: 清除指定目錄中存在的,可是在puppet中未定義的文件;
     replace:是否替換已經存在的文件;
  4. exec的經常使用屬性:
    運行一外部命令,命令應該具備「冪等性」 (能夠屢次運行,不會損壞結果)

    冪等性:
     1. 命令自己具備 「冪等性」。 (yum  update ,apt-get update)
     2. 資源有onlyif,unless,creates 等屬性以實現命令的條件式運行。
         onlyif 僅在何時執行
         unless 除非什麼條件下執行
         creates 剛剛建立時執行好比建立目錄/建立文件
     3. 資源有refreshonly 屬性,實現只有訂閱的資源發生變化時才執行。只有在刷新時運行:只有這個資源依賴的其餘資源改變了,這個命令才運行.用於執行命令;但一般僅應該用於必須執行命令才能完成操做時(puppet自己沒法完成此功能);

    核心屬性

    command: 要執行的命令,一般應該使用絕對路徑;
     creates:文件。 此屬性跟的文件不存在時才執行命令。加入command 是建立 文件,那麼執行的條件是這個文件不存在
     onlyif:給定測試命令。僅在此命令執行成功即執行狀態碼返回爲0,才執行command命令
     unless:給定測試命令。 和onlyif相反,僅當測試命令執行狀態碼不爲0時,才執行command命令
     cwd: 目錄, 在哪一個目錄下運行命令
     path:爲非絕對路徑的命令指定搜索路徑; 相似 環境變量 [path1,path2],若是不定義此屬性,則必須給出命令的絕對路徑。
     user:
     group:
     refresh: 跟命令,默認爲收到依賴的資源的事件時會從新執行此命令;但此屬性能夠修改此默認行爲;(定義命令接收到刷新通知時怎樣操做,跟的也是命令,默認命令在執行一次,能夠自定義,加入此命令爲建立目錄,當接收到刷新通知時,你能夠先刪除在建立。簡單點就時 刷新時執行的命令。)
     refreshonly: 此資源不會自動被執行,除非被依賴的資源發生了改變;(僅在收到refresh通知時,才運行此資源,布爾型值)
     returns: 指定狀態返回值;指按期望獲得的返回值,當返回非此值時表示命令執行失敗,默認爲0, 通常不須要定義
     tries: 嘗試執行次數 ,默認一次 根據returns 判斷是否成功
     timeout: 超時時長
  5. notify 最簡單的資源,就是顯示信息

    核心屬性
     message 要發送的消息的內容,仍是name/namevalue 
     notify {'title':
     message     => 'something here',
     }
  6. cron的經常使用屬性: 定義任務計劃/管理任務計劃

    ensure: present, absent
     command: 週期性執行的命令;
     environment: 定義PATH環境變量;
     hour:
     minute:
     month:
     monthday:
     weekday:
  7. package的經常使用屬性:
    管理程序包: 卸載,安裝,升級

    ensure:installed, latest,version(2.3.1-2.el7) ,present, absent
     name: 程序包名稱
     source:包文件的路徑,能夠是本地文件系統路徑,也能夠是個url;puppet:///modules/MODULE_NAME/FILENAME
     provider 指定採用哪一種方式安裝程序包,如在centos系統中默認採用yum進行安裝。如今想經過rpm進行安裝,安裝的源就是source屬性所指定的文件,那麼就必須使用provider屬性 定義成rpm了。因此說 只有當provider 設置了 ,source屬性纔有意義。那麼又一個實際應用的問題,當你採用rpm進行安裝時,須要解決依賴關係,那麼怎麼解決依賴關係呢。這時候咱們就須要使用exec資源了。yum install指定本地安裝文件,那麼會使用本地的rpm包進行安裝,同時又能解決依賴關係。最後你會發現使用exec資源是萬能的。當編譯安裝的時候 仍是要採用exec資源進行.
    
     其餘屬性用的都很少了

    範例:

    package{'mysql':
         ensure  => installed,
         provider    => msi,
         source      => "D:\mysql\mysql-5.5.45.msi",
         install_options =>  {'INSTALLDIR' => 'C:\mysql'},
     }
  8. service 管理服務的

    service的經常使用屬性:
     binary: 指定執行文件
     ensure:
         true, running 啓動
         false, stopped 中止
     enable: 是否開機自動啓動
     name:服務名稱
     path: 服務腳本路徑 咱們知道,在linux系統下有兩種啓動方式, 一種是直接調用二進制執行文件,另一種就是用系統中的服務管理命令,好比centos6中的service。因此當你不指定binary文件時,這個path就是指centos系統中的service命令調用哪一個執行文件。咱們知道通常service管理的服務命令都在/etc/init.d/目錄下。如 /etc/init.d/httpd 文件。另外還有當用service進行管理服務時會有restart,status,start ,stop等選項。可是 puppet 並不知道你有沒有這些命令因此纔會有 hasrestart ,hasstop,hasstart, hasstatus屬性,都是布爾值型。當你把這些值設置爲false時,服務又有需求接受refresh 刷新後進行restart,那你怎麼辦呢。因此又須要咱們本身在資源中定義start,stop, restart, status等屬性,屬性值爲命令
     hasrestart: 是否支持restart參數
     hasstatus: 是否支持status參數
     pattern: 指明用於搜索此服務相關進程的模式,當腳本不支持restart/status時,用於肯定服務是否處於運行狀態。若是你的服務不支持stop,那就須要kill掉進程,那kill 的時候咱們知道有的服務啓動的進程有好幾個,就須要匹配須要kill 掉的每一個進程的,這個應該也是用pattern
     start:
     stop:
     restart: reload
     status:
  • 資源的特殊屬性:
    元參數:如下四個參數都以其餘定義過的的資源做爲屬性值,可是寫法必須時Type['title'] 資源類型首字母要大寫

    用於定義資源間的依賴關係

    before => Type['title']
      require => Type['title']

    用於定義通知通知和訂閱的

    notify
      subscribe

    before/require使用舉例

    before表明 當前資源要在某個資源執行以前執行
      require 當前資源執行須要某一個資源已經執行了
      還有一種鏈式表示的方法,用 ->表示

    範例

    方法一 before:

    group{'linux':
              gid => 3000,
              ensure => present,
              before => User['suse'],
          }
    
          user{'suse':
              uid => 3000,
              gid => 3000,
              shell => '/bin/shell',
              home => '/home/suse',
              ensure => present,
          }

    方法二 require:

    group{'linux':
              gid => 3000,
              ensure => present,
          }
    
          user{'suse':
              uid => 3000,
              gid => 3000,
              shell => '/bin/shell',
              home => '/home/suse',
              ensure => present,
              require => Group['linux'],
          }

    方法三 -> :

    group{'linux':
              gid => 3000,
              ensure => present,
          } ->
    
          user{'suse':
              uid => 3000,
              gid => 3000,
              shell => '/bin/shell',
              home => '/home/suse',
              ensure => present,
          }

notify/subscribe 通知/訂閱舉例

這個用服務舉例,咱們知道nginx服務,當配置文件發生變化時,服務常常須要從新加載配置文件或者重啓。puppet agent每隔一段時間去獲取下catelog有無變化,有變化就會將file資源更新,這時service資源就須要執行restart 操做,那麼咱們首先要知道 puppet 裏service資源什麼時間會調用restart ,當資源接收到refresh時就會調用restart,那麼何時會觸發refresh呢?就是當前資源接收到通知 或者 當前資源訂閱的主題有新信息了。
相關文章
相關標籤/搜索