Sobes.tech
Junior

Cum se apelează rolurile în playbook-ul Ansible?

sobes.tech AI

Răspuns de la AI

Rolurile în Ansible pot fi invocate în mai multe moduri în cadrul unui playbook.

  1. Utilizarea cuvântului cheie roles la nivelul playbook-ului:

    # playbooks/my_playbook.yml
    - name: Aplică roluri pe servere
      hosts: webservers
      become: yes
      roles:
        - role: common  # Invocarea rolului 'common'
        - role: nginx   # Invocarea rolului 'nginx'
          vars:         # Transmiterea variabilelor către rol
            nginx_port: 8080
        - another_role # Forma scurtă de invocare
    

    Acest mod este folosit pentru a invoca roluri care vor fi executate secvențial pe toți gazdele definite în secțiunea hosts.

  2. Utilizarea modulului include_role în lista de sarcini:

    # playbooks/my_playbook.yml
    - name: Aplică roluri cu condiții
      hosts: appservers
      tasks:
        - name: Incluzând rolul bazei de date (doar pentru dev)
          include_role:
            name: database
          when: env == 'dev' # Invocarea condiționată a rolului
    
        - name: Incluzând rolul aplicației
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Transmiterea variabilelor către rol
    

    Modulul include_role execută rolul ca și cum ar fi o listă de sarcini inclusă în play-ul curent. Permite utilizarea condițiilor (when) și a buclelor (loop) pentru controlul execuției rolului.

  3. Utilizarea modulului import_role în lista de sarcini:

    # playbooks/my_playbook.yml
    - name: Importă rolul aplicației
      hosts: appservers
      tasks:
        - name: Importă rolul aplicației pentru toate gazdele
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Transmiterea variabilelor
    

    Modulul import_role este procesat în etapa de analiză a playbook-ului, înainte de execuția sa efectivă. Aceasta înseamnă că toate directivele, precum when, vor fi aplicate tuturor sarcinilor din rol, nu doar apelului de rol. Variabilele transmise prin vars vor fi disponibile în interiorul rolului.

Diferența principală între include_role și import_role constă în momentul de procesare: import_role este procesat static în etapa de analiză, în timp ce include_role este procesat dinamic în timpul execuției playbook-ului. Acest lucru influențează posibilitatea de a folosi condiții și bucle:

Funcție include_role import_role
Procesare Dinamică Statică
Utilizare when pentru invocare Da Nu
Utilizare loop pentru invocare Da Nu
Posibilitatea de a folosi variabile definite anterior în play Da Nu

Alegerea între aceste metode depinde de flexibilitatea necesară și de momentul de procesare. Pentru includerea simplă a rolurilor, de obicei, este suficient cuvântul cheie roles sau import_role. Pentru scenarii mai complexe cu condiții și bucle, se folosește include_role.