iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 16
0
DevOps

Ops 的轉職之路 - Puppet 從入門就放棄系列 第 16

Day 16 - 手把手系列 - 用 templates 來處理檔案內容

本系列文資料可參考以下:


在 Day 15 稍稍提到了 templates,今天這篇要來專門講 templates

為什麼要拿一個篇幅來講 templates ? 因為要騙文章數阿 (誤 XDD ...

是因為 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。

然後就開始寫我們的 templates

location: /etc/puppetlabs/code/modules/ntp/templates/ntp.conf.erb

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 而變化。


上一篇
Day 15 - Puppet 內建的檔案系統
下一篇
Day 17 - 什麼軟體盤點?就用 facter 就好啦!
系列文
Ops 的轉職之路 - Puppet 從入門就放棄30

尚未有邦友留言

立即登入留言