Puppet 之 tag 和 變量介紹
這裏介紹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
Puppet 之 tag 和 變量介紹