当前位置: 首页 > 科技观察

如何在Linux中使用Puppet和Augeas管理配置?

时间:2023-03-14 14:54:35 科技观察

尽管Puppet是一个非常独特且有用的工具,但在某些情况下您可能会以不同的方式使用它。比如这种情况:修改一个配置文件,这个配置文件已经在你的几台服务器上,并且在每台服务器上都是唯一的。PuppetLabs的人也认识到了这种情况,并开发了一款名为Augeas的优秀工具,它就是专门为此设计的。准确地说,Augeas填补了Puppet缺少特定于对象的资源类型的功能,例如处理/etc/hosts条目的主机资源。在这篇实用的文章中,您将学习如何使用Augeas来简化配置文件管理。Augeas简介Augeas基本上是一个配置编辑工具。它可以分析本机格式的配置文件并将它们变成树。可以通过简单地操作这棵树并将其保存回本机配置文件来进行配置更改。我们要在本教程中实现什么目标?我们将安装和配置Augeas工具以与我们之前构建的Puppet服务器一起使用。我们将使用这个工具来创建和测试几种不同的配置,并学习如何正确地使用它来管理我们的系统配置。先决条件我们需要一个正常运行的Puppet服务器和客户端环境。如果你还没有这个环境,请参考我之前的教程:http://xmodulo.com/manage-configurations-linux-puppet-augeas.html。Augeas软件包可以在我们的CentOS/RHEL标准软件存储库中找到。不幸的是,Puppet使用了仅在puppetlabs存储库(或EPEL)中可用的Augeasruby??包装器。如果您的系统上没有此存储库,请使用以下命令添加它:在CentOS/RHEL6.5上:#rpm-ivhhttps://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabsrelease610.noarch。CentOS/RHEL7上的rpm:#rpm-ivhhttps://yum.puppetlabs.com/el/7/products/x86_64/puppetlabsrelease710.noarch.rpm成功添加此存储库后,将其安装到您的系统RubyAugeas:#yuminstallrubyaugeas或您可以使用Puppet方式安装软件包。修改/etc/puppet/manifests/site.pp中的custom_utils类以在packages数组中包含“rubyaugeas”::ensure=>latest,allow_virtual=>false,}}没有Puppet的Augeas正如文章开头提到的,Augeas最初并不是来自Puppet实验室,也就是说我们甚至不需要Puppet本身,仍然可以使用它。这种方法非常适合在将您的修改和想法应用到您的Puppet环境之前验证它们。为此,您需要在系统中安装一个额外的包。为此,请执行以下命令:#yuminstallaugeasPuppetAugeasExamples出于演示目的,这里有一些示例Augeas用例。管理/etc/sudoers文件1.将sudo权限添加到wheel组此示例将展示如何在GNU/Linux系统上将简单的sudo权限添加到组%wheel。#Installsudopackagepackage{'sudo':ensure=>installed,#ensuresudopackageinstalled}#Allowusersbelongingtowheelgrouptousesudoaugeas{'sudo_wheel':context=>'/files/etc/sudoers',#Thetargetfileis/etc/sudoerschanges=>[#allowwheeluserstousesudo'规范[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)ALL2。添加命令别名下面的这一部分将展示如何定义可以在sudoers文件中使用的命令别名。#CreatenewaliasSERVICES其中包含一些基本的特权命令augeas{'sudo_cmdalias':context=>'/files/etc/sudoers',#Thetargetfileis/etc/sudoerschanges=>["setCmnd_Alias[alias/name='SERVICES']/alias/nameSERVICES","set[Cmnd_Aliasalias/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命令aliassyntax很简单:Cmnd_Alias定义了命令别名的部分,[alias/name]将所有的东西都绑定到一个特定的别名上,/alias/nameSERVICES定义了实际的别名,alias/command是应该是部分的所有东西该别名的命令数组。该命令的输出如下:Cmnd_AliasSERVICES=/sbin/service,/sbin/chkconfig,/bin/hostname,/sbin/shutdown有关/etc/sudoers的更多信息,请访问官方文档:http:https://augeas.net/docs/references/lenses/files/sudoers-aug.html。将用户添加到组要使用Augeas将用户添加到组,您可能需要在gid字段或前一个用户之后添加新用户。为了这个例子,我们将使用组SVN。您可以使用以下命令执行此操作:在Puppet中:augeas{'augeas_mod_group:context=>'/files/etc/group',#Thetargetfileis/etc/groupchanges=>["insuseraftersvn/*[self::gidorself::user][last()]","setsvn/user[last()]john",]}使用augtool:augtool>insuserafter/files/etc/group/svn/*[self::gidorself::user][last()]augtool>set/files/etc/group/svn/user[last()]john结??论现在你应该清楚地知道如何在你的Puppet项目中使用Augeas了。随意尝试一下,当然也可以参考Augeas官方文档。它将帮助您了解如何在您自己的项目中正确使用Augeas,并向您展示使用它实际可以节省多少时间。如果您有任何问题,请留言。有用的链接http://www.watzmann.net/categories/augeas.html:有很多教程专注于Augeas的使用。http://projects.puppetlabs.com/projects/1/wiki/puppet_augeas:具有许多实际示例的Puppetwiki。英文:http://xmodulo.com/manage-configurations-linux-puppet-augeas.html