puppet入门: 常用资源及其属性总结(puppet 7)

  • A+
所属分类:puppet  运维技术

puppet入门: 常用资源及其属性总结(puppet 7)

这篇文章总结了puppet的常用资源,以及其属性的使用方法。

 

在本博客中,"puppet"是一个系列文章,如果你还不明白puppet的相关概念,强烈建议从puppet系列文章中的第一篇开始阅读,否则你可能无法理解这篇文章中涉及到的部分名词。

puppet系列文章列表直达链接:puppet入门系列

 

在之前,我们已经总结了puppet资源的概念,属性的概念,以及怎样定义一个资源,那么现在,我们将常用的资源以及其常用属性总结一下,

但是此处不对资源之间的依赖关系以及执行顺序进行总结,我们会在以后的文章中,单独对依赖关系进行总结,此篇文章只对常用资源的常用属性进行总结,

如果想要查阅对应资源的所有属性,可以使用如下命令查询。

puppet describe ResourceType

比如,如果想要查询user资源的所有属性以及属性用法,可以使用如下命令查询。

 

我们还是从user类型的资源开始总结,你是不是都着急了,老是说user,没完了还,别着急,一个一个聊。

   

   

   

user资源

user资源就是用来管理目标服务器上的用户的,比如创建用户、修改用户、删除用户,user资源的常用属性如下图

puppet入门: 常用资源及其属性总结(puppet 7)

上图中属性前带有"#"的表示已经注释,在执行清单时,被注释的属性不会被执行,user资源各属性解释如下:

name属性

表示对应用户的用户名称,可省。

ensure属性

确定用户的目标状态,通常将其值设置为present或absent,分别表示用户必须存在或用户必须不能存在,当然,如果我们将ensure值指定为absent以后,就没有必要在指定其他属性了,一般ensure为present时,配置其他属性值,如果ensure的值为present,但是当前用户已经存在,此时,puppet会判断已经存在的用户与我们定义的用户资源的其他属性是否一致,如果不一致,puppet则会做出对应操作,使目标服务器上已经存在的用户与我们定义的资源的属性保持一致,所以,absent可以理解为删除用户,present在不同的场景中,可以理解为创建用户或者修改用户,或者这样理解,present的作用就是保证用户必须存在,并且与我们定义的资源的状态完全一致,其他资源的此属性也都类似。

uid属性

指定用户的uid。

gid属性

指定用户的gid,也就是说,指明用户的主组,如果指定此属性,gid对应的组必须实现存在,否则会报错。

groups属性

指定用户的附属组,可以同时指定多个附属组,同理,对应附属组必须事先存在,而且需要注意,此属性中不能包含用户的基本组,也就是说不能包含gid对应的组名,指定附属组时,必须使用组名指定,不能使用对应组的gid,上图示例中,为zsythink用户指定了两个附属组,分别为zsy组和testgroup组,当属性可以指定多个值时,可以使用"[ ]"将多个属性值括起,每个属性值之间同样需要逗号隔开,我们可以把"[ ]"理解成列表。

home属性

指定用户的家目录,使用此属性时需要注意,虽然puppet在创建用户或者修改用户时会按照home属性的值指定用户的家目录,但是对应的家目录puppet不会为我们自动创建,即使没有使用home属性,puppet为我们创建用户时,也不会创建对应的家目录,如果想要puppet能在创建用户时为我们自动创建用户的家目录,并且将对应的配置文件填充到用户家目录中,需要使用managehome属性。

managehome属性

表示puppet是否管理用户的家目录,在创建用户时,如果不添加此属性,用户对应的家目录不会被创建,可能会造成用户登录后没有家目录或者shell不可用的情况。

shell属性

指定用户的默认登录shell类型。

password属性

指定用户的密码,注意,这个密码是使用单向加密算法加密过的密码,不是明文密码,上图中使用的加密算法是sha512,由于密码过长,截图没有截全,所以password最后的","没有被截图截入,如果你的密码使用md5的方式加密,可以使用"grub-md5-crypt"命令生成加密后的密码,如果你的密码使用sha256的方式加密,可以使用类似如下命令生成:perl -e 'print crypt("password", q($6$salt$)), "\n";'

