Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29335412
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: LINUX

2010-12-05 20:32:13

Version Compatibility【资源手册快速查寻】

现在来整理各个资源的相关属性。(这个在puppet的中文维基上面有过翻译.相关的内容将会直接转载过来)

1.      File资源

管理系统本地文件

设置文件权限和属主

管理文件内容,可以基于模板的内容管理

支持管理目录(目录管理)

从远程服务器复制整个目录到本地(远程安装软件包的时候能不能考虑用这点呢)

依赖:该资源没有依赖关系

平台:支持所有平台

示例:

我们在109上面因为它安装了客户端。先用客户来测试吧,配置文件如下:

file {

        "/tmp/testcopy":

        source => "/tmp/test",

        mode=>0644;

}  #表示的是从/tmp/test复制一份新文件 运行puppet /tmp/1.pp 就行了!

参数

#backup  参数

可以利用filebucket对文件进行备份的。可以将文件备份到指定的机器是本地还是网络上面的其他机器的。如果指定其备份参数为false那就不做备份了!(将来可能会用到这个参数表示备份配置文件的时候就非常有用了。)

以下是一段测试脚本。我修改一个文件然后看下是否有作备份。

file {

         "/tmp/1203.txt":

         ensure => present,

         backup => '.',                在当前目录备份出来一个文件其新名称为1203.txt.

         content => "hellom121",

       }

这样你就不用在每个机器上都创建一个本地的filebucket, 每个版本的文件通常只备份一次, 通常你可以手工的恢复你备份的文件.(一份文件只备份一次而不像SVN那样可以有版本恢复功能)

如果我们又修改再提交之后发现最初的不见了被覆盖掉了的!

假如我现在想要将其备份到服务器的某个目录下面怎么办呢?

以后就先配置在本地进行文件备份处理下吧

filebucket { main:

         name => "myback",

         path => "/home/abc/myback/",   将其放在这个目录下面去。

}

file {

          "/tmp/1203.txt":

         ensure => present,

         backup => main,

                content => "h121212ellom121120031231113",

}

说一下filebucket这个资源的属性:

#name    表示这个资源的名称

#path    表示本地备份的存储目录。我发现好像它是作了一次MD运算出来的一个目录。

#port    表示filebucket服务器的监听端口默认是8140

#server  表示存放备份的远端服务器

/home/abc/myback/2/d/e/9/2/e/0/2/2de92e024d4225888587c0abc0b516f1/ 下面有两个文件分别存内容与路径值!

 

 

#checksum

检查文件是否被修改过。判断一个文件是否被修改过的方式包括使用md5mtime等默认为md5

#conent表示写入文件的内容了

define resolve(nameserver1, nameserver2, domain, search) {

    $str = "search $search

            domain $domain

            nameserver $nameserver1

            nameserver $nameserver2"

    file { "/etc/resolv.conf":

        content => $str                  #可以使用一个变量使用的

    }

}

#ensure

如果文件本来不存在是否要新建文件。可以设置值为:absentpresent,filedirectory.

present,就会检查该文件是否存在,如果不存在就新建该文件,如果指定是 absent, 就会删除该文件(如果recurse => true ,就会删除目录)

file {

        "/tmp/testcopy123":

        ensure => "present",     #指定了这个值那如果不存在就新建!原来如此!

        mode=>0644;

}

file {

       "/etc/inetd.conf":

       ensure => "/etc/initlog.conf",

  }

这样的话就能够创建一个符号链接。即more /etc/inetd.conf所看到的内容其实就是/etc/initlog.conf这里面的内容了。(相当于是WIN的快捷方式了)

file {

       "/home/abc/testhello":

       ensure => directory,

  }

表示创建一个目录。但是经过测试发现其并不支持创建级联目录。即mkdir –p命令是不生效的!

#force  它的作用在把一个目录变成一个链接。可用的值为truefalse

#group  指定那个文件的用户组,值可以是gid或组名 即这个文件是属于哪个组的

#ignore 当用recursion方法复制一个目录的时候,可以用ignore来指定过滤条件,符合过滤条件的文件就不会被复制(它后面会接上过滤条件即哪些符合条件的就不会被复制了)可以支持shell级别的正则

File {

  ignore => '.svn',

  ensure => present,

  mode => 0644, owner => root, group => root,

}

