puppet的變量名稱須以"$"開頭,賦值操作符爲"="
任何正常數據類型(非正則)的值都可以賦予puppet中的變量,如字符串、數值、布爾值、數組、hash以及特殊的undef值(即變量未被賦值)
puppet的每個變量都有兩個名字:簡短名稱和長格式完全限定名稱(FQN),完全限定名稱的格式爲"$scope::variable"
Scope是一個特定的代碼區域,用於同程序中的其它代碼隔離開來
在puppet中,scope可用戶限定變量及資源默認屬性的作用範圍,但不能用於限定資源名稱及資源引用的生效範圍
作用域:
任何給定的scope都可以訪問它自己的內容,以及接收來自於其父scope、節點scope及top scope的內容
如圖所示,top scope僅能訪問自己變量和屬性默認值;
節點scope能訪問自己的及top scope的變量和屬性默認值;
example::parent,example::other和example::four能訪問自己的以及節點scope和top scope的變量和默認值;
如果要訪問非當前scope中的變量,則需要通過完全限制名稱進行,如$vhostdir = $apache::params::vhostdir
需要注意的是,topscope的名稱爲空,因此如若要引用其變量,則需要使用類似"$::osfamily"的方式進行
puppet語言支持多種數據類型以用於變量和屬性的值,以及函數的參數
…字符型
非結構化的文本字符串,可以使用引號,也可以不用;
單引號中的變量不會替換,而雙引號中的能夠進行變量替換;
字符型值也支持使用轉義符;
…數值型
可爲整數或浮點數,不過,puppet只有在數值上下文才把數值當數值型對待,其它情況下一律以字符型處理;
…數組
數組值爲中括號"[]"中的以逗號分隔的項目列表,最後一個項目後面可以有逗號;
數組中的元素可以爲任意可用數據類型,包括hash或其它數組;
數組索引爲從0開始的整數,也可以使用負數索引;
…布爾型
true和false,不能加引號;
if語句的測試條件和比較表達式都會返回布爾型值;
另外,其它數據類型也可自動轉換爲布爾型,如空字符串爲false等;
…undef
從未被聲明的變量的值類型即爲undef;
也可手動爲某變量賦予undef值,即直接使用不加引號的undef字符串;
…hash
即爲外鍵值數據類型,鍵和值之間使用"=>"分割,鍵值對兒定義在"{}"中,彼此間以逗號分割;
其鍵爲字符型數據,而值可以爲puppet支持的任意數據類型;
訪問hash類型的數據元素要使用"鍵"當做索引進行
…正則表達式
屬於puppet的非標準數據類型,不能複製給變量,僅能用於有限的幾個接受正則表達式的地方,即接受使用"=~"及"!~"匹配操作符的位置,通常包括case語句中的selector,以及節點名稱匹配的位置;
它們不能傳遞給函數或用於資源屬性的定義;
puppet中的正則表達式支持使用(?<ENABLED OPTION>:<SUBPATTERN>)和(?-<DISABLED OPTION>:<SUBPATTERN>)兩個特殊的符號
例如下面的示例表示做正則表達式匹配時啓用選項"i"(忽略字符大小寫),但不支持使用"m"(把.當做換行符)和"x"(忽略模式中的空白字符和註釋)
$packages = $operatingsystem ?{
/(?i-mx:ubuntu|debian)/=>'apache2',
/(?i-mx:centos|fedora|redhat)/=>'httpd',
}
facter -p 顯示頂級域的所有變量