天天看點

puppet連載23:使用ENC節點!/usr/bin/perl -w

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";

puppet連載23:使用ENC節點!/usr/bin/perl -w

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