天天看點

Puppet資料類型中[數值類型,數組的使用] (十四)

        本文主要寫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 =&gt; 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=&gt; </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>=&gt; 2,</code><code>'three'</code> <code>=&gt; 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