#links  定义操作符合链接文件,可以设置的值是followmanage文件拷贝的时候,设置follow,会拷贝文件的内容,而不是只拷贝符合链接本身,如果设置成manage ,会拷贝符合链接本身.

说明:链接本身就相当于是一个快捷方式

#mode  定义文件权限

#owner  文件的属主

#path  指定要管理文件的路径.要管理的是这个文件了(通常这个值就是title

#recurse  设置是否以及如何进行递归操作,可以设置为false\true\inf\remote

#recurselimit  递归的深度可以匹配的/^[0-9]+$/

#source     拷贝一个文件覆盖当前文件(表示从哪个地方过来的文件。直接覆盖掉的哦!

一般指定了path之后将其覆盖掉。

file {

                "/tmp/1203.txt":

       ensure => present,

       path => "/tmp/1203.txt",         #其实这个值跟title是一个含义的

       backup => main,

       source => "puppet://puppet.test.com/ssh/sshd_config.etch",

}

以上的含义就是表示将这个source里面的文件直接覆盖掉当前这个path下面的文件!

 

说明:我们先来配置一下fileserver

[root@server ~]# more /etc/puppet/fileserver.conf

# This file consists of arbitrarily named sections/modules

# defining where files are served from and to whom

# Define a section 'files'

# Adapt the allow/deny settings to your needs. Order

# for allow/deny does not matter, allow always takes precedence

# over deny

[files]

  path /var/lib/puppet/files  #表示服务端把这个目录里面的文件所共享出去

  allow *                     #客户端限制 有点类似于NFS

[modules]

  allow *

[plugins]

  allow *

重启下服务器端

[root@server ~]# service puppetmaster restart

此时客户端的配置如下:

[root@localhost ~]# more /tmp/1.pp

file {

        "/tmp/testcopy123":    #将这个文件覆盖掉

        source => "puppet://server.puppet.com/files/a.conf"  #表示从哪下载

}

说明:这里要非常感谢一个朋友(智弘) 这里面的source的值要依据服务器端的配置而变化的

简单总结如下:

/etc/puppet/modules/test/files/a.conf       #这个地址与我的不同哦!

对应客户端的

puppet://   #看到没有

  表示的是主控端的主机名  .这就有一个问题了如果加了一层ngix的话怎么写?

 

1、   Group资源

管理用户组

依赖:该资源没有依赖关系

平台:支持所有平台

参数:

#allowdupe          是否允许两个相同的gid,这个参数不可以在freebsd上面使用,可以设置的值为truefalse

#ensure        创建或者删除组,设置absent就删除该组,设置present就创建该组

#gid           该组的gid必须是数字.如果不指定的话就自动分配了,而且不同的系统算法也不一样不推荐使用自动分配gid

#members       该组的成员

#name          用户组的名字

#provider      指定用什么工具作为provider

2. user

    该资源类型用于管理系统用户,所以缺少一些特性来管理普通用户.利用符合POSIX API标准的puppet自带的私有工具来进行用户和组管理, puppet不会直接修改/etc/passwd文件.

  • allows_duplicates: 支持同样的用户拥有同样的uid
  • manages_homedir: 管理用户的home目录,删除和新建
  • manages_passwords: 管理用户密码
  • manages_solaris_rbac: 管理角色和普通用户

参数

     #allowdupe    是否允许存在同样的用户,可以设置false true

     #auths        指定用户拥有的认证方式,多个认证方式可以用数组列出,依赖manages_solaris_rbac(用户认证方式是指什么概念?)

     #comment      对该用户的描述,通常是用户的全名

     #ensure       最基本的参数,决定该用户存在与否,可以设置的值是present,absent,角色.

     #gid          该用户的主用户组的gid.可以用数字或者组名字

     #groups       指定该用户属于那些组的成员,主组不必要在这里列出,多个组用数组列出,例如['gorup1','group2']

     #home         用户的home目录,这个目录需要预先存在.(先通过文件资源把这个目录创建起来)

     #managehome   管理用户的时候是否管理用户的home目录,可以设置的值是true,false

     #name         该资源的namevar, 用户名,建议长度小于8,用字母开头

     #password 用户的密码,具体用什么加密方式由操作系统决定, 需要manages_passwords 特性. 如果密码里面带有$符合,用单引号引起来.

     #provider

     指定用provider,用什么命令来执行用户操作,可用的provider:

  • directoryservice OS X 上面的用户管理命令,不详述,有需求请参考原文档
  • hpuxuseradd hp-ux 系统的用户管理命令
  • ldap ldap方式管理用户     (这将是要深入去研究的一块内容即puppet+ldap)
  • pw freebsd上面的用户管理
  • user_role_add solaris 上面的用户管理
  • useradd linux上面的用户管理

