कोड और TDD के रूप में बुनियादी ढाँचा


11

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

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

XP हमें TDD का उपयोग करना सिखाता है और सवाल यह है कि क्या यह बुनियादी ढांचे पर लागू है? टूलींग से पता चलता है कि यह है।

मैं कुछ प्रकार के परीक्षणों की कल्पना कर सकता हूं जो बहुत उपयोगी हो सकते हैं।

हम धूम्रपान परीक्षण लिखते हैं जो तैनात सेवा के साथ बंडल किया जाता है ताकि यह सुनिश्चित किया जा सके कि तैनात सेवा कार्य समाप्त हो सके और अपेक्षित रूप से चले। यह एक एपीआई कॉल या / और systemctl जाँच होगी ताकि यह सुनिश्चित किया जा सके कि हम अभी क्या काम करते हैं। इस कार्यक्षमता का एक बहुत ही राज्यों में कवर किया जा सकता है क्योंकि ansible जैसे उपकरण यह सुनिश्चित करने के लिए हैं कि कोई सेवा चल रही है।

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

ThoughtWorks तकनीक रडार अभी जैसे उपकरणों की प्रशंसा inspec , serverspec या गॉस मान्य है कि सर्वर कल्पना को पूरा करती है के लिए। लेकिन हम एक युक्ति लिख रहे हैं, क्या हम नहीं हैं?

यदि राज्यों / भूमिकाओं में बुनियादी ढाँचे का वर्णन किया जाता है तो क्या आगे के बुनियादी ढाँचे का परीक्षण करने की बात है? मुझे संदेह है कि यह बड़े संगठनों में अधिक आवश्यक हो जाता है, जहां एक टीम कल्पना और अन्य प्रकार प्रदान करती है, या यदि भूमिकाओं का एक बड़ा सेट है, तो शायद आप उनमें से एक सबसेट चलाना चाहते हैं और परीक्षणों से गति लाभ प्राप्त करना चाहते हैं? मैं यह देखने के लिए संघर्ष कर रहा हूं कि यदि आप एक ही प्रश्न को ध्यान में रखते हुए भूमिका / स्थिति बना सकते हैं तो आप एक परीक्षा क्यों लिखेंगे।

जवाबों:


6

संक्षेप में, मैं आपके बुनियादी ढांचे के लिए परीक्षणों की दो श्रेणियां देखता हूं: 1) क्या इसमें वह सबकुछ है जो आपको अपने आवेदन को चलाने के लिए आवश्यक है और 2) इसमें कोई अतिश्योक्तिपूर्ण सामान नहीं है।

सबसे पहले और सबसे महत्वपूर्ण बात, आप अपने वास्तविक सॉफ़्टवेयर के टेस्ट सूट को अपने बुनियादी ढांचे के लिए "मेटा टेस्ट" का एक प्रकार मान सकते हैं। जब तक आप प्रत्येक टेस्ट रन के लिए स्क्रैच से इन्फ्रास्ट्रक्चर तैयार करते हैं, और टेस्ट सूट पूरी तरह से उस इन्फ्रास्ट्रक्चर पर चलता है (यानी, बाहर की सेवाओं का उपयोग नहीं करता है) इस तथ्य का मतलब है कि पूरे सूट का अर्थ है कि आपका कोडित इन्फ्रास्ट्रक्चर पर्याप्त है ।

दूसरा, विशेष रूप से सुरक्षा के दृष्टिकोण से, आप अपने बुनियादी ढांचे के खिलाफ परीक्षण लिख सकते हैं। यानी, यदि आपके बुनियादी ढांचे का एक हिस्सा वीएम रनिंग लिनक्स है, तो आप एक परीक्षण लिख सकते हैं जो उस वीएम के खिलाफ एक पोर्ट स्कैन करता है, यह सुनिश्चित करने के लिए कि कोई अनजाने में पोर्ट खुले नहीं हैं, जो अनजाने apt-get installसाइड इफेक्ट द्वारा स्थापित किए गए हो सकते हैं । या आप ऐसे परीक्षण लिख सकते हैं जो यह जांचते हैं कि आपके उचित परीक्षण सूट के पूरा होने के बाद कोई अप्रत्याशित फाइलें बदल दी गईं या नहीं। या आप psअनपेक्षित प्रक्रियाओं के लिए अपने वीएम या डॉकटर कंटेनरों के आउटपुट की जांच कर सकते हैं और इस तरह, श्वेत-सूची आदि का निर्माण कर सकते हैं, और इस प्रकार स्वचालित अधिसूचना प्राप्त कर सकते हैं यदि कुछ अपग्रेड में कुछ अनडिज्ड (या अनजान) तरीके से कुछ 3 पार्टी पैकेज बदल गया।

