尽管Puppet是一个实在共同的有用东西,但在有些情况下你能够运用一点不同的办法来用它。比方,你要修正几个服务器上已有的装备文件,而且它们互相稍有不同。Puppet实验室的人也认识到了这一点,他们在 Puppet 中集成了一个叫做Augeas的巨大的东西,它是专为这种运用情况而规划的。
Augeas可被以为填补了Puppet才能的空白,比方在其中一个指定方针的资源类型(例如用于保护/etc/hosts中的条意图主机资源)还不可用时。在这个文档中,您将学习怎么运用Augeas来减轻你办理装备文件的担负。
Augeas是什么?
Augeas根本上便是一个装备修正东西。它以他们原生的格局解析装备文件而且将它们转化成树。装备的更改能够经过操作树来完结,并能够以原生装备文件格局保存装备。
这篇教程要达到什么意图?
咱们会针对咱们之前构建的Puppet服务器装置并装备Augeas。咱们会运用这个东西创立并测验几个不同的装备文件,并学习怎么适当地运用它来办理咱们的体系装备。
前置阅览
咱们需求一台作业的Puppet服务器和客户端。假如你还没有,请先依照我从前的教程来。
Augeas装置包能够在规范CentOS/RHEL库房中找到。不幸的是,Puppet用到的Augeas的ruby封装只在puppetlabs库房中(或许EPEL)中才有。假如你体系中还没有这个库房,请运用下面的指令:
在CentOS/RHEL 6.5上:
# rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabsrelease610.noarch.rpm
在CentOS/RHEL 7上:
# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabsrelease710.noarch.rpm
在你成功地装置了这个库房后,在你的体系中装置RubyAugeas:
# yum install rubyaugeas
或许假如你是从我的上一篇教程中持续的,运用puppet的办法装置这个包。在/etc/puppet/manifests/site.pp中修正你的custom_utils类,在packages这行中参加“rubyaugeas”。
class custom_utils {package { [nmap,telnet,vimenhanced,traceroute,rubyaugeas]:ensure => latest,allow_virtual => false,}}
不带Puppet的Augeas
如我从前所说,开始Augeas并不是来自Puppet实验室,这意味着即便没有Puppet自身咱们依然能够运用它。这种办法可在你将它们布置到Puppet环境之前,验证你的修正和主意是否是正确的。要做到这一点,你需求在你的体系中装置一个额定的软件包。请履行以下指令:
# yum install augeas
Puppet Augeas 示例
用于演示,这里有几个Augeas运用事例。
办理 /etc/sudoers 文件
给wheel组加上sudo权限。
这个比如会向你展现怎么在你的GNU/Linux体系中为%wheel组加上sudo权限。
# 装置sudo包package { ‘sudo’:ensure => installed, # 保证sudo包已装置} # 答应用户归于wheel组来运用sudoaugeas { ‘sudo_wheel’:context => ‘/files/etc/sudoers’, # 方针文件是 /etc/sudoerschanges => [# 答应wheel用户运用sudo’set spec[user = %wheel]/user %wheel’,’set spec[user = %wheel]/host_group/host ALL’,’set spec[user = %wheel]/host_group/command ALL’,’set spec[user = %wheel]/host_group/command/runas_user ALL’,]}
现在来解说这些代码做了什么:spec界说了/etc/sudoers中的用户段,[user]界说了数组中给定的用户,一切的界说放在该用户的斜杠( / ) 后那部分。因此在典型的装备中这个能够这么表达:
user host_group/host host_group/command host_group/command/runas_user
这个将被转化成/etc/sudoers下的这一行:
%wheel ALL = (ALL) ALL
增加指令别称
下面这部分会向你展现怎么界说指令别号,它能够在你的sudoer文件中运用。
# 创立新的SERVICE别号,包含了一些根本的特权指令。augeas { ‘sudo_cmdalias’:context => ‘/files/etc/sudoers’, # 方针文件是 /etc/sudoerschanges => [set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/name SERVICES,set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/command[1] /sbin/service,set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/command[2] /sbin/chkconfig,set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/command[3] /bin/hostname,set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/command[4] /sbin/shutdown,]}
sudo指令别号的语法很简单:Cmnd_Alias界说了指令别号字段,[alias/name]绑定一切给定的别号,/alias/name SERVICES 界说实在的别号,alias/command 是归于该别号的一切指令的数组。以上将被转化如下:
Cmnd_Alias SERV%&&&&&%ES = /sbin/service , /sbin/chkconfig , /bin/hostname , /sbin/shutdown
关于/etc/sudoers的更多信息,请拜访官方文档。
向一个组中参加用户
要运用Augeas向组中增加用户,你或许要增加一个新用户,不管是排在 gid 字段仍是最终的用户 uid 之后。咱们在这个比如中运用SVN组。这能够经过下面的指令达到:
在Puppet中:
augeas { ‘augeas_mod_group:context => ‘/files/etc/group’, #方针文件是 /etc/groupchanges => [ins user after svn/*[self::gid or self::user][last()],set svn/user[last()] john,]}
运用 augtool:
augtool> ins user after /files/etc/group/svn/*[self::gid or self::user][last()] augtool> set /files/etc/group/svn/user[last()] john