Zoeken…


Opmerkingen

Officiële documenten geven uitleg over playbook-voorwaarden.

Ansible (github)

Welke soorten voorwaardelijk gebruik?

Gebruik Conditionals via (syntaxis staat tussen [brackets] ):

  • wanneer [ wanneer: ]

    Task:
       - name: run if operating system is debian
         command: echo "I am a Debian Computer"
         when: ansible_os_family == "Debian"
    
  • lussen [ met_items: ]

  • lussen [ met_dicten: ]

  • Aangepaste feiten [ wanneer: my_custom_facts == '1234']

  • Voorwaardelijke invoer

  • Selecteer bestanden en sjablonen op basis van variabelen

[When] Staat: `ansible_os_family` Lijsten

Normaal gebruik

  • wanneer: ansible_os_family == "CentOS"
  • wanneer: ansible_os_family == "Redhat"
  • wanneer: ansible_os_family == "Darwin"
  • wanneer: ansible_os_family == "Debian"
  • wanneer: ansible_os_family == "Windows"

Alle lijsten

gebaseerd op hier bespreken 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'
        )

Wanneer staat

Basisgebruik

Gebruik de voorwaarde wanneer om te bepalen of een taak of rol wordt uitgevoerd of wordt overgeslagen. Dit wordt normaal gesproken gebruikt om het speelgedrag te veranderen op basis van feiten uit het doelsysteem. Overweeg dit speelboek:

- hosts: all
  tasks:
    - include: Ubuntu.yml
      when: ansible_os_family == "Ubuntu"
    
    - include: RHEL.yml
      when: ansible_os_family == "RedHat"

Waar Ubuntu.yml en RHEL.yml enige distributiespecifieke logica bevatten.

Een ander veelgebruikt gebruik is om de resultaten te beperken tot die in bepaalde Ansible-inventarisgroepen. Beschouw dit inventarisbestand:

[dbs]
mydb01

[webservers]
myweb01

En dit speelboek:

- hosts: all
  tasks:
    - name: Restart Apache on webservers
      become: yes
      service:
        name: apache2
        state: restarted
      when: webservers in group_names

Dit gebruikt de magische variabele group_names .

Voorwaardelijke syntaxis en logica

Enkele voorwaarde

Syntaxis

when: (condition)

Voorbeeld

  • when: ansible_os_family == "Debian"
  • when: ansible_pkg_mgr == "apt"
  • when: myvariablename is defined

Booleaanse filter

Voorbeeld

when: result|failed

Meerdere voorwaarden

Syntaxis

When: condition1 and/or condition2

Voorbeeld (eenvoudig)

when: ansible_os_family == "Debian" and ansible_pkg_mgr == "apt"

Voorbeeld (complex)

Gebruik haakjes voor de duidelijkheid of om de prioriteit te regelen. "EN" heeft een hogere prioriteit dan "OF".

Clausules kunnen lijnen omspannen:

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', '>=')

Let op het gebruik van haakjes om de "of" te groeperen in de eerste distributiecontrole.

Download `ansible_os_family` en` ansible_pkg_mgr` met setup

We kunnen feiten krijgen ( ansible_os_family , ansible_pkg_mgr ) met Ad-Hoc commando van setup-module en filter.

  • 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
      }
    

Eenvoudige "Wanneer" Voorbeeld (en)

Gegeven:

---
variable_name: True

Vervolgens worden deze taken altijd uitgevoerd.

- 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

Deze taak zal nooit worden uitgevoerd.

- name: This is a conditional task
  module: src=/example/ dest=/example
  when: False

Gebruik tot voor een nieuwe poging om levend te herhalen

Dit is een voorbeeld van het gebruik van tot / retries / delay om een actieve controle te implementeren voor een webapp die wordt gestart. Er wordt aangenomen dat er enige tijd (maximaal 3 minuten) zal zijn waarin de webapp socketverbindingen weigert. Daarna wordt de / levend pagina gecontroleerd op het woord "OK". Het delegeert ook het ophalen van de URL naar de actieve host. Dit is logisch als de laatste taak in een playbook voor implementatie.

---
- 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

Het patroon voor het opnieuw proberen kan met elke actie worden gebruikt; Ansible-documentatie biedt een voorbeeld van wachten totdat een bepaalde shell-opdracht een gewenst resultaat oplevert : http://docs.ansible.com/ansible/playbooks_loops.html#do-until-loops .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow