Sobes.tech
Junior

Jak wywołać role w playbooku Ansible?

sobes.tech AI

Odpowiedź od AI

Role w Ansible można wywołać na kilka sposobów w ramach playbooka.

  1. Użycie słowa kluczowego roles na poziomie playbooka:

    # playbooks/my_playbook.yml
    - name: Zastosuj role do serwerów
      hosts: webservers
      become: yes
      roles:
        - role: common  # Wywołanie roli 'common'
        - role: nginx   # Wywołanie roli 'nginx'
          vars:         # Przekazanie zmiennych do roli
            nginx_port: 8080
        - another_role # Skrócona forma wywołania
    

    Metoda ta służy do wywoływania ról, które będą wykonywane kolejno dla wszystkich hostów zdefiniowanych w sekcji hosts.

  2. Użycie modułu include_role na liście zadań:

    # playbooks/my_playbook.yml
    - name: Zastosuj role z warunkami
      hosts: appservers
      tasks:
        - name: Dołączenie roli bazy danych (tylko dla dev)
          include_role:
            name: database
          when: env == 'dev' # Wywołanie roli warunkowe
    
        - name: Dołączenie roli aplikacji
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Przekazanie zmiennych do roli
    

    Moduł include_role wykonuje rolę tak, jakby była listą zadań dołączoną do bieżącego playbooka. Pozwala na użycie warunków (when) i pętli (loop) do kontrolowania wykonania roli.

  3. Użycie modułu import_role na liście zadań:

    # playbooks/my_playbook.yml
    - name: Import roli aplikacji
      hosts: appservers
      tasks:
        - name: Import roli aplikacji dla wszystkich hostów
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Przekazanie zmiennych
    

    Moduł import_role jest przetwarzany na etapie parsowania playbooka, przed jego faktycznym wykonaniem. Oznacza to, że wszystkie dyrektywy, takie jak when, będą miały zastosowanie do wszystkich zadań w roli, a nie tylko do samego wywołania roli. Zmienne przekazywane przez vars będą dostępne wewnątrz roli.

Różnica główna między include_role a import_role polega na czasie przetwarzania: import_role jest przetwarzany statycznie na etapie parsowania, podczas gdy include_role jest przetwarzany dynamicznie podczas wykonywania playbooka. Wpływa to na możliwość używania warunków i pętli:

Funkcja include_role import_role
Przetwarzanie Dynamiczne Statyczne
Użycie when do wywołania Tak Nie
Użycie loop do wywołania Tak Nie
Możliwość użycia zmiennych zdefiniowanych wcześniej w play Tak Nie

Wybór między tymi metodami zależy od wymaganego poziomu elastyczności i momentu przetwarzania. Do prostego dołączania ról zwykle wystarcza słowo kluczowe roles lub import_role. Dla bardziej złożonych scenariuszy z warunkami i pętlami używa się include_role.