本文主要寫puppet的資料類型中的數值類型和數組的使用,部落客puppet為3.8版本,puppet數組的追加功能測試沒有成功,官網也沒有給出示例,确定是否已經優化或者取消.官網資料類型連接配接位址
https://docs.puppet.com/puppet/3.8/lang_datatypes.html
puppet的資料類型
目前puppet支援字元串類型、數字、數組、哈希、布爾型、undef和正規表達式.
一、字元串類型
定義字元串需要以雙引号("")或單引号('')進行聲明,在puppet中預設的資料類型就是字元串類型.
字元竄類型聲明注意:
1、不能使用puppet關鍵字.
2、字元串類型由字母[a-z][A-Z]、數字[0-9]、連接配接符(-)和下劃線(_)組成.
3、建議字元串類型使用utf-8的字元集.
示例(上篇文章的變量定義):
1
2
<code>$content=</code><code>"this is file"</code>
<code>$content=</code><code>'this is file'</code>
注釋:單雙引号都可以.
puppet中通過單雙引号聲明的字元串中,有些特殊字元串定義尾部含有"\",需要使用反斜杠屏蔽字元特殊意義.
如path => c:\data\ #尾部有'\',需要轉義.
示例如下:
<code>$content=</code><code>'c:\data\\'</code>
<code>notify {</code><code>"hostip is $content"</code><code>:}</code>
注意:$content='c:\data\\'後如果尾部沒有反斜杠'\'轉義,會報文法錯誤.
常見的需要轉義的符号:
<code>\$,\",\',\\,\n,\r,\t,\s</code>
二、數值類型
puppet中支援數值類型,數值類型是指定義成的數值形式的資料,這種資料可以進行加、減、乘、除、與、或、取反等數學運算.在puppet中數值類型包括整數類型、浮點數,當然也支援整數類型運算和浮點數類型運算.
整數類型的計算:
加法運算:
<code>$content=7 + 4</code>
agent端更新:
3
4
5
6
7
8
9
10
<code>[root@sh-web1 ~]</code><code># puppet agent -t</code>
<code>Notice: Ignoring --listen on onetime run</code>
<code>Info: Retrieving pluginfacts</code>
<code>Info: Retrieving plugin</code>
<code>Info: Caching catalog </code><code>for</code> <code>sh-web1.localdomain</code>
<code>Info: Applying configuration version </code><code>'1505927717'</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Admin/Exec</code><code>[selinux]</code><code>/returns</code><code>: executed successfully</code>
<code>Notice: hostip is 11</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Node</code><code>[sh-proxywebd]</code><code>/Notify</code><code>[hostip is 11]</code><code>/message</code><code>: defined </code><code>'message'</code> <code>as </code><code>'hostip is 11'</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.26 seconds</code>
乘法運算:
<code>$content=7 * 4</code>
<code>Info: Applying configuration version </code><code>'1505927786'</code>
<code>Notice: hostip is 28</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Node</code><code>[sh-proxywebd]</code><code>/Notify</code><code>[hostip is 28]</code><code>/message</code><code>: defined </code><code>'message'</code> <code>as </code><code>'hostip is 28'</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.29 seconds</code>
取餘運算:
<code>$content=7 % 4</code>
<code>Info: Applying configuration version </code><code>'1505927969'</code>
<code>Notice: hostip is 3</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Node</code><code>[sh-proxywebd]</code><code>/Notify</code><code>[hostip is 3]</code><code>/message</code><code>: defined </code><code>'message'</code> <code>as </code><code>'hostip is 3'</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.27 seconds</code>
除法運算:
<code>$content=7 / 4</code>
<code>Info: Applying configuration version </code><code>'1505928069'</code>
<code>Notice: hostip is 1</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Node</code><code>[sh-proxywebd]</code><code>/Notify</code><code>[hostip is 1]</code><code>/message</code><code>: defined </code><code>'message'</code> <code>as </code><code>'hostip is 1'</code>
浮點數類型運算:
<code>$content=7 + 0.4</code>
<code>Info: Applying configuration version </code><code>'1505927886'</code>
<code>Notice: hostip is 7.4</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Node</code><code>[sh-proxywebd]</code><code>/Notify</code><code>[hostip is 7.4]</code><code>/message</code><code>: defined </code><code>'message'</code> <code>as </code><code>'hostip is 7.4'</code>
注意:符号不能同時使用;浮點型資料以數字加小數點的形式表達.
錯誤的示例:
<code>$content=7 / .4</code>
<code>$content=7 / +4</code>
三、數組
數組的定義:
數組就是将同一類事物按照一定的順序放到一個集合中,通過定義這個集合來完成對數組中所有的事物的定義,puppet中數組通過方括号來定義,數組中的資料通過","分隔.
puppet通過["value1","value2"]的形式來定義數組,并将定義後的數組指派給變量.
注意:下面示例包含兩種正确寫法和一種錯誤寫法,網絡有很多博文都在傳錯誤的寫法,不知道他們是照抄還是都沒自己去寫寫.
示例:
正确寫法(一)
這種算中規中矩的寫法,網上很多這樣的例子.
<code>class php {</code>
<code> </code><code>package {[</code><code>"php"</code><code>,</code><code>"php-devel"</code><code>]:</code>
<code> </code><code>ensure=> </code><code>"installed"</code>
<code> </code><code>}</code>
<code>}</code>
agent端測試:
<code>[root@sh-web1 yum.repos.d]</code><code># puppet agent -t</code>
<code>Info: Applying configuration version </code><code>'1506074734'</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Php/Package</code><code>[php]</code><code>/ensure</code><code>: created</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Php/Package</code><code>[php-devel]</code><code>/ensure</code><code>: created</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>12.77 seconds</code>
正确寫法(二)
下面這種寫法也是突發奇想,$packages既然等于數組的元素,那麼下面再加[],就又是數組了,這樣總是對的吧,測試果然可行.
<code> </code><code>$packages=[</code><code>"php"</code><code>,</code><code>"php-devel"</code><code>,]</code>
<code> </code><code>package {[$packages]:</code>
<code>Info: Applying configuration version </code><code>'1506076818'</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>31.33 seconds</code>
錯誤寫法:網絡很多數組的定義都是下面這種寫法,官網并沒有給出數組的調用案例隻給了定義數組.
聲明php類,安裝php軟體包.
<code> </code><code>$packages = [</code><code>"php"</code><code>,</code><code>"php-devel"</code><code>]</code>
<code> </code><code>package {</code><code>"$packages"</code><code>:</code>
<a href="https://s2.51cto.com/wyfs02/M00/A6/0C/wKioL1nIdR7SduRWAADQxrm7Wlk682.png" target="_blank"></a>
<code>Info: Applying configuration version </code><code>'1506077242'</code>
<code>Error: Execution of </code><code>'/usr/bin/yum -d 0 -e 0 -y list phpphp-devel'</code> <code>returned 1: Error: No matching Packages to list</code>
<code>Error: </code><code>/Stage</code><code>[main]</code><code>/Php/Package</code><code>[phpphp-devel]</code><code>/ensure</code><code>: change from absent to present failed: Execution of </code><code>'/usr/bin/yum -d 0 -e 0 -y list phpphp-devel'</code> <code>returned 1: Error: No matching Packages to list</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>1.01 seconds</code>
注意報錯:puppet把php和php-devel連一起了phpphp-devel.
puppet數組的取值
puppet數組和其他程式設計語言中的數組一樣,下标從0開始.可以将數組指派給變量,并通過[數組下标]的方式進行取值.
<code># cat 2.pp </code>
<code>$foo=[</code><code>'one'</code><code>,</code><code>'two'</code><code>,</code><code>'three'</code><code>]</code>
<code>notice ($foo[1]) </code><code>#通過notice函數列印$foo數組two的值.</code>
本地應用:
<code>[root@sh-web1 ~]</code><code># puppet apply 2.pp </code>
<code>Notice: Scope(Class[main]): two</code>
<code>Notice: Compiled catalog </code><code>for</code> <code>sh-web1.localdomain </code><code>in</code> <code>environment production </code><code>in</code> <code>0.02 seconds</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.01 seconds</code>
嵌套數組
puppet通過嵌套數組來模拟多元數組,并通過索引的方式通路嵌套數組的值.
通過notice函數列印$foo數組索引為1的two的值.
<code>[root@sh-web1 ~]</code><code># cat 2.pp </code>
<code>$foo=[</code><code>'one'</code><code>,{</code><code>'two'</code> <code>=> 2,</code><code>'three'</code> <code>=> 3}]</code>
<code>notice ($foo[1][two])</code>
agent端測試更新:
<code>Notice: Scope(Class[main]): 2</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.02 seconds</code>
本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1968370