comment属性

使用此属性设置用户的描述信息,这里顺便植入一条广告,"zsythink"这个用户的注释信息表示"朱双印博客的地址是www.zsythink.net"。

system属性

是否指定用户为系统用户,当显示指定system属性并且设置为true时,则为系统用户。

   

   

   

group资源

group资源的作用就是用来管理目标服务器上的组的,group资源的常用属性如下图

puppet入门: 常用资源及其属性总结(puppet 7)

group资源各属性解释如下

name属性

表示组对应的名称,可省。

ensure属性

确定组的目标状态,通常将其值设置为present或absent,absent表示组必须不能存在,可以理解为删除组,present表示组必须存在,并且目标状态与我们定义的相同,如果不同,puppet会执行对应动作,直到最终一致。

gid属性

组ID号

system属性

指定当前组是否为系统组,默认为false,当显示指定system属性并且设置为true时,则为系统组。

   

   

   

cron资源

cron资源的作用就是管理目标服务器上的定时任务的,作用相当于crontab命令,cron资源的常用属性如下图

puppet入门: 常用资源及其属性总结(puppet 7)

cron资源各属性解释如下

name属性

表示组对应crontab任务的名称,可省。

ensure属性

表示创建或删除定时任务,可省,省略ensure时,默认值为present,通常将其值设置为present或absent,present表示对应定时任务必须存在且与定义状态完全一致,absent表示对应定时任务不能存在。

command属性

指定定时任务需要执行的命令。

user属性

指定当前定时任务是为哪个用户设定的。

minute属性

指定定时任务的分钟时间格式,上图示例中,"*/1"表示每1分钟,省略不写默认为"*"。

hour属性

指定定时任务的小时时间格式,省略不写默认为"*"。

monthday属性

指定定时任务的日时间格式,省略不写默认为"*"。

month属性

指定定时任务的月时间格式,省略不写默认为"*"。

weekday属性

指定定时任务的星期时间格式,省略不写默认为"*"。

 
 

   

package资源

package资源的作用就是管理目标服务器上的程序包,package资源的常用属性如下。

puppet入门: 常用资源及其属性总结(puppet 7)

name属性

表示对应安装包的名称,可省,省略后与资源title值相同,但是需要注意:不同系统平台或者不同的系统发行版中,同一个软件的名称可能不同,比如,centos中,apache的http server被称为Httpd,而在ubuntu中,apache的http server被称为Apache2 ,所以,如果不同的被管理服务器中需要的安装包的名称不同,我们往往需要判断操作系统版本,然后给出不同的package名称,这与我们之前说的"中间层、资源抽象层、provider提供者"等概念并不冲突,不要把它们搞混了。

ensure属性

ensure的值对于package资源来说,相对丰富一点,可以使用absent、present、installed、latest, 其中,absent表示卸载,present和installed都表示安装,没有什么区别,latest表示安装能够获取到的最新的版本。

source属性

指定安装包文件,如果被管理服务器上存在类似yum源这样的provider(提供者),则可以省略此属性,省略此属性后,yum源会按照name属性或title的名称自动安装对应的package,如果对应被管理服务器上没有类似yum源这样的提供者,或者说,当被管理服务器上没有能够支持自动下载安装软件的提供者时,那么source属性则是必须的,比如使用rpm包安装对应软件,那么我们则必须通过source属性指明rpm包的路径,同时需要注意,对于package资源来说,puppet默认使用yum作为redhat/centos系统的提供者,所以,在使用source属性指定rpm包的同时,还需要使用provider属性,指定使用rpm作为本次操作的提供者。

provider属性

当puppet默认的provider不符合我们的实际使用场景时,可以指定使用哪种provider,通常在一个操作系统下有多个提供者的情况下,可以使用此属性指明使用哪个提供者。

从上例中可以看出,我将provider属性与source属性都注释了,没错,上例中使用的是yum的方式安装的tree软件包,

如果被管理服务器上并没有yum源,你又想要使用rpm包的方式安装tree包,那么provider与source属性都是不可省的。

 
 

   

