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: [確定]
修改這個配置設置,就是說:
1. 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 =~ /^([\w-]+)\_vm(\d[0-9]?)/i or die "Invalid hostname :$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_classifer.pl 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