अंसिबल वग्रांत में केवल प्रोविजनिंग बैश शेल चलाने से कैसे अलग है?


38

आईटी sysadmins की एक टीम है जो अपनी समस्याओं को हल करने के लिए शेल स्क्रिप्टिंग का उपयोग कर रही है, इसके बजाय अंसिंग का उपयोग शुरू करने पर विचार कर रही है।

शेल स्क्रिप्ट लिखने के लिए Ansible बनाम का उपयोग शुरू करने के लिए पर्याप्त अंतर और अच्छे कारण हैं?

जवाबों:


29

मैंने कभी भी Ansible का उपयोग नहीं किया, लेकिन कुछ हफ्तों के बाद, मैं यह पता लगाने की कोशिश करता हूं कि शेल स्क्रिप्स के साथ तुलना में अच्छा कौन सा Ansible हो सकता है - जो साबित करता है, कम से कम मेरे मामले में, उनके द्वारा चलाए जा रहे विज्ञापन-अभियान प्रभावी हैं! कई असफल प्रयासों के बाद - जो यह साबित करता है कि उनके दस्तावेज़ सबसे स्पष्ट प्रश्न में से एक का जवाब देने में कैसे विफल होते हैं - मुझे लगता है कि मुझे आखिरकार मिल गया है:

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

मेरा निष्कर्ष यह है कि शेल स्क्रिप्टिंग पर, Ansible अनिवार्य रूप से 1 प्रदान करता है। यह जांचने की संभावना है कि कोई सिस्टम वांछित स्थिति से सहमत है, 2. Ansible टॉवर के साथ एकीकृत करने की क्षमता, जो एक भुगतान प्रणाली है जो निगरानी क्षमताओं को शामिल करती प्रतीत होती है। कुछ महत्वपूर्ण मामलों में, जैसे अपरिवर्तनीय सर्वर पैटर्न को लागू करते समय, बिंदु 1 संभवतः बहुत उपयोगी नहीं है, इसलिए सूची, बल्कि पतली है।

मेरा निष्कर्ष यह है कि शेल-स्क्रिप्टिंग पर अन्सिबल द्वारा दिए गए लाभ, जैसे कि दस्तावेज उन्हें पेश करते हैं, कुछ मुट्ठी भर आशावादी मामलों में समझदारी से उपलब्ध मॉड्यूल द्वारा अच्छी तरह से कवर किया जा सकता है, लेकिन सामान्य मामले में छोटे या काल्पनिक भी हैं। एक कुशल शेल-प्रोग्रामर के लिए संभवतः, ये लाभ व्यापार-बंद के अन्य पहलुओं द्वारा सबसे अधिक संभावना वाले काउंटर-संतुलित हैं।

लेकिन यह शायद केवल यह साबित करता है कि परिचय सामग्री कितनी खराब है!

त्वरित आरंभ वीडियो:

एक त्वरित शुरुआत वीडियो है । यह एक पृष्ठ के साथ शुरू होता है जिसमें दावा किया जाता है कि ... ठीक है कि ये वास्तव में दावे नहीं हैं, ये बुलेट लिस्ट हैं, एक आम तौर पर प्रस्तुतियों में महत्वपूर्ण निर्णय को निलंबित करने के लिए इस्तेमाल किया जाता है (चूंकि तर्क नहीं दिखाया गया है, इसकी आलोचना नहीं की जा सकती है!)

1. सरल है:

1.1 मानव पठनीय स्वचालन - विनिर्देशों तकनीकी दस्तावेज हैं, कैसे कर सकते हैं

  name: upgrade all packages
  yum:
    name: '*'
    state: latest

शेल-स्क्रिप्ट में पाए जाने वाले संबंधित यम आह्वान की तुलना में पढ़ना आसान है ? इसके अलावा, जो कोई भी AppleScript से संपर्क करता था, वह "मानव पठनीय स्वचालन" पढ़ते हुए हंसते हुए मर जाता है।

1.2 कोई विशेष कोडिंग कौशल की आवश्यकता नहीं है - औपचारिक विनिर्देश नहीं लिखने पर क्या कोडिंग है? उनके पास सशर्त, चर हैं, इसलिए, यह कोडिंग कैसे नहीं है? और मुझे कुछ ऐसा क्यों चाहिए जिसकी मैं प्रोग्राम नहीं कर सकता, इसलिए वह अनम्य होगा? बयान खुशी से गलत है!

