linux下puppet的“资源”管理

    已经有2年多的时间没有写博客来。有点很差意思,但在奇虎360真的是太忙了,没有那么多精力来写博客。linux

今天是周末抽出一点时间来更新一下本身的博客,但愿本身的博文可以给你们有些许帮助。也但愿经过博客nginx

认识更多的运维朋友,你们一块儿学习,一块儿进步。shell

    原来写过一篇puppet搭建的文章,今天跟你们分享的是puppet“资源”。什么是资源?全部由puppet的统一的管理的不论是文件、目录、安装包、cron、脚本等都称之为资源。你们在用puppet的时候最常常作的事情也就是来定义资源,而后用定义好的资源来统一管理和配置服务器资源,以达到节约维护成本和尽可能避免人为故障的目的。数组

    下面来用我工做当中的实际场景跟你们分享经常使用的资源定义。服务器

这个pp文件是我/etc/puppet/modules下的一个业务的pp文件内容。运维

说明一下,个人这个puppet管理公司几个不一样的业务。不一样的业务在puppet里面都是以模块的方式存在,全部的模块都在/etc/puppet/modules目录下存放。而后每一个模块下都有三个目录,分别是files  manifests  templatesfiles目录主要是存放模板文件和目录的;manifests是声明目录,也就是存放以pp结尾的声明文件;templates是用来存放模板文件的,下面有实例来讲明它的做用。ide

下面这个文件的名字叫init.pp也就是初始化pp,它也能够include其余文件进来。该文件内容以下:工具

class syewu::conf {   学习

#class是来定义一个类,syewu是个人业务名称,两个冒号后面的conf就是该类的名称。spa

file { "hosts":   

#file是来定义文件的,后面的hosts只是一个文件的标识,并非文件的名称,能看到这个标识想到是你想定义的哪一个文件就ok了。

  source => "puppet:///modules/syewu/hosts", 

#source是来定义该文件的来源的,这里是说文件来源于syewu模块下的files/hosts。也就是我上面说的每一个模块下都有一个files目录的做用。注意冒号后面有三个斜线。

    path => "/etc/hosts",

 #pathpuppet客户端要同步的文件在实际操做系统中的位置。注意是绝对路径。

    mode => "644", owner => "root", group => "root",

#这一行你们应该能看的懂。文件的权限和属主/属组。

 }

$arr_package = ["qihoo-ops-nginx", "Qihoo-lockf"]

#定义一个数组,我这里是定义的这个业务下须要安装的rpm包。

    package { $arr_package:

#调用我前面定义的数组

    provider => "yum",

#provider是指谁来提供刚才定义的rpm包,

    ensure => installed,

#ensure后面指的是动做,也就是安装这些包。若是已经安装则忽略。

file { "/usr/local/nginx/conf/include":

  source => "puppet:///modules/syewu/nginx/conf/include",

  mode => "644", owner => "nginx", group => "nginx",

  ignore => '*statdata*',

#前面三行前面已经介绍;ignore是忽略的意思,这里是指忽略include目录下包含statdata的全部文件和目录。

  recurse => true,

#这个选项必定要注意,recurse是递归的意思。也就是说include目录下全部的文件和目录,以及该目录下的全部子文件和子目录。

  purge => true,

#这个选项也要注意,它是强制一致的意思。好比客户端的include目录下有一个文件a,但puppet server端定义的include目录下没有该文件,则客户端会强制删除该文件,若是不加这个选项,客户端会保留这个文件。

  notify => Service["nginx"],

#notif是通知的意思,也就是说若是include目录下内容有变更,则通知服务nginx作重启操做。

 }

file { "/home/shells":

#file也能够这样来定义,直接在第一行来定义客户端实际存放文件的位置。注意在linux下,文件和目录均可以统称为文件。

  source => "puppet:///modules/syewu/shells",

    mode => "755", owner => "root", group => "root",

  recurse => true,

#同步该目录下的全部文件,保证这些文件都有可执行权限。我喜欢把本身常常用的脚本都放到一个目录下,这样比较容易找到,也方便批量操做。

file { "nginx-processor":

    path => "/usr/local/nginx/conf/processor.conf",

    mode => "644", owner => "nginx", group => "nginx",

    content => template("syewu/processor.erb"),

#我维护的这个业务有几百台机器,并且服务器的配置都是不同的,有的是8核,有的16核等。而我nginx启动的时候我想让nginx进程数跟服务器cpu的核数是同样的。这样一来必然致使nginx的配置不一致。后来我想了一个办法,让nginx的主配置文件是同样的,在主配置文件include进来一个processor.conf。这个文件来控制nginx的启动数。content是内容的意思,template是指模板。也就是在模块syewutemplates目录下有一个模板文件,名字是 processor.erb。这个模板的内容以下:

worker_processes <%= scope.lookupvar("processorcount") %>;  注意processorcountlinuxfacter工具里面的一个变量,在linux下执行facter能够看到这个变量,这个变量的意思是查看linuxcpu的核心数。

 }

exec { "/create-qihu-yum":

#exec是执行的意思,后面也是对要执行内容的一个标识,不是实际要执行的脚步。

        command => "sh /home/gehailong/yum-qihu.sh",

#command后面才是要执行的内容。

        path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/", "/usr/local/bin", "/usr/local/sbin" ],

#注意我这里定义path的做用。它跟系统里的path含义相似,也就是说从你定义的路径中来搜索你要执行的命令。

        creates => "/etc/yum.repos.d/CentOS-QH.repo",

#creates是指前面执行脚本的结果是来建立这个repo文件的内容。

}

service { "nginx":

#service是来定义一个服务

    enable => true,

#enable是指该服务的状态为存在。

    ensure => running,

#ensure是指这个服务要处于running状态,若是不是则启动该服务。

    hasstatus => "false",

    hasrestart => "false",

    restart => "/etc/init.d/nginx reload",

    start => "/etc/init.d/nginx start",

    stop => "/etc/init.d/nginx stop",

    status => "/etc/init.d/nginx status",

  }

cron {'xitongbu-jiankong':

#cron是来定义linux的计划任务。后面是对该计划任务的描述。

   command => "/usr/local/monitor/generic_monitor/control.py",

#command是实际计划任务的内容。

   user => root,

#user指用哪一个用户来定义该计划。

   minute => '0-59/5',

#这里是定义时间,minute是分钟,还能够定义hour等内容。注意这里也支持通配符,好比*

   ensure => absent ,

#ensure后面的absent的意思是取消客户端的这跟cron。好比批量解除客户端原来定义的一个cron就能够这样来作。都删除以后就能够把这段注掉来。

  }

}

先跟你们分享这些吧。写的比较仓促,有些的不妥的地方,欢迎你们来吐槽!!!

相关文章
相关标签/搜索