Sök…


Anmärkningar

Officiella dokument förklarar villkoren för spellistor.

Ansvarsfull (github)

Vilka typer av konditioner ska du använda?

Använd Conditionals via (syntax finns i [brackets] ):

  • när [ när: ]

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

  • loops [ with_dicts: ]

  • Anpassade fakta [ när: my_custom_facts == '1234']

  • Villkorad import

  • Välj filer och mallar baserat på variabler

[När] Tillstånd: `ansible_os_family`-listor

Allmänt bruk

  • när: ansible_os_family == "CentOS"
  • när: ansible_os_family == "Redhat"
  • när: ansible_os_family == "Darwin"
  • när: ansible_os_family == "Debian"
  • när: ansible_os_family == "Windows"

Alla listor

baserat på diskutera här 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'
        )

När skick

Grundläggande användning

Använd när villkoret för att kontrollera om en uppgift eller roll körs eller hoppas över. Detta används normalt för att ändra spelbeteende baserat på fakta från destinationssystemet. Tänk på denna spellista:

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

Där Ubuntu.yml och RHEL.yml inkluderar en viss distributionsspecifik logik.

En annan vanlig användning är att begränsa resultaten till resultaten i vissa Ansible-lagergrupper. Tänk på denna inventeringsfil:

[dbs]
mydb01

[webservers]
myweb01

Och denna spellista:

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

Detta använder den magiska variabeln group_names .

Villkorad syntax och logik

Enkelt skick

Syntax

when: (condition)

Exempel

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

Booleskt filter

Exempel

when: result|failed

Flera villkor

Syntax

When: condition1 and/or condition2

Exempel (enkelt)

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

Exempel (komplex)

Använd parenteser för tydlighet eller för att kontrollera prioritet. "OCH" har högre prioritet än "ELLER".

Klausulerna kan sträcka sig över rader:

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

Notera användningen av parenteser för att gruppera "eller" i den första distributionskontrollen.

Skaffa `ansible_os_family` och` ansible_pkg_mgr` med installationen

Vi kan få fakta ( ansible_os_family , ansible_pkg_mgr ) med Ad-Hoc-kommando för installationsmodul och 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
      }
    

Enkelt "När" Exempel (er)

Given:

---
variable_name: True

Sedan körs dessa uppgifter med alltid.

- 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

Denna uppgift kommer aldrig att köras.

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

Använd tills för att försöka återuppringande levande kontroll

Detta är ett exempel på att använda tills / försöker / fördröja för att implementera en levande kontroll för en webbapp som startar. Det antar att det kommer att finnas en viss tidsperiod (upp till 3 minuter) där webapp avvisar socketanslutningar. Därefter kontrollerar den på / levande sidan efter ordet "OK". Det delegerar också hämtningen av URL: en till den ansvarigaste localhost. Detta är meningsfullt som den sista uppgiften i en distributionsspelbok.

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

Mönstret tills försök kan användas igen med alla åtgärder; Svarande dokumentation ger ett exempel på att vänta tills ett visst skalkommando returnerar ett önskat resultat: http://docs.ansible.com/ansible/playbooks_loops.html#do-until-loops .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow