puppet的八大资源定义

来源:互联网 发布:海量数据下载 编辑:程序博客网 时间:2024/06/05 15:57

今天小编讲的是puppet的资源定义,先说说puppet的工作流程:(puppet有俩种工作模型,这里说的是master/agent的工作流程)agentmaster发起连接,并使用SSL证书相互认证身份。如果agent是第一次连接masteragent会生成私钥,下载CA证书的副本,提交证书申请,然后等待一个超时(waitforcert)。如果master在这个时间内签发了agent的证书,agent会下载证书,继续后面步骤。如果pluginsynctrue,agentmaster下载pluginagentmaster请求catalog,同时向master发送fact(软件及硬件信息,比如hostname, ip).然后等待catalog生成。 master使用site.pp或者ENC进行节点分类,获取agent节点所需的配置。然后使用一些agent/master提供的变量,比如factsenvironement还有内部变量,编译相关manifest生成catalogagentmaster下载catalog,然后应用到本地。如果catalog中使用了mount point,比如"source=>"puppet:///abc"agent会在应用过程中访问master的相关URI(/file_metadata//file_content/)下载文件内容并应用到本地。agent将应用结果生成report,发送给master。嗯,结束本次应用,agent等待下一次。

现在开始说puppet的资源定义:

资源抽象的纬度(RAL如何抽象资源的?RAL由“类型”和提供者(provider);):

类型:具有类似属性的组件,例如packageservicefile

将资源的属性或状态与其实现方式分离;

仅描述资源的目标状态,也即期望其实现的结果状态,而不是具体过程

puppet资源定义语法:

type {'title':

attribute1     => value1,

atrribute2    => value2,

……

}

注意:type必须使用小写字符;title是一个字符串,在同一类型中必须惟一;

资源定义的三个特殊属性:

Namevar 可简称为name

ensure:资源的目标状态;

Provider:指明资源的管理接口;

puppet的资源清单:

puppet的程序文件称作“manifest(清单)”,以.pp作为文件名后缀

1. 如前所述,puppet语言的核心是“资源定义”,而定义一个资源的核心就在于描述其目标状态

2.manifest却还实现了常见的程序逻辑,如条件语句、资源集合及打印文件信息等功能

3. 简言之,也即resource定义在manifest文件中,或使用manifest文件定义resource

puppetapply”子命令能够将一个manifest中描述的目标状态强制实现,因此,它通常以manifest文件为参数

puppet8大资源类型:

group:

Manage groups.

属性:

name:组名;

gidGID

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,会报错,不是语法错误,而是资源环境不存在,所以资源本身是存在依赖关系的

user

Manage users.

属性:

name:用户名;

uid: UID;

gid:基本组ID

groups:附加组,不能包含基本组;

comment:注释;

expiry:过期时间 ;

home:家目录;

shell:默认shell类型;

system:是否为系统用户 ;

ensurepresent/absent

password:加密后的密码串;

定义:

执行:[root@centos7mainfests]# puppet apply -v user3.pp

查看:[root@centos7mainfests]# tail /etc/passwd

package

Manage packages.

属性:

ensureinstalled,present, latest, absent, any version string (implies present暗指安装)

name:包名;

source:程序包来源,仅对不会自动下载相关程序包的provider有用,例如rpmdpkg

provider:指明安装方式;

定义:


执行:[root@centos7 mainfests]# puppet apply -vpack1.pp

service

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)

file:

Manages files, including their content, ownership, and permissions.

属性:

ensureWhether 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:时间戳;     

定义复制一个文件:    

执行:[root@node1 mainfests]# puppet apply -v file1.pp

验证

复制目录

执行:[root@node1 mainfests]# puppet apply -v file1.pp

验证


创建连接文件:


exec:

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



上面的定义只能执行一次,该目录存在之后再执行就会报错,升级如下(加个条件判断,目录不存在才创建):


或者:


现在定义一个



unless参数判断


定义一个综合一点的:


如果出错就运行(-d会说明哪错了): puppet apply -v -d exec.pp   

cron:

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

验证:

notify:

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的八大资源定义小编图文结合说完了,附表情包一张来表达小编内心