puppt资源文件基础编写

一、puppet资源

puppet的资源文件通常以.pp结尾,资源是puppet 的基本元素,每个定义的资源都具有标题、类型及一系列的属性。
puppet定义资源的默认语法为:

     type {'title':
      attribute1 => value1,
      atrribute2    => value2,
      ……
     }

puppet的资源定义有三个特殊属性NAMEVAR、ensure和Provider,分别表示定义资源的名称、资源的目标状态和资源的管理接口。
puppet的资源定义具有以下特性:
1、puppet使用title在编译时区分每个资源,并使用命令变量(NAMEVAR)在执行时区分资源。
2、在同一类资源中其资源的title和NAMEVAR都是唯一的。
3、每个类型的资源都有部分属性具有默认值。
4、如果在某一个资源中,不指定其NAMEVAR值,则默认使用其title的值。

二、puppet的资源类型

1、group

此类型用于管理用户组资源,其常用的属性包括但不限于:

name:用于设置用户组名。
gid:用于蛇用户组ID。
system:用于设置此组是否为系统组,true or false。
ensure:目标状态,present or absent。
members:成员用户。

资源例子:

group{'charles':
        ensure => present,
        name => 'charles',      
}   

2、user

此类型用户定义用户资源,其属性包括但不限于:

name:设置用户名。
uid:设置UID。
gid:设置基本组ID。
groups:设置附加组,注意,不能包含基本组。
comment:添加注释。
expiry:设置用户账号过期时间。
home:设置用户家目录。
shell:设置用户的默认shell。
system:设置该用户是否为系统 用户。
ensure:设置该用户资源的状态。
password:设置用户的登录密码,需为加密后的密码串。
b

资源例子:

user{'charles':
        ensure => present,
        name => 'charles',
        shell => '/bin/bash',
        password => '$6$MFMKzg2y3Obrujqi$KOuDgG8kdE3v3Bl0I8LEpCe.LZOqM1ZNerBCPdfwBnmkDbC4ZhLJlXKd/yp/7JSu9PZ4JrCpVmWviCbK3Cyss.',
}

3、package

用于管理包组资源,其属性包括但不限于:

ensure:用于指明包资源的状态,包括:installed、present、latest、absent等等。
name:指明包名。
source:指定安装包的来源路径。
provider:指定如何安装包,如rpm、yum等等的方式。

资源例子:

package{'nginx':
        ensure => latest,
        provider => yum,
        require => Package['epel']
}

package{'epel':
        ensure => latest,
        provider => yum,
        name => 'epel-release',
}

4、service

用于管理服务资源,其属性包括但不限于:

ensure:指定服务的运行状态,running or stopped。
enable:指定服务是否开机自启动,true or false。
name:指定服务名称。
path:指定搜索启动脚本的路径。
hasrestart:用于指定带有restart命令的脚本,如果没有restart选项,则会默认调用stop和start来组合完成重启动作。true or false
restart:手动定义用于重启的命令,通常用于定义reload的操作。
subscribe => File["配置文件路径"]:当配置文件改变的时候,重启服务。

资源例子:

service{'nginx':
        ensure => running,
        enable => true,
        name => 'nginx',
        require => Package['nginx'],
}

5、file

用于管理文件资源,包括文件的属主、属组和访问权限等,其属性包括但不限于:

ensure:指定文件的状态及类型,常用值:present、absent、file、directory、link。
path:指定目标文件的路径。
source:指定源文件路径。
content:指定文件内容。
target:指定符号链接的目标文件。
owner:指定文件的属主。
group:指定文件的属组。
mode:指定文件的权限。
atime/ctime/mtime:指定文件的时间戳属性。

资源示例:

      file{'test.txt':
       path => '/tmp/test.txt',
       ensure => file,
       source => '/etc/fstab',
      }

      file{'test.symlink':
       path => '/tmp/test.symlink',
       ensure => link,
       target => '/tmp/test.txt',
       require => File['test.txt'],
      }

      file{'test.dir':
       path => '/tmp/test.dir',
       ensure => directory,
       source => '/etc/yum.repos.d/',
       recurse => true,
      }

6、exec

用于定义指定的命令资源,定义的命令必须可以重复执行多次并且不产生额外的错误。其常用属性包括:

command:指明要运行的命令,不指定的话默认为namevar的值。
cwd:切换到指定的目录下执行命令。
creates:文件路径,仅此路径表示的文件不存在时,command方才执行。
user/group:运行命令的用户身份。
path:指定所使用命令的存放路径。
onlyif:此属性指定一个命令,此命令正常(退出码为0)运行时,当前command才会运行。
unless:此属性指定一个命令,此命令非正常(退出码为非0)运行时,当前command才会运行。
refresh:重新执行当前command的替代命令。
refreshonly:仅接收到订阅的资源的通知时方才运行。

资源例子:

exec{'useradd':
        command => 'useradd user1 ; echo "123456"| passwd --stdin user1',
        unless => 'id user1',
        path => '/bin:/sbin',
}

7、cron

用于安装管理cron资源,每一个cron任务资源都必须提供 一个任务和至少一个周期属性,其常用属性包括:

command:需要周期执行的任务命令。
ensure:cron任务资源的状态。
hour/minute/monthday/month/weekday:定义时间周期属性
user:定义该cron任务以哪个用户身份运行。
target:添加为指定用户的周期任务。
name:cron周期任务的名称。

资源示例:

    cron{'timesync':
     command => '/usr/sbin/ntpdate 10.1.0.1 &> /dev/null',
     ensure => present,
     minute => '*/3',
     user => 'root',

8、notify

向代理终端发送开始工作的通知信息,常用属性:

    message:信息内容
    name:信息名称;

三、应用例子

#配置安装nginx,并根据根据nginx.conf是否修改来决定是否需要重载nginx服务
[root@localhost manifests]# vim nginx.pp 

package{'nginx':
        ensure => latest,
        provider => yum,
        require => Package['epel'],
}

package{'epel':
        ensure => latest,
        provider => yum,
        name => 'epel-release',
}

file{'nginx.conf':
        path => '/etc/nginx/nginx.conf',
        source => '/root/manifests/nginx.conf',
        ensure => file,
        notify => Service['nginx'],
}

service{'nginx':
        ensure => running,
        enable => true,
        name => 'nginx',
        restart => '/usr/sbin/nginx -s reload',
        hasrestart => true,
}


Package['nginx'] -> File['nginx.conf'] -> Service['nginx']


[root@localhost manifests]# puppet apply -v -d --noop nginx.pp
[root@localhost manifests]# puppet apply -v -d nginx.pp

你可能感兴趣的:(puppt资源文件基础编写)