सवाल शेल स्क्रिप्ट पर शेफ / कठपुतली का उपयोग क्यों करें?


कठपुतली और महाराज उपकरण के लिए नया। ऐसा लगता है कि वे जो काम कर रहे हैं वह शैल स्क्रिप्टिंग के साथ किया जा सकता है। शायद यह तब तक शैल स्क्रिप्ट में किया गया जब तक ये साथ नहीं आया।

मैं सहमत होगा कि वे अधिक पठनीय हैं। लेकिन, क्या केवल पढ़ने योग्य होने के अलावा शैल स्क्रिप्ट पर कोई अन्य फायदे हैं?


78
2018-05-01 10:13


मूल




जवाब:


एक डोमेन-विशिष्ट भाषा आपके द्वारा लिखे गए कोड की मात्रा में एक बड़ा अंतर बनाती है। उदाहरण के लिए, आप तर्क दे सकते हैं कि इसमें बहुत अंतर नहीं है:

chmod 640 /my/file

तथा

file { "/my/file":
    mode => 640,
}

लेकिन इनके बीच बहुत अंतर है:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

तथा

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

अगर wget विफल रहता है तो क्या होता है? आपकी स्क्रिप्ट कैसे संभालती है? और क्या होता है यदि उसके बाद आपकी स्क्रिप्ट में कुछ ऐसा है जिसके लिए सही सामग्री के साथ फ़ाइल होने की आवश्यकता है?

आप तर्क दे सकते हैं कि कोई बस डाल सकता है echo "Hello world" > $FILE स्क्रिप्ट में, सिवाय इसके कि पहले उदाहरण में स्क्रिप्ट क्लाइंट पर चलनी चाहिए, जबकि कठपुतली सर्वर पर यह सब संकलित करती है। इसलिए यदि आप सामग्री को बदलते हैं, तो आपको केवल इसे सर्वर पर बदलना होगा और यह इसे कई सिस्टमों के लिए बदल देगा जैसा आप इसे रखना चाहते हैं। और कठपुतली निर्भरता को संभालने और आपके लिए स्वचालित रूप से समस्याओं को स्थानांतरित करती है।

बस कोई तुलना नहीं है - उचित विन्यास प्रबंधन उपकरण आपको समय और जटिलता बचाते हैं। जितना अधिक आप करने की कोशिश करते हैं, उतनी अधिक शैल स्क्रिप्ट अपर्याप्त लगती हैं, और कठपुतली के साथ इसे करने से आप जितना अधिक प्रयास करेंगे।


55
2018-05-01 11:14



@ पॉल गियर, यह कहना एक ओवरम्प्लिफिकेशन है कि कॉन्फ़िगरेशन प्रबंधन उपकरण लंबे समय तक जाने का तरीका हैं। उदाहरण के लिए, एडब्ल्यूएस का उपयोग करके एक शेल स्क्रिप्ट स्क्रैच से सर्वर का निर्माण कर सकती है, कुछ परीक्षण चला सकती है, और एक बार जब आप सुनिश्चित करते हैं कि एडब्ल्यूएस इंस्टॉलेशन ठीक है, तो एक छवि बनाएं। फिर आप इस छवि को आगे के परीक्षणों के लिए पूर्वावलोकन या स्टेजिंग वातावरण में तैनात कर सकते हैं, एक बार जब आप छवि को मान्य करते हैं तो आपके उद्देश्यों के लिए अच्छा होता है, तो आप उत्पादन को दबाते हैं। कॉन्फ़िगरेशन प्रबंधन उपकरण इस परिदृश्य में बिल्कुल मदद नहीं करते हैं। - Derek Litz
अब यदि आप 100 समर्पित समर्पित सर्वरों का प्रबंधन करना चाहते हैं जो लोग दैनिक उपयोग कर रहे हैं (और आपके द्वारा किए गए कार्यों पर गहरा नियंत्रण है, गलती से या नहीं), जहां कॉन्फ़िगरेशन प्रबंधन टूल का उपयोग किया जाना चाहिए। - Derek Litz
यह एक बहुत ही भरोसेमंद उदाहरण नहीं है। मैं wget के साथ शुरू कर सकता था और फिर मैं एक अजीब स्थिति में खत्म नहीं होगा। क्या एक लेनदेन की तरह फाइल है जो किसी भी चरण में सफल नहीं होने पर वापस लुढ़का जाएगा? - PSkocik


यह एक अलोकप्रिय राय होगी, लेकिन विन्यास प्रबंधन प्रणाली जरूरी नहीं है। कभी-कभी सरल वास्तव में सबसे अच्छा होता है।

