1. 程式人生 > >Puppet 之 tag 和 變量介紹

Puppet 之 tag 和 變量介紹

puppet tag 變量

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


Puppet 之 tag 和 變量介紹