天天看点

如何用Puppet和Augeas管理Linux配置如何用Puppet和Augeas管理Linux配置

augeas可被认为填补了puppet能力的空白,比如在其中一个指定对象的资源类型(例如用于维护/etc/hosts中的条目的主机资源)还不可用时。在这个文档中,您将学习如何使用augeas来减轻你管理配置文件的负担。

<a target="_blank"></a>

如何用Puppet和Augeas管理Linux配置如何用Puppet和Augeas管理Linux配置

augeas基本上就是一个配置编辑工具。它以他们原生的格式解析配置文件并且将它们转换成树。配置的更改可以通过操作树来完成,并可以以原生配置文件格式保存配置。

在centos/rhel 6.5上:

# rpm -­ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs­release­6­10.noarch.rpm

在centos/rhel 7上:

# rpm -­ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs­release­7­10.noarch.rpm

在你成功地安装了这个仓库后,在你的系统中安装ruby­augeas:

# yum install ruby­augeas

class custom_utils {

package { ["nmap","telnet","vim­enhanced","traceroute","ruby­augeas"]:

ensure =&gt; latest,

allow_virtual =&gt; false,

}

如我先前所说,最初augeas并不是来自puppet实验室,这意味着即使没有puppet本身我们仍然可以使用它。这种方法可在你将它们部署到puppet环境之前,验证你的修改和想法是否是正确的。要做到这一点,你需要在你的系统中安装一个额外的软件包。请执行以下命令:

# yum install augeas

用于演示,这里有几个augeas使用案例。

给wheel组加上sudo权限。

这个例子会向你展示如何在你的gnu/linux系统中为%wheel组加上sudo权限。

# 安装sudo包

package { 'sudo':

ensure =&gt; installed, # 确保sudo包已安装

# 允许用户属于wheel组来使用sudo

augeas { 'sudo_wheel':

context =&gt; '/files/etc/sudoers', # 目标文件是 /etc/sudoers

changes =&gt; [

# 允许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':

"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 services = /sbin/service , /sbin/chkconfig , /bin/hostname , /sbin/shutdown

要使用augeas向组中添加用户,你也许要添加一个新用户,不管是排在 gid 字段还是最后的用户 uid 之后。我们在这个例子中使用svn组。这可以通过下面的命令达成:

在puppet中:

augeas { 'augeas_mod_group:

context =&gt; '/files/etc/group', #目标文件是 /etc/group

"ins user after svn/*[self::gid or self::user][last()]",

"set svn/user[last()] john",

使用 augtool:

augtool&gt; ins user after /files/etc/group/svn/*[self::gid or self::user][last()] augtool&gt; set /files/etc/group/svn/user[last()] john

目前为止,你应该对如何在puppet项目中使用augeas有点明白了。随意地试一下,你肯定需要浏览官方的augeas文档。这会帮助你了解如何在你的个人项目中正确地使用augeas,并且它会让你知道可以用它节省多少时间。

如有任何问题,欢迎在下面的评论中发布,我会尽力解答和向你建议。

原文发布时间:2014-11-25

本文来自云栖合作伙伴“linux中国”

继续阅读