puppet核心资源类型及其常见属性学习笔记

来源:互联网 发布:内网怎么访问阿里云 编辑:程序博客网 时间:2024/06/06 09:59

一. Hello, World! – notify

在一开始就把notify单拎出来嘛,是因为Hello World的惯例,这货就是个print, echo, puts……

首先是一个例子:

这个例子将会把”Hello, World!”写入agent的运行时log,如果用puppet apply运行的话,可以直观地看到结果:

notice: Hello, World!

notify的属性简介:

● name — 该notify的名字。仅供标识,不会被puppet作任何操作处理

● message — 消息内容,默认与title相同

● withpath — 是否输出该notify命令的路径(包括沿流关系),默认为false

二. 三板斧 – package, file, service

之所以叫三板斧,自然是因为这三类资源最为常用,大部分日常管理工作都可以借此完成。

首先是一个例子:

这个例子中将完成如下几项任务:确保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。以逗号分隔。例:

● 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