Ansible-rollen verbeteren met tags
Categories:
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 categorie | Tag | Beschrijving |
|---|---|---|
always of never | always | Voor taken die consequent moeten worden uitgevoerd, cruciaal voor beveiliging, naleving, of als vereisten (bijv. het ontsleutelen van Vault-items of fundamentele eerste stappen). |
never | Voor taken die niet mogen draaien tenzij expliciet gespecificeerd met --tags never. | |
install of config | install | Taken die zelden worden uitgevoerd, voornamelijk tijdens de initiële systeemopstelling of applicatie-installatie. |
config | Taken die vaak middelen wijzigen voor updates of optimalisaties. | |
system of application | system | Taken gericht op het besturingssysteem of systeemniveau configuraties. |
application | Taken die betrekking hebben op applicatieniveau configuraties, met directe impact op applicaties op het systeem. | |
| Configuratie-aanpak | config_api | Taken geconfigureerd via de API van het product. |
| Rolidentificatie | Rolnaam | Taken, 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.
Belangrijke opmerking over levenscyclusbeheer (LCM) operaties
Taken gerelateerd aan levenscyclusbeheer (LCM) operaties zoals upgrades, back-ups, herstel, downgrades en rollbacks zijn kritiek en potentieel ontwrichtend. Om onbedoelde opname in bredere taakuitvoeringen te voorkomen wanneer deze taken uitsluitend met tags worden beheerd:
- Gebruik specifieke configuratievariabelen (met veilige standaardwaarden, bijvoorbeeld false) om deze taken te activeren.
- Documenteer veilige uitvoeringsprocedures en bevestig de intentie van de gebruiker.
Voorbeelden en implementatie
In het bestand
tasks/main.ymlvan de Ansible Secrets-rol (c2platform.core.secrets) rol, merk op dat taken zijn getagd met de speciale Ansible-tagalways. Dit zorgt ervoor dat essentiële geheimen, zoals wachtwoorden in Ansible Vault , altijd beschikbaar zijn. Een andere rol die dealways-tag gebruikt is de Ansible CACerts2-rol (c2platform.core.cacerts2) waar het zorgt voor de uitvoering van “facts”-taken (bijv. intasks/certs.yml).Bekijk de bestanden
tasks/main.ymlentasks/main_base.ymlvan de Ansible Win-rol (c2platform.wincore.win). Inmain.ymlzijn alle taken getagd metinstall,systemenwin.--- - name: Include Windows system installation tasks (install, system, win) ansible.builtin.import_tasks: main_base.yml tags: [install, system, win]In de Ansible FME Flow-rol Ansible FME-Flow-rol (
c2platform.gis.fme-flow) in het bestandtasks/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,applicationenfme_flow. Merk op het gebruik vanimport_role. Het gebruik vaninclude_rolein plaats vanimport_roleresulteert 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.winen indirect viac2platform.gis.fme_flowmet 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
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-tagsper ongeluk dealways-tags overslaan. ↩︎
Feedback
Was deze pagina nuttig?
Fijn om te horen! Vertel ons alstublieft hoe we kunnen verbeteren.
Jammer om dat te horen. Vertel ons alstublieft hoe we kunnen verbeteren.