今天小编讲的是puppet的资源定义,先说说puppet的工作流程:(puppet有俩种工作模型,这里说的是master/agent的工作流程)agent向master发起连接,并使用SSL证书相互认证身份。如果agent是第一次连接master,agent会生成私钥,下载CA证书的副本,提交证书申请,然后等待一个超时(waitforcert)。如果master在这个时间内签发了agent的证书,agent会下载证书,继续后面步骤。如果pluginsync是true,agent从master下载plugin。agent向master请求catalog,同时向master发送fact(软件及硬件信息,比如hostname, ip).然后等待catalog生成。 master使用site.pp或者ENC进行节点分类,获取agent节点所需的配置。然后使用一些agent/master提供的变量,比如facts,environement还有内部变量,编译相关manifest生成catalog。agent从master下载catalog,然后应用到本地。如果catalog中使用了mount point,比如"source=>"puppet:///abc",agent会在应用过程中访问master的相关URI(/file_metadata/和/file_content/)下载文件内容并应用到本地。agent将应用结果生成report,发送给master。嗯,结束本次应用,agent等待下一次。
现在开始说puppet的资源定义:
资源抽象的纬度(RAL如何抽象资源的?RAL由“类型”和提供者(provider);):
类型:具有类似属性的组件,例如package、service、file;
将资源的属性或状态与其实现方式分离;
仅描述资源的目标状态,也即期望其实现的结果状态,而不是具体过程
type {'title':
attribute1 => value1,
atrribute2 => value2,
……
}
注意:type必须使用小写字符;title是一个字符串,在同一类型中必须惟一;
Namevar, 可简称为name;
ensure:资源的目标状态;
Provider:指明资源的管理接口;
puppet的程序文件称作“manifest(清单)”,以.pp作为文件名后缀
1. 如前所述,puppet语言的核心是“资源定义”,而定义一个资源的核心就在于描述其目标状态
2.而manifest却还实现了常见的程序逻辑,如条件语句、资源集合及打印文件信息等功能
3. 简言之,也即resource定义在manifest文件中,或使用manifest文件定义resource
“puppetapply”子命令能够将一个manifest中描述的目标状态强制实现,因此,它通常以manifest文件为参数
puppet8大资源类型:
Manage groups.
属性:
name:组名;
gid:GID;
system:是否为系统组,true OR false;
ensure:目标状态,present/absent;
members:成员用户;
定义
执行前检查:puppet apply -v --noop group1.pp
执行:puppet apply -v group1.pp
查看:tail /etc/group
注意了
如果没有安装zsh,要安装哦:yuminstall zsh -y
如果定义的组名本身不存在,执行puppetapply -v --noop group1.pp不会报错,但是执行puppet apply -vgroup1.pp,会报错,不是语法错误,而是资源环境不存在,所以资源本身是存在依赖关系的
Manage users.
属性:
name:用户名;
uid: UID;
gid:基本组ID;
groups:附加组,不能包含基本组;
comment:注释;
expiry:过期时间 ;
home:家目录;
shell:默认shell类型;
system:是否为系统用户 ;
ensure:present/absent;
password:加密后的密码串;
定义:
执行:[root@centos7mainfests]# puppet apply -v user3.pp
查看:[root@centos7mainfests]# tail /etc/passwd
Manage packages.
属性:
ensure:installed,present, latest, absent, any version string (implies present暗指安装)
name:包名;
source:程序包来源,仅对不会自动下载相关程序包的provider有用,例如rpm或dpkg;
provider:指明安装方式;
定义:
执行:[root@centos7 mainfests]# puppet apply -v pack1.pp
ensure=> 指定服务状态
running 正在运行中
stopped 停止状态
enable=> 服务是否开机自启动
true 开机启动
false 开机不启动
name=> 服务名称,默认与title想同
start、stop、restart、status=> 服务的启动、关闭、重启等(start => "/etc/init.d/nginx start")
hasrestart=> false/true 该管理脚本支持restart指令,默认false,没有则使用stop/start来重启
hasstatus=> false/true 该脚本是支持status指令,默认false,没有则使用grep来判断
pattern=> "XXXX" 设置收索进程的指定字符串,当不支持restart/status命令时,grep根据该值来收索
binary=> 当服务没有init脚本时,将直接使用该程序的二进制包本体。binary属性的值即为该本体的完整路径
subscribe=> File["配置文件路径"] 当配置文件改变,重启服务
定义:
执行:puppet apply -v vrs2.pp
验证:ss -ntlp(端口号11211)
Manages files, including their content, ownership, and permissions.
属性:
ensure:Whether thefile should exist, and if so what kind of file it should be. Possible valuesare `present`, `absent`, `file`, `directory`, and `link`.
file:类型为普通文件,其内容由content属性生成或复制由source属性指向的文件路径来创建;
link:类型为符号链接文件,必须由target属性指明其链接的目标文件;
directory:类型为目录,可通过source指向的路径复制生成,recurse属性指明是否递归复制;
path:文件路径;
source:源文件;
content:文件内容;
target:符号链接的目标文件;
owner:属主
group:属组
mode:权限;
atime/ctime/mtime:时间戳;
Executesexternal commands. Any command in an `exec` resource **must** be able to runmultiple times without causing harm --- that is, it must be *idempotent*.
command(*namevar*):要运行的命令;
cwd:Thedirectory from which to run the command.
creates:文件路径,仅此路径表示的文件不存在时,command方才执行;
user/group:运行命令的用户身份;
path:Thesearch path used for command execution. Commands must be fully qualified if nopath is specified.路径
onlyif:此属性指定一个命令,此命令正常(退出码为0)运行时,当前command才会运行;(条件满足就执行上面的命令)
定义如下,执行:puppet apply -v exec1.pp 查看:ls /tmp -l
定义一个综合一点的:
如果出错就运行(-d会说明哪错了): puppet apply -v -d exec.pp
ensrure=> 指定计划任务的状态
present 如果该cron不存在则添加
absent 如果该cron存在则删除
command=> 欲执行的脚本命令和路径
hour(0-23),minute(0-59), month(1-12), monthday(1-31), weekday(0-7)=>计划任务的时间安排,支持列表(如:[2, 4])
user=> 执行给cron的用户
设定本地系统每隔5min执行命令:
执行:puppetapply -v cron1.pp
验证:
Sends an arbitrary message to the agent run-time log.
属性:
message:信息内容
name:信息名称;
核心类型:
group: 组
user:用户
packge:程序包
service:服务
file:文件
exec:执行自定义命令,要求幂等
cron:周期性任务计划
notify:通知
定义一个:消息通知:
另外俩非核心常用资源:
查看一: puppet describeyumrepo -s -m
Parameters
baseurl, cost, descr, enabled,enablegroups, ensure, exclude,
failovermethod, gpgcheck, gpgkey,http_caching, include, includepkgs,
keepalive, metadata_expire, metalink,mirrorlist, name, priority,
protect, proxy, proxy_password,proxy_username, repo_gpgcheck,
s3_enabled, skip_if_unavailable, sslcacert,sslclientcert, sslclientkey,
sslverify, target, timeout
查看二:puppet describehost -s -m
Parameters
comment, ensure, host_aliases, ip, name,target
Type['title']
类型的首字母必须大写;
关系元参数:before/require
A before B: B依赖于A,定义在A资源中;
{
...
before => Type['B'],
...
}
B require A: B依赖于A,定义在B资源中;
{
...
require => Type['A'],
...
}
定义:
执行:[root@centos7 mainfests]# puppet apply-v user3.pp
查看:[root@centos7 mainfests]# tail /etc/passwd
OK,puppet的八大资源定义小编图文结合说完了,附表情包一张来表达小编内心