虽然Puppet是一款非常独特而实用的工具,但有些情况下你可能会使用有点不一样的方法。比如这种情况:修改已经在你的几台服务器上,同时在每一台服务器上又很独特的配置文件。Puppet实验室的工作人员同样认识到了这种情况,已开发出一款名为Augeas的出色工具,它就是专门为这种用途而设计的。
准确地说,在缺少针对特定对象的资源类型(比如处理/etc/hosts条目的主机资源)的情况下,Augeas就可以弥补Puppet功能方面的不足。在这篇实用文章中,你将学会如何使用Augeas,简化配置文件的管理。
Augeas简介
Augeas基本上是一种配置编辑工具。它能够分析采用原生格式的配置文件,并将它们转变成一棵树。只要处理这棵树,并将它保存回成原生配置文件,就可以变更配置。
我们在本教程中要实现什么样的目的?
我们将安装和配置Augeas工具,以便与我们之前构建的Puppet服务器配合使用。我们将借助这个工具创建和测试几个几种不同的配置,并学习如何合理使用它来管理我们的系统配置。
前提条件
我们需要一个正常运行的Puppet服务器和客户机环境。要是你还没有这个环境,请参阅我之前的那篇教程:http://xmodulo.com/manage-configurations-linux-puppet-augeas.html。
可以在我们的CentOS/RHEL标准软件库中找到Augeas软件包。遗憾的是,Puppet使用puppetlabs软件库(或EPEL)里面才有的Augeas ruby包装器。要是你的系统里面还没有这个软件库,使用下面这个命令来添加它:
在CentOS/RHEL 6.5上:
#rpm-ivhhttps://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabsrelease610.noarch.rpm
在CentOS/RHEL 7上:
#rpm-ivhhttps://yum.puppetlabs.com/el/7/products/x86_64/puppetlabsrelease710.noarch.rpm
在成功添加了这个软件库后,在你的系统中安装RubyAugeas:
#yuminstallrubyaugeas
或者你也可以使用Puppet方式来安装该软件包。修改/etc/puppet/manifests/site.pp里面的custom_utils类,以便在软件包数组里面含有“rubyaugeas”:
classcustom_utils{ package{["nmap","telnet","vimenhanced","traceroute","rubyaugeas"]: ensure=>latest, allow_virtual=>false, } }
不用Puppet的Augeas
正如文章开头所讲的那样,Augeas最初并不来自Puppet实验室,这意味着我们甚至不需要Puppet本身,仍可以使用它。这种方法适用于验证你的修改和想法,然后将它们应用到你的Puppet环境中。为了让这种情况成为可能,你需要在系统中安装一个额外的软件包。为此,请执行下面这个命令:
#yuminstallaugeas
Puppet Augeas示例
为了便于演示,下面是几个示例性质的Augeas用例。
管理/etc/sudoers文件
1. 将sudo权限添加到wheel群组
这个例子将显示如何在你的GNU/Linux系统中为群组%wheel添加简单的sudo权限。
#Installsudopackage package{'sudo': ensure=>installed,#ensuresudopackageinstalled } #Allowusersbelongingtowheelgrouptousesudo augeas{'sudo_wheel': context=>'/files/etc/sudoers',#Thetargetfileis/etc/sudoers changes=>[ #allowwheeluserstousesudo 'setspec[user="%wheel"]/user%wheel', 'setspec[user="%wheel"]/host_group/hostALL', 'setspec[user="%wheel"]/host_group/commandALL', 'setspec[user="%wheel"]/host_group/command/runas_userALL', ] }
现在不妨解释代码的作用: spec指定了/etc/sudoers中的用户部分,[user]定义了来自数组的特定用户,斜杠(/)后面的所有定义是该用户的子部分。所以在典型的配置中,这将被解读为:
userhost_group/hosthost_group/commandhost_group/command/runas_user
这就相当于/etc/sudoers的这一行:
%wheelALL=(ALL)ALL
2. 添加命令别名
下面这部分将显示如何定义你可以在sudoers文件里面使用的命令别名。
#CreatenewaliasSERVICESwhichcontainssomebasicprivilegedcommands augeas{'sudo_cmdalias': context=>'/files/etc/sudoers',#Thetargetfileis/etc/sudoers changes=>[ "setCmnd_Alias[alias/name='SERVICES']/alias/nameSERVICES", "setCmnd_Alias[alias/name='SERVICES']/alias/command[1]/sbin/service", "setCmnd_Alias[alias/name='SERVICES']/alias/command[2]/sbin/chkconfig", "setCmnd_Alias[alias/name='SERVICES']/alias/command[3]/bin/hostname", "setCmnd_Alias[alias/name='SERVICES']/alias/command[4]/sbin/shutdown", ] }
sudo命令别名的语法相当简单:Cmnd_Alias定义了命令别名的部分,[alias/name]将所有绑定至特定的别名名称,/alias/name SERVICES定义了实际的别名名称,而alias/command是应该属于该别名一部分的所有命令组成的数组。该命令的输出结果将是如下:
Cmnd_AliasSERVICES=/sbin/service,/sbin/chkconfig,/bin/hostname,/sbin/shutdown
想了解关于/etc/sudoers的
转载请注明:IT运维空间 » 运维技术 » 如何在Linux中借助Puppet和Augeas管理配置?
发表评论