खोज…


टिप्पणियों

आधिकारिक डॉक्स प्लेबुक सशर्त बताते हैं।

अन्सिबल (गीथूब)

किस प्रकार के सशर्त का उपयोग करें?

के माध्यम से सशर्त का उपयोग करें (वाक्य रचना [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



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