खोज…


भूमिकाओं का उपयोग करना

मॉड्यूलर भूमिकाओं को बेहतर तरीके से अनुमति देने और खुद को दोहराने से बचने के लिए अंसिवल भूमिकाओं की अवधारणा का उपयोग करता है।

एक भूमिका बस एक फ़ोल्डर संरचना है जिसे अंसिबल जानता है कि var फ़ाइलों, कार्यों और हैंडलर को कहां से लोड करना है। एक उदाहरण कुछ इस तरह दिख सकता है:

apache/
├── defaults
│   └── main.yml
├── files
│   ├── mod-pagespeed-stable_current_i386.deb
│   ├── mod-pagespeed-stable_current_i386.rpm
│   ├── mod-pagespeed-stable_current_amd64.deb
|   └── mod-pagespeed-stable_current_x86_64.rpm
├── tasks
│   ├── debian.yml
│   ├── main.yml
│   └── redhat.yml
├── templates
│   ├── httpd.conf.j2
│   └── sites-available
│       └── virthualhost.conf.j2
└── vars
    ├── debian
    └── redhat

आप तब एक बुनियादी प्लेबुक के साथ भूमिका का उपयोग कर सकते हैं जो सिर्फ इस तरह दिखता है:

- hosts: webservers
  roles:
     - apache

जब आप इस प्लेबुक के खिलाफ अन्सिबल चलाते हैं तो यह webservers समूह के सभी मेजबानों को लक्षित करेगा और इसके खिलाफ ऊपर बताई गई apache भूमिका को चलाएगा, भूमिका के लिए स्वचालित रूप से किसी भी डिफ़ॉल्ट चर को लोड करना और tasks/main.yml में शामिल सभी tasks/main.yml । भूमिका-अनुकूल स्थानों में कुछ प्रकार की फ़ाइलों को देखने के लिए उत्तर देने योग्य है:

  • यदि भूमिकाएँ / x / कार्य / main.yml मौजूद हैं, तो उसमें सूचीबद्ध कार्यों को नाटक में जोड़ा जाएगा

  • यदि भूमिकाएँ / x / हैंडलर / main.yml मौजूद हैं, तो इसमें सूचीबद्ध हैंडलर को नाटक में जोड़ा जाएगा

  • यदि भूमिकाएँ / x / var / main.yml मौजूद हैं, तो उसमें सूचीबद्ध चर को नाटक में जोड़ा जाएगा

  • यदि भूमिका / x / मेटा / main.yml मौजूद है, तो उसमें सूचीबद्ध किसी भी भूमिका निर्भरता को भूमिकाओं की सूची में जोड़ा जाएगा (1.3 और बाद में)

  • कोई भी कॉपी, स्क्रिप्ट, टेम्प्लेट या कार्य शामिल करता है (भूमिका में) भूमिका में फ़ाइलों को संदर्भित कर सकता है / x / {फ़ाइलें, टेम्प्लेट, कार्य} / (dir कार्य पर निर्भर करता है) उन्हें अपेक्षाकृत या बिल्कुल पथ के बिना

भूमिका निर्भरता

भूमिकाएँ भी dependencies ब्लॉक के साथ एक meta/main.yml फ़ाइल बनाकर निर्भरता के रूप में अन्य भूमिकाओं को परिभाषित करने में सक्षम करती हैं:

dependencies:
  - role: common

किसी मान / पैरामीटर पर निर्भर भूमिका में मान को पास करना भी संभव है:

dependencies:
  - { role: common, some_parameter: 3 }

या यहां तक कि निर्भर भूमिका को सशर्त निष्पादित करें:

dependencies:
  - { role: common, some_parameter: 3 }
  - { role: sshd, enable_sshd: false,
                         when: environment == 'production' }

आश्रित भूमिकाओं को हमेशा उन भूमिकाओं से पहले निष्पादित किया जाता है जो उन पर निर्भर करती हैं। इसके अलावा, वे केवल एक बार निष्पादित होते हैं। अगर दो भूमिकाएं एक ही निर्भरता के रूप में बताती हैं, तो यह केवल पहली बार निष्पादित होता है।

रोल्स meta/main.yml साथ रोल्स रोल 1, रोल 2 और रोल 3 की कल्पना करें:
role1 / मेटा / main.yml:

dependencies:
    - role: role3

role2 / मेटा / main.yml:

dependencies:
    - role: role3

जब एक ही प्लेबुक में रोल 1 और रोल 2 को निष्पादित किया जाता है (रोल 1 को रोल 2 से पहले बुलाया जाता है), तो निष्पादन आदेश निम्न होगा:

role3 -> role1 -> role2

आप allow_duplicates: yes को निर्दिष्ट करके इस व्यवहार को ओवरराइड कर सकते हैं allow_duplicates: yes meta/main.yml 1 और रोल meta/main.yml के meta/main.yml में। परिणामी निष्पादन आदेश होगा:

role3 -> role1 -> role3 -> role2

एक भूमिका के अंदर वितरण विशिष्ट कार्यों और चर को अलग करना

हम वितरण के विशिष्ट कार्यों और चर को अलग-अलग समर्पित .yml फ़ाइलों में आसानी से अलग कर सकते हैं। Ansible हमें {{ ansible_distribution }} और {{ ansible_distribution_version }} माध्यम से लक्ष्य होस्ट वितरण को स्वचालित रूप से पहचानने में मदद करता है, इसलिए हमें केवल तदनुसार समर्पित .yml फ़ाइलों को नाम देना होगा।

उबंटू ज़ेनियल के लिए मूल भूमिका दिर पेड़ कुछ इस तरह दिखाई देगा:

role
├── tasks
│   ├── main.yml
│   └── Ubuntu16.04.yml
└── vars
    └── Ubuntu16.04.yml

tasks/main.yml अंदर अब हम लक्ष्य होस्ट वितरण के लिए उचित चर और कार्यों को स्वचालित रूप से शामिल कर सकते हैं।

कार्य / main.yml

---

- name: include distribution specific vars
  include_vars: "{{ ansible_distribution }}{{ ansible_distribution_version }}.yml"

- name: include distribution specific install
  include: "{{ ansible_distribution }}{{ ansible_distribution_version }}.yml"

अंदर के tasks/Ubuntu16.06.yml और tasks/Ubuntu16.06.yml vars/Ubuntu16.04.yml अब हम क्रमशः Ubuntu Xenial के लिए कार्यों और चर को परिभाषित कर सकते हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow