2012-03-01 12 views
5

मेरे पास यह node.pp है और मैं सोच रहा हूं कि कठपुतली इसे कैसे निष्पादित करने जा रही है।कठपुतली निष्पादन प्रवाह

node 'agent.puppet.demo' { 
    include ssh 
    include postfix 
    include mysql 
    include apache 
} 

, एजेंट नोड पर जब मैं रन:

$ puppetd -t -d 

कठपुतली यह क्रमिक रूप से अर्थ को क्रियान्वित नहीं कर रहा है, यह पहली ssh निष्पादित नहीं करता है, तो पोस्टफ़िक्स, ...

क्या किसी को पता है कि यह क्यों है? क्या ऐसा इसलिए है क्योंकि इसे 'घोषणात्मक भाषा' कहा जाता है जहां निष्पादन का आदेश वास्तव में कोई फर्क नहीं पड़ता?

यदि यह मामला है, तो मैं केवल एक निश्चित तरीके से, यह बता सकता हूं कि मैं क्या चाहता हूं और कठपुतली इसे कैसे निष्पादित करेगी?

उत्तर

17

अस्वीकरण: मैं कठपुतली के डेवलपर्स में से एक हूं।

यह कोड में किसी भी स्पष्ट या निहित निर्भरताओं के अपवाद के साथ, इसे लगातार लेकिन अप्रत्याशित क्रम में निष्पादित करेगा। स्पष्ट निर्भरता वे चीजें हैं जिन्हें आप subscribe या require मेटापरैमिटर के साथ निर्दिष्ट करते हैं। लागू निर्भरता autorequire सुविधा से आती है, जो चीजें स्वचालित रूप से एक समझदार क्रम में फ़ाइल संसाधनों को लागू करती हैं।

इसका कारण यह नहीं है कि भाषा घोषणात्मक है, बल्कि भाषा घोषणात्मक है क्योंकि आदेश अंतर्निहित समस्या स्थान में ज्यादातर चीजों के लिए कोई फर्क नहीं पड़ता है।

उदाहरण के लिए, अधिकांश लोगों के लिए एसएसएच प्रबंधन और पोस्टफिक्स प्रबंधित करने के बीच वास्तव में बहुत अधिक कनेक्शन नहीं है - आप किसी भी क्रम में या एक ही समय में काम कर सकते हैं, और सबकुछ एक ही काम करेगा।

यह हमें कई तरीकों से चीजों को बेहतर बनाने के लिए स्वतंत्र करता है कि "सबकुछ रैखिक क्रम में है" नहीं। हम काम कर रहे हैं, उदाहरण के लिए, संकुल के बाहर स्पष्ट निर्भरताओं का सम्मान करते हुए पैकेज इंस्टॉल को बैच करने के लिए।

तो, निष्पादन और निर्भरताओं का क्रम अंतर्निहित समस्या का पालन करता है, और हमने उस संपत्ति को और अधिक भयानक चीजें करने में सक्षम होने के लिए संरक्षित किया है।

लक्ष्य यह है कि आप अंत में क्या कहते हैं: कि आप जो चाहते हैं उसे घोषित करते हैं, और हम इसे प्राप्त करने के सभी विवरणों का ख्याल रखते हैं। समय में हम तार्किक निर्भरताओं के बारे में ज्यादा समझदार होने की उम्मीद करते हैं, इसलिए आपको इसे पाने के लिए भी कम कहना होगा।

+2

क्या आप कृपया * निरंतर लेकिन अप्रत्याशित आदेश * निर्धारित कर सकते हैं? हमारे पास कई समस्याएं हैं जब Puppet 2.6 बस चरणों को फिर से आदेश देता है और कुछ लापता निर्भरताओं के कारण यह विफल हो जाता है। यह अचूक है। क्या मैं किसी प्रकार का शफल कर सकता हूं ताकि हम इसका परीक्षण कर सकें? मैंने यह भी सुना है कि नया संस्करण इसे निश्चित आदेश देता है। – lzap

+0

तो, उदाहरण के लिए, मेरे पास स्थापित करने के लिए एक पैकेज है जो yum.repos.d में एक भंडार के मौजूदा पर निर्भर करता है। पैकेज को स्थापित करने का प्रयास करने से पहले मैं भंडार स्थापित करने के लिए कैसे लागू कर सकता हूं? – Mojo

3

अस्वीकरण: मैं अभी भी बहुत कठपुतली के लिए :)

कुंजी निर्भरता के मामले में सब कुछ के बारे में सोचना है नया हूँ। कक्षा निर्भरताओं के लिए, मैं कक्षा ['ए'] -> कक्षा ['बी'] वाक्यविन्यास का उपयोग करना पसंद करता हूं। मान लें कि आपके पास एक टोमकैट क्लास है जिसके लिए एक जेडीके क्लास की आवश्यकता होती है जो ओरेकल से सूर्य जेडीके को डाउनलोड/इंस्टॉल करता है। अपने बिल्ला कक्षा में, आप के साथ

कक्षा [ 'JDK'] इस निर्दिष्ट कर सकते हैं -> क्लास [ 'बिल्ला']

वैकल्पिक रूप से आप बल्कि शामिल का उपयोग करने से एक की आवश्यकता होती है मेटा पैरामीटर के साथ एक वर्ग घोषणा कर सकते हैं।

+0

तो, मुझे लगता है कि निर्भरताओं को सही तरीके से लागू करने के लिए मुझे निम्नलिखित पंक्तियां जोड़नी होंगी। कक्षा ['अपाचे'] -> कक्षा ['mysql'] -> कक्षा ['पोस्टफिक्स'] -> कक्षा ['एसएसएच'] क्या स्वतंत्र मॉड्यूल का उपयोग कर एक अनुक्रमिक क्रम को पूरा करने के लिए एक और दृष्टिकोण है आंतरिक आवश्यकता => कक्षा ... – Maverick

+0

आपके पास वह पीछे है। कक्षा ['ए'] -> कक्षा ['बी'] का मतलब है कक्षा बी को कक्षा ए की आवश्यकता है। जिस तरह से मैं इसे करना चाहता हूं, प्रत्येक पैकेज अपने स्वयं के मॉड्यूल में है। प्रत्येक मॉड्यूल अन्य वर्गों पर इसकी अपनी निर्भरता निर्दिष्ट करता है। मैं एसएसएच जैसी चीजों के लिए बेस यूबर क्लास का उपयोग करना चाहता हूं जो सबकुछ आवश्यक है। इसके लिए मैं यह सुनिश्चित करने के लिए रन चरणों का उपयोग करता हूं कि यह हमेशा पहले चलता है। – czervik

+0

@czervik क्या आप यह दिखाने के लिए दिमाग में हैं कि कैसे आप अपने uber वर्ग को एसएसएच जैसी चीजों के लिए शामिल करते हैं ताकि इसे हर दूसरे वर्ग द्वारा शामिल किया जा सके? – memyself

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