标签:puppet
puppet(2)
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‘,
}
puppet变量及变量作用域:
变量名均应该以$开头,赋值符号为=;
任何非正则表达式类型的数据都可直接赋值给变量名;
数据类型:
布尔型:true以及false;
undef:从未被声明过的变量的值的类型;
字符型:非结构化文本字符串;引用可有可无,单引号为强引用,双引号为弱引用;
数值型:整数或浮点数;默认为字符型,只有在特定上下文才被当作数值;
数组:在中括号[]中以逗号分隔的item列表,形如[item1,item2,...,],其item可以为任意可用的数据类型,包括数组及hash等;索引从0开始计数,也可以负数;例如:[Package[‘nginx‘],File[‘nginx.conf‘],File[‘default.conf‘],];
hash:定义在{}中,以逗号分隔的"key => value"列表即为hash类型数据;其中的key为字符类型,value可以puppet支持的任意数据类型;引用时,其索引为key;
正则表达式:
语法结构:
/(?<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‘,
}
puppet表达式:
比较操作符:==, !=, <, <=, >, >=, =~, !~, in
逻辑运算符:and, or, !
算术操作符:+, -, *, /, >>, <<
作用域:
即变量生效的代码范围;
在puppet中,scope可用于限定变量及资源默认属性的作用范围,但不能用于限定资源名称及资源引用的生效范围
作用域的分类:
top scope:顶级作用域,生效范围为全局
node scope: 节点作用域,生效范围为单个节点
class scope:
parent scope
child scope
引用非当前作用域可访问变量,必须使用FQN格式的进行:
$::c1::c2::webpackage
puppet中可以使用的变量的种类:
自定义变量:$webpackage
facter变量:“facter -p”命令执行结果中显示出的变量均可直接引用;
内置变量:
客户端内置:
$clientcert
$clientversion
服务器端内置:
$servername
$serverip
$serverversion
$module_name
变量的追加赋值:+=
$users = [‘user1‘,‘user2‘,]
$users += [‘user3‘,]
注意:支持追加赋值的数据类型:
字符串:字符串连接
数组:数组合并
hash:hash合并
puppet的条件判断:
条件语句:if, case, selector, unless
(1) if语句
if CONDITION { ... }
if CONDITION { ... } else { ... }
if CONDITION { ... } elsif CONDITION { ... } ... else { ... }
可用的CONDITION:
变量
表达式
有返回值的函数
if $operatingsystem =~ /^(?i-mx:(Ubuntu|RedHat))/ { notice("Welcome to $1 linux distribution.") } else { notice("Welcome to unkown world.") }
(2) case
语法结构:
case CONTROL_EXPRESSION { case1: {} case2, case3: {} default: {} }
CONTROL_EXPRESSION:
变量、表达式、有返回值的函数
各case的可用数据类型:
字符串(引用)、变量、有单个返回值的函数、正则表达式模式或default;
case $operatingsystem { ‘CentOS‘,‘Redhat‘,‘Fedora‘: { notice("Welcome to RedHat OS Family.") } /^(i-mx:(ubuntu|debian))/: { notice("Welcome to $1 Linux distribution.") } default: { notice("Alien.") }
(3) selector
类似于case,但不同于case匹配到某分支后执行相应的代码段的是,selector在匹配到某分支后直接返回一个值;
语法结构:
selector CONTROL_VARIABLES ? { case1 => value1, case2=> value2, ... default => valueN, }
CONTROL_VARIABLES: 变量或有返回值的函数;
各case的可用数据类型:
字符串(引用)、变量、有单个返回值的函数、正则表达式模式或default;
注意:selector的case不能使用列表;
各case的value可用的数据类型:
除了hash以外的直接值、变量、能调用返回值的函数或其它的selector;
puppet中的class:
用于公共目的的一组资源,即命名的代码块;创建后可以在puppet全局进行调用;类可以被继承;
语法格式:
class name { ... puppet code ... }
定义过的类只有被调用(声明)才会执行;
class nginxsrv { 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‘, } } include nginxsrv
注意:(1) 类名可以包含小写字母、数字和下划线,但只能小写字母开头;
(2) 类会引入新的变量作用域;
本文出自 “我的学习博客” 博客,请务必保留此出处http://houzhimeng.blog.51cto.com/3938990/1735177
标签:puppet
原文地址:http://houzhimeng.blog.51cto.com/3938990/1735177