Ansible Playbooks बनाम भूमिकाएँ


97

Ansible डॉक्स के अनुसार, एक प्लेबुक है:

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

और, फिर से, उन्हीं डॉक्स के अनुसार, एक रोल्स हैं:

... एक ज्ञात फ़ाइल संरचना के आधार पर स्वचालित रूप से कुछ vars_files, कार्य और हैंडलर लोड करने के तरीके। भूमिकाओं को समूहीकृत करना भी अन्य उपयोगकर्ताओं के साथ भूमिकाओं को आसानी से साझा करने की अनुमति देता है।

हालाँकि इन और उनके विभिन्न उपयोग के मामलों के बीच का अंतर मेरे लिए तुरंत स्पष्ट नहीं है। उदाहरण के लिए, यदि मैं अपनी /etc/ansible/hostsफाइल को देखने के लिए कॉन्फ़िगर करता हूं :

[databases]
mydb01.example.org
mydb02.example.org

[mail_servers]
mymail01.example.org
mymail_dr.example.org

... तो यह " [databases]" प्रविष्टि ... एक भूमिका क्या है? या कहीं playbook YAML फ़ाइल का नाम? या कुछ और?!?

अगर कोई मुझे इन पर मतभेदों की व्याख्या कर सकता है, तो अन्सिबल की मेरी समझ में बहुत वृद्धि होगी!

  • Playbook बनाम भूमिका बनाम [databases]और समान प्रविष्टियों में/etc/ansible/hosts
  • यदि Playbooks को YAML फ़ाइलों के अंदर परिभाषित किया जाता है, तो रोल्स को कहां परिभाषित किया जाता है?
  • इसके अलावा ansible.cfgAnsible सर्वर पर रहने से , मैं उपलब्ध Playbooks / Roles के साथ Ansible को कैसे जोड़ / कॉन्फ़िगर कर सकता हूं? उदाहरण के लिए, जब मैं दौड़ता हूं, तो ansible-playbook someplaybook.yamlअंसिबल को कैसे पता चलता है कि उस प्लेबुक को कहां खोजना है?

1
भूमिकाएँ सामान्य रूप से "पुस्तकालयों" में कार्यक्षमता डालकर पुन: प्रयोज्य प्लेबुक्स में कोड बनाने का एक तरीका है जो तब आवश्यकतानुसार किसी भी प्लेबुक में उपयोग किया जा सकता है।
जुआन जिमेनेज

tasksकार्य करना। playbooksकार्यों को व्यवस्थित और लॉन्च करें। rolesकिसी विशेष कार्य को करने वाले कार्यों, हैंडलर आदि का समूह व्यवस्थित करें। कुछ playbookको लॉन्च करने की जरूरत है role। आप का एक संग्रह क्या कहेंगे rolesऔर playbooks? उदाहरण के लिए कहें कि आपकी साइट पर सभी मेजबानों के कॉन्फ़िगरेशन का प्रबंधन करता है?
फिकनेल

जवाबों:


110

Playbook बनाम भूमिका बनाम [डेटाबेस] और / आदि / ansible / होस्ट में समान प्रविष्टियाँ

[databases]मेजबानों के समूह के लिए एक एकल नाम है। यह आपको एक ही नाम से कई मेजबानों को संदर्भित करने की अनुमति देता है।

भूमिका एक निश्चित भूमिका के लिए होस्ट को कॉन्फ़िगर करने के लिए कार्यों और अतिरिक्त फ़ाइलों का एक सेट है ।

प्लेबुक मेजबानों और भूमिकाओं के बीच एक मानचित्रण है।

प्रलेखन से उदाहरण उदाहरण परियोजना का वर्णन करता है। इसमें दो चीजें शामिल हैं:

  • Playbooks। site.yml, webservers.yml, fooservers.ymlPlaybooks हैं।
  • भूमिकाएँ: roles/common/और तदनुसार भूमिकाओं और roles/webservers/परिभाषाओं को समाहित करती हैं।commonwebservers

Playbook के अंदर ( webservers.yml) आपके पास कुछ ऐसा है:

---
- hosts: webservers <- this group of hosts defined in /etc/ansible/hosts, databases and mail_servers in example from your question
  roles: <- this is list of roles to assign to these hosts
     - common
     - webservers