#shell         用户的shell,指定的 shell必须有可执行权限.(其实我发现了跟/etc/passwd里面的内容是一样的其实就是相当于把里面的东西给弄过来了)

#uid      用户的uid,必须设置成数字,对于新用户,如果没有指定uid,系统将会自动分配uid,因为不同的操作系统分配算法不一样,因此不推荐不设置uid.

示例:

user { "hmy":

         uid => 99,

         gid => 99,

         home => /home/hmy,

         shell => /bin/bash;

}

测试一下看看:

STEP1. 把客户端的puppet服务停掉。然后开启debug模式进行处理puppetd -d -v --no-daemonize

STEP2. 在服务端把如下的配置文件写入到site.pp里面

user {

                "hmy":

                uid => 99,

                gid => 99,

                home => /home/hmy,

                shell => /bin/bash;

        }                                           添加这段配置进来

STEP3.去看看客户端的DEBUG日志

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could n

ot parse for environment production: Syntax error at '/'; expected '}' at /etc/p

uppet/manifests/site.pp:16

修改下配置文件

user {

                "hmy":

                uid => 99,

                gid => 99,

                home => /home/hmy,

                shell => /bin/bash;

        }

结果还报:

err: //Node[default]/User[hmy]/ensure: change from absent to present failed: Cou

ld not create user hmy: Execution of '/usr/sbin/useradd -s /bin/bash -d /home/hm

y -u 99 -g 99 -M hmy' returned 4: useradd: uid 99 is not unique

相当于客户端执行这么一句命令:

/usr/sbin/useradd -s /bin/bash -d /home/hmy -u 99 -g 99 -M hmy

好了。原来是uid的错误。再来

修改成这个配置:

user {

                "hmy":

                uid => 53,

                gid => 52,

                home => "/home/hmy",

                shell => "/bin/bash";

  }

搞定!

PS:如果客户端DEBUG出来了err的话请检查一下服务端的配置是否正常的!

再去客户看看确实用户添加成功了!

理解:其实是相当于在服务端把配置文件配置成功之后客户端下载到本地了然后就直接执行相应的系统调用把配置文件里面的东西执行一遍!另外的话我们在调试的时候要注意事先在一台机上面DEBUG好了再上线上去用。

结论:可以通过puppty来集中创建用户。而不再需要一台一台去登录主机进行操作了!非常方便!

2、   package

实现管理软件包的安装和升级功能

管理软件包,现在分成两派,一派是自己能解决软件依赖,例如apt-get,yum ; 另一类是不能解决软件依赖,例如 dpkg,rpm ; puppet会根据你运行puppet的环境来自动判断你是用的什么包管理系统.当然你也可以手工设定 provider 参数让puppet用什么命令来管理软件包. 每个provider需要一些依赖来完成各项功能. 因此你必须为provider提供这些依赖

  • installable provider 可以安装软件包
  • purgeable provider 可以移除软件包,包括所有的配置文件,这个特性要小心使用(因为千万不要搞错了!一旦搞错了就会非常危险的这个要特别注意一下)
  • uninstallable provider 可以反安装软件包
  • upgradeable provider 可以升级软件包到最新版本(指定的软件包进行升级)
  • versionable provider 可以访问软件包的各种版本,并且可以选择安装那个版本的软件

参数:

#allowcdrom    告诉 apt 允许使用cdrom作为软件源, 可以设置成false或者 true

#category      软件包设置的一个只读的属性

#configfiles   是否保留或者替换软件的配置文件,大多数软件不支持这个参数,可设置的值是false,true (将来如果要卸载软件包的话是不是需要把配置文件给它进行备份一下)

#description   描述软件包,软件包设置的一个只读属性

#ensure        设置该软件包应该在什么状态. installed 表示要安装该软件,也可以写成present; absent 表示反安装该软件,pureged 表示干净的移除该软件,latest 表示安装软件包的最新版本.

#namevar       该资源的namevar;软件包的名字

#provider      指定使用什么provider来提供软件包管理功能。可用的值包括:

  • appdmg 支持的特性是: installable
  • apt 通过 apt-get安装软件, 支持的特性 : installable, purgeable, uninstallable, upgradeable, versionable.
  • aptitude 通过 apt-get安装软件, 支持的特性 : installable, purgeable, uninstallable, upgradeable, versionable.
  • aptrpm 通过 apt-get安装软件, 支持的特性 : installable, purgeable, uninstallable, upgradeable, versionable.
  • yum 通过yum安装软件, 支持的特性: installable, purgeable, uninstallable, upgradeable, versionable.
  • ports freebsd上面的软件包管理,支持的特性: installable, uninstallable, upgradeable.

#responsefile debian上面安装软件,一般会回答一些问题,用这个文件来包含问题的预设答案, 用在debian或者 solaris系统上.

#source       表示软件包的源。例如rpm包地址必须是本地址或URL

PS:到时定义一台中央软件服务器即可。大家都去那台机器上面取软件包

 

3.Yumrepo

用来配置客户端的yum,我们还可以借助于fileserver来管理这份配置文件的。常用的参数如下

#baseurl      仓库的URL值它可以匹配/.*/.如果设置成absent的话就表示删除该仓库

#descr        对仓库的一段描述信息,设置成absent的话就表示删除该描述

#enabled      表示这个仓库是否可用可以取的值为01

#enablegroups 是否允许使用包组,软件组的这个概念。可以设置为01

#exlude       shell模式匹配规则,匹配该规则的软件不会从这个仓库里面安装.

#gpgcheck    该仓库是否启用gpg签名检查

#include      设置一个文件路径,包含该文件到当前配置文件

#keepalive  设置yum是否使用http/1.1 里面的keeplive特性, 可以设置成0 , 1

#metadata_expire 设置多少秒以后,仓库的metadata失效.

#mirrorlist  指定一个包含该软件仓库镜像的url

#name 该资源的namevar, 指定软件仓库的名字

#priority 指定软件仓库的优先次序,可以设置1-99

#proxy 指定yum使用的代理服务器地址

#proxy_name代理服务器用户名

#proxy_password代理服务器的用户密码

#timeout如果超过多少秒就放弃连接该软件仓库.

 

1.      service

管理系统运行的服务进程,不幸的是不同的系统管理服务的方式是多样的. 有些系统上面对于服务管理很简单,有些系统提供复杂的强大的服务管理功能.puppet提供最基本的服务管理,你也可以指定provider,使用一些特性.

注意,当一个服务从另一个资源收到一个事件,服务会重启,例如配置文件修改,可以要求相应的服务重启.不同的平台重启命令不同,你也可以手工指定重启服务的命令.(这个非常有用)

我看示例有些人是这样编写的notify之类的调用指令进行的!

特性

controllable provider 提供control 变量

enableable provider 可以enabledisable服务

refreshable provider 可以重启服务

例子

service {

            "ssh":

             ensure => running;

            "nfs":

             ensure => stopped;

           }

参数

binary
运行服务的命令的路径, 只用于不支持init的操作系统, 如果没有指定启动脚本,就用这个命令来启动服务.(启动服务的命令!service puppet start命令?)

#这个我们用不上的肯定有启动脚本的。

enable
服务在开机的时候是否启动,可以设置的值是truefalse,需要provider支持enableable

ensure
是否运行服务, running表示运行服务,stopped 表示停止服务

hasrestart
指出管理脚本是否支持restart参数,如果不支持,就用stopstart实现restart效果. 可以设置的值是true false

hasstatus
指出管理脚本是否支持status参数,puppetstatus参数来判断服务是否已经在运行了,如果不支持status参数,puppet利用查找运行进程列表里面是否有服务名来判断服务是否在运行. 可以设置的值是truefalse

name
该资源的namevar, 服务的名字,通常就是在/etc/init.d/目录下的名字

path
启动脚本的搜索路径,可以用冒号分割多个路径,或者用数组指定.

pattern
设置搜索进程列表的匹配字符串,用于不支持init脚本的系统.当要停止一个服务的时候,通过查看进程运行列表来判断.

provider

puppet提供下面的provider(只列出常见的系统)

debian debian系统的init模式的管理脚本,支持 enableable, refreshable.

freebsd init模式,支持enableable, refreshable.

init 标准的init模式,支持refreshable

redhat redhatinit模式,支持enableable, refreshable.

