Puppet常用资源:
常用的资源主要有以下几个:
file:主要负责管理文件
package:软件包的安装管理
service:系统服务的管理
cron:配置自动任务计划
exec:远程执行运行命令
【验证puppet配置】
1、file资源
在服务端写个例子测试一下。这个例子作用很简单,用来在客户端的/tmp目录下新建一个 test.txt 文件,内容为:hello,test!在服务端编写代码:【服务器端不需要新建这个文件】
vi /etc/puppet/manifests/site.pp
file {
“/tmp/test.txt”:
content => “helo,test!”;
}
在客户端上执行 puppet,运行成功后会在 /tmp 看到新生成的 test.txt:
[root@slave9 tmp]# puppet agent --test --server=master
info: Caching catalog for slave9
info: Applying configuration version '1373006825'
notice: /Stage[main]//Node[default]/File[/tmp/test.txt]/ensure: defined content as '{md5}002c9dbca1fe0e6339dc7a2cbb6f776d'
notice: Finished catalog run in 0.02 seconds
最后查看cat /tmp/test.txt
hello,test!
2、Package资源:
【package资源】远程安装服务
package {
["ntp"]:
ensure => "installed";
"screen":
ensure => "absent";
}
定义的意思是yum install ntp服务,并且卸载screen安装包。
客户端执行更新:
[root@slave9 tmp]# puppet agent --test --server=master
info: Caching catalog for slave9
info: Applying configuration version '1373268238'
notice: /Stage[main]//Package[screen]/ensure: removed
notice: /Stage[main]//Package[ntp]/ensure: created
notice: Finished catalog run in 33.36 seconds
【service资源】 针对服务的重启
service {
"sshd":
ensure => running;
"nfs":
ensure => stopped;
}
意思是定义启动sshd服务,停止nfs服务。
【Cron资源】
cron{
"ntpdate":
command => "/usr/sbin/ntpdate pool.ntp.org",
user => root,
hour => 0,
minute => 0,
}
意思是在客户端写入一个计划任务:0 0 * * * /usr/sbin/ntpdate pool.ntp.org 自动同步时间!
[root@slave9 tmp]# puppet agent --test --server=master
info: Caching catalog for slave9
info: Applying configuration version '1373269123'
notice: /Stage[main]//Cron[ntpdate]/ensure: created
notice: Finished catalog run in 0.17 seconds
【其他】
1、每隔3小时执行 hour => "*/3",
2、如果客户端的crond是这样定义:19 0 * * *,想要改成19 * * * *
hour => "*",
【puppet推送】
向客户端推送本地脚本:
首先修改vi /etc/puppet/fileserver.conf 文件,添加如下三行:
[share] --模块名字
path /etc/puppet/files
allow *
##注意files后不能有空格,否则重启puppetmaster的时候会报错,我不小心在这折腾了很久(╯﹏╰)
然后新建/etc/puppet/files这个目录,然后cp所需要的东西到files目录
file {
"/tmp/nginx_install.sh": --nginx_install.sh脚本会拷贝到/tmp目录下
source => "puppet:///share/nginx_install.sh",
group => root,
owner => root,
mode => "755"
}
需要注意几个地方,puppet:///share/nginx_install.sh,而不应该写puppet://master/files/nginx_install.sh
recurse => "true", ##传送该目录下所有文件 【需要测试】
意思是把 /etc/puppet/files/nginx_install.sh这个脚本推送到客户端的/tmp/下!
http://kexl908.blog.51cto.com/605006/901767
【注意】
1、可以把多个file资源的title写在一起,前提是file资源在客户端必须先存在
file {
["/tmp/test.txt", "/tmp/test1", "/tmp/test2.txt"]:
owner => "test",
group => "test",
mode => 777,
}
【远程执行命令】
如第五步,我们把nginx_install.sh推送过去后,这时候我们就可以执行了如下:
exec {
"/tmp/1.sh":
cwd => "/tmp",
command => "sh /tmp/1.sh",
user => root,
path => ["/usr/bin","/usr/sbin","/bin","/bin/sh"],
}
【配置文件更新】
例如更新/etc/sysctl.conf这个配置文件,先在主上,拷贝/etc/sysctl.conf到/etc/puppet/files,然后对内核配置文件进行修改,
然后修改site.php
file { "/etc/sysctl.conf":
source => "puppet:///share/sysctl.conf",
owner => "root",
group => "root",
mode => 644,
}
接着在从上面直接更新就行了
最后要让修改好的配置文件生效,还需要如下操作
exec {
"sysctl refresh kernel config":
path => ["/usr/bin", "/usr/sbin", "/bin", "/sbin"],
command => "/sbin/sysctl -p",
subscribe => File["/etc/sysctl.conf"],
refreshonly => true
}
需要注意:他们之间不能用冒号,两边的框框不能去掉
path => ["/usr/bin", "/usr/sbin", "/bin", "/sbin"],
这2个必须要写在一起,不能把exec单独放
【资源依赖】 --A依赖B,如果A没有的话,则B不会被执行
【资源依赖】
资源A依赖资源B,如果资源B不存在,资源A就不被执行。定义资源依赖的属性是require。
class base::cron
{
package { "crontabs":
ensure => installed,
}
service {
"crond":
ensure => running,
enable => true,
require => Package["crontabs"];
}
cron { ntpdate:
command => "/usr/sbin/ntpdate time.nist.gov 210.72.145.44 64.147.116.229 ",
user => root,
hour => 0,
minute => 0,
require => Package["crontabs"];
}
}
前提:cron已经被安装,否则后面的都不执行