puppet
puppet是一种集中配置管理,使用了跨平台的描述语言,可管理users, cronjob, hosts, package, services, fils等。
puppet采用星状的结构,所有的客户端和一个(或几个)服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。一旦完成,如果有任何变动就向服务期发送报告。
puppet把那些系统实体(文件,用户,服务)称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
供应者
puppet使用多种资源类型,(详见typeguide和reference),如最基本的:file,user,package。对不同的系统(MacOS,RHEL),这些资源类型的实现也是各异的,因此,puppet为每种资源类型提供了多种实现,并把这些实现称之为providers。puppet会根据系统平台选择合适的provider,同时,你也可以方便的修改这些选项。
修改系统
puppet的资源是直接负责对系统进行管理的,你不能从语言直接修改系统,你必须用语言描述一个资源,然后由资源对系统进行修改。这引起了我们对配置过程的重新思考,比如挂载一个nfs,不要手动的在fstab的末尾加上几行,你应该创建一个mount类型的资源,并由该资源修改fstab,netinfo等。
资源只是一组属性(attributes)的组合,属性分为两种:一种描述如何对资源进行操作;另一种直接管理资源(该类属性也称为properties)。比如,我们可以规定创建一个用户时必须创建home目录,这类属性属于前者。大部分的属性是属于后者的,比如用户的uid,gid的等。
资源关系
资源的关系用于决定使一个配置生效时要进行的操作顺序,也可用来决定一个资源是否应该响应另一个资源的变化。比如一个服务资源依赖于一个配置资源,puppet会首先保证依赖资源的正常。当配置资源变化时,服务资源会被重启,使用puppet同时管理了服务及其依赖,可以保证服务运行在最新的代码和配置文件上。
Exec资源
有时你关心的资源还不存在,为此,我们提供了exec资源类型,允许运行外部的命令。比如,你可以创建一个exec资源,它使用svnadmin命令创建一个repo,同时,puppet会检查该目录是否存在,如果不存在才会运行命令。这要,你就可以使用svnrepo资源,而不用敲打全部的命令。
Transactionallayer
puppet默认每隔30分钟进行一次配置检查,只有当配置不符合时才进行修改,这种行为特性是由Trasctional层提供和支持的。但是puppet的事务功能不全,它的事务没有记载(recorded),不能回退。但当有变化发生时,事务机制会记录具体的改动(log)。