ये दूसरे प्रकार के परीक्षण हैं, एक तरह से, आप एक शास्त्रीय ऑप्स में वैसे भी क्या करेंगे, जैसे कि, अपने सर्वर को सख्त करना और घुसपैठ के लिए जाँच करना, पूर्ण रीसोर्स और इस तरह से बचना।


इसलिए कुछ समय बाद, यह वही रुख है जो मैंने लिया। Ansible द्वारा निष्पादित किए गए भागों को स्वयं द्वारा परीक्षण नहीं किया जाता है, लेकिन उन कार्यों के दुष्प्रभावों का उपयोग करके परीक्षण किया जाता है goss। उदाहरण के लिए, RPM इंस्टॉल किया गया है (ansible) और फिर परीक्षण किया जाता है कि क्या अपेक्षित डिफॉल्ट फ़ाइल को रखा गया है, या सेवा एक विशिष्ट पोर्ट के लिए चल रही है और सुन रही है। मैं इस तरह के मुद्दे को स्वचालित रूप से ठीक नहीं करना चाहता, लेकिन अधिसूचित किया जाना चाहिए और प्रगति को रोकना चाहिए। श्योर एन्सिबल आपके लिए भी सिस्टम का परीक्षण कर सकता है, बस आपको इसके बारे में स्पष्ट होने की आवश्यकता है, लेकिन हमारे मामले में, हम gossकंटेनर के भीतर सेवा के व्यवहार का परीक्षण करने के लिए उपयोग करते हैं
जैकलेओ

1

IMHO यह बल्कि पूरी तरह से IaaC राज्य विनिर्देश द्वारा कवर आइटम के लिए TDD परीक्षण लिखने के लिए बेमानी है। ऐसा करने का तात्पर्य है कि IaaC की प्रभावशीलता संदिग्ध है - यदि आप ऐसा करते हैं तो आप इसका उपयोग क्यों करेंगे?

एक अलग भावी IaaC से इसे देखते हुए (यदि / जब ठीक से किया जाता है) पहले से परीक्षण की गई क्षमताओं को शामिल करता है और मज़बूती से कार्य करने के लिए माना जाता है। जो कि इसे आकर्षक बनाता है और जो टीडीडी मिलान परीक्षणों को निरर्थक बनाता है।

उदाहरण के लिए, SSH के साथ एक सिस्टम को निर्दिष्ट करने वाला एक IaaC कॉन्फ़िगरेशन पहले से ही स्थापित हो रहा है, SSH के लिए विश्वसनीय जाँच सही ढंग से स्थापित की जा रही है और यदि नहीं, तो इसे ठीक से स्थापित करने के लिए तंत्र। यदि SSH बेमानी स्थापित किया जाता है, तो जाँच के लिए TDD परीक्षण करता है। यदि आपका IaaC config भी sshd को शुरू करने और एक विशिष्ट पोर्ट पर सुनने के लिए निर्दिष्ट करता है, तो sshd को चलाने और संबंधित पोर्ट को सुनने के लिए TDD परीक्षण भी बेमानी होगा।

ध्यान दें कि मेरा उत्तर टीडीडी या किसी अन्य प्रकार के परीक्षण को लक्षित नहीं कर रहा है जो यह जांचता है कि क्या आपका आईएसीसी विन्यास एक निश्चित उद्देश्य के रूप में है। यह मान्य रहता है और इसका उपयोग TDD, CI या इसी तरह के चेक से IaaC विनिर्देशन के विकास के दौरान किया जा सकता है - मेरा मानना ​​है कि @ AnoE का उत्तर इस तरह के मामले में लागू होता है।


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

1
यह IaaC का हिस्सा होना चाहिए, अगर यह इसका समर्थन करता है। यदि नहीं - तो यह चर्चा वास्तव में लागू नहीं होती है। हां, यह स्‍पष्‍ट कर सकता है कि IaaC द्वारा कितना सामान कवर किया जा सकता है, लेकिन यह एक अलग चर्चा है।
डैन कॉर्निलेस्क्यू

1
मैं यह भी मान रहा हूँ कि हम ऐसे संदर्भ में नहीं हैं जहाँ निरर्थक जाँच की आवश्यकता होती है - कुछ मामलों में निरर्थक जाँच पूरी तरह से अलग कोड पथ या बुनियादी ढाँचे का पालन करने की आवश्यकता हो सकती है।
डैन कॉर्निलेस्कु

1

ऐसा लगता है कि यहां हर कोई एक IAC टूल को हमेशा अपेक्षा के अनुसार चलाता है, लेकिन मैं बता सकता हूं (अपने अनुभव से) यह हमेशा ऐसा नहीं होता है, अन्यथा यूनिट टेस्ट वास्तव में बेकार होगा।

मुझे एक तस्वीर याद है जिसमें कहा गया है कि "एंशिबल प्लेबुक चली, सब कुछ ठीक है" पृष्ठभूमि में एक इमारत के साथ ...

