天天看點

Puppet C/S初探 site.pp檔案介紹(十)

    Puppet生産中常用的就是C/S架構./etc/puppet/manifests/site.pp檔案是puppet站點導航檔案,Agent通路Master的一切配置管理工作都有site.pp檔案開始,site.pp檔案作用是讓Master載入并尋找Agent的配置資訊.site.pp檔案預設在/etc/puppet/manifests/目錄中.

    manifests是puppet的資源清單目錄,puppet的所有資源配置檔案都以*.pp檔案作為擴充名.manifests和site.pp檔案的路徑可以在/etc/puppet.conf檔案中的[master]段修改,通過修改puppet.conf中的manifestdir來修改manifest的資源檔案目錄,修改manifest值來改變更新puppet入口導航檔案.

預設master啟動會監聽8140端口,agent監聽8139端口.

1

2

3

<code>[root@puppet manifests]</code><code># ss -antlp | grep puppet</code>

<code>LISTEN     0      5                         *:8139                     *:*      </code><code>users</code><code>:((</code><code>"puppet"</code><code>,31325,5))</code>

<code>LISTEN     0      5                         *:8140                     *:*      </code><code>users</code><code>:((</code><code>"puppet"</code><code>,32174,5))</code>

puppet的日志輸出路徑預設為系統的syslog.

4

5

6

7

8

9

10

11

<code>[root@puppet manifests]</code><code># tail -f /var/log/messages</code>

<code>Sep 13 23:38:58 puppet puppet-master[34213]: Starting Puppet master version 3.8.7</code>

<code>Sep 13 23:39:04 puppet puppet-agent[31325]: Caught TERM; exiting</code>

<code>Sep 13 23:39:04 puppet puppet-agent[34266]: Reopening log files</code>

<code>Sep 13 23:39:05 puppet puppet-agent[34266]: Puppet --listen / kick is deprecated. See http:</code><code>//links</code><code>.puppetlabs.com</code><code>/puppet-kick-deprecation</code>

<code>Sep 13 23:39:05 puppet puppet-agent[34266]: Starting Puppet client version 3.8.7</code>

<code>Sep 13 23:39:06 puppet puppet-master[34213]: Compiled catalog </code><code>for</code> <code>puppet.localdomain </code><code>in</code> <code>environment production </code><code>in</code> <code>0.03 seconds</code>

<code>Sep 13 23:39:06 puppet puppet-agent[34270]: hello world</code>

<code>Sep 13 23:39:06 puppet puppet-agent[34270]: (</code><code>/Stage</code><code>[main]</code><code>/Main/Notify</code><code>[hello world]</code><code>/message</code><code>) defined </code><code>'message'</code> <code>as </code><code>'hello world'</code>

<code>Sep 13 23:39:06 puppet puppet-agent[34270]: Finished catalog run </code><code>in</code> <code>0.01 seconds</code>

<code>Sep 13 23:39:06 puppet puppet-master[34213]: Report processor failed: Connection refused - connect(2)</code>

通常master也不是随便一台機器就可以連接配接的,一般都會配火牆規則(下面是舉例,真實環境具體對待).

<code># iptables -A INPUT -p icmp</code>

<code># iptables -A INPUT -i lo -j ACCEPT</code>

<code># iptables -A INPUT -d 192.168.30.134 -p tcp -m multiport --dports 80,443,8139,8140  -j ACCEPT</code>

<code># iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</code>

<code># iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT</code>

預設安裝完puppetmaster是不存在site.pp檔案,手動建立site.pp檔案(安裝篇已經将puppet和svn結合,是以在win用戶端操作svn建立):

<a href="https://s1.51cto.com/wyfs02/M01/A5/52/wKioL1m7Ze2wxKzOAAE_Q7Nz9RI726.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M02/06/A2/wKiom1m7ZibjNaXmAAGX7Cp1zog186.png" target="_blank"></a>

注意:如果使用svn托管了puppet代碼,中途直接在伺服器寫代碼會導緻svn版本庫沖突.

報錯如下:

<code>svn: URL </code><code>'svn://192.168.30.134/modules/test'</code> <code>of existing directory </code><code>'/etc/puppet/modules/apache'</code> <code>does not match expected URL </code><code>'svn://192.168.30.134/modules/apache'</code>

