<51cto文档上传功能较弱,读者可留言索取puppet word文档,tks>

在掌握《集中管理利器-puppet快速入门-上》的基本功学习后,我们可以进行接下来的学习

Puppet配置

文件管理 file

文件服务器写法:

/etc/puppet/ fileserver.conf 定义

223319735.png

223320531.png

223320677.png

223320564.png

223320456.png

223320996.png

223324957.png

http://docs.puppetlabs.com/references/latest/type.html#user
http://docs.puppetlabs.com/references/latest/type.html#group



用户管理



223324501.png


http://docs.puppetlabs.com/references/latest/type.html#file


命令执行

实例:

###命令执行

/etc/puppet/manifests/site.pp 配置

file  {"/tmp/mysql_test/mysql_test.tgz":    ##将pmaster  /tmp/files/mysql_test.tgz文件下发到agent  /tmp/mysql_test/目录下

    source =>  "puppet://pmaster.example.com/files/mysql_test.tgz",  


}

exec { "unzip tgz packget":

    command => "tar -xvf  /tmp/mysql_test/mysql_test.tgz",    ###所有命令必须为全路径或者path参数指定命令搜索路径

    path => "/usr/bin:/usr/sbin:/bin:/sbin",

    cwd => "/tmp/mysql_test"   ##命令执行的路径为: /tmp/mysql_test/

    creates => "/etc/my.cnf"   #当/etc/my.cnf不存在的时候,才会执行该命令

    tries => 2,  #重试次数

    try_sleep => 3, #重试间隔 s为单位

}



223324737.png



常用命令诠释:

1. command
指定要执行的命令。如果忽略,这个参数的值默认为资源的标题。必须填写命令的完整路径或者提供这个命令的查找路径。假如命令执行成功,执行过程的输出将会记录到普通(normal)日志中,但是如果命令执行失败,任何的输出都会记录到错误日志中

2. creates
命令创建的一个文件。加入这个参数设置的话,只有这个文件不存在的时候命令才会执行,例子:

3. cwd
命令执行的路径。假如目录不存在,命令执行将会失败。

4. environment
为命令设置附加的环境变量。加入你用这个参数设置PATH,那么将会把path参数的值覆盖。多个环境变量需要使用数组指定。

5. group
执行命令运行的用户组。这个看起来在各个平台运行结果不确定,这是平台的问题不是ruby或者puppet的问题。

6. logoutput
是否记录输出信息。默认会根据exec资源的日志等级来记录输出信息,使用on_failure只有当命令执行出错的时候才会记录输出信息。值可以为true、fales、on_failure和任何合法的日志等级。

7. onlyif
只有onlyif指定命令执行返回为0的时候,命令才会执行

8. path
命令执行搜索的路径。如果没有指定path,命令需要填写完整的路径。路径可以指定为一个数组并通过冒号分隔。

9.timeout
指定命令运行的最长时间。假如命令执行的时间查过timeout设定的时间,那么就会认为命令执行失败了并且会停止该命令。设置为0表示没有执行时间限制。时间以秒为单位。

10.tries
命令执行重试次数,默认为1。设置这个参数命令将会重试你设置的次数直到合理的代码返回。

11.try_sleep
设置命令重试的间隔时间,单位是秒。

12.user
指定执行命令的用户。
备注:加入你使用这个参数,任何错误输出不会在当下扑捉。这是源自ruby内部的一个bug

更多请参见:

http://docs.puppetlabs.com/references/latest/type.html#exec




Cron管理


实例:

cron { "sh /tmp/a.sh":

    command => "/bin/sh /tmp/a.sh",

    user=> root,

    minute  => '*/3'

    #ensure  =>  "absent";   ##cron删除

}



命令用法

puppet –genconfig#查看当前配

service  puppetmasterd start   #启动puppetmaster

service puppet  start     ##启动客户端