1.3 कार्य क्रम में निष्पादित - खैर, शायद कुछ कोडगॉल्फ aficionados उन भाषाओं से अवगत हैं जो अव्यवस्था में कार्यों को निष्पादित करते हैं, लेकिन कार्यों को निष्पादित करना शायद ही असाधारण दिखता है।

1.4 जल्दी उत्पादक बनें - कुशल शेल प्रोग्रामर अभी उत्पादक हैं। यह तर्क-वितर्क शुरुआती तर्क की तरह ही गंभीर है।

2. अन्सिबल शक्तिशाली है

कलाकृतियों को बेचने के लिए एक लोकप्रिय सेल्समैन चाल है लोगों को यह विश्वास दिलाने के लिए कि वे इन कलाकृतियों की "शक्ति" हासिल करेंगे। कारों या आइसोटोनिक पेय के विज्ञापन के इतिहास को उदाहरणों की एक ठोस सूची प्रदान करनी चाहिए।

यहाँ पर “ऐप परिनियोजन” किया जा सकता है - लेकिन शेल स्क्रिप्ट निश्चित रूप से, “कॉन्फ़िगरेशन प्रबंधन” करती है, लेकिन यह उपकरण के उद्देश्य का एक मात्र कथन है, एक विशेषता नहीं है, और “वर्कफ़्लो ऑर्केस्ट्रेशन” जो थोड़ा दिखावा करता है लेकिन कोई भी नहीं जाता है जीएनयू समानांतर क्या कर सकता है।

3. अस्थिर एजेंट रहित है

स्तंभ को आबाद करने के लिए, उन्होंने तीन अलग-अलग शिष्टाचारों में लिखा कि यह केवल ssh की आवश्यकता है , जो कि, जैसा कि हर कोई जानता है कि एक डेमॉन है और इन एजेंटों का विश्व विन्यास प्रबंधन में व्याप्त होने से कोई लेना-देना नहीं है !

बाकी वीडियो

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

यादृच्छिक प्रलेखन चरण 1: EC2 के साथ एकीकरण

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 संरचनाओं में आरंभिक मानों की गणना है।

रैंडम प्रलेखन चरण 2: सतत वितरण और रोलिंग उन्नयन

इस गाइड का सबसे बड़ा हिस्सा किसी भी दिलचस्प विशेषता को प्रदर्शित नहीं करता है: यह वेरिएबल्स (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
}

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

रैंडम प्रलेखन चरण 3: परीक्षण रणनीतियों

अंत में, हम मिलते हैं कि अंसिबल की पहली वास्तव में दिलचस्प विशेषता क्या है: "उत्तरोत्तर संसाधन वांछित-राज्य के मॉडल हैं। जैसे, यह परीक्षण करने के लिए आवश्यक नहीं होना चाहिए कि सेवाएं शुरू की जाती हैं, पैकेज स्थापित किए जाते हैं, या ऐसी अन्य चीजें। Ansible वह प्रणाली है जो यह सुनिश्चित करेगी कि ये चीजें घोषित रूप से सही हैं। इसके बजाय, अपनी Playbooks में इन बातों पर जोर दें। ”अब यह थोड़ा दिलचस्प लगने लगा है, लेकिन:

  1. उपलब्ध मॉड्यूल द्वारा आसानी से लागू मानक स्थितियों के एक मुट्ठी भर के अलावा, मुझे परीक्षण को लागू करने वाले बिट्स को खुद को खिलाना होगा, जिसमें संभवतः कुछ शेल कमांड शामिल होंगे।

  2. प्रतिष्ठानों की अनुरूपता के लिए जाँच करना उस संदर्भ में बहुत प्रासंगिक नहीं हो सकता है जहाँ अपरिवर्तनीय सर्वर पैटर्न लागू किया जाता है: जहाँ सभी सिस्टम चल रहे हैं आमतौर पर एक मास्टर छवि (उदाहरण के लिए इमेज या डॉक इमेज) से उत्पन्न होते हैं और कभी भी अपडेट नहीं किए जाते हैं - वे द्वारा प्रतिस्थापित किए जाते हैं इसके बजाय नया।

असम्बद्ध चिंता: स्थिरता

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

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

कॉन्फ़िगरेशन चरणों की आय

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