यदि Playbooks को YAML फ़ाइलों के अंदर परिभाषित किया जाता है, तो रोल्स को कहां परिभाषित किया जाता है?

उन्हें roles/*निर्देशिकाओं के अंदर परिभाषित किया गया है । रोल्स को ज्यादातर YAML फ़ाइलों का उपयोग करके परिभाषित किया जाता है, लेकिन इसमें किसी भी प्रकार ( files/, templates/) के संसाधन शामिल हो सकते हैं । प्रलेखन भूमिका के अनुसार परिभाषा इस प्रकार संरचित है:

  • यदि भूमिकाएँ / x / कार्य / main.yml मौजूद हैं, तो उसमें सूचीबद्ध कार्यों को नाटक में जोड़ा जाएगा
  • यदि रोल्स / x / हैंडलर / main.yml मौजूद है, तो उसमें सूचीबद्ध हैंडलर को नाटक में जोड़ा जाएगा
  • यदि भूमिकाएँ / x / var / main.yml मौजूद हैं, तो उसमें सूचीबद्ध चर को नाटक में जोड़ा जाएगा
  • यदि भूमिका / x / मेटा / main.yml मौजूद है, तो उसमें सूचीबद्ध किसी भी भूमिका निर्भरता को भूमिकाओं की सूची में जोड़ा जाएगा (1.3 और बाद में)
  • कोई भी कॉपी कार्य भूमिकाओं / x / फाइलों में फाइलों को संदर्भित कर सकता है
  • कोई भी स्क्रिप्ट कार्य स्क्रिप्ट को भूमिका / x / फ़ाइलों में संदर्भित कर सकता है / बिना उन्हें अपेक्षाकृत या बिल्कुल पथ के
  • कोई भी टेम्प्लेट कार्य फाइलों को भूमिकाओं / x / टेम्पलेट्स / संदर्भों में संदर्भित कर सकते हैं, उन्हें अपेक्षाकृत या बिल्कुल पथ के बिना
  • किसी भी कार्य में भूमिकाएँ / x / कार्य / उन्हें अपेक्षाकृत या बिल्कुल पथ के बिना फ़ाइलों को संदर्भित कर सकते हैं

सबसे महत्वपूर्ण फ़ाइल है roles/x/tasks/main.yml, यहां आप कार्यों को परिभाषित करते हैं, जिसे निष्पादित किया जाएगा, जब भूमिका निष्पादित होगी।

Ansible.cfg के अलावा Ansible सर्वर पर रहने वाले, मैं उपलब्ध Playbooks / Roles के साथ Ansible को कैसे जोड़ / कॉन्फ़िगर कर सकता हूं? उदाहरण के लिए, जब मैं ansible-playbook someplaybook.yaml को रन करता हूं, तो Ansible को यह कैसे पता चलता है कि उस प्लेबुक को कहां खोजना है?

$ ansible-playbook someplaybook.yaml

वर्तमान निर्देशिका के अंदर एक प्लेबुक की तलाश करेंगे।

$ ansible-playbook somedir/somedir/someplaybook.yaml

somedir/somedir/निर्देशिका के अंदर एक प्लेबुक की तलाश करेंगे ।

यह आपकी जिम्मेदारी है कि आप अपने प्रोजेक्ट को सर्वर पर सभी प्लेबुक और भूमिकाओं के साथ रखें। अन्सिबल का इससे कोई लेना-देना नहीं है।


धन्यवाद @Yaroslav व्यवस्थापक (+1) - एक त्वरित अनुवर्ती प्रश्न: आप कहते हैं कि भूमिकाएं निर्देशिकाओं के अंदर परिभाषित की जाती हैं , लेकिन फिर वास्तव में भूमिका क्या निर्धारित करती है? दूसरे शब्दों में, webservers.ymlप्लेबुक [webservers]मेजबानों को भूमिका commonऔर webserversभूमिका देता है। लेकिन क्या commonभूमिका के साथ वास्तव में शामिल है ? निर्देशिकाओं में यह परिभाषित करने का कोई तरीका नहीं है, इसलिए आमतौर पर उन "रोल निर्देशिकाओं" के अंदर YAML फाइलें हैं? एक बार फिर धन्यवाद!
स्माइब

@smeeb हाँ, आप सही भूमिका उस निर्देशिका के अंदर फ़ाइलों द्वारा परिभाषित किया गया है। वे ज्यादातर YAML हैं, लेकिन अन्य प्रकार की फाइलें भी हो सकती हैं। अधिक विवरण के लिए अद्यतन उत्तर देखें।
यारोस्लाव एडमिन

36

Playbook बनाम भूमिका बनाम [डेटाबेस] और / आदि / ansible / होस्ट में समान प्रविष्टियाँ

भूमिकाएं एक कंटेनर में समूह कार्यों को एक साथ करने का एक तरीका है। MySQL की स्थापना के लिए आपकी एक भूमिका हो सकती है, पोस्टफ़िक्स आदि की स्थापना के लिए एक और एक।

एक प्लेबुक को परिभाषित करता है क्या हो रहा है , जहां । यह वह स्थान है जहां आप मेजबानों को होस्ट करते हैं (होस्टग्रुप्स, नीचे देखें) और भूमिकाएं जो उन मेजबानों पर लागू होंगी।

[databases]और आपकी सूची में अन्य प्रविष्टियाँ hostgroups हैं। Hostgroups मेजबान के एक सेट को परिभाषित करते हैं जो एक नाटक चलेगा।

एक नाटक एक नाटक के अंदर कार्यों या भूमिकाओं (या दोनों) का एक सेट है। ज्यादातर मामलों में (और उदाहरण) एक प्लेबुक में केवल एक ही नाटक होगा। लेकिन आप जितने चाहें उतने हो सकते हैं। इसका मतलब है कि आपके पास एक प्लेबुक हो सकती है जो postfixहोस्टग्रुप पर और होस्टग्रुप पर mail_serversभूमिका mysqlनिभाएगी databases:

- hosts: mail_servers
  roles:
    - postfix

- hosts: databases
  roles:
    - mysql

यदि Playbooks को YAML फ़ाइलों के अंदर परिभाषित किया जाता है, तो रोल्स को कहां परिभाषित किया जाता है?

Ansible में बहुत कुछ सबकुछ YAML में परिभाषित किया गया है, जो भूमिकाओं और प्लेबुक के लिए मायने रखता है।

Ansible.cfg के अलावा Ansible सर्वर पर रहने वाले, मैं उपलब्ध Playbooks / Roles के साथ Ansible को कैसे जोड़ / कॉन्फ़िगर कर सकता हूं? उदाहरण के लिए, जब मैं ansible-playbook someplaybook.yaml को रन करता हूं, तो Ansible को यह कैसे पता चलता है कि उस प्लेबुक को कहां खोजना है?

AFAIK जब आप playbook को पथ प्रदान करना है ansible-playbook। तो आप वर्तमान निर्देशिका में होने की ansible-playbook someplaybook.yamlउम्मीद करेंगे someplaybook.yaml। लेकिन आप पूरा रास्ता प्रदान कर सकते हैं:ansible-playbook /path/to/someplaybook.yaml


13

यह एक शब्दावली / शब्दार्थ प्रश्न है। यह व्यक्तिपरक हो सकता है, भले ही आधारभूत परिभाषा हो।

मेरा विचार इस प्रकार है:

किसी भी विन्यास प्रबंधन / परिनियोजन प्रणाली में है:

  1. source data - टारगेट होस्ट के कॉन्फ़िगरेशन को बनाने के लिए उपयोग किया जाने वाला डेटा
  2. target data - डेटा लक्ष्य मेजबानों की पहचान करने के लिए इस्तेमाल किया
  3. config changes- नियमों / कार्यों की सूची / सेट जो हम source dataलक्ष्य आधारित मेजबान के साथ लागू करते हैंtarget data

अस्थिर शब्दों में:

  1. source data- विभिन्न स्थानों पर हम डेटा डाल सकते हैं - group_vars, playbookvars, rolevars, इत्यादि, ये स्थान पूर्वता को प्रभावित करते हैं (यदि एक वैरिएबल नाम को अलग-अलग स्थानों में फिर से परिभाषित किया गया है, तो बहुत विशिष्ट नियम हैं कि मूल्य क्या होगा? के दौरान चर ansible/ansible-playbook निष्पादन के
  2. target data - इन्वेंट्री है (और, इन्वेंट्री के अंदर इन्वेंट्री / होस्टग्रुप वेरिएबल्स को परिभाषित करना भी संभव है!)
  3. config changes - ansible में इसके लिए अमूर्तता के 4 स्तर हैं:
    1. कार्य - एकल क्रिया
    2. कार्य सूची - क्रियाओं की सूची
    3. भूमिका - क्रियाओं की सूची (या सूचियों की सूची) एक ही 'विषय' द्वारा समूहीकृत, आमतौर पर सभी लक्ष्य एक ही मेजबान या मेजबान समूह पर काम कर रहे हैं
    4. प्लेबुक - नाटकों की सूची, संभवतः प्रत्येक अलग होस्टग्रुप पर काम करने वाले, कई roleएस / टास्कलिस्ट task(और विशेष कार्य जैसे handlers) लागू करते हैं

'सॉफ्टवेयर' पहलू से - भूमिका काफी सामान्य होनी चाहिए उपयोग किया

इसके अलावा कुछ (बल्कि बड़े) संगठनों में, 'ए' भूमिका समूह ए द्वारा भेज दी जाती है, जबकि समूह बी द्वारा बनाए गए प्लेबुक में उपयोग किया जाता है।

सारांश

उपरोक्त सभी समान कॉन्फ़िगरेशन के समूहन की अनुमति देता है - एक में role। संबंधित उप-प्रणालियों / घटकों को एक में समूहीकृत करना playbook। इसके अलावा, लायक उल्लेख कर रहा है एक प्लेबुक में 1 YAML मद (सहित hosts:और या तो या tasks, pre_tasks, post_tasks, roles) एक कहा जाता हैplay

अब आपके प्रश्न के लिए:

हां, यह पहली बार में भ्रामक है।

आप आमतौर पर source dataअपनी भूमिका के शब्दार्थ से जुड़ते हैं , इसलिए जब आप देखते हैं कि setup_dbसंबंधित होस्टग्रुप (जैसे db_hosts) पर एक नाटक में यह भूमिका लागू होती हैplay कई होस्टग्रुप के एक संघ पर चल सकता है। यह सिर्फ सम्मेलन बनाम लचीलेपन की बात है।

पुनश्च

कृपया मुझे वापस लिखें कि क्या यह भ्रम में जोड़ा गया, या स्पष्ट किया गया। धन्यवाद।


1

यह भी ध्यान रखें कि यदि कोई मेटा फ़ाइल का उपयोग किया जाता है जो विभिन्न भूमिकाओं को प्रभावित करने के उद्देश्य से प्लेबुक एक से अधिक भूमिका कह सकता है।

उदाहरण प्लेबुक: dual_role-playbook.yml

- name: Some Action for two roles
  hosts: localhost

  vars_files:
    - roles/dual_role/meta/main.yml

  roles:
    - dual_role/container-1
    - dual_role/container-2

भूमिका फ़ोल्डर और फ़ाइलें योजना इस तरह दिखाई देगी:

dual_role-playbook.yml
  -- roles
     -- dual_role
        -- meta/main.yml
        -- container-1
           -- tasks/main.yml
           -- templates/template.j2
        -- container-2
           -- tasks/main.yml
           -- templates/template.j2

0

सीधे शब्दों में कहें:

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

एक भूमिका एक सबरूटीन है और आमतौर पर एक लक्ष्य प्राप्त होता है, जैसे एक डेटाबेस सर्वर सेटअप। आप इसे roles/निर्देशिका में रख सकते हैं , या यूआरआई प्रदान करके 3 पार्टी भूमिकाएं डाउनलोड कर सकते हैं rolesfile.ymlऔर अपने लिए उन्हें डाउनलोड करने के लिए ansible-galaxy पूछ सकते हैं।

[database]एक मेजबान के समूह में परिभाषित है सूची फ़ाइल है कि सूचियों करता है, जिन्हें से संबंध रखते हैं databaseसमूह। आप कुछ निर्दिष्ट करके वेब सर्वर के एक समूह को भी निर्दिष्ट कर सकते हैं

[web]
web1.example.com
web2.example.com

लागू करने के लिए मेजबान को निर्दिष्ट करने के लिए समूह webया databaseफिर प्लेबुक या भूमिकाओं में उपयोग किया जा सकता है।

ansibleएड-हॉक कमांड चलाने के लिए समूहों का उपयोग कमांड में भी किया जा सकता है ।

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