puppet(七)——常用资源及其属性总结

本文转载自朱双印个人日志:https://www.zsythink.net/archives/363

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

在之前,我们已经总结了puppet资源的概念,属性的概念,以及怎样定义一个资源,那么现在,我们将常用的资源以及其常用属性总结一下,
但是此处不对资源之间的依赖关系以及执行顺序进行总结,我们会在以后的文章中,单独对依赖关系进行总结,此篇文章只对常用资源的常用属性进行总结,
如果想要查阅对应资源的所有属性,可以使用如下命令查询。

puppet describe ResourceType

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

puppet describe user

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

user资源

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

user{'liuyuan':
  ensure => present,
  uid => 1003,
  gid => 1003,
  groups => [liuhaoran],
  managehome => true,
  shell => '/bin/bash',
  password => '$1$iD5Dxxxxxxxxxxxxxxxxxxxxxxxxx',
  comment => 'www.hello.net',
}

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

name属性 表示对应用户的用户名称,可省。
ensure属性 确定用户的目标状态,通常将其值设置为present或absent,分别表示用户必须存在或用户必须不能存在,当然,如果我们将ensure值指定为absent以后,就没有必要在指定其他属性了,一般ensure为present时,配置其他属性值,如果ensure的值为present,但是当前用户已经存在,此时,puppet会判断已经存在的用户与我们定义的用户资源的其他属性是否一致,如果不一致,puppet则会做出对应操作,使目标服务器上已经存在的用户与我们定义的资源的属性保持一致,所以,absent可以理解为删除用户,present在不同的场景中,可以理解为创建用户或者修改用户,或者这样理解,present的作用就是保证用户必须存在,并且与我们定义的资源的状态完全一致,其他资源的此属性也都类似。
uid属性 指定用户的uid。
gid属性 指定用户的gid,也就是说,指明用户的主组,如果指定此属性,gid对应的组必须实现存在,否则会报错。
groups属性 指定用户的附属组,可以同时指定多个附属组,同理,对应附属组必须事先存在,而且需要注意,此属性中不能包含用户的基本组,也就是说不能包含gid对应的组名,指定附属组时,必须使用组名指定,不能使用对应组的gid,上图示例中,为liuyuan用户指定了一个附属组,为liuhaoran组,当属性可以指定多个值时,可以使用”[ ]”将多个属性值括起,每个属性值之间同样需要逗号隔开,我们可以把”[ ]”理解成列表。
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$)), “ ”;’
comment属性 使用此属性设置用户的描述信息,”liuyuan”这个用户的注释信息表示”朱双印博客的地址是www.hello.net”。
system属性 是否指定用户为系统用户,当显示指定system属性并且设置为true时,则为系统用户。

group资源

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

group{"pengyuyan":
  ensure => present,
  gid => 666,
  system => false,
}

group资源各属性解释如下:

name属性 表示组对应的名称,可省。
ensure属性 确定组的目标状态,通常将其值设置为present或absent,absent表示组必须不能存在,可以理解为删除组,present表示组必须存在,并且目标状态与我们定义的相同,如果不同,puppet会执行对应动作,直到最终一致。
gid属性 组ID号
system属性 指定当前组是否为系统组,默认为false,当显示指定system属性并且设置为true时,则为系统组。

cron资源

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

package{'lycron':
  #name => nginx,
  #ensure => absent,
  command => '/bin/cat/ /testdir/test.sh >> /testdir/hello.net',
  user => root,
  minute => '*/1',
}

cron资源各属性解释如下:

name属性 表示组对应crontab任务的名称,可省。
ensure属性 表示创建或删除定时任务,可省,省略ensure时,默认值为present,通常将其值设置为present或absent,present表示对应定时任务必须存在且与定义状态完全一致,absent表示对应定时任务不能存在。
command属性 指定定时任务需要执行的命令。
user属性 指定当前定时任务是为哪个用户设定的。
minute属性 指定定时任务的分钟时间格式,上图示例中,”/1″表示每1分钟,省略不写默认为””。
hour属性 指定定时任务的小时时间格式,省略不写默认为”*”。
monthday属性 指定定时任务的日时间格式,省略不写默认为”*”。
month属性 指定定时任务的月时间格式,省略不写默认为”*”。
weekday属性 指定定时任务的星期时间格式,省略不写默认为”*”。

package资源

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

package{"tree":
  ensure => installed,
  #provider => rpm,
  #source => '/testdir/tree-1.5.3-3.3l6.x86_64.rpm',
}
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资源的常用属性如下:

service{'nginx':
  ensure => running,
  enable => true,
  start => '/usr/sbin/nginx',
  restart => '/usr/sbin/nginx -t && /usr/sbin/nginx -s reload',
}
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资源常用属性示例如下,各属性的具体解释查看图下的表格 。

#创建一个文件,被创建的文件为/testdir/lhrfile,文件内容为content属性对应的值
file{"lhrfile":
  path => '/testdir/lhrfile',
  ensure => file,
  content => "www.lhrthink.net
",
}

#复制/etc/fstab文件中的内容到/testdir/lhrfile1文件中,
#并且设置lhrfile1文件的数珠属组均为lhrfile1,文件权限为600
file{"/testdir/lhrfile1":
  ensure => present,
  source => '/etc/fstab',
  owner => liuhaoran,
  group => liuhaoran,
  mode => 0600,
}

#复制/testdir/abc目录下的所有内容到/testdir/dir下
file{"/testdir/dir":
  ensure => directory,
  source => "/testdir/abc",
  recurse => true,
}

#注意:file资源不会自动创建父目录,上述三个例子中,/testdir目录已经事先存在
#使用如下方法,可以手动的一次将目录的父目录创建出来,但是这种方法比较笨拙。

#下例中,使用了”[]“中的内容作为title,表示按照顺序创建多个目录。
#也可以不使用如下方法,而是借助exec资源完成
file{["/testdir/www",
      "/testdir/www/lhrthink",
      "/testdir/www/lhrthink/net",
]:
  ensure => directory,
}

#删除对应的目录,以及目录中的所有内容。
file{"/testdir/dd":
  ensure => absent,
  force => true,
}

#创建一个链接文件/testdir/lhrthink,链接指向/etc/fstab文件
file{"/testdir/lhrthink":
  ensure => link,
  target => '/etc/fstab',
}
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资源的常用属性如下。

exec{'mklhrdir':
  path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin",
  onlyif => 'test -e /etc/fstab',
  command => 'mkdir -p /testdir/lhrthink/www/lhrthink/net',
}

上述资源表示,当”/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源,常用属性如下:

yumrepo{"zabbix":
  name => "zabbix",
  baseurl => "https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64",
  gpgcheck => 0,
  enabled => 1,
}
name属性 可省,表示yum文件的名称与yum源的名称
baseurl属性 设置yum源的url,与yum的配置没有任何区别
gpgcheck属性 是否开启gpg检查,设置为0表示不检查
gpgkey属性 当启动gpgcheck时对应的key
enabled属性 是否启动这个yum源1表示启动,0为不启动
原文地址:https://www.cnblogs.com/even160941/p/14944726.html