客户端的运行报告在服务器端:/var/lib/puppet/reports/
每次运行会生产一个报告,报告文件名为:/var/lib/puppet/reports/hy18.uniqlick.com/201108020948.yaml

Agent  /etc/hosts中添加主机信息

puppetmasterd genconfig > puppet.conf

puppet master --verbose --no-daemon

agent   連接server

puppet agent --server=pmaster --no-daemonize --verbose

使用waitforcert 參數改變agent等待時間

puppetmasterd --configprint modulepath   ##打印默认路径

连接并对agent进行验证,我们需要对agent发送到master的证书进

puppet cert list  ##显示等待签名的服务器

puppet cert --sign node1.example.com   ##签名

puppert cert sign all #对所有等待的证书进行签名






服务器控制客户端立即运行


Puppet kick 官网不造成使用,只检查客户端返回状态,不检查命令执行结果,新版本会弃用

Agent配置:


puppet.conf


[agent]

listen = true


auth.conf 红色部分为新增

path /run

auth any

method save

allow pmaster.example.com

# this one is not stricly necessary, but ithas the merit

# to show the default policy which is denyeverything else

path /

auth any


demo方式启动agent

service puppet restart    ###启动成功不代表成功了,netstat确认端口被监听,puppet这块功能有待完善…

224157297.png



Master远程确认8139端口可通


223328509.png


Client确认文件是否被重新生成

class类的尝试

配置文件作如下变更:

223328184.png


Mysql单独起一个模块配置

[root@pmaster puppet]# tree manifests/

manifests/

|-- init.pp

|-- nodes

|    `-- nodes.pp

|-- site.pp

|-- site.pp_normal

`-- site.ppaa


1 directory, 5 files

[root@pmaster puppet]# pwd

/etc/puppet

[root@pmaster puppet]# tree modules/

modules/

|-- mysql

|    |-- manifests

|    |   |-- config.pp

|    |   |-- init.pp

|    |   |-- init.ppa

|    |   |-- install.pp

|    |   `-- service.pp

|    `-- template

|        `-- my.cnf.erb

`-- test

    `-- manifests

        `-- init.pp


5 directories, 7 files

[root@pmaster puppet]# cat modules/mysql/manifests/config.pp  

class mysql::config{

file  {"/tmp/mysql_test/mysql_test.tgz":    ##将pmaster  /tmp/files/mysql_test.tgz文件下发到agent  /tmp/mysql_test/目录下

    source =>  "puppet://pmaster.example.com/files/mysql_test.tgz",  


}


}

[root@pmaster puppet]# cat  modules/mysql/manifests/init.pp

class mysql::mysql{

    include mysql::install,mysql::config

}

[root@pmaster puppet]# cat  modules/mysql/manifests/service.pp

class mysql::service{

    service{"mysql":

          ensure    => running,

          hasstatus => true,

          hasrestart => true,

          enable     => true,

          name       =>  "mysql",

          require    =>  Package["mysql"],

          #subscribe  =>  File["/etc/my.cnf"],

}



}

[root@pmaster puppet]# cat  modules/mysql/manifests/install.pp

class mysql::install{

exec { "unzip tgz packget":

    command => "tar -xvf  /tmp/mysql_test/mysql_test.tgz",    ###所有命令必须为全路径或者path参数指定命令搜索路径

    path => "/usr/bin:/usr/sbin:/bin:/sbin",

    cwd => "/tmp/mysql_test",   ##命令执行的路径为: /tmp/mysql_test/

    creates => "/etc/my.cnf",   #当/etc/my.cnf不存在的时候,才会执行该命令

    tries => 2,  #重试次数

    try_sleep => 3, #重试间隔 s为单位

}

}


高级扩展:

Master kick 主动推送配置到agent


223324610.png



223324667.png


*******************************************************************************************

* 为最大限度不影响读者感官: *

* http://fengzhilinux.blog.51cto.com/1343279/1320317另起栏目,也请大家多支持 *

*******************************************************************************************