आपके द्वारा चुने गए कॉन्फ़िगरेशन सिस्टम से जुड़े एक निश्चित सीखने की वक्र और प्रशासनिक ओवरहेड है। आप सभी निर्भरता पेश करने के बाद हैं। किसी भी स्वचालन के साथ आपको सावधान रहना चाहिए कि तैनात विन्यास में सुरक्षा बनाए रखा जाता है।

मेरे पास केवल कुछ उदाहरण हैं जहां हमने कॉन्फ़िगरेशन प्रबंधन तैनात किया है और यह अटक गया है। यह तब होता था जब पुनरावृत्ति विन्यास के साथ बड़ी संख्या में सिस्टम थे और कॉन्फ़िगर करने योग्य कुकी-कटर तैनाती करने की आवश्यकता थी।


31
2018-05-01 14:58



जब पर्यावरण के प्रबंधन की लागत इतनी महान है कि स्वचालन का प्रबंधन वास्तव में सस्ता है। यदि यह गिट में प्रबंधित स्क्रिप्ट परिवर्तनों के लिए आसान है या एसएसएच मल्टीप्लेक्सर में चीजों को सेट करना है तो हम ऐसा करते हैं। मेरे लिए सबसे महत्वपूर्ण बात यह है कि मैं सिस्टम की निगरानी करता हूं और सत्यापित करता हूं कि सबकुछ अपेक्षित रूप से कार्य कर रहा है। जब तक कुछ गलत तरीके से कॉन्फ़िगर किया जाता है, तब तक मुझे सतर्क किया जाता है, यह इतना महत्वपूर्ण नहीं है कि यह कॉन्फ़िगर कैसे हो जाता है। - kenchilada
@ewwhite "जब आप बनाम स्वचालित करने का फैसला करते हैं" xkcd.com/1205 - MikeyB
Ansible जैसे अधिक आधुनिक औजारों में शेफ या कठपुतली की तुलना में काफी कम तैनाती / प्रबंधन ओवरहेड होता है, जिसके लिए कोई निर्भरता नहीं होती है (विशेष रूप से उत्तरदायी नहीं है)। यह वास्तव में गोद लेने के लिए बार कम करता है। - GomoX
@ewwhite जब आप व्यक्तिगत उत्पादकता के लिए चाहते हैं तो स्वचालित करें। आप स्वचालित करके सीखते हैं, आप सांसारिक कार्य करके नहीं सीखते हैं। सीखना = उत्पादकता में वृद्धि और पुनरावृत्ति सुधार। अधिक सकारात्मक बनाने के लिए स्वचालन इस के साथ मिलकर बनता है। यह एक नकारात्मक के बजाय एक सकारात्मक स्नोबॉल है। तकनीकी प्रगति बनाम तकनीकी ऋण। - Derek Litz
@ ए-बी-बी नहीं, यह निहित नहीं है। मैं शैल स्क्रिप्ट का भी उल्लेख नहीं करता हूं, मैं सामान्य अभ्यास के रूप में स्वचालन का उल्लेख करता हूं। आप शैल स्क्रिप्ट के साथ चीजों को स्वचालित कर सकते हैं और चीजों को मैन्युअल रूप से करने के बजाय स्क्रिप्टिंग अबास्ट्रक्शन सीख सकते हैं जो आपको केवल उस कार्य को करने का समय न बचाएगा, यह गलतियों को रोक देगा। साथ ही, आप अपनी अगली लिपि को थोड़ा बेहतर लिखने में सक्षम होना चाहिए। एक सकारात्मक बर्फ बॉल ... हालांकि, यदि आप स्क्रिप्ट लिखने में एक विशेषज्ञ हैं और आप कुछ भी पटकथा नहीं कर रहे हैं तो आप कभी भी फिर से दौड़ेंगे, इससे आपको किसी भी तरह से सीखने या सहेजने में मदद नहीं मिलती है। - Derek Litz


आपने अपने प्रश्न का उत्तर दिया है ...

स्वचालन अधिक स्केलेबल और औपचारिक हो रहा है। कठपुतली और महाराज इन दिनों मानकों को मानते हैं (जांचें नौकरी के विज्ञापन)।

कोबल्ड-एक साथ खोल स्क्रिप्ट के पास उनकी जगह होती है, लेकिन वे हैं नहीं DevOps आंदोलन के संदर्भ में स्केलेबल। पठनीयता उस का हिस्सा है।


23
2018-05-01 10:40



