用 templates 來處理檔案內容

templates 在 Puppet 佔有舉足輕重的地位,從簡單到複雜的設定檔都可以透過 templates 來寫成你想像的 file。

What's Templates ?

templates 是基於組合語言, 擅長用來管理複雜的設定,你只要提供簡單的輸入就可以輸出一個複雜的設定檔,templates 用於 file resource 的 content。

Templates 支援的語言

目前 templates 支援兩種語言寫法

  • EPP (Embedded Puppet) 基於 Puppet 自身的語言,目前只在 Puppet 4 以上的版本支援。
  • ERB (Embedded Ruby) 基於 Ruby 語言的寫法,適用所有版本。

兩者看起來 Puppet 想用 EPP 來取代 ERB,寫起來 EPP 和 ERB 的差異不大,但是如果你還不太熟 Puppet,或是比較熟 Ruby 建議可以從 ERB 開始寫起,畢竟網路資料目前還是以 ERB 為主。

寫一個 Templates

這篇會以 ERB 做示範怎麼寫 templates,首先先拿 file 來 include template。

class ntp::config (
  String $driftfile = '/var/lib/ntp/drift',
  Boolean $tinker = true,
  Array $restrict = [ '127.0.0.1', '::1' ],
){
  file { '/etc/ntp.conf':
    ensure => file,
    content => templates("${module_name}"/ntp.conf.erb),
  }
}

把要 input 到 ntp.conf.erb 的參數先定義好 type。

ERB 用變數寫設定

driftfile <%= @driftfile %>
  • Output
driftfile /var/lib/ntp/drift

ERB 的 if 用法

# ntp.conf: Managed by puppet.
<% if @tinker == true -%>
tinker panic 0
<% end -%>
  • Output
# ntp.conf: Managed by puppet.
tinker panic 0

ERB 用 if 判斷 type

<% if @restrict != [] -%>
<% @restrict.flatten.each do |restrict| -%>
restrict <%= restrict %>
<% end -%>
<% end -%>
  • Output
restrict 127.0.0.1
restrict ::1

先用簡單的範例來寫 ERB,因為有了判斷式的幫助所以設定檔就能按照不同的 input 而變化。

results matching ""

    No results matching ""