设为首页 收藏本站
查看: 1132|回复: 0

[经验分享] linux下puppet的“资源”管理

[复制链接]

尚未签到

发表于 2018-8-2 11:36:34 | 显示全部楼层 |阅读模式
  已经有2年多的时间没有写博客来。有点不好意思,但在奇虎360真的是太忙了,没有那么多精力来写博客。
  今天是周末抽出一点时间来更新一下自己的博客,希望自己的博文能够给大家有些许帮助。也希望通过博客
  认识更多的运维朋友,大家一起学习,一起进步。
  原来写过一篇puppet搭建的文章,今天跟大家分享的是puppet“资源”。什么是资源?所有由puppet的统一的管理的不管是文件、目录、安装包、cron、脚本等都称之为资源。大家在用puppet的时候最经常做的事情也就是来定义资源,然后用定义好的资源来统一管理和配置服务器资源,以达到节约维护成本和尽量避免人为故障的目的。
  下面来用我工作当中的实际场景跟大家分享常用的资源定义。
  这个pp文件是我/etc/puppet/modules下的一个业务的pp文件内容。
  说明一下,我的这个puppet管理公司几个不同的业务。不同的业务在puppet里面都是以模块的方式存在,所有的模块都在/etc/puppet/modules目录下存放。然后每个模块下都有三个目录,分别是files  manifests  templates。files目录主要是存放模板文件和目录的;manifests是声明目录,也就是存放以pp结尾的声明文件;templates是用来存放模板文件的,下面有实例来说明它的作用。
  下面这个文件的名字叫init.pp也就是初始化pp,它也可以include其他文件进来。该文件内容如下:
  classsyewu::conf {
  #class是来定义一个类,syewu是我的业务名称,两个冒号后面的conf就是该类的名称。
  file{ "hosts":
  #file是来定义文件的,后面的hosts只是一个文件的标识,并不是文件的名称,能看到这个标识想到是你想定义的哪个文件就ok了。
  source =>"puppet:///modules/syewu/hosts",
  #source是来定义该文件的来源的,这里是说文件来源于syewu模块下的files/hosts。也就是我上面说的每个模块下都有一个files目录的作用。注意冒号后面有三个斜线。
  path => "/etc/hosts",
  #path是puppet客户端要同步的文件在实际操作系统中的位置。注意是绝对路径。
  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是指模板。也就是在模块syewu的templates目录下有一个模板文件,名字是 processor.erb。这个模板的内容如下:
  worker_processes <%= scope.lookupvar("processorcount")%>;  注意processorcount是linux下facter工具里面的一个变量,在linux下执行facter可以看到这个变量,这个变量的意思是查看linux下cpu的核心数。
  }
  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/nginxreload",
  start => "/etc/init.d/nginxstart",
  stop => "/etc/init.d/nginxstop",
  status => "/etc/init.d/nginxstatus",
  }
  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就可以这样来做。都删除之后就可以把这段注掉来。
  }
  }
  先跟大家分享这些吧。写的比较仓促,有些的不妥的地方,欢迎大家来吐槽!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545316-1-1.html 上篇帖子: 第一次独立完成puppet脚本编写 下篇帖子: Puppet学习笔记之常用资源类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表