एक घोषणात्मक राज्य चलाना और इस वास्तविक घोषित स्थिति में सर्वर होना मेरे दृष्टिकोण और अनुभव से कम से कम 2 अलग बात है।

एक व्यापक और विषम वातावरण, कई डीसी में फैला हुआ है, जो सार्वजनिक नेटवर्क आदि के माध्यम से पहुंच योग्य है ... ऐसे कई कारण हैं जिनके लिए एक राज्य पूरी तरह से या आंशिक रूप से लागू नहीं किया जा सकता है।

इन सभी कारणों से, यूनिट टेस्ट के लिए जगह है जो वास्तविक सर्वर राज्य का स्नैपशॉट प्राप्त करने की अनुमति देता है, जो फिर से, लक्षित राज्य से भिन्न हो सकता है।

तो मैं कहूँगा हाँ, IAC प्रबंधित वातावरण में भी यूनिट परीक्षण उपयोगी है।

संपादित करें

IaC कोड आधार की देव शाखा के गैर-प्रतिगमन पक्ष के बारे में क्या? तो आप देव शाखा में अपने कोड में बदलाव करेंगे और सब कुछ नहीं तोड़ने की उम्मीद कर इसे प्रोडक्ट शाखा में मर्ज कर देंगे? इकाई परीक्षण इतना मूल्यवान है, और आमतौर पर इसे लागू करने के लिए सरल मैं यह नहीं देखता कि कोई इस सुविधा के बिना कोड क्यों करेगा।

संदर्भ (इसके लिए फ्रेंच में क्षमा करें ): https://fr.slideshare.net/logilab/testinfra-pycofr-2017


1
यह एक कम वोट के साथ कुछ टिप्पणी जोड़ने के लिए कम से कम विनम्र होगा, क्या आपको मतदाता नहीं लगता है? विशेष रूप से इस तरह के सवाल पर जहां बहस बहुत जानकारीपूर्ण या रचनात्मक भी हो सकती है।
पियर

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

मैंने निश्चित रूप से एग्रेसिव होने का इरादा नहीं किया था, मैं यहां अपनी नेटिबवे भाषा का उपयोग नहीं कर रहा हूं (यह स्पष्ट है कि मुझे लगता है :))।
पियर

यदि आप चाहें तो हम DevOps चैट में इस पर चर्चा कर सकते हैं , मुझे लगता है कि मैंने इस प्रस्तुति को देखा या कुछ साल पहले एक डेक्सॉक्स इवेंट में इसे पसंद किया। मैं उस यूनिट परीक्षण को कॉल करने से थोड़ा असहमत हूं, यह अधिक कार्यात्मक परीक्षण है।
तेंसिबाई

मेरी देव टीम के कुछ लोगों ने मुझे बताया कि यह इकाई परीक्षण नहीं था, मैं कोई देव नहीं हूं इसलिए मैं इस इकाई परीक्षण को कॉल करने के बारे में गलत हो सकता हूं, निश्चित रूप से
पियर

1

मेरे अनुभव में देव और ऑप्स के बीच मुख्य अंतर में से एक "भारी समय निर्भरता" है। पैकेजों को स्थापित करना भारी रूप से रिपॉजिटरी, नेटवर्क या वैध कुंजियों पर निर्भर करता है, या कह सकते हैं कि एक नए क्लाउड सर्वर को इंस्टेंट करना - यह आपके प्रदाता संसाधनों पर निर्भर करता है।

सर्वर-प्रोविजनिंग के संदर्भ में भले ही आपने अपना प्रावधान कोड नहीं बदला हो, लेकिन आपकी छवि अधिकांश समय मान्य होगी, लेकिन कभी-कभी नहीं। इसलिए मुझे लगता है कि कार्यशील छवियां प्रदान करने के लिए परीक्षण वास्तव में आवश्यक है।

यदि आप एक एकल सर्वर से दूर जाते हैं तो चीजें और भी खराब हो जाती हैं ... आप पूरे नेटवर्क-सेटअप में पुनरावृत्ति का परीक्षण कैसे करेंगे? DNS- रिज़ॉल्यूशन, राउटिंग और फायरवॉलिंग सहित? यहां तक ​​कि अगर आपके IaaC प्रदाता API अपेक्षा के अनुसार काम करता है (मैंने इस क्षेत्र में वायर्ड मुद्दों को देखा है) मुझे वास्तव में इस मामले में TDD पसंद है।

क्योंकि मुझे इस क्षेत्र में कोई परीक्षण उपकरण नहीं मिला है, इसलिए हमने अपने खाली समय में एक लिखा: https://github.com/DomainDrivenArchitecture/dda-serverspec-crate

इसलिए मुझे लगता है कि DevOps की दुनिया में TDD वास्तव में महत्वपूर्ण है!

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