कठपुतली टेम्पलेट से कठपुतली समारोह को बुलाओ?


13

0.24.8 के रूप में, एक कठपुतली टेम्पलेट एक कठपुतली समारोह कह सकता है?

मैं अपने मेनिफेस्ट में फ़ंक्शन को कॉल करके, वैरिएबल पर रिटर्न वैल्यू असाइन करने और फिर टेम्प्लेट में लुकअपवार ('वेरिएबल') का उपयोग करके समान कार्यक्षमता प्राप्त कर सकता हूं, लेकिन मैं बीच के आदमी को काट देना चाहता हूं।

जवाबों:


18

टेम्प्लेट के अंदर आपके पास एक स्कोप ऑब्जेक्ट तक पहुंच है। सभी कार्य जिन्हें आप कठपुतली मेनिफेस्टों में एक्सेस कर सकते हैं, उन्हें उस स्कोप ऑब्जेक्ट के माध्यम से एक्सेस किया जा सकता है, हालांकि उसी नाम से नहीं। "function_"फ़ंक्शन नाम की शुरुआत में प्रीपेन्ड करें । उदाहरण के लिए, यहां मैंने एक टेम्पलेट को दूसरे के अंदर शामिल किया:<%= scope.function_template("template2.erb") %>

http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating में टेम्प्लेट ऑब्जेक्ट के बारे में महान दस्तावेज हैं। टेम्पलेट और कार्यों के बारे में वास्तव में गहरी जानकारी के लिए आप के अंदर देख सकते हैं lib/puppet/parser/templatewrapper.rbऔर lib/puppet/parser/functions.rb


बहुत धन्यवाद। टेम्पलेट में फ़ंक्शन () फ़ंक्शन का उपयोग करके किसी को भी सावधानी बरतें: आपको अभी भी इसे योग्य बनाना है जैसे आप कठपुतली मेनिफेस्ट (यानी, स्कोप.फंक्शन_टेमप्लेट ("मॉड्यूल / टेम्पलेट.बर्ब)) में करते हैं।
श-बीटा

टेम्पलेट के भीतर टेम्पलेट फ़ंक्शन कॉल के लिए लोड करने के लिए टेम्पलेट फ़ाइल के नाम के लिए एक चर का उपयोग करना संभव है? जैसे<%= scope.function_template("sites/$domain/config.erb") %>
गैरी

पूर्ण रूप से। बस ध्यान रखें कि आप रूबी में काम कर रहे हैं, कठपुतली के डीएसएल नहीं, इसलिए चर नाम (और प्रक्षेप नियम) अलग हैं। आपका तार होना चाहिए <%= scope.function_template("sites/#{domain}/config.erb") %>
jgoldschrafe

3

मुझे कस्टम कार्यों के लिए भी प्रश्न का विस्तार करने दें । मूल रूप से, आप कस्टम फ़ंक्शंस को उसी तरह से कॉल करते हैं जैसे बिल्ट-इन फ़ंक्शंस (फ़ंक्शन_ उपसर्ग का उपयोग करके), लेकिन सुनिश्चित करें कि आप किसी सरणी में सभी पैरामन्स पास करते हैं:

module Puppet::Parser::Functions
  newfunction(:namegoeshere, :type => :rvalue) do |args|
    # ...
  end
end

<%= scope.function_namegoeshere(["one","two"]) %>

कृपया ध्यान दें कि यह कुछ कठपुतली संस्करणों पर वर्ग ब्रेसिज़ के बिना भी काम करता है। अधिक जानकारी: http://docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates

एक और महत्वपूर्ण बात यह है कि पपेट 2.6 या पुराने में एक बग (या सुविधा) है जहां कस्टम फ़ंक्शन टेम्पलेट दायरे में ऑटो-लोड नहीं होते हैं । आपको उन्हें मैन्युअल रूप से लोड करने की आवश्यकता है , अन्यथा फ़ंक्शन नहीं मिलेंगे!

<% Puppet::Parser::Functions::function('namegoeshere') %>

अधिक जानकारी: http://projects.puppetlabs.com/issues/7991


-2

मुझे पूरी तरह से यकीन नहीं है कि आपके लिए कठपुतली फ़ंक्शन का क्या मतलब है, लेकिन कठपुतली टेम्पलेट रूबी एम्बेडेड हैं, इसलिए आप रूबी में उन टेम्पलेट्स में कुछ भी कर सकते हैं जो आप कर सकते हैं।


देशी कठपुतली कार्य fqdn_rand (), sha1 (), टैग किए गए (), आदि कस्टम कठपुतली कार्यों मॉड्यूल / modulename / plugins / कठपुतली / पार्सर / कार्यों / के तहत संग्रहीत की जाती हैं। क्या इन्हें किसी टेम्पलेट के भीतर से बुलाया जा सकता है?
श-बीटा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.