定義使用和類相同的基本形式,不同的是它們使用關(guān)鍵字define(而不是class),并且定義支持參數(shù)但不支持繼承。就像之前所提到的,定義可以接收參數(shù)并在相同的系統(tǒng)上多次重用。
額濟(jì)納網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。注:define最好在定義時(shí),使用變量,賦值就可以使用class。
1.無(wú)變量格式:define 函數(shù)名() {
type { "title ":
attribute => "value",
...
attribute => "value";
}
...(各種資源)
type { "title ":
attribute => "value",
...
attribute => "value";
}
}
2.有變量格式:define 函數(shù)名(變量名1,...,變量名n) { #格式:$var
type { "title ":
attribute => "變量名", #格式:${var},下同
...
attribute => "變量名";
}
...(各種資源)
type { "title ":
attribute => "變量名",
...
attribute => "變量名";
}
}
3.在class中定義define:class 類名 {
define 函數(shù)名 (變量名1,...,變量名n) {
type { "title ":
attribute => "變量名", #格式:${var},下同
...
attribute => "變量名",
}
...(各種資源)
type { "title ":
attribute => "變量名",
...
attribute => "變量名",
}
}
}
4.引用define: ①.一般情況(無(wú)class):函數(shù)名 {
變量名 => "值",
...
變量名 => "值",
}
例:
#①定義了一個(gè)definition 用來(lái)執(zhí)行一個(gè)腳本去配置一個(gè)新的主機(jī).
define newip ( $ip ) {
exec { "/sbin/ifconfig" $title $ip ":
}
}
#引用
newip { eth0:
ip => "11.11.11.11"
}
#或
newip(11.11.11.11) {"eth0":
}
②.class類引用類名::函數(shù)名 {
變量名 => "值",
...
變量名 => "值",
}
例:
我們創(chuàng)建了一個(gè)definition叫做newip并且有一個(gè)參數(shù)叫做$ip,內(nèi)部定義了我們用來(lái)執(zhí)行資源類型內(nèi)部二進(jìn)制代碼,這里是ifconfig 命令,我們已經(jīng)指出變量$ip和使用的另一個(gè)變量$title($name)
#②同上,不過(guò)使用了類class
class virtuals {
define newip ( $ip ) {
exec { "/sbin/ifconfig $title $ip":
}
}
}
#引用
virtuals::newip { eth0:
ip => "11.11.11.11",
}
#
virtuals::newip(11.11.11.11) { eth0:
}
#③聲明多個(gè)參數(shù)列表,以逗號(hào)分割:
define webapp( $domain, $path, $platform ) {
...
}
webapp { "mywizzoapp":
domain => "mywizzoapp.com",
path => "/var/www/apps/mywizzoapp",
platform => "Rails",
}
#④創(chuàng)建了一個(gè)函數(shù)(define),并只添加了一個(gè)參數(shù),參數(shù)又是實(shí)例的名字.但是,我們也可以添加任何我們想要的參數(shù),因此我們只要在函數(shù)中進(jìn)行聲明.
define tmpfile( $greeting ) {
file { "/tmp/$name":
content => $greeting,
}
}
在聲明實(shí)例資源的時(shí)候,并傳遞相應(yīng)的變量值.
tmpfile{ "foo": greeting => "Hello, world" }
#⑤為每一個(gè)參數(shù)指定一個(gè)默認(rèn)的值
define config_file(owner = root, group = root, mode = 0644,source, backup = false, recurse = false, ensure = file ) {
file{ $name:
mode => $mode,
owner => $owner,
group => $group,
backup => $backup,
recurse => $recurse,
ensure => $ensure,
source => "puppet:///$source"
}
}
config_file { "/etc/vnc.conf":
source => "vnc/vnc.conf",
mode => "0640"
}
我們創(chuàng)建了config_file定義, 然后對(duì)其應(yīng)用,這跟函數(shù)調(diào)用差不多。
5.類 VS 定義類和定義的創(chuàng)建過(guò)程都很相似(但類不接收參數(shù)),不過(guò)他們使用起來(lái)非常不同。
定義是用來(lái)定義在一個(gè)主機(jī)上包含多個(gè)實(shí)例的可重用對(duì)象的,所以定義不能包含任何只能有一個(gè)實(shí)例的資源。比如,多次使用同一個(gè)定義不能創(chuàng)建相同的文件。
類是獨(dú)一無(wú)二的,無(wú)論你包含它們多少次,你只會(huì)得到資源的一個(gè)副本。
大多數(shù)時(shí)候,服務(wù)會(huì)被定義成類,服務(wù)的包,配置文件以及正在運(yùn)行的服務(wù)都會(huì)被定義在類中,因?yàn)橥ǔT诿恳粋€(gè)主機(jī)上它們都只有一個(gè)副本。(這些有時(shí)被慣稱為“服務(wù)——包——文件”)。
定義是用來(lái)管理類似虛擬主機(jī)這樣可以有許多的資源,或者使用一個(gè)可重用的封裝來(lái)包裝一些簡(jiǎn)單的信息,以此來(lái)減少代碼量。
至此,puppet的函數(shù)就結(jié)束了,接下來(lái)的是模塊的學(xué)習(xí),請(qǐng)聽(tīng)下回分解!?。?/p>