werew 发表于 2014-9-3 10:15:37

puppet class and module 以及 kick功能的实现。

Class:

    Class是用于通用目标的一组资源,因此,它是命名的代码块,在某位置创建后可以在全局使用。
类似于其他编程语言中的类的功能,puppet的Class可以被继承,也可以包含子类。
使用细节:
1、 类的名称只能以小写字母开头,可以包含数字和下划线。2、 每个类都会引入一个新的变量scope,在任何时候访问类中的变量时,都得使用其完全限定名称。3、 在本地scope可以重新为top scope中的变量赋予一个新值。
声明类的两种方式:
Include “类名”
Class{‘类名’:}
类的继承使用案例:
class webserver {
package {'httpd':
      ensure => 'installed',
      }
}

class webserver::proxy inherits webserver {
file {'/etc/httpd/conf/httpd.conf':
      ensure => file,
      source => '/backup/httpd/httpd.conf',
      mode => '0644',
      owner => 'root',
      group => 'tuchao',
      require => Package['httpd'],
   }
service {'httpd':
ensure => running,

subscribe => File['/etc/httpd/conf/httpd.conf'],
      }

}
class webserver::dynamic inherits webserver {
file {'/etc/httpd/conf/httpd.conf':
      ensure => file,
      source => '/backup/httpd/httpd-dynamic.conf',
      mode => '0644',
      owner => 'root',
      group => 'tuchao',
      require => Package['httpd'],
   }

service {'httpd':
ensure => running,
subscribe => File['/etc/httpd/conf/httpd.conf'],
      }
}

include webserver::dynamic

Modules概述

    到目前为止,资源申报、定义类、声明类等所有功能都只能在一个manifest文件中实现,但这却非最有效的基于puppet管理IT基础架构的方式。实践中,
一般需要把manifest文件分解成易于理解的结构,例如将类文件、配置文件甚至包括后面将提到的模块文件等分类存放,并且通过某种机制在必要时将它们
整合起来。这种机制即“模块”,它有助于以结构化、层次化的方式使用puppet,而puppet则基于“模块自动装载器”完成模块装载。从另一个角度来说,模
块实际上就是一个按约定的、预定义的结构存放了多个文件或子目录的目录,目录里的这些文件或子目录必须遵循其命名规范。
Puppet会按此种规范在特定位置查找所需的模块文件,不过,这些特定目录也可以通过puppet的配置参数modulepath定义。

puppet module list //列出所有的模块
puppet master --genconfig| grep modulepath//显示模块的查找路径
puppet module search //搜索模块
puppet module install //安装模块

模块布局:
Module Name
manifests .//用于存放清单文件
init.pp
files //用于存放依赖的配置文件
templates //用于存放模块文件
lib //用于存放库文件
tests //用于存放测试样本文件
spec //用于存放各插件使用规范


站点清单:/etc/puppet/manifests/
    site.pp
      node 'FQDN' {
            include class
      }
puppetmaster / agent 工作过程:








实验一、配置一个puppet-master 控制agent端安装httpd服务。
Puppet master端配置:
1、安装puppet-server
yum install puppet-server -y
2、生成配置文件
puppet master --genconfig > /etc/puppet/puppet.conf
3、修改pid文件路径
vim /etc/puppet/puppet.conf
pidfile = $rundir/master.pid
rundir = /var/run/puppet

4、创建一个模块
mkdir httpd/{manifests,files,lib,test,spec} -pv
5、创建init.pp文件
cd /etc/puppet/modules/httpd/manifests
vim init.pp
写入以下代码:
class httpd {
package {'httpd':
      ensure => 'installed',
      }
user {'tuchao':
      ensure => present,
      home => '/home/tuchao',
      uid => '601',
      gid => '601',
      shell => "/bin/bash",
      managehome => true,
      require => Group['tuchao']
   }
group {'tuchao':
      ensure => present,
      gid => '601',
      }
}
6、创建需要的类文件
vim httpd_web.pp                                                                                                         
写入以下代码:
class httpd::httpd_web inherits httpd {
file {'/etc/httpd/conf/httpd.conf':
      ensure => file,
      source => 'puppet:///modules/httpd/httpd.conf',
      mode => '0644',
      owner => 'root',
      group => 'tuchao',
      require => Package['httpd'],
   }
service {'httpd':
ensure => running,

subscribe => File['/etc/httpd/conf/httpd.conf'],
      }
}
7、创建站点清单文件,定义需要管理的节点。
vim /etc/puppet/manifests/site.pp

node 'server1.tuchao.com' {
include httpd::httpd_web
}
node 'admin1.tuchao.com' {
include httpd::httpd_web
}
node 'admin2.tuchao.com' {
include httpd::httpd_web
}

8、启动puppetmaster
/etc/init.d/puppetmasterstart

puppet-agent端:
1、 安装puppetyum install puppet -y
2、 修改agent端配置文件,在main段中指定puppet-master主机。vim /etc/puppet/puppet.conf
server = server1.tuchao.com
3、 启动puppet服务service puppet start

这时agent会发送证书签署请求给master,我们来到puppet master 端签署证书。
puppet cert list
puppet cert sign --all

再来到agent端查看

注:如果过程中出现问题可以打开debug模式查看详细信息,便于排错。
puppet agent --verbose --no-daemonize --debug

puppet kick 功能实现

    puppet客户端默认每30分钟跟服务器通讯一次,我们可以修改puppetmaster端配置文件中的runinterval指令的值。但是有时,我们希望服务端能给客户端紧急推送一些任务,于是就有了puppet kick(puppet 2.6以前叫puppetrun)。

编辑客户端/etc/puppet/puppet.conf
在后面添加   
listen = true//这个是让puppet监听8139端口

编辑或新建文件/etc/puppet/namespaceauth.conf,包含下面内容
allow *.magedu.com

编辑文件auth.conf
path /run
auth any
method save
allow puppet.magedu.com   

来到master端执行 puppet kick -a --host=admin2.tuchao.com 即可完成推送。

故障总结:

    下面总结一个小问题,如果一个已经与puppet master端完成证书签署的节点更换了主机名,出现无法连接puppet-master开启debug模式报如下错误:

根据上面的提示,我们在master端执行:
puppet cert clean admin2.tuchao.com//清除原主机名相对应的证书。
在agent端执行:
rm -f /var/lib/puppet/ssl/certs/admin2.tuchao.com.pem
puppet agent -t
只后再重启puppet即可重新完成交互公私钥对,完成证书签署。

页: [1]
查看完整版本: puppet class and module 以及 kick功能的实现。