साल्टस्टैक में जिन्जा आउटपुट की जांच कैसे करें?


16

मेरे पास SLSनमक में एक टेम्पलेटेड है जिसे मैं बनाने की कोशिश कर रहा हूं, लेकिन यह अवैध सिंटैक्स का उत्सर्जन कर रहा है, जिसके परिणामस्वरूप त्रुटियां हैं:

my-minion-id:
    - State 'system' in SLS 'network' is not formed as a list

सिद्धांत रूप में, यह संभव होना चाहिए कि किसी तरह से SLSफ़ाइल के रूप में आउटपुट को पार्स करने का प्रयास करने से पहले, जिन्जा टेम्पलेट के आउटपुट की जांच करें । जिंजा रेंडरर के लिए एक पायथन मॉड्यूल मौजूद है salt.renderers.jinja, लेकिन अगर मैं इसे सीएलआई पर निष्पादित करने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती है:

# salt my-minion-id salt.renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'salt.renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code
# salt my-minion-id renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code

मैं अपने टेम्पलेट का आउटपुट कैसे देख सकता हूं? यह बेतुका लगता है कि यह डिबग करना मुश्किल होना चाहिए।

जवाबों:


11

की जाँच करें slsutil.renderer मॉड्यूल।

यह वही करना चाहिए जो आप चाहते हैं

salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'

यह मॉड्यूल सीधे आपके लिए सीधे संकलन_प्लेट फ़ंक्शन को कॉल करता है।

संपादित करें: /srv/salt/network/init.sls मिनियन पर पथ है, यदि आप मास्टर को अपने मिनियन के रूप में लक्षित नहीं कर रहे हैं, तो आपको संभवतः निम्नलिखित करने की आवश्यकता होगी।

salt minion-id cp.cache_file salt://network/init.sls
salt minion-id slsutil.renderer /var/cache/salt/minion/files/base/network/init.sls

या उस फ़ाइल को इंगित करें जो cache_file से बाहर निकलती है।

यदि आप 2018.3 या नए पर हैं, तो आप निर्दिष्ट कर सकते हैं salt://network/init.sls


लेकिन क्या पथ / srv / नमक / नेटवर्क है? क्या यह गुरु पर पथ है? मिनियन?
मृणाल

यह मिनियन पर एक रास्ता है। आप कर सकते हैं salt minion-id cp.cache_file salt://network/init.slsऔर फिर चलाने के लिए slsutil.render फाइल के खिलाफ इसे वापस थूक दिया जाता है, जिसे मिनियन पर कैश होने के बाद, या 2018.3 में शुरू किया जाता है, आप बस निर्दिष्ट कर सकते हैंsalt://network/init.sls
gtmanfred

8

यह देखते हुए कि मैंने पहले से संबंधित मुद्दे से जूझते हुए कितना समय बिताया है, काश मैं जल्द ही इसका पता लगा लेता।

समाधान salt.modules.cp.get_templateनमक मिनियन फ़ाइल को पुनः प्राप्त करने के लिए उपयोग करने के लिए प्रतीत होता है , इसे टेम्प्लेटिंग इंजन के माध्यम से प्रस्तुत करना और इसे पढ़ने योग्य जगह में रखना चाहिए:

# salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja
my-minion-id:
    /root/network.sls

वहां से, आप my-minion-idहोस्ट से कनेक्ट होते हैं और आपके द्वारा रखी गई फ़ाइल की जांच करते हैं /root/network.sls

यह समझ में आता है; salt.renderers.jinjaमें है salt.renderers, नाम स्थान जबकि मॉड्यूल आप के लिए से CLI में हैं उपयोग कर सकते है salt.modulesनाम स्थान।

यह एक डेटा दृश्यता के दृष्टिकोण से भी समझ में आता है; टेम्पलेट रेंडरिंग मिनियन पर होता है , जहां अनाज और ऐसे उपलब्ध होते हैं, और मुझे अभी तक एक मॉड्यूल देखना है जो कि मिनियन कोड को निष्पादित करता है मास्टर के लिए मनमाना आउटपुट लौटाता है (उदाहरण के लिए, सीएलआई को देखने के लिए); लौटा डेटा हमेशा अच्छी तरह से संरचित और संक्षिप्त है। (इस तरह के एक मॉड्यूल हो सकता है, लेकिन मुझे नहीं पता कि यह क्या है। यह एक टकसाल पर परीक्षण फ़ाइलों को छोड़ने के लिए एक बेहतर समाधान होगा।)

संपादित करें: @ gtmanfred का उत्तर कहीं अधिक बेहतर और प्रत्यक्ष है, और मैंने वह स्वीकार कर लिया है। मैं जानकारीपूर्ण उद्देश्यों के लिए इसे यहाँ छोड़ रहा हूँ। यह सबसे अच्छा समाधान नहीं है, लेकिन यह अभी भी काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.