यह एक मैनुअल की तरह लगता है ... प्रभावशाली!
Pierre.Vriens

4
मैं और अधिक सहमत नहीं हो सकता। हमने 1 वर्ष से अधिक समय के लिए Ansible का उपयोग किया और अब Docker कंटेनरों का उपयोग कर रहे हैं, जो अच्छे, सादे पुराने बैश स्क्रिप्ट के साथ निर्मित हैं। राज्य को परिभाषित करना अब तक की सबसे दिलचस्प विशेषता है, लेकिन जैसा कि आपने पहले ही उल्लेख किया है - मेरी राय में ऐसी कई सेवाएँ हैं, जिनके पास एक संगत मॉड्यूल नहीं है, इसलिए आपको हमेशा आदेशों को कम करने के लिए वापस आना होगा। और हां, हम केवल अपरिवर्तनीय कंटेनरों को सर्वर पर भी तैनात करते हैं, इसलिए राज्य को परिभाषित करना इस मामले में वास्तव में कोई फायदा नहीं है।
एंड्रियास

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

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

1
@ MichaelLeBarbierGrünewald, मुझे समग्र रूप से सहमत होना है, जब मैंने एंसिबल के साथ काम किया था, तो यह दौड़ने के लिए एक वास्तविक दर्द था और इसके काम में मेरी पूर्व क्लाउड-आधारित कंपनी में बुनियादी ढांचे से जुड़ने के लिए एक साथ एक नाटक की पुस्तक प्राप्त करने में हफ्तों का समय लगता है, जो लिनक्स का प्रावधान करता है। distro, LAMP / LEMP या जो भी स्थापित करें। एक बार जब यह पूरा हो गया, तो इसने हमें समय की बचत की, लेकिन इसे उठने और चलाने में एक महीने की तरह लग गया। हम में से कोई भी मास्टर बैश स्क्रिप्टर्स नहीं थे, इसलिए यह एक विकल्प नहीं था।
डैनियल

22

जब आप इसे इस तरह से रखते हैं, भले ही अन्सिबल के कुछ अंतर्निहित फायदे हों, परिचित उपकरणों (इस मामले में शेल स्क्रिप्टिंग) का उपयोग करने के लाभों से आगे बढ़ना होगा। मुझे नहीं लगता कि इसमें कोई स्पष्ट जवाब है।

यदि टीम उन चीजों को प्राप्त कर सकती है, जो शेल के साथ प्रदान की जाती हैं:

  1. घोषणात्मक, सुस्पष्ट विन्यास प्रबंधन
  2. उद्योग की लोकप्रिय सेवाओं के लिए फिर से उपयोग करने योग्य स्निपेट (यानी प्लेबुक) तक पहुंच।
  3. रीट्रीटिंग, रोलिंग लॉजिक, आदि के साथ रिमोट निष्पादन का विश्वसनीय प्रबंधन।

तब वे शायद वही जानते थे जो वे जानते थे।

आखिरकार, आप BASH में "गार्ड" लागू कर सकते हैं। आप सर्वर कॉन्फ़िगरेशन कार्यों की एक किस्म को हल करने के लिए बहुत से मौजूदा बीएएस मौजूदा काम पा सकते हैं (अनिवार्य रूप से कोई डॉकरफाइल 90% बैश इंस्टॉलेशन कोड है)। आप वास्तव में उन उपकरणों के लिए अपने पूरे मौजूदा समाधान को पोर्ट करने के बिना, Ansible / Salt / Chef-Zero जो आपको प्रदान करते हैं, उसके बहुत करीब हो सकते हैं।

यह NIH (यहाँ आविष्कार नहीं किया गया) की प्रवृत्ति के बीच एक संतुलनकारी कार्य है, और अधिक मजबूत समाधान के पक्ष में अच्छे, स्थापित लिपियों को फेंकना है।

ध्यान में रखने के लिए एक अंतिम विचार: जब आप टीम में और लोगों को भर्ती करने की कोशिश करते हैं तो आपकी तकनीक कैसे स्टैक करती है। उन लोगों को ढूंढना जिनके पास अंसिबल अनुभव है, उन लोगों को खोजने से बहुत आसान है, जिनके पास आपके विशेष रूप से घरेलू-विकसित स्क्रिप्टिंग सीएम टूल में अनुभव है। यह कड़ाई से तकनीकी विचार नहीं है, एक सांस्कृतिक एक है। क्या आप अजीब अंग बनना चाहते हैं जो अपने स्वयं के Ansible को आमंत्रित करता है, या क्या आप उचित org होना चाहते हैं जो नौकरी के लिए सही उपकरण ढूंढता है? वे निर्णय प्रतिभा को आकर्षित करने की आपकी क्षमता को प्रभावित करते हैं।


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

