Puppet学习之变量(5)

《puppet实践》学习笔记

1.作用域
变量和默认资源都接受作用域的限制,而资源标题和引用不接受范围限制。
局部作用域继承父作用域
(1)全局作用域:
  全局作用域通常定义在puppet的site.pp
(2)节点作用域
   节点作用域定义在节点(node)内,可以在节点内引用变量,也可以引用上层作用域的变量。
   如果在全局作用域中对节点作用域的变量引用,将会失败。
(3)局部作用域
     局部作用域通常定义在类内,可以引用类内的变量,可以引用上层节点作用域的变量,也可以引用全局作用域的变量。
(4)变量的覆盖
    局部变量可以覆盖全局变量和节点变量,节点变量可以覆盖全局变量

2.变量
2.1变量以”$“符号开头
在puppet中,给定的作用域内变量只能被赋值一次,而且不能再次改变这个值。但是在不同作用域中可以第二次赋值。
相同的变量可以再不同的节点中赋值
例子:

node 'crdc-c210-170' {
$myvar = "node value"
notice ("from www1: $myvar")
$myvar = "test"   --------------此处会出错,不能第二次赋值
}

calss myclass {
$myvar = "myclass value",      -------------此处可以第二次赋值
notice ("from www1: $myvar")
}

2.2 facts和内置变量
facts变量即运行facter命令收集到的系统信息。
客户端:
$environment 节点环境
$clientcert:节点名称certname
$clientversion:客户端版本

服务器端:
$servername,主机名,即facter中的fqdn
$serverip
$module_name

3.条件判断
通常用来判断系统,内存大小等。
3.1if语句
if语句,结果为真返回true,为假则返回false
if $operatingsystem in ["Ubuntu", "Debian"] {
notify {"Ubuntu type"}
}
elseif  operatingsystem in [RHEL"", "CentOS"] {
notify {"RHEL or centos"}
}
else {
notify {"not support"}
}

3.2case语句
case和if语句效果一样,但是没有返回值
例子:
case $operatingsystem {
'ubuntu' : {include role::ubuntu},
'RHEL', 'Centos': {include role::centos},
default: {include role::generic}
}

3.3selector选择器
类似于case语句,但是只返回一个值。不能在case中使用selector,一个selector也不能再使用其他selector
例子:
$rootgroup = $osfamily ? {
‘ubunt' => "root",
  'solaris' => 'wheel',
}
 file {
'/etc/passwd':
ensure => file,
owner => root,
group => $rootgroup,
}


猜你喜欢

转载自blog.csdn.net/biheyu/article/details/41613145