Puppet 有兩種将節點資訊存儲在外部的方法:
1.使用外部節點分類器 (ENC)
2.使用LDAP伺服器分類
主要學習使用ENC(外部節點分類器)。ENC是一種提供Puppet 查詢節點資料的基于腳本(SHELL、RUBY、PERL等)內建系統,這個腳本傳回類、繼承、變量和環境設定,Puppet可用來定義一個節點和配置主機。
LDAP:是允許你查詢LDAP(輕型目錄通路協定)的目錄來擷取節點的資訊。這種內建方式用得沒有ENC那麼多。列如你的資産管理資料庫或者一個LDAP的DNS後端來提供節點資料
使用外部節點,無論是通過ENC還是LDAP,都是在大規模主機中擴充Puppet實作的推薦方式。
使用ENC的根本原因之一是在于我們的nodes全部定義在/etc/puppet/manifests/site.pp檔案中,如果我們有太多的nodes的話,會使site.pp檔案變得很大!
一般的操作都是在/etc/puppet/manifests/ 目錄下根據每個node的定義不同,建立多個nodes檔案,之後在site.pp中import所有的nodes定義檔案
Import ‘nodes*.pp’
這樣就包含了所有的node,但是随着你node的增多,你需要手工管理太多的檔案
要使用ENC,首先需要更改master的配置檔案:
cd /etc/puppet/
[root@MOBIM-KVM puppet]# vi puppet.conf
檔案最後面追加##
[master]
node_terminus = exec
external_nodes = /etc/puppet/puppet_node_classifer.pl
需要重新開機puppetmaster 服務
[root@MOBIM-KVM puppet]# service puppetmaster restart
停止 puppetmaster: [确定]
啟動 puppetmaster: [确定]
修改這個配置設定,就是說:
- Puppet master接收到一個node的請求的時候,如果 node_terminus 配置為exec,将輸出node的fqdn給external_nodes
2.external_nodes接收到agent的主機名,并将主機名傳遞給/etc/puppet/puppet_node_classifer.pl
腳本的配置:
[root@MOBIM-KVM puppet]# cat puppet_node_
classifer.pl!/usr/bin/perl -w
use strict;
use YAML qw(Dump);
my $hostname = shift || die "NO hostname passed";
hostname";
my @classes = ('rsync','rsync_svn_up');
my %parameters = (
puppetserver => "MOBIM-KVM"
);
print Dump({
classes => \@classes,
parameters => \%parameters,
});
[root@MOBIM-KVM puppet]# perl puppet_node_
mobim_vm1
classes:
- rsync
- rsync_svn_up
parameters:
puppetserver: MOBIM-KVM
這個是一個YAML的格式,相當于
Node mobim_vm1 {
Include rsync
Include rsync_svn_up
}
Rsync rsync_svn_up 是定義的類
以上的配置檔案的修改和腳本都是在master上進行的,在client上請求master進行資料同步
[root@mobim_vm1 /]# puppet agent --server=MOBIM-KVM --test -v
info: Caching catalog for mobim_vm1
info: Applying configuration version '1394015854'
notice: /Stage[main]/Rsync_svn_up/File[svn_up_file]/ensure: defined content as '{md5}4221d002ceb5d3c9e9137e495ceaa647'
info: /Stage[main]/Rsync_svn_up/File[svn_up_file]: Scheduling refresh of Exec[echo file]
notice: /Stage[main]/Rsync_svn_up/Exec[echo file]: Triggered 'refresh' from 1 events
notice: Finished catalog run in 0.60 second
OK,一切正常的,這個是簡單的ENC的應用執行個體,
ERROR
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class svn for mobim_vm1 on node mobim_vm1
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
配置好ENC時,有遇到上面的ERROR資訊,提示我在master上找不到node SSL證書
解決辦法:
給腳本附加可執行的權限
Chmod -R 775 /etc/puppet/puppet_node_classifer.pl