मैं आपके उत्तर की भी सदस्यता लेता हूं, विशेष रूप से उपलब्ध अनुभव को अधर में लटका दिया है। मेरे पास दो छोटे आलोचक हैं: पहला है ईमपेडिटेंसी यह निश्चित रूप से कॉन्फ़िगरेशन सिस्टम का एक महत्वपूर्ण पहलू है, लेकिन चूंकि यह किसी भी संभव शेल कमांड का उपयोग करने योग्य प्लेबुक में उपयोग करने के लिए संभव है, इसलिए सिस्टम सर्वश्रेष्ठ रूप से इम्पैम्पोटेंसी का उपयोग करने के लिए प्रेरित कर सकता है। (हम वास्तव में कुछ और अधिक शक्तिशाली चाहते हैं कि idempotency aba = ab ।) दूरस्थ निष्पादन का दूसरा विश्वसनीय प्रबंधन कुछ महत्वपूर्ण मामलों में पूरी तरह से अप्रासंगिक हो सकता है, उदाहरण के चित्रों का उपयोग करके अपरिवर्तनीय सर्वर पैटर्न को लागू करते समय।
माइकल ले बारबियर ग्रुएनवाल्ड

13

उपर्युक्त उत्तर इसका हिस्सा है लेकिन महत्वपूर्ण तत्वों में से एक को याद करता है: अभिसरण डिजाइन। मैंने कुछ समय पहले इसके बारे में कुछ शब्द चीफ के संदर्भ में https://coderanger.net/thinking/ पर लिखे थे, लेकिन संक्षिप्त संस्करण यह है कि एक बैश स्क्रिप्ट निर्देशों का एक सेट है, जबकि एक ऐन्सिबल प्लेबुक (या शेफ रेसिपी, साल्ट) राज्य आदि) वांछित राज्य का विवरण है। जिस राज्य को आप वहां ले जाना चाहते हैं, उसके बजाय आप जिस राज्य को चाहते हैं, उसका दस्तावेजीकरण करके, आप बहुत अधिक शुरुआती राज्यों के साथ सामना कर सकते हैं। यह बहुत पहले से ही CFEngine में उल्लिखित प्रॉमिस थ्योरी का दिल था, और एक डिज़ाइन जिसे हम (कॉन्फिग मैनेजमेंट टूल्स) सभी अभी से कॉपी कर रहे हैं।

tl; dr Ansible कोड कहता है कि आप क्या चाहते हैं, bash कोड कहता है कि किसी काम को कैसे करना है।


2
क्या आप "वादा सिद्धांत" का कुछ संदर्भ जोड़ सकते हैं, जैसे किताबें या लेख, और कोई अन्य मूल्यवान सामग्री अगर कोई इसके बारे में सीखना चाहता है?
एवगेनी

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

हाँ, idempotence अभिसरण प्रणालियों की एक महत्वपूर्ण संपत्ति है, लेकिन दोनों हमेशा सीधे जुड़े नहीं होते हैं :) प्रॉमिस थ्योरी पर सामग्री के लिए, मार्क बर्गेस (CFEngine के निर्माता) के पास कुछ किताबें हैं, मैं लिंक पा सकता हूं जब मैं वापस आऊंगा लैपटॉप।
कोडरंग


3

एक बात ध्यान देने योग्य है कि सुदूर मेजबानों पर भी अपनी आनुषंगिक प्लेबुक चलाने में आपको कम समस्याएँ होंगी। जैसा कि चींटियों को चलाने का मुख्य कारण है। जब आप शेल स्क्रिप्टिंग का उपयोग कर रहे हैं, तब भी आपको दूरस्थ होस्ट के लिए scp'ing को स्क्रिप्ट करने का एक तरीका होना चाहिए।


क्या इस अर्थ में Ssh के चारों ओर सिर्फ एक आवरण नहीं है?
एवगेनी

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

