Puppet:2、声明语言进阶

一、资源的第三种特殊属性: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合并


你可能感兴趣的:(puppet,语言进阶)