Site icon Mr. 沙先生

Puppet 在 hiera 中處理變數(variables) 或是 other values

這篇主要是來自官方的「Hiera: Interpolating variables and other values」這篇,如果你可以理解裡面所說的就可以略過以下我講的 …

 

主要是我用來作筆記用的,Puppet 在 hiera 中主要是用來存放 data,除了 data type 以外也能在 hiera 內使用變數,而且變數的型態寫法都各有”特色”,所以抄一下筆記 …

 

hiera 變數的表示

在 Puppet 中的變數寫法是 ${variable},但是 hiera 的變數寫法是 %{variable},hiera 用 ‘%’ 來定義變數。

 

hiera 的常用的內建變數

這幾個都是常用來獲取 node 資料的變數,可以讓你依照 node 給予相對的值,舉例:

---
servername: "%{trusted.certname}"

由於 Puppet 都是透過 domain 來溝通,所以直接用 %{trusted.certname} 來當 default 的 apache/nginx servername 在合適不過了。

Tip: Most people need a hierarchy level that references the name of a node. The best way to get a node’s name is with trusted.certname. If you need to reference a node’s environment, use server_facts.environment.

 

用 lookup 來取得其他的 hiera data

如果你的 hiera 很大,應該會遇到有很多 hiera data 的值相同,並且一改全部要一起改的狀況,這樣在設計上就可以用 lookup 來取得其他的 hiera data,舉例:

---
php_version: '7.0'
php_package: "php%{lookup('php_version')}"

這樣你的 php_package 就會變成 php7.0,要更換版本只要動到 php_version 就可以搞定。

 

用 alias 直接對應相同的 hiera data

alias 可以幫你直接把整個變數對應,就像:

---
original:
  - 'one'
  - 'two'
aliased: "%{alias('original')}"

 

或是從原本的 hiera data 再加上 data

---
aliased: "%{alias('original')} - 'three'"

 

用 literal 來處理有 ‘%’ 的 hiera data

在 hiera 如果遇到有 % 的 data,就要用 literal 來處理,假設我的 data 是 %{SERVER_NAME},如果沒有做任何處理,會被當做 hiera 的變數,要正常顯示出 %{SERVER_NAME} 要這樣寫:

---
server_name: "%{literal('%')}{SERVER_NAME}"

 

還有 scope,但我覺得 scope 有點多餘,所以就不特別介紹。

 

 

我覺得 hiera 在變數的處理沒有很優雅,常常因為要抓別的 hiera data,原本很短的 data 會寫很長一串 …

 

Exit mobile version