1
और अगर आप ssh कॉन्फिग को गड़बड़ करते हैं, तो आप अपनी मशीन से बाहर हो जाते हैं, पुश बनाम पुल की सामान्य खामी।
तेन्सीबाई

0

यह 2019 है और मैंने अभी कुछ दिनों के लिए एक सीखने योग्य वक्र पर बिताया है और यहाँ पूर्ण सत्य है: Ansible परेशानी के लायक नहीं है।

यह समाप्त नहीं हुआ है, यह विंडोज़ पर नहीं चलता है और YAML कॉन्फिग और भ्रामक त्रुटि संदेशों के संयोजन से आपकी आँखें रक्तस्राव करेंगी। यह लगभग जानबूझकर भयानक लगता है और मेरा मतलब है कि गंभीरता से। यह स्पष्ट रूप से एक redhat sysadmins निराश डेवलपर पक्ष परियोजना का उत्पाद है। शायद एक हिप्स्टर।

यदि आपको प्रोविजनिंग से परे इसके फीचर्स की कोई आवश्यकता नहीं है, और आप केवल एक विशेष OS पर ही प्रोविजनिंग कर रहे हैं। लोगों के लिए एक सभ्य खोल लिखना।

अभी तक, पूरी परियोजना मुझे शुरुआती लिनक्स फ़ोरम की याद दिलाती है, जहाँ आरटीएफएम को नॉब्स नहीं बताया गया था और यह पूछने के लिए व्युत्पन्न किया गया था कि कोई क्यों ग्राफिक्स सेटिंग्स को कॉन्फ़िगर करने के लिए जीयूआई नहीं लिख सकता है। तुम बस यह मत करो तुम क्या? आपको खिड़कियों से चिपक जाना चाहिए ... शायद मैं संभोग करूँगा .. खुश VI-ing।

डॉकर का उपयोग करें। किसी भी चीज की प्राथमिकता में। डॉकर अपमानजनक सरल और शक्तिशाली है।

लेकिन क्या होगा अगर आपको पहले से मौजूद टिन पर प्रावधान करना चाहिए? वास्तविक विकल्प क्या हैं?

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

एक bash स्क्रिप्ट को SCP करें, और अपने आप को मुसीबत से बचाएं।


पहले यह Win_RM या SSH के माध्यम से विंडोज़ पर काम करता है। दूसरा yaml सिंटैक्स बहुत अच्छा है और इसे प्रोग्रामेटिक रूप से उत्पन्न किया जा सकता है और जबकि कुछ त्रुटियां इसके अपवाद को जावा या पाइथन से अलग नहीं बता सकती हैं जो एक अपवाद के दौरान इसकी हिम्मत को कम कर देते हैं। एक सर्वर पर एक स्क्रिप्ट SCPing की तीसरी धारणा अत्यधिक गतिशील बादल वातावरण में लागू नहीं है। कौन सा सर्वर? सर्वर हर दिन बदल सकता है। Ansible आसानी से विन्यास इन्वेंट्री प्लग-इन को समूह सर्वरों के लिए आसान तरीकों से अनुमति देता है और उन्हें चर प्रदान करता है। मुझे नहीं लगता कि Ansible इसके लायक नहीं है। मुझे लगता है कि यह आपके पर्यावरण के लिए overkill है।
लेवी

@ लेवी हां। यह मेरी सारी गलती है कि ansible doesn t विंडोज़ पर चलता है, इसमें कॉन्फिग है जिसमें कोई स्कीमा नहीं है, और, एक ही कार्य को प्राप्त करने के किसी भी bespoke विधि की तुलना में अधिक सीखने की अवस्था और उच्च रखरखाव लागत है।
रिचर्ड

क्लाउड वातावरण के लिए बड़े पैमाने के उद्यमों के प्रकार के लिए अन्य दृष्टिकोण हैं जो सीखने की अवस्था को सही ठहरा सकते हैं। मैं समझता हूं कि ansible क्या करता है। मैं अभी इसकी जगह नहीं देखता।
रिचर्ड

आला कई मशीनों के लिए ऑटोमेशन फ्रेमवर्क का उपयोग करना आसान है। यह विंडोज के लिए उतना अच्छा नहीं है जितना कि लिनक्स के लिए। न तो यह msdos और netware के लिए बहुत अच्छा है। यह 2019 है, विंडोज़ सर्वर इन दिनों छोटे बेकार आला हैं।
डायसनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.