क्या शैल स्क्रिप्ट किसी भी तरह औपचारिक रूप से कम औपचारिक हैं? क्या नौकरी विज्ञापनों को उद्धृत करना तर्कसंगत तर्क देता है? और एक devops काफी शर्म की बात है, क्योंकि वह एक डेवलपर के रूप में underexploited है। लिंक वास्तव में स्केलेबिलिटी के बारे में कुछ भी नहीं कहता है। क्या दावा है कि खोल स्क्रिप्ट स्केलेबल नहीं हैं? मुझे लगता है कि कठपुतली दिलचस्प है, लेकिन जवाब में कारणों के लिए जरूरी नहीं है। - A-B-B
नौकरी विज्ञापन विशिष्ट कौशल के लिए वास्तविक बाजार को दर्शाते हैं। हां, अपने इच्छित उद्देश्य के लिए कॉन्फ़िगरेशन प्रबंधन का उपयोग करना अधिक स्केलेबल, शैल स्क्रिप्ट से दस्तावेज़ के लिए अधिक मजबूत और आसान है। मैं कई वातावरण में रहा हूं, और मुझे दिखाई देने वाली अधिकांश स्क्रिप्ट इस तरह से नहीं बनाई गई हैं कि कोई "उत्पादन गुणवत्ता" मानता है और अपवादों को संभालने के लिए व्यवस्थित होता है। समझने के लिए स्वीकृत उत्तर देखें क्यों। - ewwhite
"और एक devops काफी शर्म की बात है, क्योंकि वह एक डेवलपर के रूप में underexploited है।" यह बस सच नहीं है। देवओप्स एक विकास विशेषज्ञता है, जैसे वेब विकास। सॉफ्टवेयर विकास के पैटर्न और प्रथाएं अभी भी लागू होती हैं। आपको DevOps के बारे में पढ़ना चाहिए। - Chaim Eliyah


शेफ इसे प्रबंधित करने के लिए बहुत आसान बनाता है और संस्करण एक जटिल आधारभूत संरचना का सेटअप, विशेष रूप से किसी भी प्रकार के क्लाउड पर्यावरण बनाम, जिसमें एक मानक मानक में आयोजित शैल स्क्रिप्ट्स का एक समूह मैन्युअल रूप से ftp या scp करना है। इस पर निर्भर करते हुए कि आपको कितनी निर्भरताओं को प्रबंधित करने की आवश्यकता है, इस जीत का आकार काफी भिन्न हो सकता है, जिससे सीएम समाधान में जाने के फैसले को बहुत से लोगों के लिए एक स्पष्ट नहीं किया जा सकता है।

शेफ का वास्तविक (अक्सर असंगत) लाभ है idempotence। ओवरलैपिंग हितों के साथ चलने वाले व्यंजनों के संयोजन के बावजूद संसाधन संसाधन की स्थिति सुनिश्चित करने में सक्षम होना शैल स्क्रिप्ट कॉन्फ़िगरेशन पर एक बड़ा लाभ है। यदि आपके पास अब कॉन्फ़िगरेशन के लिए खोल स्क्रिप्ट हैं, तो खुद से पूछें कि उनमें से कितने अनचाहे / अवांछित परिणामों के बिना कई बार चलाए जा सकते हैं?

एक उचित सीएम समाधान क्रॉस-प्लेटफार्म स्वचालन और टीम सहयोग को सरल बनाकर पैमाने पर सफलता सुनिश्चित करने में मदद करता है। हालांकि यह सब एक अच्छी तरह संगठित, उचित ढंग से बनाए रखा, शैल स्क्रिप्ट के संस्करण समूह के साथ पूरा करना संभव है; आपको खुद से पूछना होगा "क्यों"। शेफ / कठपुतली और इसी तरह की प्रौद्योगिकियां इस बारे में आईं क्योंकि प्रतिभाशाली SysOps का एक समूह इन समस्याओं को बार-बार हल करने के लिए थक गया था और हमें एक बेहतर विकल्प देने के लिए तैयार था।

मुख्य टुकड़े:

  • Idempotence
  • निर्भरता प्रबंधन की आसानी (संस्करण)
  • मानकीकृत संगठन (एक उद्योग स्तर पर स्वीकार किया जाता है)
  • सिस्टम स्तर के विवरण से सर्वर कॉन्फ़िगरेशन कार्यों को अलग करने के लिए एब्स्ट्रक्शन
  • सामुदायिक ज्ञान का लाभ उठाने की क्षमता (जो उपरोक्त सभी सिद्धांतों को गले लगाने की गारंटी है)

13
2018-05-03 19:11