smf solaris新的服务管理框架,支持enableable, refreshable

restart 指定重启脚本,否则就先停止该服务再启动该服务

start   指定启动服务的命令,通常init模式的管理脚本都支持,不需要手工指定

status  指定status命令,如果不指定,就从进程列表查询该服务

stop    指定停止服务的脚本.

 

 

2.      Cron

安装并管理计划任务。到时可以给某一组服务器进行安装一个计划任务了!而且不需要再登录到这台服务器上去的!

依赖:A crontab executable

平台:有crontab就支持全部平台。即这个东西得要有crontab来支持的!

示例:

Cron {

     Logrotate:

     Command => /usr/bin/logrotate,

     User => root,

     Hour => 2,

     Minute => 0

}

而且属性值支持数组格式

 

Cron {

     Logrotate:

     Command => /usr/bin/logrotate,

     User => root,

     Hour => 2,4

}

Cron {

     Logrotate:

     Command => /usr/bin/logrotate,

     User => root,

     Hour => 2,4],

     Minute => ‘*/10’

}

参数

     Command  放在cron里面的命令。推荐使用绝对路径来处理

     Ensure   表示该资源是否启用。比如不想让某个crontab继续运行就置为false

     Environment   设置环境变量例如 PATH=/bin:/usr/bin:/usr/sbin.

     Hour     定时执行的时间可设置为0-23

     Minute   定时执行的分钟0-59

     Month    1-12

     Monthday 一个月份中的日子其实就是日期了1-31

     Name 计划任务的名称

     Provider 这个参数一般不需要指定.可以用的有crontab  一般都是用它!在freebsd上面可能会用到special

     Crontab  需要有二进制的crontab来支持

     Special  只在FREEBSD上面支持

     Target   这个计划任务存放在哪。

     User     谁执行这个命令

Weekday   运行crontab的星期数,0-7

3.      mount

管理已挂载的文件系统

挂载/卸载文件系统。

维护挂载表中的挂载信息。

背景

具体的行为会根据确认参数的值而有所不同。

平台  支持所有支持mountumount的平台。

版本兼容性

这一部分还未完成。

参数

Atboot 是否在启动的时候挂载,并不是所有平台都支持这个参数。

blockdevice指定用fsck检测的设备。这个属性只在Solaris中有效,而且在大部分情况下默认会取一个正确的值。

 

4.      Host

安装和管理主机实体对大部分系统来说,这些实体就在 /etc/hosts文件中。但是,一些特别的系统(如OS X)有不同的解决方案。

Examples

host { 'peer':

    ip => '192.168.1.121',

    host_aliases => [ "foo", "bar" ],

    ensure => 'present',

}

Parameters

host_aliases   主机能有任意别名。多个值需要指定为一个数组。

Ensure  确定该主机是否启用,有效值present absent

Ip  主机的IP地址,ipv4ipv6

Name  主机名称 资源类型的命名变量

provider提供商使用指定的后端,一般很少会指定这点--puppet通常会发现你平台相应的提供商
可用的提供商:parsed 默认provider

target 这个文件存储了一些服务信息。只用写入一些provider信息

 

5.      Exec

执行一段外部命令

你可以限制这个exec去运行只有当它接收到事件才会去运行。如何确保这一点呢你可以通过使用refreshonly参数。这样的话就是说只有当它接收到一个事件之后才会去执行这个外部命令的!

这样的话你想执行什么命令是可以主观来操作的!(我们可以通过做许多的检查判断是否条件成熟。只有条件成熟了才可以执行的)

依赖:该资源没有依赖关系

平台:仅仅支持OSX平台

利用exec资源可以做到puppet不能做到的事情. 这是对puppet一个强有力的扩展.

参数:

     1Command    要执行的实际命令。如果执行成功的话会记录到日志里面如果失败就会记录到err日志级别里面去(到时可以通过foreman平台进行展现出来。哪个执行是有问题的)

     2Creates    如果有了这个参数的话那只有当这个声明的文件不存在的时候这个命令才会运行否则就不会运行。(运行完这个命令之后就生成了这个文件了?这个可以拿来运行初始化脚本哦!)

exec {

     "tar zxf /home/abc/sub.tar.gz":

     cwd => "/var/tmp",

     creates => "/var/tmp/subversion-1.3.2",  #当这个文件解压缩有了之后就不会再去执行这个命令了

     }

     3Cwd        表示从这个目录去运行命令。如果这个目录不存在那命令执行就不成功

