運維自動化之puppet變量、數據類型(2)

puppet的變量名稱須以"$"開頭,賦值操作符爲"="

任何正常數據類型(非正則)的值都可以賦予puppet中的變量,如字符串、數值、布爾值、數組、hash以及特殊的undef值(即變量未被賦值)

puppet的每個變量都有兩個名字:簡短名稱和長格式完全限定名稱(FQN),完全限定名稱的格式爲"$scope::variable"


Scope是一個特定的代碼區域,用於同程序中的其它代碼隔離開來

在puppet中,scope可用戶限定變量及資源默認屬性的作用範圍,但不能用於限定資源名稱及資源引用的生效範圍

wKioL1NBOguB1ySeAADail2sSS4062.jpg



作用域:

任何給定的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 顯示頂級域的所有變量


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章