service资源

service资源的作用就是启动或停止目标服务器上的服务,service资源的常用属性如下。

puppet入门: 常用资源及其属性总结(puppet 7)

enable属性

此属性用于设置对应服务是否开机自动启动服务,此属性设置为true表示开机自动启动服务,false表示不会开机自启。

ensure属性

表示对应服务的当前状态,不要与enable搞混了,enable属性是设置服务是否开机自启的,而ensure是设置当前服务是否处于启动状态,对于service资源来说,ensure属性的值可以设置为running或true,表示启动对应服务,也可以设置为stopped或false,表示停止对应服务。

hasrestart属性

表示标明当前服务是否支持restart命令,设置为true表示支持restart,false表示不支持restart,如果不支持restart命令,那么要重启服务时,则会先stop服务,再start服务。

hasstatus属性

表示标明当前服务是否支持status命令。

path属性

服务对应的init脚本文件的路径,对于centos来说,默认路径为/etc/rc.d/init.d,当然,centos7则无需此属性,因为centos7中使用unit,而不在使用脚本。

start属性

用户手动指定服务对应的启动命令。

restart属性

用户手动指定的restart操作对应的命令,但是为了保险起见,通常会将此属性对应的命令设置为reload,而非restart。

 
 

   

file资源

file资源的功能比较丰富,它可以用来管理文件的内容、属主属组以及文件的权限,同时可以用它管理目录、链接文件,file资源常用属性示例如下,各属性的具体解释查看图下的表格 。

puppet入门: 常用资源及其属性总结(puppet 7)

path属性

通过此属性指定file资源所在路径,还记得其它资源中的name属性吗,在其他资源中,name属性往往是可省的,因为name属性是大多数资源的"名称变量"(namevar),其他资源中,name属性省略后,资源的名称与资源的title相同,而在file资源中,path属性才是file资源的"名称变量"(namevar),当我们省略path属性时,path属性对应的值与file资源的title相同,所以,如果省略path属性,file资源的title则必须为文件的路径,当然,如果不想将file资源的title设置为file的路径,则不能省略path属性。

ensure属性

我们说过,file资源可以管理文件、目录、软连接,那么,当前file资源到底是用来管理文件的呢,还是管理目录的呢,我们可以使用ensure属性,定义当前file资源的类型,ensure的值可以为present、absent、file、directory、link,当ensure的值为file时,file资源代表一个文件,当ensure的值为directory时,file资源代表一个目录,当ensure的值为link时,file资源代表一个软连接,当ensure的值为absent时,表示要删除对应的资源,当ensure的值为present时,与ensure的值为file时相同。

注意:file资源不会自动创建父目录,也就是说,不管file资源代表一个文件,还是代表一个目录,如果指定的path或者title中包含不存在的目录,那么puppet则会报错,提示没有对应的父目录,有两种办法可以解决,手动指明创建对应父目录或者使用exec资源调用对应命令创建父目录(参考exec资源)。

content属性

当ensure属性的值为file时,使用此属性可以指定文件的内容,将要写入文件的内容使用引号引起即可,也可以将指定内容替换为变量的值,这在实际演示中会用到,到时候我们再进行总结,注意,此属性与将要提到的source属性不能同时存在于同一个资源中。

source属性

当ensure属性的值为file时,使用此属性可以指定当前文件的内容从哪个文件中获取,可以理解为把某个文件的内容覆盖到当前文件,或者理解为复制文件也是可以的,使用source属性,还可以通过指定的puppet url远程复制文件,但是这是后话,实际应用时再演示,source属性与content属性本质上都是设置文件内容的,它们不能同时存在于同一个资源中。当ensure属性的值为directory时,使用source属性指定另一个目录,则表示复制另一个目录,但是需要注意,当ensure为directory时,使用source属性的同时,需要配合recurse属性,否则被复制目录中的子目录或者文件将不会被同时复制过来。

recurse属性

