कठपुतली - कक्षाएं
कठपुतली वर्गों को संसाधनों के संग्रह के रूप में परिभाषित किया जाता है, जो एक वांछित राज्य में लक्ष्य नोड या मशीन प्राप्त करने के लिए एक साथ समूहीकृत होते हैं। इन वर्गों को कठपुतली की प्रकट फाइलों के अंदर परिभाषित किया गया है जो कठपुतली मॉड्यूल के अंदर स्थित है। किसी कक्षा का उपयोग करने का मुख्य उद्देश्य किसी भी प्रकट फ़ाइल या किसी अन्य कठपुतली कोड के अंदर समान कोड पुनरावृत्ति को कम करना है।
निम्नलिखित कठपुतली वर्ग का एक उदाहरण है।
[root@puppetmaster manifests]# cat site.pp
class f3backup (
$backup_home = '/backup',
$backup_server = 'default',
$myname = $::fqdn,
$ensure = 'directory',
) {
include '::f3backup::common'
if ( $myname == '' or $myname == undef ) {
fail('myname must not be empty')
}
@@file { "${backup_home}/f3backup/${myname}":
# To support 'absent', though force will be needed
ensure => $ensure,
owner => 'backup',
group => 'backup',
mode => '0644',
tag => "f3backup-${backup_server}",
}
}
उपरोक्त उदाहरण में, हमारे पास दो ग्राहक हैं जहां उपयोगकर्ता को मौजूद होना चाहिए। जैसा कि देखा जा सकता है कि हमने एक ही संसाधन को दो बार दोहराया है। दो नोड्स के संयोजन में एक ही कार्य नहीं करने का एक तरीका।
[root@puppetmaster manifests]# cat site.pp
node 'Brcleprod001','Brcleprod002' {
user { 'vipin':
ensure => present,
uid => '101',
shell => '/bin/bash',
home => '/home/homer',
}
}
इस फैशन में कॉन्फ़िगरेशन को निष्पादित करने के लिए नोड्स को जोड़ना एक अच्छा अभ्यास नहीं है। यह केवल एक वर्ग बनाकर और नोड्स में बनाई गई कक्षा को शामिल करके प्राप्त किया जा सकता है जो निम्नानुसार दिखाया गया है।
class vipin_g01063908 {
user { 'g01063908':
ensure => present,
uid => '101',
shell => '/bin/bash',
home => '/home/g01063908',
}
}
node 'Brcleprod001' {
class {vipin_g01063908:}
}
node 'Brcleprod002' {
class {vipin_g01063908:}
}
ध्यान देने वाली बात यह है कि कक्षा की संरचना कैसी दिखती है और हमने कक्षा कीवर्ड का उपयोग करके एक नया संसाधन कैसे जोड़ा है। कठपुतली में प्रत्येक वाक्य रचना की अपनी विशेषता है। इसलिए, सिंटैक्स एक पिक्स शर्तों पर निर्भर करता है।
पैरामीटर वर्ग
जैसा कि ऊपर के उदाहरण में, हमने देखा है कि एक क्लास कैसे बनाएं और इसे एक नोड में शामिल करें। अब ऐसी स्थितियां हैं जब हमें प्रत्येक नोड पर अलग-अलग कॉन्फ़िगरेशन करने की आवश्यकता होती है जैसे कि जब किसी को एक ही वर्ग का उपयोग करके प्रत्येक नोड पर अलग-अलग उपयोगकर्ता होने की आवश्यकता होती है। यह फीचर कठपुतली में पैरामीटराइज्ड क्लास का उपयोग करके प्रदान किया जाता है। एक नए वर्ग के लिए कॉन्फ़िगरेशन निम्न उदाहरण में दिखाया गया है।
[root@puppetmaster ~]# cat /etc/puppet/manifests/site.pp
class user_account ($username){
user { $username:
ensure => present,
uid => '101',
shell => '/bin/bash',
home => "/home/$username",
}
}
node 'Brcleprod002' {
class { user_account:
username => "G01063908",
}
}
node 'Brcleprod002' {
class {user_account:
username => "G01063909",
}
}
जब हम उपरोक्त साइट को लागू करते हैं। नोड्स पर प्रकट होते हैं, तो प्रत्येक नोड के लिए आउटपुट निम्न की तरह दिखाई देगा।
Brcleprod001
[root@puppetagent1 ~]# puppet agent --test
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetagent1.testing.dyndns.org
Info: Applying configuration version '1419452655'
Notice: /Stage[main]/User_account/User[homer]/ensure: created
Notice: Finished catalog run in 0.15 seconds
[root@brcleprod001 ~]# cat /etc/passwd | grep "vipin"
G01063908:x:101:501::/home/G01063909:/bin/bash
Brcleprod002
[root@Brcleprod002 ~]# puppet agent --test
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetagent2.testing.dyndns.org
Info: Applying configuration version '1419452725'
Notice: /Stage[main]/User_account/User[bart]/ensure: created
Notice: Finished catalog run in 0.19 seconds
[root@puppetagent2 ~]# cat /etc/passwd | grep "varsha"
G01063909:x:101:501::/home/G01063909:/bin/bash
एक वर्ग पैरामीटर का डिफ़ॉल्ट मान भी निर्धारित कोड में दिखाया गया है।
[root@puppetmaster ~]# cat /etc/puppet/manifests/site.pp
class user_account ($username = ‘g01063908'){
user { $username:
ensure => present,
uid => '101',
shell => '/bin/bash',
home => "/home/$username",
}
}
node 'Brcleprod001' {
class {user_account:}
}
node 'Brcleprod002' {
class {user_account:
username => "g01063909",
}
}