如何在Linux中借助Puppet和Augeas管理配置?

译文
运维 系统运维 Linux
虽然Puppet是一款非常独特而实用的工具,但有些情况下你可能会使用有点不一样的方法。比如这种情况:修改已经在你的几台服务器上,同时在每一台服务器上又很独特的配置文件。

虽然Puppet是一款非常独特而实用的工具,但有些情况下你可能会使用有点不一样的方法。比如这种情况:修改已经在你的几台服务器上,同时在每一台服务器上又很独特的配置文件。Puppet实验室的工作人员同样认识到了这种情况,已开发出一款名为Augeas的出色工具,它就是专门为这种用途而设计的。

[[120584]] 

准确地说,在缺少针对特定对象的资源类型(比如处理/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上:

  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类,以便在软件包数组里面含有“ruby­augeas”:

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

不用Puppet的Augeas

正如文章开头所讲的那样,Augeas最初并不来自Puppet实验室,这意味着我们甚至不需要Puppet本身,仍可以使用它。这种方法适用于验证你的修改和想法,然后将它们应用到你的Puppet环境中。为了让这种情况成为可能,你需要在系统中安装一个额外的软件包。为此,请执行下面这个命令:

  1. # yum install augeas 

Puppet Augeas示例

为了便于演示,下面是几个示例性质的Augeas用例。

管理/etc/sudoers文件

1. 将sudo权限添加到wheel群组

这个例子将显示如何在你的GNU/Linux系统中为群组%wheel添加简单的sudo权限。

  1. # Install sudo package   
  2. package { 'sudo':   
  3.     ensure => installed, # ensure sudo package installed   
  4. }   
  5.     
  6. # Allow users belonging to wheel group to use sudo   
  7. augeas { 'sudo_wheel':   
  8.     context => '/files/etc/sudoers'# The target file is /etc/sudoers   
  9.     changes => [   
  10.         # allow wheel users to use 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  

2. 添加命令别名

下面这部分将显示如何定义你可以在sudoers文件里面使用的命令别名。

  1. # Create new alias SERVICES which contains some basic privileged commands   
  2. augeas { 'sudo_cmdalias':   
  3.     context => '/files/etc/sudoers'# The target file is /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的更多信息,请访问官方说明文档:http://augeas.net/docs/references/lenses/files/sudoers-aug.html。

为群组添加用户

想使用Augeas为群组添加用户,你可能需要在gid字段后面或者在上一个用户后面添加新的用户。为了该示例,我们将使用群组SVN。可以使用下面这个命令来做到这一点:

在Puppet中:

  1. augeas { 'augeas_mod_group:   
  2.     context => '/files/etc/group'# The target file is /etc/group   
  3.     changes => [  
  4.         "ins user after svn/*[self::gid or self::user][last()]",   
  5.         "set svn/user[last()] john",   
  6.     ]  

使用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维基。
 

英文:http://xmodulo.com/manage-configurations-linux-puppet-augeas.html

责任编辑:林师授 来源: 51CTO
相关推荐

2014-05-07 09:56:48

Docker管理Linux容器

2014-12-03 08:53:59

eCryptFS加密文件

2015-12-07 15:11:18

Ubuntupuppet安装

2020-10-09 11:15:14

LinuxLVM逻辑卷管理

2019-09-16 13:48:03

Linux管理日志

2017-01-11 16:41:16

Linux设备文件文件系统

2019-03-18 13:00:15

LinuxFish ShellBash

2018-03-09 09:45:52

LinuxSSH登录导语

2019-04-19 11:00:05

Linuxsudo命令

2013-11-18 11:41:37

2018-03-29 15:21:03

LinuxDebian网桥

2021-02-18 17:00:52

Linux归档文件

2023-03-14 16:44:20

Linuxhtop

2015-08-05 15:10:24

UbuntuLVM

2018-12-11 11:00:50

Linux字体命令

2018-10-08 09:35:59

2024-10-12 17:23:30

2020-01-02 15:40:23

Windows 10配置离线地图

2012-05-07 08:57:56

puppet extlpuppet hier

2024-01-04 12:05:22

LinuxRAID技术
点赞
收藏

51CTO技术栈公众号