Sobes.tech
Junior

Hoe roep je rollen aan in een Ansible-playbook?

sobes.tech AI

Antwoord van AI

Roles in Ansible kunnen op verschillende manieren worden aangeroepen binnen een playbook.

  1. Gebruik van het trefwoord roles op playbook-niveau:

    # playbooks/my_playbook.yml
    - name: Rollen toepassen op servers
      hosts: webservers
      become: yes
      roles:
        - role: common  # Aanroep van de 'common'-rol
        - role: nginx   # Aanroep van de 'nginx'-rol
          vars:         # Variabelen doorgeven aan de rol
            nginx_port: 8080
        - another_role # Verkorte vorm van aanroep
    

    Deze methode wordt gebruikt om rollen aan te roepen die sequentieel worden uitgevoerd op alle hosts die in de sectie hosts zijn gedefinieerd.

  2. Gebruik van de module include_role in de taaklijst:

    # playbooks/my_playbook.yml
    - name: Rollen met voorwaarden toepassen
      hosts: appservers
      tasks:
        - name: Database-rol opnemen (alleen voor dev)
          include_role:
            name: database
          when: env == 'dev' # Conditionele oproep
    
        - name: Applicatierol opnemen
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Variabelen doorgeven aan de rol
    

    De module include_role voert de rol uit alsof het een lijst met taken is die in de huidige play worden opgenomen. Het maakt gebruik van voorwaarden (when) en lussen (loop) om de uitvoering te controleren.

  3. Gebruik van de module import_role in de taaklijst:

    # playbooks/my_playbook.yml
    - name: Applicatierol importeren
      hosts: appservers
      tasks:
        - name: Applicatierol voor alle hosts importeren
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Variabelen doorgeven
    

    De module import_role wordt verwerkt tijdens de parsingfase van het playbook, vóór de daadwerkelijke uitvoering. Dit betekent dat alle directieven zoals when op alle taken binnen de rol van toepassing zijn, niet alleen op de rol-aanroep zelf. Variabelen die via vars worden doorgegeven, zijn binnen de rol beschikbaar.

Het belangrijkste verschil tussen include_role en import_role ligt in het moment van verwerking: import_role wordt statisch verwerkt tijdens de parseerfase, terwijl include_role dynamisch wordt verwerkt tijdens de uitvoering van het playbook. Dit beïnvloedt de mogelijkheid om voorwaarden en lussen te gebruiken:

Functie include_role import_role
Verwerking Dynamisch Statisch
Gebruik when voor oproepen Ja Nee
Gebruik loop voor oproepen Ja Nee
Mogelijkheid om variabelen te gebruiken die eerder in de play zijn gedefinieerd Ja Nee

De keuze tussen deze methoden hangt af van de vereiste flexibiliteit en het moment van verwerking. Voor eenvoudige rolopnames volstaat meestal het sleutelwoord roles of import_role. Voor complexere scenario's met voorwaarden en lussen wordt include_role gebruikt.