此属性用于设置被操作源目录是否被递归,当ensure属性的值为directory时,同时source属性对应的值为一个目录,那么需要将recurse属性设置为true,被复制目录中的子目录和文件才能被复制到当前目录中,注意,recurse属性只有在配合source属性时才会递归的复制目录,如果ensure属性设置为directory,但是没有配合source属性,即使将recurse属性设置为true,puppet仍然不会执行递归操作。

注意:file资源不会自动创建父目录,也就是说,不管file资源代表一个文件,还是代表一个目录,如果指定的path或者title中包含不存在的目录,那么puppet则会报错,提示没有对应的父目录,当ensure的值设置为directory时,如果没有指定source属性,那么则表示当前操作不是复制目录,而是创建目录,这个时候,如果path或这title对应的目录中包含不存在的目录,即使将recurse属性设置为true,不存在的父目录也不会被自动创建。

force属性

当ensure属性的值为absent时,同时file资源对应的path或者title为一个目录(非文件),那么则必须将force属性设置为true,才能删除对应的目录以及目录下的文件,当ensure的值为absent,但是file资源对应的path或者title为一个文件,那么则不需要设置force属性,即可正常的删除。

target属性

当ensure属性的值为link时,我们通过target属性指定连接文件的目标文件。

owner属性

指定file资源对应的属主

group属性

指定file资源对应的属组

mode属性

指定file资源对应的权限

backup属性

使用此属性结合filebucket资源可以实现文件备份,同样,在后面的实际应用中,我们再做具体解释。

 
 

   

exec资源

通过exec资源,可以在被管理服务器上执行对应的命令,exec资源的常用属性如下。

puppet入门: 常用资源及其属性总结(puppet 7)

上述资源表示,当"/etc/fstab"文件存在时,在被管理服务器上执行"创建文件夹的命令",常用属性解释如下

path属性

此属性的功能类似PATH环境变量,也就是说,我们可以指定,从哪些目录中搜索将要执行的命令,如果有多个目录,可以使用冒号":"隔开(注意,是冒号,不是分号,就跟PATH环境变量的设置方法相同),除了使用":"隔开表示多个路径,还能使用列表的方式表示多个path路径,如果不使用path属性,当我们指定命令时,需要给出命令所在位置的绝对路径。

command属性

此属性用于指定将要执行的命令,如果path属性已经指定对应命令所在目录,那么此属性直接使用命令名称即可,如果未使用path属性,那么command属性则必须给出绝对路径。

cwd属性

表示在何处运行对应的command,也就是执行命令的目录。

user属性

以哪个用户的身份运行对应命令。

group属性

以哪个组的身份运行对应的命令。

onlyif属性

此属性表示"运行条件",当onlyif属性对应的命令执行成功时,才会执行command属性对应的命令,换句话说,就是当onlyif属性对应的命令执行的返回值为0 时,才会执行command属性对应的命令。

refreshonly属性

仅接收到订阅资源的通知时,才执行对应的命令,一般与subscribe配合,此属性值可以设置为true或者false,这个属性牵扯到puppet调用资源的顺序,我们在总结资源的依赖关系时,大家自然就会明白,现在不明白可以跳过此属性。

 
 

   

yumrepo资源

yumrepo资源的作用就是在被管理服务器上设置对应的yum源,常用属性如下

puppet入门: 常用资源及其属性总结(puppet 7)

name属性

可省,表示yum文件的名称与yum源的名称

baseurl属性

设置yum源的url,与yum的配置没有任何区别

gpgcheck属性

是否开启gpg检查,设置为0表示不检查

gpgkey属性

当启动gpgcheck时对应的key

enabled属性

是否启动这个yum源1表示启动,0为不启动,

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:5   其中:访客  4   博主  1

    • avatar hanli 2

      不错,排版也挺好的

      • avatar hesheng 2

        辛苦了,非常详实

          • avatar 朱双印 Admin

            @hesheng 得到你们的肯定,动力变足了,一起加油!~

              • avatar drgcaosheng 4

                @朱双印 在追ansible,然后抽空跑过来过一下这个puppet,看前面几章节的说明,感觉要憋个什么东西出来,然后就看到这个了。整理这些辛苦了。

            • avatar xxx 0

              文章写得还挺详细的。不过你的排版和页面布局看起来太low挫费劲了。