#相当于是先cd  cwd然后再tar执行这个命令。

     4Env        现在不用它了改用environment

     5Environment     你可以给你的命令添加一些额外变量进来。这其实就是环境变量了,如果有多个环境变量的话就可以声明到一个数组里面去。(额外的环境变量。比如在java程序中就有可能会用到classpath这样的环境变量)

     6Group      哪个组去执行这个命令。

     7Logoutput  有三个值:true false on_failure表示是否记录日志

     8Onlyif     当这个参数返回了0的时候命令才会执行(相当于是一个条件语句)

Onlyif   只有exit 0 的时候才会执行否则就不会执行了!

     Exec{

          logroteate:

          Path => /usr/bin:/usr/sbin:/bin,

          Onlyif => test  du /var/log/message | cut –f1 –gt 1000000

     }

只有当条件为真的时候才会执行这条命令!(到时会在这个条件里面写好各个判断。多个条件同时满足才会执行)(这个onlyif里面可以写多个条件)

还可以这样写:

Onlyif => [test –f  /var/log/message ,test –f  /tmp/file2]

 

["test -f /tmp/file1", "test -f /tmp/file2"]  而且还支持这种写法的!
案例:这个onlyif是可以支持来自服务器端的py脚本的。到时我们每个服务就可以写一套脚本进去监测与管理这些东西。配置如下:
file {
          "/tmp/check.py":
          path => "/tmp/check.py",
          ensure => present,
          source => "puppet://puppet.test.com/ssh/check.py",
}
exec {
          "echo 'hello' >> /tmp/testtest.out":
          cwd => "/var/tmp",
          onlyif => "python /tmp/check.py",
}
其中check.py代码如下:
import sys
sys.exit(1)                             只有当其退出状态为0的时候才会执行否则就不可以了!
(到时会写一段脚本去检查这台服务器是否还没有作初始化项目!)只有当全部的条件都满足之后它才会进行初始化脚本运行!
现在来测试一个东西。就是从服务器上的fileserver里面下载一段shell脚本然后在客户端去执行。
 
服务器是否需要进行初始化的方案
file {                                  #这是我们用来编写检测是否需要初始化的一段脚本!
                    "/tmp/check.py":
                    path => "/tmp/check.py",
                    ensure => present,
                    source => "puppet://puppet.test.com/ssh/check.py",
          }
          file {
                    "/root/init.sh":    #放置我们的初始化脚本进来
                    path => "/root/init.sh",
                    ensure => present,
                    source => "puppet://puppet.test.com/ssh/init.sh",
          }
          exec {
                    "init-sh":
                    cwd => "/root",
                    command => "/bin/sh  /root/init.sh 192.168.0.105 123456",
#带上各自的参数进行执行起来!(现在要做的一件事情就是如何去填写这些配置信息另外就是如何主动去推送消息过去呢。由于没有配置内网IP值是没有办法进行主动推送的)或者可以是刚开始的时候让它每隔五分钟过来请求一次。然后等这些配置完成之后再去配置puppet自己的服务。
                    onlyif => "python /tmp/check.py",
          }
 

     9Path  命令执行的路径。路径也可以用数组来声明的(能够在头部全部指定掉这些可执行路径就行了。后面就全部会指向的)

     10.refresh   #refreshonly => true,timeout => 10,

     11Refreshonly    当依赖的资源发生改变的时候就执行事件

File{

     /etc/aliases:

     Source => puppet://server/module/aliases

}

Exec {

     Newaliases:

     Path => [/usr/bin,/usr/sbin],

     Subscribe => File[/etc/aliases],      #表示依赖的资源

     Refreshonly => true                       #到时像软件包配置均使用这种办法来实现

}

#如果是自已来写的话就这里面比较麻烦要知道怎么去重启。到时一旦安装成功了我修改了一个配置就会自动重启即可!

 

要注意的是只有subscribenotify可以促发行为,而不是require,所以在使用refreshonly时,只有同时使用subscribenotify才有意义。有效的值为true, false

笔记:在file里面我们可以定义notify的表示当这个资源发生变更的时候触发哪个其它的资源。另外如果想让这个属性生效的话就必须要有subscribenotify才行的!所以一般的写法是subscribe进来。另外一个资源

 

     12Returns   返回值指定返回的代码。如果被执行的命令返回了其他的代码,一个错误(error)会被返回。默认值是0,可以定义为一个由可以接受的返回代码组成的数组或单值。

     13Timeout   命令执行的时间。如果超时了就中断命令的继续执行

