पुलुमी कोड के रूप में बुनियादी ढांचे के प्रबंधन के लिए एक शक्तिशाली उपकरण है, और विभिन्न भाषाओं में इसका लचीलापन इसे डेवलपर्स के बीच एक लोकप्रिय विकल्प बनाता है। जबकि पुलुमी का टाइपस्क्रिप्ट सिंटैक्स आउटपुट और इनपुट को संभालने का एक साफ और सुविधाजनक तरीका प्रदान करता है, इन सुविधाओं को पायथन में अनुवाद करना चुनौतीपूर्ण हो सकता है। यह लेख टाइपस्क्रिप्ट में pulumi.interpolate का उपयोग करने की बारीकियों और पायथन में समान कार्यक्षमता कैसे प्राप्त करें, इसकी पड़ताल करता है।
पुलुमी के टाइपस्क्रिप्ट सिंटैक्स में, आउटपुट को संयोजित करने के लिए एक साफ दृष्टिकोण है। यह टैग किए गए टेम्पलेट शाब्दिकों का लाभ उठाता है, जो पायथन में उपलब्ध नहीं हैं। पुलुमी संदर्भ दस्तावेज़ों के अनुसार, इंटरपोलेट कॉनकैट के समान है लेकिन इसे टैग किए गए टेम्पलेट अभिव्यक्ति के रूप में उपयोग करने के लिए डिज़ाइन किया गया है। उदाहरण के लिए:
// 'server' and 'loadBalancer' are both resources that expose [Output] properties. let val: Output= pulumi.interpolate `http://${server.hostname}:${loadBalancer.port}`
कॉनकैट की तरह, ${} के बीच के 'प्लेसहोल्डर' कोई भी इनपुट हो सकते हैं, यानी, वे वादे, आउटपुट या सिर्फ सादे जावास्क्रिप्ट मान हो सकते हैं।
अपना अधिकांश पुलुमी कार्य टाइपस्क्रिप्ट में करने के बाद, जब भी मुझे किसी नए संसाधन में इनपुट पास करने की आवश्यकता होती है, तो मैं अक्सर पुलुमी.इंटरपोलेट टैग किए गए टेम्पलेट शाब्दिक का उपयोग करता हूं। इस पर बहुत अधिक विचार किए बिना, मैंने इसे pulumi.concat से गहराई से तुलना किए बिना या लागू किए बिना इसका बड़े पैमाने पर उपयोग किया। हालाँकि, जब मैंने पायथन में पुलुमी के साथ काम करना शुरू किया और पुलुमी.इंटरपोलेट तक पहुंचा, तो मुझे एहसास हुआ कि यह गायब है।
इससे यह समझने में गहरी मदद मिली कि आउटपुट बनाम इनपुट का क्या मतलब है और इसका अनुवाद कैसे किया जाए:
pulumi.interpolate`http://${server.hostname}:${loadBalancer.port}`
को:
pulumi.concat('http://', server.hostname, ':', loadBalancer.port)
आउटपुट संसाधनों से प्राप्त मूल्य हैं जो पॉप्युलेट हो सकते हैं या भविष्य में हल हो जाएंगे और पॉप्युलेट हो जाएंगे। चूँकि एक आउटपुट उस संसाधन से जुड़ा होता है जिससे वह आता है, एक बढ़त तब बनाई जा सकती है जब इसे pulumi.interpolate या pulumi.concat को इनपुट के रूप में पास किया जाता है, और बाद में एक अन्य संसाधन बनाने के लिए उपयोग किया जाता है। नोड्स (संसाधन) और उनके किनारों (आउटपुट -> इनपुट) द्वारा बनाए गए संसाधनों के बीच निर्भरता ग्राफ, पुलुमी को सही क्रम में संसाधन बनाने की अनुमति देता है और यह सुनिश्चित करता है कि ग्राफ़ में अगले संसाधन द्वारा आवश्यकता होने पर आउटपुट पॉप्युलेट किए जाते हैं।
एक इनपुट एक कच्चा मूल्य, एक वादा या एक आउटपुट हो सकता है। यदि किसी संसाधन का इनपुट एक आउटपुट है, तो आपके पास उस संसाधन का संदर्भ है जहां आउटपुट मूल रूप से बनाया गया था। यह तथ्य कि एक इनपुट एक आउटपुट हो सकता है, उसे अपनी निर्भरता का पता लगाने में सक्षम बनाता है।
यहां इसकी प्रकार की परिभाषा दी गई है:
type Input= T | Promise | OutputInstance ;
यहां एक उदाहरण दिया गया है कि कैसे हम टेम्प्लेट शाब्दिक के शाब्दिक स्ट्रिंग भाग को बदले बिना केवल मानों ($ {} के बीच "प्लेसहोल्डर्स") को अपरकेस कर सकते हैं:
function uppercaseValues(strings, ...values) { const result = []; strings.forEach((string, i) => { result.push(string); if (iपुलुमी.इंटरपोलेट का कार्यान्वयन
सटीक स्रोत कोड को जाने बिना, और ऊपर दिए गए उदाहरण से विस्तार किए बिना, हम कल्पना कर सकते हैं कि पुलुमी.इंटरपोलेट को अपने आप कैसे लागू किया जाए। यह कुछ इस तरह दिख सकता है:
function interpolate(strings, ...values) { const result = []; strings.forEach((string, i) => { result.push(string); if (iहमने केवल अंतिम जॉइन कॉल को pulumi.concat पर कॉल से बदल दिया। यदि यह कार्यान्वयन होता, तो हम केवल प्लेसहोल्डर्स पर काम करने के बजाय, आउटपुट प्रकारों से कच्चे स्ट्रिंग्स को हटाने की आवश्यकता पर जांच करते, जो वास्तविक कार्यान्वयन करता है।
टाइपस्क्रिप्ट में इसकी फ़ंक्शन परिभाषा है:
function interpolate(literals: TemplateStringsArray, ...placeholders: Input[]): Output ; जो कॉनकैट के समान है:
function concat(...params: Input[]): Output लाइटबल्ब क्षण तब आता है जब आपको एहसास होता है कि आप वास्तव में केवल आउटपुट मानों के साथ आगे बढ़ रहे हैं और उन्हें मूल आउटपुट में लपेट रहे हैं।
पायथन को लौटें
इंटरपोलेट को कॉनकैट में पोर्ट करते समय आप कुछ मूर्खतापूर्ण गलतियाँ कर सकते हैं। आइए एक उदाहरण से प्रदर्शित करें।
टाइपस्क्रिप्ट में, मैंने यह किया होगा:
function get_image_name(imageRegistry: Repository, name: string, version: Input) { return pulumi.interpolate`${image_registry.repository_id}/${name}:${version}` } पायथन में पोर्ट करते समय, मुझे यह परिणाम मिल सकता है:
def get_image_tag(image_registry: Repository, name: str, version: Input[str]): return pulumi.Output.concat( image_registry.repository_id, f"/{name}:{version}" )हालाँकि, निर्भरताएँ बनाने और आउटपुट को हल करने के लिए इंटरपोलेट प्रत्येक प्लेसहोल्डर पर व्यक्तिगत रूप से पुनरावृत्ति कर रहा था। हमारे पायथन कोड के साथ, हमने संस्करण तर्क के साथ वह संबंध खो दिया है। हमें अपने आउटपुट को मैन्युअल रूप से विभाजित करने और उन्हें pulumi.Output.concat पर व्यक्तिगत तर्क के रूप में प्रदर्शित करने की आवश्यकता है।
संशोधित कोड इस तरह दिखेगा:
def get_image_tag(image_registry: Repository, name: str, version: Input[str]): return pulumi.Output.concat( image_registry.repository_id, f"/{name}:", version )अब, संस्करण को निर्भरता ग्राफ़ में सही ढंग से शामिल किया जाएगा, और हम त्रुटि मुक्त होंगे!
निष्कर्ष
पुलुमी.इंटरपोलेट को टाइपस्क्रिप्ट से पायथन में अनुवाद करने के लिए इस बात की गहरी समझ की आवश्यकता होती है कि पुलुमी में आउटपुट और इनपुट कैसे काम करते हैं। जबकि पायथन टैग किए गए टेम्पलेट शाब्दिकों का समर्थन नहीं करता है, pulumi.concat का प्रभावी ढंग से उपयोग करने से हमें समान कार्यक्षमता प्राप्त करने की अनुमति मिलती है। निर्भरताओं को मैन्युअल रूप से प्रबंधित करके और यह सुनिश्चित करके कि सभी आउटपुट मान ठीक से संभाले गए हैं, हम यह सुनिश्चित कर सकते हैं कि पायथन में हमारा पुलुमी कोड टाइपस्क्रिप्ट की तरह ही मजबूत और कुशल है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3