一、资源的第三种特殊属性:Metaparameters
定义资源间的依赖关系:
before:当前资源必须在before属性指定的资源运行之前先运行;
require:当前资源必须在require属性指定的资源运行之后再运行;
定义资源间的依赖关系及触发关系:
notify:当前资源必须在before属性指定的资源运行之前先运行,而且,一旦此资源发生了改变,会通知nofity属性所引用的资源;
subscribe:当前资源必须在subscribe属性指定的资源运行之后再运行,而且,一旦subscribe指定的资源发生了改变,会通知当前资源;
注意:此四个参数均以其它资源为其值,通过“资源引用”来实现;
资源引用的方式:Type['title'],类型首字母必须大写;
group {'mysql': ensure => present, system => true, gid => 306, before => User['mysql'], } group {'dbusers': ensure => present, gid => 3306, before => User['mysql'], } user {'mysql': ensure => present, uid => 306, gid => 306, groups => 'dbusers', system => true, }
(7) package
ensure: present, absent, latest, installed或版本号;
name: 程序包名,NameVar;
source:程序包来源;
provider: 指定要使用包管理器;
package{'zsh': ensure=> installed, } package{'nginx': ensure=> installed, provider => rpm, source=> '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm', }
(8) service
ensure:running, true; stopped, false;
enable: 是否开机自动启动;
hasrestart: 告诉puppet服务脚本是否运行使用“restart”参数;
hasstatus:告诉puppet服务脚本是否运行使用“status”参数;
name: 脚本名称;
path: 脚本查找路径
pattern: 指明搜索服务相关的进程的模式;用于当脚本不支持使用restart/status参数时帮助判定服务是否运行;
restart:手动指定用于服务“重启”的命令;
start:
stop:
status:
package{'nginx': ensure=> installed, provider => rpm, source=> '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm', } file {'/etc/nginx/conf.d/default.conf': ensure=> file, source=> '/tmp/default.conf', notify=> Service['nginx'], } file {'/etc/nginx/nginx.conf': ensure=> file, source=> '/tmp/nginx.conf', notify=> Service['nginx'], } service{'nginx': ensure=> running, enable=> true, require=> Package['nginx'], restart=> '/etc/rc.d/init.d/nginx reload', }
二、puppet声明语言
1、Metaparamters 元参数
多个彼此间均存在先后次序的资源,可使用“->”,定义为次序链的形式:
Package['nginx'] -> File['/etc/nginx/conf.d/default.conf'] -> Service['nginx']
多个彼此间均存在先后次序的资源,可使用“~>”,定义为通知链的形式:
Package['nginx'] -> File['/etc/nginx/conf.d/default.conf'] ~> Service['nginx']
或
package{'nginx': ensure => installed, provider => rpm, source => '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm', } -> file {'/etc/nginx/conf.d/default.conf': ensure => file, source => '/tmp/default.conf', } ~> service{'nginx': ensure => running, enable => true, require => Package['nginx'], restart => '/etc/rc.d/init.d/nginx reload', }
2、pupet变量及变量作用域
变量名均应该以$开通,赋值符号为=;
任何非正则表达式类型的数据的值都可直接赋值给变量名;
puppet的每个变量都有两个名字:简短名称和长格式完全限定名称(FQN)
完全限定名称的格式为"$scope::variable"
3、数据类型
布尔型:true及false
undef:从未被声明过的变量的值的类型,也可以so互动为某变量赋予undef值,即直接使用不加引号的undef字符串
字符型:非结构化文本字符串,引用可有可无,单引号为强引用,双引用为弱引用;
数值型:整数或浮点数 (pupet只有在数值上下文中才被当作数值型,默认都为字符型)
数组:在中括号中[]中以逗号分割的item列表,形如[item1,item2、、、],其item可以为任意可用的数据类型,包括数组及hash等,索引从0开始计数,也可以负数,例如:
[Package['nginx'],File['nginx.conf'],File['default.conf'],];
hash: 或者称为键值对或者字典
定义在{}中,以逗号分隔的“key ->value“列表即为hash数据类型;
其中的key为字符类型,value可以为puppet支持的任意数据类型,引用时,其索引为key,
4、正则表达式
语法结构:
(?<ENABLED OPTION>:<SUBPATTERN>)
(?-<DISABLED OPTION>:<SUBPATTERN>)
OPTION:
i:忽略字符大小写
m:把点号当换行符使用
x:忽略模式中的空白字符和注释
惯常用法:(?i-mx:PATTERN)
$webpackage=$operatingsystem? { #条件语句特定格式 /(?i-mx:ubuntu|debian)/ => 'apache2', /(?i-mx:fedora|redhat|centos)/ => 'httpd', }
5、表达式
比较操作符: ==,!=,<,>,<=,>=,=~,!~,in(在指定列表中)
逻辑运算符:and,or,!
算术操作符:+,-,*,/,>>,<<(左移位) 110左移一位变成1100;右移一位变成11
6、变量作用域(Scope)
即代码的生效范围
Scope是一个特定的代码区域,用于和同程序中的其它代码隔离开来
在Pupet中,scope可用于限定变量及资源默认属性的作用范围,但不能用于限定资源名称及资源引用的生效范围
任何给定的scope都可以访问它自己的内容,以及接受来自于其父scope,节点scope及top scope的内容
作用域的分类:
top scope:顶级作用域,仅能访问自己的变量和属性默认值
节点scope:能访问自己及top scope的变量和属性默认值
类scope:能访问自己以及节点scope和top scope的变量和属性默认值
parent scope:父域
child scope:子域
如果要访问非当前scope中的变量,则需要通过完全限制名称(FQN)进行,
如:#vhostdir = $apache::params::vhostdir
top scope的名称为空,因此如若要引用其变量,则需要使用类似“$::osfamily”的方式进行
puppet中可以使用的变量的分类:
自定义变量:$webpackage
facter变量:“facter -p”命令执行结果中显示出的变量均可直接引用
Puppet内置变量:
客户端内置:$clientcert 客户端证书,$clientversion 客户端版本
服务器端内置:$servername,$serverip,$serverversion,$module_name
变量的追加赋值:+=,
例如:
$user = ['user1','user2',]
$user += ['user3',]
注意:支持追加赋值的数据类型:
字符串:字符串连接
数组:数组合并
hash:hash合并