जवाबों:
मैंने कभी भी Ansible का उपयोग नहीं किया, लेकिन कुछ हफ्तों के बाद, मैं यह पता लगाने की कोशिश करता हूं कि शेल स्क्रिप्स के साथ तुलना में अच्छा कौन सा Ansible हो सकता है - जो साबित करता है, कम से कम मेरे मामले में, उनके द्वारा चलाए जा रहे विज्ञापन-अभियान प्रभावी हैं! कई असफल प्रयासों के बाद - जो यह साबित करता है कि उनके दस्तावेज़ सबसे स्पष्ट प्रश्न में से एक का जवाब देने में कैसे विफल होते हैं - मुझे लगता है कि मुझे आखिरकार मिल गया है:
अब, आइए परिचय वीडियो देखें और एक संभावित नए उपयोगकर्ता के रूप में अनिमिबल एंस के माध्यम से संभावित नए उपयोगकर्ता के रूप में जाएं आइए इसकी तुलना करें कि एक कुशल शेल प्रोग्रामर शेल्फ का राइट-ऑफ क्या कर सकता है।
मेरा निष्कर्ष यह है कि शेल स्क्रिप्टिंग पर, Ansible अनिवार्य रूप से 1 प्रदान करता है। यह जांचने की संभावना है कि कोई सिस्टम वांछित स्थिति से सहमत है, 2. Ansible टॉवर के साथ एकीकृत करने की क्षमता, जो एक भुगतान प्रणाली है जो निगरानी क्षमताओं को शामिल करती प्रतीत होती है। कुछ महत्वपूर्ण मामलों में, जैसे अपरिवर्तनीय सर्वर पैटर्न को लागू करते समय, बिंदु 1 संभवतः बहुत उपयोगी नहीं है, इसलिए सूची, बल्कि पतली है।
मेरा निष्कर्ष यह है कि शेल-स्क्रिप्टिंग पर अन्सिबल द्वारा दिए गए लाभ, जैसे कि दस्तावेज उन्हें पेश करते हैं, कुछ मुट्ठी भर आशावादी मामलों में समझदारी से उपलब्ध मॉड्यूल द्वारा अच्छी तरह से कवर किया जा सकता है, लेकिन सामान्य मामले में छोटे या काल्पनिक भी हैं। एक कुशल शेल-प्रोग्रामर के लिए संभवतः, ये लाभ व्यापार-बंद के अन्य पहलुओं द्वारा सबसे अधिक संभावना वाले काउंटर-संतुलित हैं।
लेकिन यह शायद केवल यह साबित करता है कि परिचय सामग्री कितनी खराब है!
एक त्वरित शुरुआत वीडियो है । यह एक पृष्ठ के साथ शुरू होता है जिसमें दावा किया जाता है कि ... ठीक है कि ये वास्तव में दावे नहीं हैं, ये बुलेट लिस्ट हैं, एक आम तौर पर प्रस्तुतियों में महत्वपूर्ण निर्णय को निलंबित करने के लिए इस्तेमाल किया जाता है (चूंकि तर्क नहीं दिखाया गया है, इसकी आलोचना नहीं की जा सकती है!)
1.1 मानव पठनीय स्वचालन - विनिर्देशों तकनीकी दस्तावेज हैं, कैसे कर सकते हैं
name: upgrade all packages
yum:
name: '*'
state: latest
शेल-स्क्रिप्ट में पाए जाने वाले संबंधित यम आह्वान की तुलना में पढ़ना आसान है ? इसके अलावा, जो कोई भी AppleScript से संपर्क करता था, वह "मानव पठनीय स्वचालन" पढ़ते हुए हंसते हुए मर जाता है।
1.2 कोई विशेष कोडिंग कौशल की आवश्यकता नहीं है - औपचारिक विनिर्देश नहीं लिखने पर क्या कोडिंग है? उनके पास सशर्त, चर हैं, इसलिए, यह कोडिंग कैसे नहीं है? और मुझे कुछ ऐसा क्यों चाहिए जिसकी मैं प्रोग्राम नहीं कर सकता, इसलिए वह अनम्य होगा? बयान खुशी से गलत है!
1.3 कार्य क्रम में निष्पादित - खैर, शायद कुछ कोडगॉल्फ aficionados उन भाषाओं से अवगत हैं जो अव्यवस्था में कार्यों को निष्पादित करते हैं, लेकिन कार्यों को निष्पादित करना शायद ही असाधारण दिखता है।
1.4 जल्दी उत्पादक बनें - कुशल शेल प्रोग्रामर अभी उत्पादक हैं। यह तर्क-वितर्क शुरुआती तर्क की तरह ही गंभीर है।
कलाकृतियों को बेचने के लिए एक लोकप्रिय सेल्समैन चाल है लोगों को यह विश्वास दिलाने के लिए कि वे इन कलाकृतियों की "शक्ति" हासिल करेंगे। कारों या आइसोटोनिक पेय के विज्ञापन के इतिहास को उदाहरणों की एक ठोस सूची प्रदान करनी चाहिए।
यहाँ पर “ऐप परिनियोजन” किया जा सकता है - लेकिन शेल स्क्रिप्ट निश्चित रूप से, “कॉन्फ़िगरेशन प्रबंधन” करती है, लेकिन यह उपकरण के उद्देश्य का एक मात्र कथन है, एक विशेषता नहीं है, और “वर्कफ़्लो ऑर्केस्ट्रेशन” जो थोड़ा दिखावा करता है लेकिन कोई भी नहीं जाता है जीएनयू समानांतर क्या कर सकता है।
स्तंभ को आबाद करने के लिए, उन्होंने तीन अलग-अलग शिष्टाचारों में लिखा कि यह केवल ssh की आवश्यकता है , जो कि, जैसा कि हर कोई जानता है कि एक डेमॉन है और इन एजेंटों का विश्व विन्यास प्रबंधन में व्याप्त होने से कोई लेना-देना नहीं है !
बाकी वीडियो में आविष्कारों का परिचय दिया गया है, जो संसाधनों की स्थिर सूची (जैसे सर्वर) हैं और यह दर्शाता है कि एक साथ तीन सर्वरों पर अपाचे को कैसे तैनात किया जाए। यह वास्तव में मेरे काम करने के तरीके से मेल नहीं खाता है, जहां संसाधन अत्यधिक गतिशील हैं और मेरे क्लाउड प्रदाता द्वारा प्रदान की गई कमांड-लाइन टूलिंग द्वारा गणना की जा सकती है, और पाइप |
ऑपरेटर का उपयोग करके मेरे शेल फ़ंक्शन द्वारा खपत की जाती है । इसके अलावा, मैं एक साथ तीन सर्वरों पर अपाचे को तैनात नहीं करता हूं, बल्कि, मैं एक मास्टर इंस्टेंस छवि बनाता हूं जिसका उपयोग मैं 3 उदाहरणों को शुरू करने के लिए करता हूं जो कि एक दूसरे के सटीक प्रतिकृतियां हैं। तो तर्क का "ऑर्केस्ट्रेटिंग" हिस्सा बहुत प्रासंगिक नहीं लगता है।
EC2 अमेज़ॅन से कंप्यूटिंग सेवा है, इसके साथ बातचीत करना कुछ Ansible मॉड्यूल द्वारा समर्थित है । (अन्य लोकप्रिय क्लाउड कंप्यूटिंग प्रदाता भी उपलब्ध कराए गए हैं):
# demo_setup.yml
- hosts: localhost
connection: local
gather_facts: False
tasks:
- name: Provision a set of instances
ec2:
key_name: my_key
group: test
instance_type: t2.micro
image: "{{ ami_id }}"
wait: true
exact_count: 5
count_tag:
Name: Demo
instance_tags:
Name: Demo
register: ec2
इसी शेल-स्क्रिप्ट अनिवार्य रूप से JSON द्वारा प्रतिस्थापित YAML के साथ समान होगी:
provision_a_set_of_instances()
{
aws --output=text ec2 run-instances --image-id …
}
या JSON संस्करण
provision_a_set_of_instances()
{
aws --output=text ec2 run-instances --cli-input-json "$(provision_a_set_of_instances__json)"
}
provision_a_set_of_instances__json()
{
cat <<EOF
{
"ImageId": …
}
EOF
}
दोनों संस्करण अनिवार्य रूप से समान हैं, पेलोड के थोक एक YAML या JSON संरचनाओं में आरंभिक मानों की गणना है।
इस गाइड का सबसे बड़ा हिस्सा किसी भी दिलचस्प विशेषता को प्रदर्शित नहीं करता है: यह वेरिएबल्स (IIRC, शेल स्क्रिप्ट्स भी वेरिएबल्स का परिचय देता है)!, और एक एंसेबल मॉड्यूल mysql को संभालता है, ताकि अगर "मैं एक mysql उपयोगकर्ता कैसे बनाऊं? XY पर विशेषाधिकारों के साथ ”और कुछ इस तरह समाप्त होता है
# Create Application DB User
mysql --host "${mysql_host}" --user "${mysql_user}" --password "${mysql_password}" "${mysql_table}" <<EOF
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
EOF
के बाद "मैं कैसे में XY पर विशेषाधिकारों के साथ एक mysql उपयोगकर्ता बना सकता हूँ आप खोज ansible " और अंत
- name: Create Application DB User
mysql_user: name={{ dbuser }} password={{ upassword }}
priv=*.*:ALL host='%' state=present
अंतर अभी भी बहुत सार्थक नहीं है। उस पृष्ठ पर हमें यह भी पता चलता है कि Ansible की एक टेम्प्लेट मेटा-प्रोग्रामिंग भाषा है
{% for host in groups['monitoring'] %}
-A INPUT -p tcp -s {{ hostvars[host].ansible_default_ipv4.address }} --dport 5666 -j ACCEPT
{% endfor %}
जब मैं यह देखता हूं, तो मैं वास्तव में अपने आराम क्षेत्र में होता हूं। घोषणात्मक भाषाओं के लिए इस तरह की सरल मेटा-प्रोग्रामिंग बीएसडी मेकफाइल्स के समान सैद्धांतिक प्रतिमान है! जो मुझे बड़े पैमाने पर प्रोग्राम करने के लिए होता है यह अंश हमें दिखाता है कि YAML फ़ाइल के साथ काम करने का वादा टूट गया है (इसलिए मैं अपनी प्लेलिस्ट को एक YAML पार्सर, जैसे ) के माध्यम से नहीं चला सकता हूं । यह हमें यह भी दिखाता है कि अंसिबल को मूल्यांकन आदेश की सूक्ष्म कला पर चर्चा करनी चाहिए: हमें यह तय करना होगा कि क्या चर का विस्तार भाषा के "घोषणात्मक भाग" पर या भाषा के "अनिवार्य" मेटा-भाग पर किया जाता है। यहां शेल प्रोग्रामिंग सरल है, कोई मेटा-प्रोग्रामिंग नहीं है, जो स्पष्ट eval
या बाहरी-स्क्रिप्ट सोर्सिंग से अलग है । कल्पित समतुल्य गोले का अंश होगा
enumerate_group 'monitoring' | {
while read host; do
…
done
}
जिसका अंसिबल वैरिएंट की तुलना में जटिलता शायद सहन करने योग्य है: यह भाषा से सादे, नियमित, उबाऊ निर्माण का उपयोग करता है।
अंत में, हम मिलते हैं कि अंसिबल की पहली वास्तव में दिलचस्प विशेषता क्या है: "उत्तरोत्तर संसाधन वांछित-राज्य के मॉडल हैं। जैसे, यह परीक्षण करने के लिए आवश्यक नहीं होना चाहिए कि सेवाएं शुरू की जाती हैं, पैकेज स्थापित किए जाते हैं, या ऐसी अन्य चीजें। Ansible वह प्रणाली है जो यह सुनिश्चित करेगी कि ये चीजें घोषित रूप से सही हैं। इसके बजाय, अपनी Playbooks में इन बातों पर जोर दें। ”अब यह थोड़ा दिलचस्प लगने लगा है, लेकिन:
उपलब्ध मॉड्यूल द्वारा आसानी से लागू मानक स्थितियों के एक मुट्ठी भर के अलावा, मुझे परीक्षण को लागू करने वाले बिट्स को खुद को खिलाना होगा, जिसमें संभवतः कुछ शेल कमांड शामिल होंगे।
प्रतिष्ठानों की अनुरूपता के लिए जाँच करना उस संदर्भ में बहुत प्रासंगिक नहीं हो सकता है जहाँ अपरिवर्तनीय सर्वर पैटर्न लागू किया जाता है: जहाँ सभी सिस्टम चल रहे हैं आमतौर पर एक मास्टर छवि (उदाहरण के लिए इमेज या डॉक इमेज) से उत्पन्न होते हैं और कभी भी अपडेट नहीं किए जाते हैं - वे द्वारा प्रतिस्थापित किए जाते हैं इसके बजाय नया।
अन्सिबल से परिचयात्मक सामग्री स्थिरता के प्रश्न की उपेक्षा करती है। अनिवार्य रूप से कोई प्रकार की प्रणाली के साथ, शेल-स्क्रिप्टिंग में जावास्क्रिप्ट, लिस्प या पायथन की स्थिरता की आसानी होती है: व्यापक रिफैक्टोरिंग केवल एक व्यापक स्वचालित टेस्टसुइट की सहायता से सफलतापूर्वक प्राप्त किया जा सकता है - या कम से कम डिजाइन जो आसान इंटरैक्टिव परीक्षण की अनुमति देता है। कहा कि, जबकि शेल स्क्रिप्टिंग सिस्टम कॉन्फ़िगरेशन और रखरखाव से लिंगुआ फ़्रैंक है, लगभग प्रत्येक प्रोग्रामिंग भाषा में शेल के लिए एक इंटरफ़ेस है। इसलिए यह उन्नत भाषाओं के अनुरक्षण लाभ का लाभ उठाने के लिए पूरी तरह से संभव है, उन्हें शेल-कॉन्फ़िगरेशन बिट्स के विभिन्न बिट्स को एक साथ गोंद करने के लिए उपयोग किया जाता है। OCaml के लिए, मैंने Rashell लिखा यह अनिवार्य रूप से उपप्रोसेस के लिए सामान्य इंटरैक्शन पैटर्न का एक हाथ प्रदान करता है, जो ऑर्केल के लिए कॉन्फ़िगरेशन स्क्रिप्ट का अनुवाद अनिवार्य रूप से तुच्छ बनाता है।
Ansible की तरफ से, playbooks की बहुत कमजोर संरचना और एक मेटा-प्रोग्रामिंग फीचर की उपस्थिति अनिवार्य रूप से स्थिति को उतना ही बुरा बनाती है जितना कि शेल स्क्रिप्टिंग के लिए, माइनस पॉइंट्स के साथ यह स्पष्ट नहीं है कि Ansible के लिए यूनिट टेस्ट कैसे लिखें , और उच्च-स्तरीय भाषा के तदर्थ को शुरू करने के तर्क की नकल नहीं की जा सकती।
अन्सिबल का दस्तावेज़ीकरण बेकार विन्यास कदम लिखने की आवश्यकता पर ध्यान आकर्षित करता है। अधिक सटीक रूप से, कॉन्फ़िगरेशन चरणों को लिखा जाना चाहिए ताकि चरण अनुक्रम aba को ab सरल किया जा सके , अर्थात हमें कॉन्फ़िगरेशन चरण दोहराने की आवश्यकता नहीं है। यह बेवकूफी से ज्यादा मजबूत स्थिति है। चूंकि अन्सिबल प्लेबुक को मनमाने ढंग से शेल कमांड का उपयोग करने की अनुमति देता है, इसलिए स्वयं ही यह सुनिश्चित करने में असमर्थ है कि इस मजबूत स्थिति का सम्मान किया जाए। यह केवल प्रोग्रामर के अनुशासन पर निर्भर करता है।
जब आप इसे इस तरह से रखते हैं, भले ही अन्सिबल के कुछ अंतर्निहित फायदे हों, परिचित उपकरणों (इस मामले में शेल स्क्रिप्टिंग) का उपयोग करने के लाभों से आगे बढ़ना होगा। मुझे नहीं लगता कि इसमें कोई स्पष्ट जवाब है।
यदि टीम उन चीजों को प्राप्त कर सकती है, जो शेल के साथ प्रदान की जाती हैं:
तब वे शायद वही जानते थे जो वे जानते थे।
आखिरकार, आप BASH में "गार्ड" लागू कर सकते हैं। आप सर्वर कॉन्फ़िगरेशन कार्यों की एक किस्म को हल करने के लिए बहुत से मौजूदा बीएएस मौजूदा काम पा सकते हैं (अनिवार्य रूप से कोई डॉकरफाइल 90% बैश इंस्टॉलेशन कोड है)। आप वास्तव में उन उपकरणों के लिए अपने पूरे मौजूदा समाधान को पोर्ट करने के बिना, Ansible / Salt / Chef-Zero जो आपको प्रदान करते हैं, उसके बहुत करीब हो सकते हैं।
यह NIH (यहाँ आविष्कार नहीं किया गया) की प्रवृत्ति के बीच एक संतुलनकारी कार्य है, और अधिक मजबूत समाधान के पक्ष में अच्छे, स्थापित लिपियों को फेंकना है।
ध्यान में रखने के लिए एक अंतिम विचार: जब आप टीम में और लोगों को भर्ती करने की कोशिश करते हैं तो आपकी तकनीक कैसे स्टैक करती है। उन लोगों को ढूंढना जिनके पास अंसिबल अनुभव है, उन लोगों को खोजने से बहुत आसान है, जिनके पास आपके विशेष रूप से घरेलू-विकसित स्क्रिप्टिंग सीएम टूल में अनुभव है। यह कड़ाई से तकनीकी विचार नहीं है, एक सांस्कृतिक एक है। क्या आप अजीब अंग बनना चाहते हैं जो अपने स्वयं के Ansible को आमंत्रित करता है, या क्या आप उचित org होना चाहते हैं जो नौकरी के लिए सही उपकरण ढूंढता है? वे निर्णय प्रतिभा को आकर्षित करने की आपकी क्षमता को प्रभावित करते हैं।
उपर्युक्त उत्तर इसका हिस्सा है लेकिन महत्वपूर्ण तत्वों में से एक को याद करता है: अभिसरण डिजाइन। मैंने कुछ समय पहले इसके बारे में कुछ शब्द चीफ के संदर्भ में https://coderanger.net/thinking/ पर लिखे थे, लेकिन संक्षिप्त संस्करण यह है कि एक बैश स्क्रिप्ट निर्देशों का एक सेट है, जबकि एक ऐन्सिबल प्लेबुक (या शेफ रेसिपी, साल्ट) राज्य आदि) वांछित राज्य का विवरण है। जिस राज्य को आप वहां ले जाना चाहते हैं, उसके बजाय आप जिस राज्य को चाहते हैं, उसका दस्तावेजीकरण करके, आप बहुत अधिक शुरुआती राज्यों के साथ सामना कर सकते हैं। यह बहुत पहले से ही CFEngine में उल्लिखित प्रॉमिस थ्योरी का दिल था, और एक डिज़ाइन जिसे हम (कॉन्फिग मैनेजमेंट टूल्स) सभी अभी से कॉपी कर रहे हैं।
tl; dr Ansible कोड कहता है कि आप क्या चाहते हैं, bash कोड कहता है कि किसी काम को कैसे करना है।
एक बात ध्यान देने योग्य है कि सुदूर मेजबानों पर भी अपनी आनुषंगिक प्लेबुक चलाने में आपको कम समस्याएँ होंगी। जैसा कि चींटियों को चलाने का मुख्य कारण है। जब आप शेल स्क्रिप्टिंग का उपयोग कर रहे हैं, तब भी आपको दूरस्थ होस्ट के लिए scp'ing को स्क्रिप्ट करने का एक तरीका होना चाहिए।
यह 2019 है और मैंने अभी कुछ दिनों के लिए एक सीखने योग्य वक्र पर बिताया है और यहाँ पूर्ण सत्य है: Ansible परेशानी के लायक नहीं है।
यह समाप्त नहीं हुआ है, यह विंडोज़ पर नहीं चलता है और YAML कॉन्फिग और भ्रामक त्रुटि संदेशों के संयोजन से आपकी आँखें रक्तस्राव करेंगी। यह लगभग जानबूझकर भयानक लगता है और मेरा मतलब है कि गंभीरता से। यह स्पष्ट रूप से एक redhat sysadmins निराश डेवलपर पक्ष परियोजना का उत्पाद है। शायद एक हिप्स्टर।
यदि आपको प्रोविजनिंग से परे इसके फीचर्स की कोई आवश्यकता नहीं है, और आप केवल एक विशेष OS पर ही प्रोविजनिंग कर रहे हैं। लोगों के लिए एक सभ्य खोल लिखना।
अभी तक, पूरी परियोजना मुझे शुरुआती लिनक्स फ़ोरम की याद दिलाती है, जहाँ आरटीएफएम को नॉब्स नहीं बताया गया था और यह पूछने के लिए व्युत्पन्न किया गया था कि कोई क्यों ग्राफिक्स सेटिंग्स को कॉन्फ़िगर करने के लिए जीयूआई नहीं लिख सकता है। तुम बस यह मत करो तुम क्या? आपको खिड़कियों से चिपक जाना चाहिए ... शायद मैं संभोग करूँगा .. खुश VI-ing।
डॉकर का उपयोग करें। किसी भी चीज की प्राथमिकता में। डॉकर अपमानजनक सरल और शक्तिशाली है।
लेकिन क्या होगा अगर आपको पहले से मौजूद टिन पर प्रावधान करना चाहिए? वास्तविक विकल्प क्या हैं?
खैर ... अभी तक कोई भी नहीं हैं। लेकिन मैं आपसे यह वादा करूंगा, जब तक कि बेहतर नहीं हो जाता है, जल्द ही होगा। कोई फर्क नहीं पड़ता क्योंकि कट्टरपंथी इसे कितना मुश्किल धक्का देते हैं, और इसे विफल करने के लिए क्षमा करें ... यह प्रयास के लिए 10 में से 5 है।
एक bash स्क्रिप्ट को SCP करें, और अपने आप को मुसीबत से बचाएं।