解決:登陸puppet master伺服器,rm -rf /etc/puppet/*,重新從svn check即可.

操作如下:

12

13

14

15

16

17

18

19

20

<code>[root@puppet puppet]</code><code># rm -rf *</code>

<code>[root@puppet puppet]</code><code># ls</code>

<code>[root@puppet puppet]</code><code># svn checkout svn://192.168.30.134 /etc/puppet/</code>

<code>Restored </code><code>'/etc/puppet/puppet.conf'</code>

<code>Restored </code><code>'/etc/puppet/namespaceauth.conf'</code>

<code>Restored </code><code>'/etc/puppet/auth.conf'</code>

<code>Restored </code><code>'/etc/puppet/fileserver.conf'</code>

<code>Restored </code><code>'/etc/puppet/autosign.conf'</code>

<code>A    </code><code>/etc/puppet/modules</code>

<code>A    </code><code>/etc/puppet/modules/test</code>

<code>A    </code><code>/etc/puppet/modules/apache</code>

<code>A    </code><code>/etc/puppet/modules/apache/files</code>

<code>A    </code><code>/etc/puppet/modules/apache/lib</code>

<code>A    </code><code>/etc/puppet/modules/apache/manifests</code>

<code>A    </code><code>/etc/puppet/modules/apache/manifests/init</code><code>.pp</code>

<code>A    </code><code>/etc/puppet/modules/apache/templates</code>

<code>A    </code><code>/etc/puppet/manifests</code>

<code>A    </code><code>/etc/puppet/manifests/site</code><code>.pp</code>

<code>A    </code><code>/etc/puppet/manifests/nodes</code><code>.pp</code>

<code>Checked out revision 64.</code>

測試puppet代碼:

puppet notify指令和shell中的echo指令相似,之前的文章介紹過,很多puppet功能測試都會選擇notify指令.

測試節點sh-proxy2更新:

<code>[root@sh-proxy2 ~]</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>'1505315382'</code>

<code>Notice: hello world</code>

<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Notify</code><code>[hello world]</code><code>/message</code><code>: defined </code><code>'message'</code> <code>as </code><code>'hello world'</code>

<code>Notice: Finished catalog run </code><code>in</code> <code>0.02 seconds</code>

測試節點sh-web1更新:

<code>[root@sh-web1 ~]</code><code># puppet agent -t</code>

<code>Notice: Ignoring --listen on onetime run</code>

<code>Info: Caching catalog </code><code>for</code> <code>sh-web1.localdomain</code>

舉例:(多節點比對操作)

建立子產品apache

<code>cd</code> <code>/etc/puppet/modules</code>

<code># mkdir apache/{templates,files,lib,manifests}</code>

子產品清單檔案說明:

uppet子產品,子產品名稱隻能使用小寫字母開頭,可以包含小寫字母、數字、下劃線,但不能使用"main"或"settings"。

     modules/apache/

         files    檔案存儲目錄

             httpd.conf      puppet:///modules/Module_name/module_file

         templates:    模闆目錄,通路路徑template("modulename/Tomplatename")

             *.erp

         manifests:    清單目錄

             init.pp 必須包含且隻能包含一個與子產品同名的類

             httpd.pp 每個清單檔案通常隻包含一個類,類名不可以與子產品重名,除子產品名外可以随意命名

         lib :ruby插件存儲目錄,用于實作一些自定義的功能

示例:

安裝apache軟體httpd的init.pp檔案.

<code>class apache ($sta = </code><code>"present"</code><code>) {</code>

<code>  </code><code>package {</code><code>"httpd"</code><code>:</code>

<code>    </code><code>ensure=&gt; $sta,</code>

<code>  </code><code>}</code>

<code>}</code>

檔案路徑即代碼如圖:

<a href="https://s1.51cto.com/wyfs02/M02/A5/52/wKioL1m7Z-KwOF7UAAFuWV_tBg4623.png" target="_blank"></a>

檔案說明:

site.pp檔案和nodes.pp檔案.

site.pp檔案為agent通路master的導航入口檔案(site.pp檔案直接可以定義資源,class等,批量操作建議引入其他檔案).

manifest 可以有多個,manifest之間可以互相調用使用import.

import :導入所有

如下:

import "nodes"

<a href="https://s3.51cto.com/wyfs02/M00/06/A2/wKiom1m7ZrTh4pCFAAE74HGKwOA576.png" target="_blank"></a>

nodes.pp檔案作用比對主機,主機管理檔案.

模糊比對:node /^sh-(web|proxy)\d+/

精确比對:node "sh-proxy2"

如下:

<a href="https://s2.51cto.com/wyfs02/M02/A5/52/wKioL1m7ZqXBoEiEAAFr3Nvlfqs608.png" target="_blank"></a>

agent端更新操作測試:

<code>[root@sh-proxy2 puppet]</code><code># puppet agent -t</code>

<code>Info: Applying configuration version </code><code>'1505376917'</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>7.14 seconds</code>

本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1965551