前言:
生産機器很多通常會建立nodes.pp檔案和site.pp檔案平級,存放于/etc/puppet/manifests/nodes.pp檔案,這種方法比較常用.當然也有其他辦法直接寫入site.pp檔案.
nodes.pp檔案主機比對,支援正規表達式和繼承.
//:正則比對
"":精确比對
inherits:繼承
執行個體:
先正則比對然後在精确比對.
1
2
3
4
5
6
7
8
9
10
11
12
13
<code>node </code><code>/sh-</code><code>(proxy|web)\d+/ {</code>
<code> </code><code>case</code> <code>$::</code><code>hostname</code> <code>{</code>
<code> </code><code>"sh-proxy2"</code><code>: {</code>
<code> </code><code>include apache</code>
<code> </code><code>user {</code><code>"test1"</code><code>:</code>
<code> </code><code>ensure => present,</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>"sh-web1"</code><code>: {</code>
<code> </code><code>include nginx::nginxconf</code>
<code> </code><code>} </code>
<code> </code><code>}</code>
<code>}</code>
比如sh-proxy不止sh-proxy2一台,有50台也可以比對操作:
<code> </code><code>/sh-proxy</code><code>\d+/: { </code><code>#正則比對</code>
<code> </code><code>include nginx::nginxconf</code>
測試agent端更新:
<code>[root@sh-proxy2 puppet]</code><code># puppet agent -t</code>
<code>Info: Retrieving pluginfacts</code>
<code>Info: Retrieving plugin</code>
<code>Info: Caching catalog </code><code>for</code> <code>sh-proxy2.localdomain</code>
<code>Info: Applying configuration version </code><code>'1505706252'</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Apache/Package</code><code>[httpd]</code><code>/ensure</code><code>: created</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>8.69 seconds</code>
node節點繼承(inherits)
1、建立一個admin子產品,做selinux替換關閉.
/modules/admin/manifests/init.pp檔案内容:
<code>class admin {</code>
<code> </code><code>exec</code> <code>{</code><code>"selinux"</code><code>:</code>
<code> </code><code>command</code> <code>=> </code><code>"sed -i '/^SELINUX=/s/=.*/=disabled/g' /etc/sysconfig/selinux"</code><code>,</code>
<code> </code><code>path => [</code><code>"/bin/"</code><code>,</code><code>"/sbin/"</code><code>,</code><code>"/usr/bin/"</code><code>,</code><code>"/usr/sbin/"</code><code>],</code>
<code> </code><code>user => root,</code>
<code> </code><code>group => root,</code>
<a href="https://s1.51cto.com/wyfs02/M02/A5/A0/wKioL1nAw8WyAzPEAAFb6Nin5HU496.png" target="_blank"></a>
注意:嘗試定義類名'base'報錯,現象:svn無法送出,但卻可以更新,update後擷取到master主機ip位址目錄等資訊,不确實是否和系統内置變量沖突.
<code>manifests</code><code>/nodes</code><code>.pp檔案内容.</code>
<code> </code><code>node base {</code>
<code> </code><code>include admin</code>
<code>node </code><code>/sh-</code><code>(proxy|web)\d+/ inherits base {</code>
<code> </code><code>/sh-proxy</code><code>\d+/: {</code>
<a href="https://s1.51cto.com/wyfs02/M02/A5/A0/wKioL1nAw_vCspdIAAHBv-9Z3Dk369.png" target="_blank"></a>
注意:node節點名不能和子產品名沖突,嘗試定義為node admin,送出無報錯,但是agent端無更新無修改無提示,修改為base以後agent端内容更新.
本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1966829