2015-11-13 11 views
6

मैंने परिभाषित करने में कई तर्क पारित किए।कठपुतली में परिभाषित करने के लिए दो या दो से अधिक चर कैसे पास करें

निम्नलिखित मेरा कोड है। मैं परिभाषित के अंदर दो सरणी पास करना चाहता हूं, लेकिन मैं निम्नलिखित की तरह केवल एक को पास करने में सक्षम हूं।

class test { 
    $path = [$path1,$path2] 
    $filename = [$name1,$name2] 
    define testscript { $filename: } // Can able to pass one value. 
} 

define testscript() { 
    file {"/etc/init.d/${title}": //Can able to receive the file name. 
      ensure => file, 
      content => template('test/test.conf.erb'), 
} 

मेरे ऊपर कोड से, मैं filename संसाधन परिभाषित के अंदर पुनः प्राप्त कर सकते हैं। टेम्पलेट में मान सेट करने के लिए मुझे path की भी आवश्यकता है। मैं टेम्पलेट में दूसरा तर्क भेजने/पुनर्प्राप्त करने में सक्षम नहीं हूं।

क्या संसाधन को परिभाषित करने के अंदर दो मान ($path और $filename) पास करने के लिए मेरे कोड को बेहतर बनाने का कोई तरीका है?

किसी भी मदद की बहुत सराहना की जाती है।

+0

अपने कोड से, आप * परिभाषित प्रकार के शरीर के अंदर फ़ाइल नाम पुनर्प्राप्त नहीं कर सकते हैं, क्योंकि आपकी कक्षा में वाक्यविन्यास त्रुटि है। –

+0

@ जॉन बोलिंगर: ओउप्स, क्या आप इसे इंगित कर सकते हैं? ताकि मैं इसे भविष्य में ठीक कर सकूं। – ArunRaj

+1

परिभाषित प्रकार के उदाहरण की घोषणा करते समय आप 'परिभाषित' कीवर्ड का उपयोग नहीं करते हैं, क्योंकि कठपुतली स्वयं आपको बताएगी। जैसा कि मैंने अपने उत्तर में कहा था, आप एक परिभाषित प्रकार का उपयोग किसी अन्य संसाधन प्रकार की तरह करते हैं। –

उत्तर

6

क्या परिभाषित संसाधन के अंदर दो मान ($ पथ और $ फ़ाइल नाम) को पारित करने के लिए मेरे कोड को बेहतर बनाने का कोई तरीका है?

कठपुतली में अच्छा प्रलेखन है, जो covers this area अच्छी तरह से है।

शुरू करने के लिए, आपको यह समझने की आवश्यकता है कि एक परिभाषित प्रकार एक संसाधन प्रकार है, लगभग किसी भी अंतर्निहित या विस्तार प्रकार के समान है। यदि आपका परिभाषित प्रकार पैरामीटर स्वीकार करता है, तो आप उन मानकों के मानों को बाध्य करते हैं जैसे आप किसी अन्य संसाधन घोषणा में करेंगे। उदाहरण के लिए:

class mymodule::test { 
    mymodule::testscript { $name1: path => $path1 } 
    mymodule::testscript { $name2: path => $path2 } 
} 

define mymodule::testscript ($path) { 
    file {"${path}/${title}": 
    ensure => 'file', 
    content => template('test/test.conf.erb') 
    } 
} 

इसके अलावा, प्रकार परिभाषित संसाधन प्रकार के होते हैं, तो आप "गुजर" मूल्यों की अवधारणा उन्हें के रूप में त्यागने चाहिए जैसे कि वे बजाय कार्यों थे। वह मानसिक मॉडल आपको धोखा देने की संभावना है। विशेष रूप से, यह आपको निश्चित रूप से गलत उम्मीद देगा कि यदि आप अपने संसाधन शीर्षक के रूप में कोई सरणी या हैश निर्दिष्ट करते हैं तो क्या होगा।

विशेष रूप से, आपको यह समझने की आवश्यकता है कि किसी भी संसाधन घोषणा में, यदि आप संसाधन शीर्षक को सरणी के रूप में देते हैं, तो इसका मतलब है कि सरणी सदस्य के साथ उस संसाधन के शीर्षक के रूप में प्रत्येक सरणी सदस्य के लिए एक अलग संसाधन है। उस स्थिति में, उन संसाधनों में से प्रत्येक को घोषणा के शरीर में घोषित वही पैरामीटर मान प्राप्त होते हैं। इसके अलावा, संसाधन शीर्षक हमेशा तार होते हैं। ऊपर वर्णित अनुसार, एक स्तर के सरणी को छोड़कर, यदि आप संसाधन शीर्षक के रूप में कुछ और देते हैं तो इसे एक स्ट्रिंग में परिवर्तित कर दिया जाएगा।

संबंधित मुद्दे