命令运行的最长时间。如果命令运行的时间超过了timeout定义的时间,那么这个命令就会被终止,并作为运行失败处理。当定义为负值时就会取消运行时间的限制。timeout的值是以秒为单位的。

     14Unless    onlyif效果差不多的

     15User      谁管理这个命令

 

中间还有许多资源。到时用到了哪个再来细查。就不再一一列举出来。只选择一些可能会用到的

 

-----------非常重要的------------

6Package

负责管理软件包的安装与更新(225页第250/304

对于RPM包你可以指定source参数去指向正确的目标文件。

特征:

1.      可支持安装,能够安装软件包

2.      purgeable   能够清除掉软件包。即软件包的轨迹将被全部清除掉的包括配置文件这个是非常危险的。一定要非常小心!

3.      卸载软件包!支持卸载软件包

4.      支持软件包的更新。能够更新到最新的软件包版本。只需要声明latest作为参数即可

5.      支持软件包版本库。能够选择可用的版本。

特性(后面的provider里面相对应的就是下面这五个特征值了.其中yum方式五种方式都支持)

  • installable provider 可以安装软件包
  • purgeable provider 可以移除软件包,包括所有的配置文件,这个特性要小心使用
  • uninstallable provider 可以反安装软件包
  • upgradeable provider 可以升级软件包到最新版本
  • versionable provider 可以访问软件包的各种版本,并且可以选择安装那个版本的软件

-------------到时重点来测试一下这块-------------------

相关参数

     Adminfile     包含了要安装的软件包。这个参数一般是用在solaris上面

     Allowcdrom    告诉apt去让CDROM里面的源也添加到source.list里面去。可选择truefalse

     Category      只读参数

     Configfiles   是否保留或者替换软件的配置文件,大多数软件不支持这个参数,可设置的值是false,true

     Description   包的描述

     Ensure        设置该软件包应该在什么状态. installed 表示要安装该软件,也可以写成present; absent 表示反安装该软件,pureged 表示干净的移除该软件,latest 表示安装软件包的最新版本.

     Instance      一个只读属性

     Name          namevar 包的名称

Provider

     安装的方式我的理解

     它支持如下几种方式:

     Appdmg:需要/usr/bin/hdiutil,/usr/bin/curl

     Apple: 它只支持安装不支持删除与升级

     Apt: 它需要/usr/bin/apt-cache  /usr/bin/debconf-set-selectinos./usr/bin/apt-get

     Aptitude:

     Aptrpm:  apt-get  rpm

     Blastwave:

     Darwinport

     Dpkg:

     Fink:

     Freebsd:

     Gem:

     Hpux:

    

     Rpm: 只要有RPM支持就行!支持安装、卸载、升级及版本化安装升级到指定的版本去!

     Yum: 支持yum安装方式。需要yum,rpm,python默认是redhat系统的!安装安装、清除、卸载、升级及升到指定版本!(将来我们会考虑后面两种办法处理)

     Responsefile  软件包会问到的相关问题的答案!会放在一个文件里面去

     Root 一个只读参数

Source   上哪去找这个实际的包可以是本地文件(这个不太可能)或一个NFS还是可以通过URL的方式去指定软件包的源。(RPM的时候能够指定其目录位置的)

     Status   只读属性

     Type     已不用了

示例:

class mysql-server-51 {

     package {

         ["nginx"]:

         ensure => installed;

     }

     }

这样的话就会安装上nginx.其中我在site.pp里面定义了

Package { provider => "yum" }        #默认是通过yum方式进行安装的

Service { provider => "redhat" }

我现在要将nginx 升级到最新版本。

PS:如果配置文件像上面这样写的话那其实客户端是相当于执行了:yum install nginx

相结合起来组成yum的一条命令。

 

 

参考资料

1.      描述puppet配置文件

2.      写自己的函数

阅读(4383) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-13 08:35:58

不要想太多了~

chinaunix网友2010-12-13 08:35:42

有问题就努力去解决!一定要让自己的能力得到真正地提高!

chinaunix网友2010-12-09 08:26:23

迎战困难!利用这里的一切机会努力提升个人实力!