1  概述


这里介绍tag 和 变量的相关用法


2  tag


为资源定义tag,tag表示标签,只执行某些资源,而不全部执行脚本中的所有资源,tag可以同时指定多个,用中括号括起来,用逗号分开,tag可以放在任何资源中

    type{'title':
         ...
        tag => 'TAG1',
       }
    type{'title':
        ...
       tag => ['TAG1','TAG2',...],
       }

            手动调用:

puppet apply --tags TAG1,TAG2,... FILE.PP

例子

vim service.pp
package{'redis':
    ensure => latest,
}
file{'redis.conf':
    path => '/etc/redis.conf',
    source => '/root/redis.conf',
    ensure => file,
    mode => '0644',
    owner => redis,
    group => root,
    notify => Service['redis'],
    tag => 'cpfile',
}
service{'redis':
    ensure => running,
    enable => true,
    hasrestart => true,
    restart => 'systemctl restart redis',
#   subscribe => File['redis.conf'],
    tag => "onlyrestart",
}
Package['redis'] -> File['redis.conf'] ~> Service['redis']

执行

puppet apply --tags onlyrestart service.pp
puppet apply --tags cpfile service.pp

备注,这里要注意资源间的依赖关系,比如我们执行cpfile这个tag,当redis的配置模板发生了改变,则会引起Service['redis']这段资源也要执行。


3  变量


puppet variable:

$variable_name=value

数据类型:

字符型:引号可有可无;但单引号为强引用,双引号为弱引用;

数值型:默认均识别为字符串,仅在数值上下文才以数值对待;

数组:[]中以逗号分隔元素列表;

布尔型值:true, false;

hash:{}中以逗号分隔k/v数据列表; 键为字符型,值为任意puppet支持的类型;{ 'mon' => 'Monday', 'tue' => 'Tuesday', };

undef:未定义 ;表示为空

正则表达式:

(?<ENABLED OPTION>:<PATTERN>)

(?-<DISABLED OPTION>:<PATTERN>)

OPTIONS:

i:忽略字符大小写;

m:把.当换行符;

x:忽略<PATTERN>中的空白字符

(?i-mx:PATTERN),其中,减号是禁用的意思

不能赋值给变量 ,仅能用在接受=~或!~操作符的位置;

例子

通过变量安装tree服务包

$pkgname = 'tree'
package{'installpkg':
    name => "$pkgname",
    ensure => latest,
}

以上配置等价于如下的配置

$pkgname = 'tree'
package{"$pkgname":
    ensure => latest,
}

puppet的变量种类:

facts:系统信息检查,

由facter提供;factor安装puppet时会同时被安装,facter  -p显示当前的内建变量

内建变量:

master端变量

                    $servername, $serverip, $serverversion

agent端变量 

                    $clientcert, $clientversion, $environment

parser变量

                    $module_name

用户自定义变量:

变量有作用域,称为Scope;

top scope:   $::var_name,全局作用域(根作用域),用双冒号隔开表示根开始

node scope:节点作用域

class scope:类作用域,类可以嵌套

例子如下

$::node::class1::class2::var_name