Ansible-rollen verbeteren met tags

Implementeer een gestructureerd taggingsysteem in Ansible-rollen om de flexibiliteit van taken te vergroten, de onderhoudbaarheid te verbeteren en de herbruikbaarheid te optimaliseren, zowel voor ontwikkelings- als operationele efficiëntie.

Probleem

Het beheren van grote Ansible-playbooks kan omslachtig en tijdrovend zijn, vooral wanneer het gehele playbook moet worden uitgevoerd voor ontwikkeling of reguliere operaties. Deze inefficiëntie is vooral merkbaar tijdens de ontwikkelingsfase, waar snelle tests van specifieke playbook-onderdelen noodzakelijk zijn, of in productiesituaties waar operaties kunnen vragen om variërende uitvoeringsfrequenties.

Context

In Ansible-automatisering maken tags selectieve uitvoering van taken binnen playbooks en Ansible-rollen mogelijk. Zonder een consistente taggingsstrategie worden playbooks moeilijk te beheren, wat leidt tot onnodige taakuitvoeringen, langere uitvoeringstijden en verminderde efficiëntie in zowel ontwikkelings- als operationele scenario’s. Een gestructureerde aanpak sluit aan bij best practices voor modulaire, herbruikbare automatisering in Ansible-collecties en Ansible-inventarisprojecten.

Oplossing

Verhoog de flexibiliteit en beheerbaarheid van je playbooks door een gestructureerd en betekenisvol taggingschema voor Ansible-rollen en taken te implementeren. Door een goed gedefinieerde taggingsaanpak te volgen, kun je efficiënt omgaan met de gebruikelijke installatie- en configuratiestadia die relevant zijn voor implementatieprocessen.

Taggingschema

Overweeg de volgende taggingsstrategie voor de timing van taakuitvoer en operationele niveaus:

Tag categorieTagBeschrijving
always of neveralwaysVoor taken die consequent moeten worden uitgevoerd, cruciaal voor beveiliging, naleving, of als vereisten (bijv. het ontsleutelen van Vault-items of fundamentele eerste stappen).
neverVoor taken die niet mogen draaien tenzij expliciet gespecificeerd met --tags never.
install of configinstallTaken die zelden worden uitgevoerd, voornamelijk tijdens de initiële systeemopstelling of applicatie-installatie.
configTaken die vaak middelen wijzigen voor updates of optimalisaties.
system of applicationsystemTaken gericht op het besturingssysteem of systeemniveau configuraties.
applicationTaken die betrekking hebben op applicatieniveau configuraties, met directe impact op applicaties op het systeem.
Configuratie-aanpakconfig_apiTaken geconfigureerd via de API van het product.
RolidentificatieRolnaamTaken, met uitzondering van always of never taken1, in een rol zijn getagd met de rolnaam, zoals linux voor taken in de c2platform.core.linux rol.

Aanvullende specifieke module-tags of aangepaste tags kunnen naar behoefte worden toegevoegd.

Voordelen

De voordelen van een duidelijk taggingschema omvatten:

  • Flexibiliteit: Naadloze uitvoering van specifieke segmenten van implementatie- of onderhoudsprocessen.
  • Onderhoudbaarheid: Vereenvoudig het begrip en onderhoud van playbooks met duidelijke tags.
  • Herbruikbaarheid: Pas rollen aan voor verschillende operationele vereisten zonder de rol zelf te wijzigen.

Alternatieven

Hoewel ad-hoc tagging werkt voor kleine playbooks, ontbreekt het aan consistentie in grotere projecten. Conditionele logica met variabelen kan vergelijkbare selectiviteit bereiken, maar is complexer te onderhouden dan tags. Het gestructureerde schema heeft de voorkeur vanwege zijn eenvoud en afstemming op Ansible’s taggebaseerde uitvoering.

Voorbeelden en implementatie

  1. In het bestand tasks/main.yml van de Ansible Secrets-rol ( c2platform.core.secrets) rol, merk op dat taken zijn getagd met de speciale Ansible-tag always. Dit zorgt ervoor dat essentiële geheimen, zoals wachtwoorden in Ansible Vault , altijd beschikbaar zijn. Een andere rol die de always-tag gebruikt is de Ansible CACerts2-rol ( c2platform.core.cacerts2) waar het zorgt voor de uitvoering van “facts”-taken (bijv. in tasks/certs.yml).

  2. Bekijk de bestanden tasks/main.yml en tasks/main_base.yml van de Ansible Win-rol ( c2platform.wincore.win). In main.yml zijn alle taken getagd met install, system en win.

    ---
    - name: Include Windows system installation tasks (install, system, win)
      ansible.builtin.import_tasks: main_base.yml
      tags: [install, system, win]
    
  3. In de Ansible FME Flow-rol Ansible FME-Flow-rol ( c2platform.gis.fme-flow) in het bestand tasks/main.yml, wordt de volgende code gevonden:

    - name: Include role win
      ansible.builtin.import_role:
        name: c2platform.wincore.win
        tasks_from: main_base
      vars:
        win_resources: "{{ fme_flow_win_resources }}"
        win_resources_types: "{{ fme_flow_win_resources_types }}"
        win_resource_groups_disabled: "{{ fme_flow_win_resource_groups_disabled }}"
      tags: [config, application, fme_flow]
    

    De code incorporeert de Windows-rol in de FME Flow-rol en tagt alle taken met config, application en fme_flow. Merk op het gebruik van import_role. Het gebruik van include_role in plaats van import_role resulteert in ander gedrag met betrekking tot taaktagging.

    Overweeg dit eenvoudige FME-play:

    - name: FME
      hosts: fme
    
      roles:
        - { role: c2platform.wincore.win }
        - { role: c2platform.gis.java }
        - { role: c2platform.gis.fme_flow }
    

    Dit play bevat de Windows-rol direct als c2platform.wincore.win en indirect via c2platform.gis.fme_flow met verschillende tags.

Voor implementatievoorbeelden en verdere begeleiding, raadpleeg het Linux-taggingvoorbeeld Gebruik van Tags met de Linux Play of voor een uitgebreider voorbeeld zie Versnellen van Ansible Provisioning met FME Flow via Ansible Tags . Voor aanvullende referentie en informatie over Ansible-tags zie Tags — Ansible Community Documentation 

Voetnoten


  1. Vermijd het taggen van taken met de always-tag met de Ansible-rolnaam, aangezien dit de waarde van de rolnaamtag sterk zou verminderen. In dergelijke gevallen zou het gebruik van de rolnaam met --skip-tags per ongeluk de always-tags overslaan. ↩︎