读书频道 > 网站 > 网页设计 > 精通Puppet配置管理工具(第2版)
1.7.2 init.pp文件
14-11-01    奋斗的小年轻
收藏    我要投稿   
本书系统介绍了开源配置管理工具Puppet,并提供了帮助使用Puppet 的大量资源。书中介绍了如何将Puppet 应用在包括Windows 在内的多种平台上,如何使用Puppet 模块和Hiera,如何使用大量免费好用的Puppet 附立即去当当网订购
 
下面我们分析一下模块的内部结构,从init.pp文件开始,如代码清单1-9所示。
 
代码清单1-9 sudo模块的init.pp文件
class sudo {
 
  package { 'sudo':
    ensure => present,
  }
 
  if $::osfamily == 'Debian' {
    package { 'sudo-ldap':
      ensure => present,
      require => Package['sudo'],
    }
  }
 
  file { '/etc/sudoers':
    owner => 'root',
    group => 'root',
    mode => '0440',
    source => "puppet://$::server/modules/sudo/etc/sudoers",
    require => Package['sudo'],
  }
}
 
我们的sudo模块只包含这个名为sudo的类,类中有3项资源:两个包和一个文件。第一个包保证sudo包被安装了,ensure => present;第二个包用了Puppet的if/else条件分支语句,只有在满足条件的情况下,才安装sudo-ldap包。
 
注意 除了if/else语句,Puppet还有两种条件判断语句:case语句和selector语法。关于Puppet条件判断语法的详细说明参见http://docs.puppetlabs.com/guides/more_language.html#conditionals。
 
警告 相等比较运算符==是不分大小写的,如果要进行字符串之间的区分大小写比较,必须用正则表达式操作符=~,且需要写出正则表达式的完整形式,如$osfamily =~ /^Debian$/。
 
Puppet检查每个建立连接的客户端上名称为osfamily的fact的值,如果它的值是Debian,Puppet将安装sudo-ldap包。操作系统家族是Puppet根据Linux发行版兼容性进行区分的一种方式,例如Debian、Ubuntu和Mint都是基于Debian的Linux发行版,因此它们的osfamily值都是Debian。
 
注意 前面我们讨论过Facter和它的值,在Puppet清单中,每一个fact(事实)都用一个变量表示,变量名称前加$符号。由于这些变量都定义在所谓的顶级域(top scope)中访问,所以需要写出$::variable的形式。后续章节中会详细讨论这一点。
 
最后,在sudo类中出现了一个新属性require,这个属性是一个元参数(metaparameter)。元参数是指那些定义在Puppet语言中的属性(与定义在类型中的普通参数相对)的参数,它们可以被定义在任何类型的资源上。
 
require元参数在资源Package["sudo-ldap"]和资源Package["sudo"]之间建立了依赖关系。在代码清单1-9中,在资源Package["sudo-ldap"]中添加值为资源Package["sudo"]的require属性,表示Package["sudo-ldap"]需要Package["sudo"],也就是说sudo包必须在sudo-ldap包之前安装。
 
关系是Puppet的重要组成部分,它允许你在主机的各项配置资源之间构建真实的依赖关系,主机上的网络配置是个典型的例子。主机上的很多资源,例如Web服务或者MTA(邮件传送客户端),正常运行都依赖于配置并运行网络服务。关系允许你指定一些资源(如配置网络的资源)在配置Web服务或MTA的资源之前得到处理。
 
关系的用处不止于此,Puppet还能在资源间建立一种触发关系。例如,如果一个文件资源发生了变化,可以通过触发关系重启一个服务资源,这意味着你可以修改一个服务的配置文件,然后通过配置文件和服务间的触发关系重启服务,从而保证运行中的服务始终是基于最新版本的配置文件。第3章将详细介绍这类关系以及其他元参数。
 
注意 元参数的完整列表参见 http://docs.puppetlabs.com/references/stable/metaparameter.html。
 
sudo类的最后一个资源是文件资源File["/etc/sudoers"]。该文件资源管理主机操作系统中的/etc/sudoers文件,它的前3个属性指定文件的用户、组和权限。这里,这个文件属于root用户和root组,权限是0440(权限一般用一组8进制数字表示)。后面的属性source指定了Puppet从Puppet服务器获得这个文件,并传送到客户端。该属性的值包括Puppet服务器名称以及要检索文件的路径和名称:
puppet://$::server/modules/sudo/etc/sudoers
 
让我们来分析一下这个属性值。第一部分puppet://指明通过Puppet文件服务器协议获取文件。
 
注意 Puppet文件服务器是Puppet master的一部分,Puppet客户端可以通过它从master同步文件,或者通过HTTP、rsync等协议从其他源获取文件。
 
变量$::server是Puppet服务器的主机名。
 
提示 更简洁的写法是去掉服务器名称,这时Puppet认为源服务器是Puppet客户端正在连接的服务器,所以这里可以用简化方法写成:puppet:///modules/sudo/etc/sudoers。
 
source值的最后一部分告诉Puppet从哪里获取源文件,这与网络文件共享中此文件的路径是一致的:第一部分是modules,说明此文件保存在一个模块中;接下来是文件所在模块的名字,这里是sudo;最后指定了模块内部该文件的路径。
 
模块中的所有文件都保存在files子目录中,它是文件共享地址的根目录,这里我们在files目录下创建etc目录,再把sudoers文件保存在这个目录中:
Puppet# mkdir –p /etc/puppet/modules/sudo/files/etc
Puppet# cp /etc/sudoers /etc/puppet/modules/sudo/files/etc/sudoers
 
版本控制
 
当配置信息越来越复杂时,把它纳入到版本控制系统(如Subersion或Git)中是个好方法。版本控制系统能记录文件变化的历史,是软件开发必不可少的工具之一。对于配置管理来说,版本控制记录了配置文件变化的历史,当你需要回退到以前的某个状态或者在不影响线上运行系统的情况下作一些改变时,你会发现版本控制非常有用。
 
Subversion的详细使用方法参见http://svnbook.red-bean.com/。关于如何在Puppet中使用Subversion,参见http://projects.puppetlabs.com/projects/puppet/wiki/Puppet_Version_Control。第3章也会介绍如何用Subversion协助Puppet做配置管理。
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站