阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何用Puppet和Augeas管理Linux配置

164次阅读
没有评论

共计 3853 个字符,预计需要花费 10 分钟才能阅读完成。

虽然 Puppet 是一个真正独特的有用工具,但在有些情况下你可以使用一点不同的方法来用它。比如,你要修改几个服务器上已有的配置文件,而且它们彼此稍有不同。Puppet 实验室的人也意识到了这一点,他们在 Puppet 中集成了一个叫做 Augeas 的伟大的工具,它是专为这种使用情况而设计的。

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

Augeas 是什么?

如何用 Puppet 和 Augeas 管理 Linux 配置

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

Puppet 学习系列:

Puppet 学习一:安装及简单实例应用 http://www.linuxidc.com/Linux/2013-08/88710.htm

Puppet 学习二: 简单模块配置和应用 http://www.linuxidc.com/Linux/2013-08/88711.htm

相关阅读:

有关 Puppet agent 端三种备份恢复方案探讨研究 http://www.linuxidc.com/Linux/2013-07/87885.htm
选择更安全的方式注册你的 Puppet 节点 http://www.linuxidc.com/Linux/2013-07/87884.htm
通过配置 SSH 深刻理解 Puppet 的语法及工作机制 http://www.linuxidc.com/Linux/2013-07/87882.htm
Puppet 利用 Nginx 多端口实现负载均衡 http://www.linuxidc.com/Linux/2013-02/79794.htm
CentOS(5 和 6)下 Puppet 的 C / S 模式实例 http://www.linuxidc.com/Linux/2011-12/50502.htm

这篇教程要达成什么目的?

我们会针对我们之前构建的 Puppet 服务器安装并配置 Augeas。我们会使用这个工具创建并测试几个不同的配置文件,并学习如何适当地使用它来管理我们的系统配置。

前置阅读

我们需要一台工作的 Puppet 服务器和客户端。如果你还没有,请先按照我先前的教程来。

Augeas 安装包可以在标准 CentOS/RHEL 仓库中找到。不幸的是,Puppet 用到的 Augeas 的 ruby 封装只在 puppetlabs 仓库中(或者 EPEL)中才有。如果你系统中还没有这个仓库,请使用下面的命令:

在 CentOS/RHEL 6.5 上:

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

在 CentOS/RHEL 7 上:

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

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

  1. # yum install ruby­augeas

或者如果你是从我的上一篇教程中继续的,使用 puppet 的方法安装这个包。在 /etc/puppet/manifests/site.pp 中修改你的 custom_utils 类,在 packages 这行中加入“ruby­augeas”。

  1. class custom_utils {
  2. package{[“nmap”,“telnet”,“vim­enhanced”,“traceroute”,“ruby­augeas”]:
  3. ensure=> latest,
  4. allow_virtual =>false,
  5. }
  6. }

不带 Puppet 的 Augeas

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

  1. # yum install augeas

Puppet Augeas 示例

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

管理 /etc/sudoers 文件

  1. 给 wheel 组加上 sudo 权限。

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

  1. # 安装 sudo 包
  2. package{‘sudo’:
  3. ensure=> installed,# 确保 sudo 包已安装
  4. }
  5.  
  6. # 允许用户属于 wheel 组来使用 sudo
  7. augeas {‘sudo_wheel’:
  8. context =>‘/files/etc/sudoers’,# 目标文件是 /etc/sudoers
  9. changes =>[
  10. # 允许 wheel 用户使用 sudo
  11. ‘set spec[user = “%wheel”]/user %wheel’,
  12. ‘set spec[user = “%wheel”]/host_group/host ALL’,
  13. ‘set spec[user = “%wheel”]/host_group/command ALL’,
  14. ‘set spec[user = “%wheel”]/host_group/command/runas_user ALL’,
  15. ]
  16. }

现在来解释这些代码做了什么:spec 定义了 /etc/sudoers 中的用户段,[user] 定义了数组中给定的用户,所有的定义放在该用户的斜杠 (/) 后那部分。因此在典型的配置中这个可以这么表达:

  1. user host_group/host host_group/command host_group/command/runas_user

这个将被转换成 /etc/sudoers 下的这一行:

  1. %wheel ALL =(ALL) ALL
  1. 添加命令别称

下面这部分会向你展示如何定义命令别名,它可以在你的 sudoer 文件中使用。

  1. # 创建新的 SERVICE 别名,包含了一些基本的特权命令。
  2. augeas {‘sudo_cmdalias’:
  3. context =>‘/files/etc/sudoers’,# 目标文件是 /etc/sudoers
  4. changes =>[
  5. “set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/name SERVICES”,
  6. “set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/command[1] /sbin/service”,
  7. “set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/command[2] /sbin/chkconfig”,
  8. “set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/command[3] /bin/hostname”,
  9. “set Cmnd_Alias[alias/name = ‘SERVICES’]/alias/command[4] /sbin/shutdown”,
  10. ]
  11. }

sudo 命令别名的语法很简单:Cmnd_Alias 定义了命令别名字段,[alias/name] 绑定所有给定的别名,/alias/name SERVICES 定义真实的别名,alias/command 是属于该别名的所有命令的数组。以上将被转换如下:

  1. Cmnd_Alias SERVICES =/sbin/service ,/sbin/chkconfig ,/bin/hostname ,/sbin/shutdown

关于 /etc/sudoers 的更多信息,请访问官方文档。

向一个组中加入用户

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

在 Puppet 中:

  1. augeas {‘augeas_mod_group:
  2. context => ‘/files/etc/group‘, #目标文件是 /etc/group
  3. changes => [
  4. “ins user after svn/*[self::gid or self::user][last()]”,
  5. “set svn/user[last()] john”,
  6. ]
  7. }

使用 augtool:

  1. augtool> ins user after /files/etc/group/svn/*[self::gid or self::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: Puppet wiki 带有许多实例。

Puppet 的详细介绍 :请点这里
Puppet 的下载地址 :请点这里

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计3853字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中