Sobes.tech
Junior

Ako volať role v playbooku Ansible?

sobes.tech AI

Odpoveď od AI

Roly v Ansible je možné volať viacerými spôsobmi v rámci playbooku.

  1. Použitie kľúčového slova roles na úrovni playbooku:

    # playbooks/my_playbook.yml
    - názov: Aplikácia rolí na serveroch
      hosts: webservers
      become: áno
      roles:
        - role: common  # Volanie role 'common'
        - role: nginx   # Volanie role 'nginx'
          vars:         # Prenos premenných do role
            nginx_port: 8080
        - another_role # Skrátená forma volania
    

    Tento spôsob sa používa na volanie rolí, ktoré budú vykonané postupne na všetkých hostiteľoch definovaných v sekcii hosts.

  2. Použitie modulu include_role v zozname úloh:

    # playbooks/my_playbook.yml
    - názov: Aplikácia rolí s podmienkami
      hosts: appservers
      tasks:
        - názov: Zapnutie databázovej role (len pre dev)
          include_role:
            name: database
          when: env == 'dev' # Podmienené volanie role
    
        - názov: Zapnutie aplikačnej role
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Prenos premenných do role
    

    Modul include_role vykonáva rolu ako by to bol zoznam úloh, začlenený do aktuálneho playbooku. Umožňuje používanie podmienok (when) a cyklov (loop) na riadenie vykonávania role.

  3. Použitie modulu import_role v zozname úloh:

    # playbooks/my_playbook.yml
    - názov: Importovanie role aplikácie
      hosts: appservers
      tasks:
        - názov: Importovanie role pre všetkých hostiteľov
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Prenos premenných
    

    Modul import_role je spracovávaný v štádiu parsovania playbooku, pred jeho skutočným vykonaním. To znamená, že všetky direktívy, ako je when, budú aplikované na všetky úlohy vnútri role, nie len na samotné volanie role. Premenné prenesené cez vars budú dostupné vo vnútri role.

Hlavný rozdiel medzi include_role a import_role spočíva v čase spracovania: import_role je spracovávaný staticky v štádiu parsovania, zatiaľ čo include_role dynamicky počas behu playbooku. To ovplyvňuje možnosť používania podmienok a cyklov:

Funkcia include_role import_role
Spracovanie Dynamické Statické
Použitie when na volanie Áno Nie
Použitie loop na volanie Áno Nie
Možnosť použitia premenných definovaných skôr v playbooku Áno Nie

Výber medzi týmito spôsobmi závisí od požadovanej flexibility a času spracovania. Pre jednoduché začlenenie rolí zvyčajne stačí kľúčové slovo roles alebo import_role. Pre zložitejšie scenáre s podmienkami a cyklami sa používa include_role.