puppet变量、数据类型及类(03)

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) 类会引入新的变量作用域;

时间: 2024-12-04 16:31:40

puppet变量、数据类型及类(03)的相关文章

dos命令-环境变量-数据类型-命名规范

JAVA第一天笔记--dos命令-环境变量-数据类型-命名规范 1.能够阐述JDK和JRE之间区别 JDK(Java Development Kit)是提供给开发人员使用的JAVA开发工具包(javac.exe;java.exe),包含JRE(Java Runtime Environment). JRE(Java Runtime Environment)是Java程序运行环境,包含JVM(Java Virtual Machine)及核心类库. 总结为:开发人员使用JDK开发的程序,在JRE中运行

一步一步学会puppet(二)--模块和类

上一篇主要介绍了puppet的基本工作原理和资源的相关初步使用: 这一篇主要介绍puppet中很重要的2个概念:模块和类: =================================================================== 1 模块 1.1 需求 1.2 定义 1.3 详细说明 1.4 模块的目录组织结构 1.5 模块管理 2 类 2.1 定义 2.2 详细说明 2.3 类的分类 2.4 类的声明 2.5 实例 ========================

java基础---------变量 数据类型

写在之前. 博主是曾经在北京尚观跟着李慧芹老师嵌入式C出身的,虽然学习阶段并没有学得多好但老师传授的C特有的面向过程思想以及透过现象看本质的功夫足够我受用一生. 就比如学习C的时候老师给了个虽然没那么严谨的但通用性很强的公式    [存储类型]+[数据类型]+变量=常量 当你被结构体.共用体迷失自己时,想起结构体.共用体其实也是一种数据类型时就豁然开朗了. 困扰我很久的数据结构也是如此 . 变量(指针)=常量(地址)之后  也就不会再被a->next->next=NULL; a->nex

2 Java基础语法(keyword,标识符,凝视,常量,进制转换,变量,数据类型,数据类型转换)

1:keyword(掌握) (1)被Java语言赋予特定含义的单词 (2)特点: 所有小写. (3)注意事项: A:goto和const作为保留字存在. B:类似于Notepad++这种高级记事本会对keyword有特殊颜色标记 2:标识符(掌握) (1)就是给类,接口.方法,变量等起名字的字符序列 (2)组成规则: A:英文大写和小写字母 B:数字 C:$和_ (3)注意事项: A:不能以数字开头 B:不能是java中的keyword C:区分大写和小写 (4)常见的命名规则(见名知意) A:

JAVA-基础-引用数据类型(类)

引用数据类型分类 我们可以把类的类型为两种: l  第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用. l  第二种,我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我们使用. 自定义数据类型概述 我们在Java中,将现实生活中的事物抽象成了代码.这时,我们可以使用自定义的数据类型(类)来描述(映射)现实生活中的事物. 类,它是引用数据类型 自定义类型并非Java为我们预先提供好的类型,而是我们自己

java引用数据类型(类)

1 引用数据类型分类 类的类型分两种 1)Java提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供开发者使用.(类的变量是属性) 2)开发者自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供开发者使用. 注意: 类的变量就是属性 类中只能定义变量和方法 2自定义数据类型 在Java中,将现实生活中的事物抽象成了代码.可以使用自定义的数据类型(类)来描述(映射)现实生活中的事物. 类,是引用数据类型,自定义类也是一种数据类型. 自定义类

C++ 成员变量是别的类的对象

?在成员函数中,可以将this指针当参数传递,也可以返回this指针,或返回通过this指针拿到的对象 /* 成员变量是别的类的对象 */ #include <iostream> using namespace std; //日期类 class Date { int year,month,day; public: //构造方法 Date(){ cout << "Date() " << endl; } //有参 Date(int _y,int _m,i

java基本数据类型四类八种

第1类:整型:byte.short.int.long 第2类:浮点型:float.double 第3类:逻辑型:boolean 第4类:字符型:char 字节长度从小到大: boolean型: 1/8 byte字节类型:1 char字符型:2 一个字符能存储一个中文汉字 short短整型:2 int整数类型:4 float浮点类型(单精度):4 long长整型:8 double双精度类型(双精度)8 注:java中默认的整数类型是int类型,若要定义为float型,加上l或L; 默认的浮点型也是

Java 语法 索引 ----- 变量-----数据类型

数据类型 类型 bits/byte 范围 默认值 byte 8/1 -128 +127 0 short 16/2 -32,768+32,767 0 int 32/4 -2,147,483,648 = -231+2,147,483,647 = 231-1 0 long 64/8 -9,223,372,036,854,775,808 = -263+9,223,372,036,854,775,807 = 263-1 0L float 32/4 1.40129846432481707e-45  = 2-