ansible
Ansible: लूप्स और कंडीशनल्स
खोज…
टिप्पणियों
आधिकारिक डॉक्स प्लेबुक सशर्त बताते हैं।
अन्सिबल (गीथूब)
किस प्रकार के सशर्त का उपयोग करें?
के माध्यम से सशर्त का उपयोग करें (वाक्य रचना [brackets]
):
जब [ जब: ]
Task: - name: run if operating system is debian command: echo "I am a Debian Computer" when: ansible_os_family == "Debian"
छोरों [ with_items: ]
लूप्स [ with_dicts: ]
कस्टम तथ्य [ जब: my_custom_facts == '1234']
सशर्त आयात
चर पर आधारित फ़ाइलों और टेम्पलेट्स का चयन करें
[कब] हालत: `ansible_os_family` सूची
सामान्य उपयोग
- कब: ansible_os_family == "सेंटोस"
- जब: ansible_os_family == "रेडहैट"
- जब: ansible_os_family == "डार्विन"
- जब: ansible_os_family == "डेबियन"
- कब: ansible_os_family == "विंडोज"
सभी सूचियाँ
यहां चर्चा के आधार पर http://comments.gmane.org/gmane.comp.sysutils.ansible/4685
OS_FAMILY = dict(
RedHat = 'RedHat',
Fedora = 'RedHat',
CentOS = 'RedHat',
Scientific = 'RedHat',
SLC = 'RedHat',
Ascendos = 'RedHat',
CloudLinux = 'RedHat',
PSBM = 'RedHat',
OracleLinux = 'RedHat',
OVS = 'RedHat',
OEL = 'RedHat',
Amazon = 'RedHat',
XenServer = 'RedHat',
Ubuntu = 'Debian',
Debian = 'Debian',
SLES = 'Suse',
SLED = 'Suse',
OpenSuSE = 'Suse',
SuSE = 'Suse',
Gentoo = 'Gentoo',
Archlinux = 'Archlinux',
Mandriva = 'Mandrake',
Mandrake = 'Mandrake',
Solaris = 'Solaris',
Nexenta = 'Solaris',
OmniOS = 'Solaris',
OpenIndiana = 'Solaris',
SmartOS = 'Solaris',
AIX = 'AIX',
Alpine = 'Alpine',
MacOSX = 'Darwin',
FreeBSD = 'FreeBSD',
HPUX = 'HP-UX'
)
जब हालत
मूल उपयोग
जब कोई कार्य या भूमिका चलती है या छोड़ दी जाती है, तो उसे नियंत्रित करने के लिए स्थिति का उपयोग करें। यह आमतौर पर गंतव्य प्रणाली के तथ्यों के आधार पर प्ले व्यवहार को बदलने के लिए उपयोग किया जाता है। इस प्लेबुक पर विचार करें:
- hosts: all
tasks:
- include: Ubuntu.yml
when: ansible_os_family == "Ubuntu"
- include: RHEL.yml
when: ansible_os_family == "RedHat"
जहां Ubuntu.yml
और RHEL.yml
में कुछ वितरण-विशिष्ट तर्क शामिल हैं।
एक और आम उपयोग उन परिणामों को सीमित करने के लिए है, जिन्हें कुछ अंसबल इन्वेंट्री समूहों में रखा जाता है। इस सूची फ़ाइल पर विचार करें:
[dbs]
mydb01
[webservers]
myweb01
और यह प्लेबुक:
- hosts: all
tasks:
- name: Restart Apache on webservers
become: yes
service:
name: apache2
state: restarted
when: webservers in group_names
यह group_names
जादू चर का उपयोग कर रहा है।
सशर्त सिंटेक्स और लॉजिक
एकल शर्त
वाक्य - विन्यास
when: (condition)
उदाहरण
-
when: ansible_os_family == "Debian"
-
when: ansible_pkg_mgr == "apt"
-
when: myvariablename is defined
बूलियन फ़िल्टर
उदाहरण
when: result|failed
कई शर्तें
वाक्य - विन्यास
When: condition1 and/or condition2
उदाहरण (सरल)
when: ansible_os_family == "Debian" and ansible_pkg_mgr == "apt"
उदाहरण (जटिल)
स्पष्टता के लिए या पूर्वता को नियंत्रित करने के लिए कोष्ठक का उपयोग करें। "और" में "ओआर" की तुलना में अधिक पूर्वता है।
खंड लाइनों को फैला सकते हैं:
when:
ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux'] and
(ansible_distribution_version|version_compare('7', '<') or
ansible_distribution_version|version_compare('8', '>='))
or
ansible_distribution == 'Fedora'
or
ansible_distribution == 'Ubuntu' and
ansible_distribution_version|version_compare('15.04', '>=')
प्रथम वितरण चेक में "या" समूह के लिए कोष्ठकों के उपयोग पर ध्यान दें।
सेटअप के साथ `ansible_os_family` और` ansible_pkg_mgr` प्राप्त करें
हम सेटअप मॉड्यूल और फ़िल्टर के Ad-Hoc कमांड के साथ तथ्य ( ansible_os_family
, ansible_pkg_mgr
) प्राप्त कर सकते हैं।
ansible_os_family:
$ ansible all -m setup -a 'filter=ansible_os_family' ra.local | SUCCESS => { "ansible_facts": { "ansible_os_family": "Debian" }, "changed": false }
ansible_pkg_mgr:
$ ansible all -m setup -a 'filter=ansible_pkg_mgr' debian.local | SUCCESS => { "ansible_facts": { "ansible_pkg_mgr": "apt" }, "changed": false }
सरल "कब" उदाहरण (ओं)
दिया हुआ:
---
variable_name: True
फिर, ये कार्य हमेशा चलते हैं।
- name: This is a conditional task
module: src=/example/ dest=/example
when: variable_name
- name: This is a conditional task
module: src=/example/ dest=/example
when: True
यह कार्य कभी नहीं चलेगा।
- name: This is a conditional task
module: src=/example/ dest=/example
when: False
रिटायर लूपिंग के लिए जिंदा जांच तक का उपयोग करना
यह तब तक उपयोग करने का एक उदाहरण है जब तक शुरू होने वाले वेबएप के लिए एक जीवित जांच को लागू करने के लिए / पीछे हटने / देरी करने का उपयोग नहीं किया जाता है। यह मानता है कि कुछ समय की अवधि (3 मिनट तक) होगी जहां वेब सॉकेट कनेक्शन से इनकार कर रहा है। उसके बाद, यह "ओके" शब्द के लिए / जीवित पृष्ठ की जांच करता है। यह URL की पुनर्प्राप्ति को लोकलहोस्ट रनिंग लोकल के लिए भी प्रस्तुत करता है। यह एक परिनियोजन प्लेबुक में अंतिम कार्य के रूप में समझ में आता है।
---
- hosts: my-hosts
tasks:
- action: uri url=http://{{ ansible_all_ipv4_addresses }}:8080/alive return_content=yes
delegate_to: localhost
register: result
until: "'failed' not in result and result.content.find('OK') != -1"
retries: 18
delay: 10
जब तक रिट्री पैटर्न का उपयोग किसी भी कार्रवाई के साथ किया जा सकता है; जब तक एक निश्चित शेल कमांड एक वांछित परिणाम नहीं देता है, तब तक Ansible प्रलेखन प्रतीक्षा का एक उदाहरण प्रदान करता है: http://docs.ansible.com/ansible/playbooks_loops.html#do-until-loops ।