ansible
भूमिकाएँ
खोज…
भूमिकाओं का उपयोग करना
मॉड्यूलर भूमिकाओं को बेहतर तरीके से अनुमति देने और खुद को दोहराने से बचने के लिए अंसिवल भूमिकाओं की अवधारणा का उपयोग करता है।
एक भूमिका बस एक फ़ोल्डर संरचना है जिसे अंसिबल जानता है कि 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 के लिए कार्यों और चर को परिभाषित कर सकते हैं।