Szukaj…


Uwagi

Oficjalne dokumenty wyjaśniają warunki warunkowe.

Ansible (github)

Jakiego rodzaju warunków należy użyć?

Użyj warunkowej przez (składnia jest w [brackets] ):

  • kiedy [ kiedy: ]

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

  • pętle [ with_dicts: ]

  • Niestandardowe fakty [ kiedy: my_custom_facts == '1234']

  • Przywóz warunkowy

  • Wybierz pliki i szablony na podstawie zmiennych

[Kiedy] Warunek: Listy `ansible_os_family`

Wspólne zastosowanie

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

Wszystkie listy

na podstawie omówienia tutaj 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'
        )

Kiedy warunek

Podstawowe użycie

Użyj warunku when, aby kontrolować, czy zadanie lub rola ma być uruchamiana czy pomijana. Zwykle służy to do zmiany zachowania gry na podstawie faktów z systemu docelowego. Rozważ ten poradnik:

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

Gdzie Ubuntu.yml i RHEL.yml zawierają logikę specyficzną dla dystrybucji.

Innym powszechnym zastosowaniem jest ograniczenie wyników do tych w niektórych grupach reklam Ansible. Rozważ ten plik ekwipunku:

[dbs]
mydb01

[webservers]
myweb01

A ten poradnik:

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

To używa magicznej zmiennej group_names .

Składnia warunkowa i logika

Pojedynczy warunek

Składnia

when: (condition)

Przykład

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

Filtr boolowski

Przykład

when: result|failed

Wiele warunków

Składnia

When: condition1 and/or condition2

Przykład (prosty)

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

Przykład (złożony)

Użyj nawiasów, aby uzyskać jasność lub kontrolować pierwszeństwo. „AND” ma wyższy priorytet niż „OR”.

Klauzule mogą obejmować linie:

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

Zwróć uwagę na użycie nawiasów do grupowania „lub” w pierwszej kontroli dystrybucji.

Pobierz `ansible_os_family` i` ansible_pkg_mgr` z instalatorem

Możemy uzyskać fakty ( ansible_os_family , ansible_pkg_mgr ) za pomocą polecenia Ad-Hoc modułu instalacyjnego i filtra.

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

Prosty przykład „kiedy”

Dany:

---
variable_name: True

Następnie te zadania zawsze uruchamiają się.

- 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

To zadanie nigdy się nie uruchomi.

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

Używanie do ponownej próby zapętlenia żywej kontroli

Jest to przykład użycia polecenia till / reties / delay do wdrożenia kontroli aktywności aplikacji sieci web, która się uruchamia. Zakłada się, że przez pewien czas (do 3 minut) aplikacja internetowa odmówi połączenia przez gniazdo. Następnie sprawdza stronę / alive pod kątem słowa „OK”. Deleguje również pobieranie adresu URL do hosta lokalnego z uruchomionym programem ansible. Ma to sens jako ostatnie zadanie w podręczniku wdrażania.

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

Wzór do ponownej próby może być użyty z dowolną akcją; Dokumentacja Ansible stanowi przykład oczekiwania, aż określone polecenie powłoki zwróci pożądany wynik: http://docs.ansible.com/ansible/playbooks_loops.html#do-until-loops .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow