Sobes.tech
Junior

Jak volat role v playbooku Ansible?

sobes.tech AI

Odpověď od AI

Role v Ansible lze volat několika způsoby v rámci playbooku.

  1. Použití klíčového slova roles na úrovni playbooku:

    # playbooks/my_playbook.yml
    - název: Aplikace rolí na servery
      hosts: webservers
      become: ano
      roles:
        - role: common  # Volání role 'common'
        - role: nginx   # Volání role 'nginx'
          vars:         # Předání proměnných do role
            nginx_port: 8080
        - another_role # Zkrácená forma volání
    

    Tento způsob se používá pro volání rolí, které budou provedeny postupně na všech hostitelích definovaných v sekci hosts.

  2. Použití modulu include_role v seznamu úkolů:

    # playbooks/my_playbook.yml
    - název: Aplikace rolí s podmínkami
      hosts: appservers
      tasks:
        - název: Zapnutí databázové role (pouze pro dev)
          include_role:
            name: database
          when: env == 'dev' # Podmíněné volání role
    
        - název: Zapnutí aplikační role
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Předání proměnných do role
    

    Modul include_role provádí roli jako by to byl seznam úkolů, začleněný do aktuálního playbooku. Umožňuje používat podmínky (when) a smyčky (loop) pro řízení provádění role.

  3. Použití modulu import_role v seznamu úkolů:

    # playbooks/my_playbook.yml
    - název: Importování role aplikace
      hosts: appservers
      tasks:
        - název: Importování role aplikace pro všechny hostitele
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Předání proměnných
    

    Modul import_role je zpracováván ve fázi parsování playbooku, před jeho skutečným provedením. To znamená, že všechny direktivy, jako je when, budou aplikovány na všechny úkoly uvnitř role, nikoli pouze na samotné volání role. Proměnné předané přes vars budou dostupné uvnitř role.

Hlavní rozdíl mezi include_role a import_role spočívá v době zpracování: import_role je zpracováván staticky ve fázi parsování, zatímco include_role dynamicky během běhu playbooku. To ovlivňuje možnost použití podmínek a smyček:

Funkce include_role import_role
Zpracování Dynamické Statické
Použití when pro volání Ano Ne
Použití loop pro volání Ano Ne
Možnost použití proměnných definovaných dříve v playbooku Ano Ne

Volba mezi těmito způsoby závisí na požadované flexibilitě a době zpracování. Pro jednoduché začlenění rolí obvykle stačí klíčové slovo roles nebo import_role. Pro složitější scénáře s podmínkami a smyčkami se používá include_role.