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

[经验分享] puppet核心资源类型及其常见属性学习笔记

[复制链接]

尚未签到

发表于 2015-11-26 15:24:23 | 显示全部楼层 |阅读模式
一. Hello, World! – notify
在一开始就把notify单拎出来嘛,是因为Hello World的惯例,这货就是个print, echo, puts……
首先是一个例子:
1234[color=#95C763 !important]notify[color=#FFCD22 !important] {[color=#FFCD22 !important] [color=#EC7600 !important]"Hello World"[color=#FFCD22 !important]:[color=#FFCD22 !important]  [color=#678CB1 !important]name[color=#FFCD22 !important] [color=#FFCD22 !important]=[color=#FFCD22 !important]>[color=#FFCD22 !important] [color=#EC7600 !important]"This will not be shown or logged.",[color=#FFCD22 !important]  [color=#678CB1 !important]message[color=#FFCD22 !important] [color=#FFCD22 !important]=[color=#FFCD22 !important]>[color=#FFCD22 !important] [color=#EC7600 !important]"Hello, World!"}这个例子将会把”Hello, World!”写入agent的运行时log,如果用puppet apply运行的话,可以直观地看到结果:
notice: Hello, World!
notify的属性简介:
● name — 该notify的名字。仅供标识,不会被puppet作任何操作处理
● message — 消息内容,默认与title相同
● withpath — 是否输出该notify命令的路径(包括沿流关系),默认为false
二. 三板斧 – package, file, service
之所以叫三板斧,自然是因为这三类资源最为常用,大部分日常管理工作都可以借此完成。
首先是一个例子:
1234567891011121314151617[color=#A082BD!important]package[color=#FFCD22!important]{[color=#FFCD22!important][color=#EC7600!important]'openssh-server'[color=#FFCD22!important]:[color=#FFCD22!important]  [color=#678CB1!important]ensure[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#678CB1!important]installed,}[color=#95C763!important]file[color=#FFCD22!important]{[color=#FFCD22!important][color=#EC7600!important]'/etc/ssh/sshd_config'[color=#FFCD22!important]:[color=#FFCD22!important]  [color=#678CB1!important]source[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#EC7600!important]'puppet:///modules/sshd/sshd_config',[color=#FFCD22!important]  [color=#678CB1!important]owner[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#EC7600!important]'root',[color=#FFCD22!important]  [color=#678CB1!important]group[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#EC7600!important]'root',[color=#FFCD22!important]  [color=#678CB1!important]mode[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#EC7600!important]'640',[color=#FFCD22!important]  [color=#678CB1!important]notify[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#678CB1!important]Service[[color=#EC7600!important]'sshd'],[color=#FFCD22!important][color=#00FF00!important]# sshd will restart whenever you edit this file.[color=#FFCD22!important]  [color=#678CB1!important]require[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#A082BD!important]Package[[color=#EC7600!important]'openssh-server'],}[color=#95C763!important]service[color=#FFCD22!important]{[color=#FFCD22!important][color=#EC7600!important]'sshd'[color=#FFCD22!important]:[color=#FFCD22!important]  [color=#678CB1!important]ensure[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#678CB1!important]running,[color=#FFCD22!important]  [color=#678CB1!important]enable[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#A082BD!important]true,[color=#FFCD22!important]  [color=#678CB1!important]hasstatus[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#A082BD!important]true,[color=#FFCD22!important]  [color=#678CB1!important]hasrestart[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][color=#A082BD!important]true,}这个例子中将完成如下几项任务:确保sshd已安装、从puppet master中获取sshd_config并设置所有者和权限、sshd_config的内容有改动则重启sshd、保证sshd始终为运行状态。
另外,可以看到,如在某资源中引用其他资源,则首字母需大写,如例子中的require => Package['openssh-server']。
下面分别对file/package/service的最常见属性进行说明:
1. 一板斧:file 文件管理
● ensure — 指定文件的目标状态
- present 检查文件是否存在,不存在则新建之
- absent 检查文件是否存在,存在则删除之
- directory 指定这是一个目录
- “link” 接目标文件,例: ensure => “/etc/ssh/sshd_config_sample”
● path — 文件完整路径。默认与title相同
● source — 文件获取地址。以puppet:///开头为从master下载,正常路径则在agent本地读取
● content — 文件的具体内容。亦可由erb模板生成。
● recurse — 对目录是(true)否(false)递归(ensure => directory时有效)
● owner — 所属用户,可用uid
● group — 所属用户组,可用gid
● mode — 权限属性,数字,如755
其他属性见:http://docs.puppetlabs.com/references/latest/type.html#file
2. 二板斧:package 软件包管理
● ensure — 指定软件包的目标状态
- present 检查软件包是否存在,不存在则安装之
- absent 检查软件包是否存在,存在则卸载之
- latest 检查软件包版本是否在软件源中最新,非最新则升级之
- {any version string} 检查软件包版本是否为指定版本,不是则安装为指定版本
- purged 深度卸载,删除所有配置文件和依赖包,有潜在风险,慎用
● name — 软件包的名称,默认与title相同
● source — 获取安装包的地址(若包没有repo地址)
其他属性见:http://docs.puppetlabs.com/references/latest/type.html#package
3. 三板斧:service 服务管理
●ensure — 指定服务的目标状态
- running (true) 运行状态
- stopped (false) 停止状态
● enable — 指定服务是否开机自启动,并非对所有均有效
- true 开机启动
- false 开机不启动
● name — 服务名,默认与title相同
● status, start, stop, and restart — 对这些操作手工指定命令,用于init脚本不规范的服务
● has restart — 描述该服务是否有restart指令,默认false。如果无,则puppet会依次执行stop/start实现restart
● hasstatus — 描述该服务是否有status指令,默认false。如果无,则puppet会grep进程列表来实现status判断
● pattern — 当hasstatus为false,puppet进行grep匹配时采用的正则表达式,默认与title相同
● binary — 当服务没有init脚本时,将直接使用该程序的二进制包本体。binary属性的值即为该本体的完整路径
其他属性见:http://docs.puppetlabs.com/references/latest/type.html#service
三. 工具箱 – exec, cron, user, group

把剩下的四类核心资源都放在这一部分,作为“工具箱”,作为满足日常使用的“板斧”的补充。
1. exec:执行shell命令
● command — 欲运行的具体命令,如未指定path,则要求路径完整准确。默认与title相同
● path — 指定命令的$PATH。以逗号分隔。例:
123456789[color=#95C763!important]exec[color=#FFCD22!important]{[color=#FFCD22!important][color=#EC7600!important]"rm -f /tmp/tobedeleted.txt"[color=#FFCD22!important]:[color=#FFCD22!important]  [color=#678CB1!important]path[color=#FFCD22!important][color=#FFCD22!important]=[color=#FFCD22!important]>[color=#FFCD22!important][[color=#FFCD22!important]    [color=#EC7600!important]'/usr/local/bin',[color=#FFCD22!important]    [color=#EC7600!important]'/opt/local/bin',[color=#FFCD22!important]    [color=#EC7600!important]'/usr/bin',[color=#FFCD22!important]    [color=#EC7600!important]'/usr/sbin',[color=#FFCD22!important]    [color=#EC7600!important]'/bin',[color=#FFCD22!important]    [color=#EC7600!important]'/sbin']}● creates — 将被此命令生成的文件。若该文件已存在,则命令不执行
● refreshonly — 当设置为true时,该命令只会在其subscribe的资源变动时执行
● onlyif — 当该属性值中的命令或一组命令成功执行(返回值均为0)时,该命令才会执行
● unless — 与onlyif相反……
● environment — 提供环境变量。可为一个或一组
其他属性见:http://docs.puppetlabs.com/references/latest/type.html#exec
2. cron:计划任务管理
先看一个例子,便于理解:
cron { logrotate:
command => “/usr/sbin/logrotate”,
user => root,
hour => 2,
minute => 0
}
上述例子执行的结果就是在crontab中增加了一行:
0 2 * * * /usr/sbin/logrotate
● command — 欲执行的命令或脚本路径
● ensure — 决定该计划任务的目标状态
- present 如该cron不存在,则添加之
- absent 如该cron已存在,则删除之
● hour, minute, month, monthday, and weekday — 计划任务的时间安排,支持列表(如:[2, 4])
● user — 执行该cron的用户身份
其他属性见:http://docs.puppetlabs.com/references/latest/type.html#cron
3. user:用户管理
● name — 用户名,默认与title相同
● uid — 指定具体UID。不指定则自动生成
● ensure — 指定用户的目标状态
- present 该用户不存在则生成
- absent 该用户存在则删除
● gid — 该用户所属主用户组的GID
● groups — 该用户所属用户组名,可为列表
● home — 该用户分配的家目录
● managehome — 是否自动生成家目录,默认为false,需要手工指定
● shell — 用户登录后默认分配的shell
其他属性见:http://docs.puppetlabs.com/references/latest/type.html#user
4. group:组管理
● name — 组名,默认与title相同
● gid — 指定具体GID,不指定则自动生成
● ensure — 指定该组的目标状态
- present 该组不存在则建立
- absent 该组存在则删除
● system — 表明此组是否为系统组,使用较小的GID
四. 小结
根据二八原则,puppet中20%的核心资源足以解决80%的需求。然而,想要灵活使用,还需要对所有的资源类型都有所了解才可以。
本文主要参考资源:
1. http://docs.puppetlabs.com/references/latest/type.html
2. Core Puppet Cheatsheet

运维网声明 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-144002-1-1.html 上篇帖子: 开源自动化部署管理工具Puppet安装 下篇帖子: Puppet: Puppet是如何找到你写在Manifests文件的配置的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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