記Puppet ENC 簡單學習筆記

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章