एसएस के साथ बेईमानी असंभव है। निर्भरताएं yum / apt, आदि द्वारा अच्छी तरह से प्रबंधित की जाती हैं। स्वीकृति अप्रासंगिक है। एसएस के लिए सामुदायिक ज्ञान मौजूद है। हालांकि, मैं स्वीकार करता हूं कि स्क्रिप्ट के समूह पर प्रतिलिपि नहीं लेना, और केंद्रीय रूप से सिस्टम को कॉन्फ़िगर करना भी उपयोगी नहीं है। मुझे लगता है कि कठपुतली को क्लाइंट-साइड एजेंट की आवश्यकता होती है। - A-B-B


आधुनिक विन्यास प्रबंधन उपकरण जैसे कि कठपुतली और शेफ आपको परिभाषित करने की अनुमति देते हैं राज्य चिंता करने की बजाए एक प्रणाली का गतिविधियों एक कॉन्फ़िगर सर्वर प्राप्त करने के लिए आवश्यक है।

उदाहरण के लिए, आपका chmod कमांड मानता है कि फ़ाइल मौजूद है, फ़ाइल का मालिक होने वाला उपयोगकर्ता मौजूद है, निर्देशिकाएं बनाई गई हैं, और इसी तरह। इसलिए आपकी स्क्रिप्ट को इन सभी पूर्व शर्त पर विचार करना चाहिए।

राज्य-आधारित कॉन्फ़िगरेशन प्रबंधन उपकरण सरल होते हैं: आप केवल देखभाल करते हैं कि फ़ाइल में सही अनुमतियां हैं। यह कैसे प्राप्त किया जाता है उपकरण की समस्या है।


10
2018-05-20 02:19



असल में मेरा chmod यह नहीं मानता कि फ़ाइल मौजूद है क्योंकि फ़ाइल या तो स्क्रिप्ट द्वारा अस्तित्व के लिए बनाई गई थी या परीक्षण की गई थी। - A-B-B


यदि सर्वर आपके लिए डिस्पोजेबल हैं, या आपके पास एक समय में एक जोड़े से अधिक खड़े होने का कारण है, तो एक पूर्ण उड़ा हुआ सीएम सिस्टम शैल स्क्रिप्ट की श्रृंखला की तुलना में आपकी आवश्यकताओं को बेहतर ढंग से पूरा करेगा।

यदि आपकी बिल्ड की जरूरतें मामूली हैं, (या कलात्मक रूप से हाथ से शिल्प कार्बनिक मुक्त-श्रेणी मेला-व्यापार सर्वरों की तरह), तो इसे सरल रखें।

व्यक्तिगत रूप से, पिछले भूतकाल में शेफ का व्यापक रूप से उपयोग करने के बाद, मैंने इस गग में 'इसे सरल रखना' करने का प्रयास किया, लेकिन मुझे वास्तव में प्राइमेटिव्स, एब्स्ट्रैक्शन और पावर प्रदान की गई शक्ति को याद किया गया। यहां तक ​​कि यदि आप ऐसी स्थिति में आते हैं जहां आपको दो खोल कमांड से जो चाहिए, उसे प्राप्त कर सकते हैं, तो आप उन्हें 'कमांड' ब्लॉक से चला सकते हैं, अपने शेल कमांड को ठीक उसी तरह दर्ज कर सकते हैं जैसे आप उन्हें खोल में लिखेंगे।

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

एक अन्य लाभ समुदाय है: बहुत सारे लोग हैं (जिनमें से कई आपके से अधिक स्मार्ट और / या अधिक अनुभवी होंगे)। व्यक्तिगत रूप से मैं इसे प्यार करता हूं जब किसी और ने मेरे लिए अपना काम किया है, जो अक्सर मेरे पास अधिक व्यापक रूप से होता है।


9
2018-05-01 22:32





मैंने एक शेल स्क्रिप्ट-आधारित सर्वर स्वचालन ढांचा बनाया: https://github.com/myplaceonline/posixcube

मुझे यकीन है कि मैं इस तरह के प्रोजेक्ट को बनाने वाला पहला नहीं हूं लेकिन मुझे अपनी ज़रूरतों को पूरा करने के लिए ऐसा कुछ नहीं मिला, इसलिए मैंने सोचा कि दूसरों को यह उपयोगी लगेगा। मुझे केवल शेफ के साथ अनुभव था, लेकिन जैसा कि मैंने Ansible और दूसरों के चारों ओर देखना शुरू किया, मैं शेल स्क्रिप्ट को एक शॉट देना चाहता था, और मुझे अब तक परिणाम पसंद है।


1
2017-12-25 01:15