Onderscheid tussen Ansible engineering en operations

Onderscheid ansible engineering en operations als afzonderlijke disciplines om hoogwaardige, onderhoudbare automatisering te garanderen.

Probleem

Zonder een duidelijk onderscheid tussen disciplines versmelten ansible engineering en ansible operations vaak, wat leidt tot slecht gestructureerde code, verminderde herbruikbaarheid en onderhoudsproblemen. Dit is vooral problematisch in organisaties die nieuw zijn met Ansible, waar de geavanceerde vaardigheden die nodig zijn voor engineering mogelijk niet worden herkend, wat leidt tot gehaaste of ondermaatse ontwikkeling.

Context

Ansible ondersteunt meerdere workflows: ontwikkelen van herbruikbare Ansible-content zoals Ansible-rollen en Ansible-collecties, versus het gebruiken van die content in Ansible-inventarisprojecten voor configuratiebeheer. Ansible engineering richt zich op het creëren van krachtige, flexibele content die adaptief kan worden geconfigureerd. Daarentegen benadrukt ansible operations het toepassen van deze content om desired state configuration te bereiken in verschillende omgevingen. Het vervagen van deze grenzen kan resulteren in ad-hoc, niet-idempotente automatisering die modulariteit mist. Deze richtlijn is cruciaal voor teams die Ansible adopteren zonder eerdere ervaring, omdat engineering diepere kennis vereist van beste praktijken, testen en het Ansible-ecosysteem.

Oplossing

Om duidelijkheid en kwaliteit te behouden, scheid ansible engineering van ansible operations als volgt:

  1. Definieer Rollen Duidelijk

    Wijs ansible engineers toe om zich te richten op het ontwikkelen, testen en publiceren van Ansible-collecties en Ansible-rollen. Ze moeten prioriteit geven aan herbruikbaarheid, flexibiliteit en naleving van beste praktijken, met behulp van tools zoals Ansible Galaxy voor delen. Dit omvat het creëren, ontwerpen en engineeren van de Ansible-inventarisprojecten, de structuur en mechanismen— bijvoorbeeld voor het beheren van omgevingsverschillen.

  2. Richt Operations op Toepassing

    Laat ansible operators Ansible-inventarisprojecten beheren, inclusief playbooks, inventarisbestand, groepsvariabelen en afhankelijkheden. Ze gebruiken bestaande content voor taken zoals orkestratie, configuratie en automatiseringsworkflows, mogelijk integrerend met Ansible Automation Platform voor schaling. Operators gebruiken en beheren het Ansible-inventarisproject—bijvoorbeeld om omgevingen te definiëren, hosts toe te voegen aan Ansible-groepen en omgevingsgroepen te beheren. Ze gebruiken het om infrastructuur effectief te beheren.

  3. Moedig Overlap Aan met Training

    Sta vaardigheidsoverlap toe, maar bied gerichte training—benadruk softwareontwikkeling voor engineers en infrastructuurbeheer voor operators—om expertise op te bouwen zonder verantwoordelijkheden te vermengen.

Voordelen

  • Verbetert codekwaliteit door engineers in staat te stellen modulaire, flexibele content te creëren terwijl operators zich richten op betrouwbare toepassing.
  • Verbetert schaalbaarheid en onderhoudbaarheid, vermindert fouten in productieomgevingen.
  • Ondersteunt organisatorische adoptie van Ansible door focus toe te wijzen aan vaardigheidsontwikkeling, vooral in teams met beperkte ervaring.
  • Bevordert samenwerking door duidelijke grenzen, wat efficiënt gebruik van gedeelde resources zoals collecties mogelijk maakt.

Alternatieven (Optioneel)

Sommige teams combineren rollen in een enkel “Ansible-gebruiker”-profiel, maar dit leidt vaak tot inefficiënte code en burnout. Hoewel geldig voor kleine opstellingen, is het minder effectief op schaal vergeleken met afzonderlijke disciplines, die beter aansluiten bij DevOps-principes zoals scheiding van concerns.

Voorbeelden en Implementatie

In een organisatie die Ansible adopteert:

  • Engineering-Voorbeeld: Met behulp van een Ansible-ontwikkelomgeving ontwikkelt een ansible engineer een Ansible Windows-collectie  c2platform.wincore met een flexibele en krachtige Microsoft AD-rol  c2platform.wincore.ad die kan worden gebruikt om MS AD-controller te beheren en nodes toe te voegen aan het AD-domein. De engineer publiceert deze collectie naar Ansible Galaxy. Zie  c2platform.wincore. De engineer heeft ook een Ansible-inventarisproject gecreëerd met een aanpak op basis van groepgebaseerde omgevingen, die de engineer in staat stelt een echte IaC-aanpak te volgen. Dit beheert verschillen tussen omgevingen efficiënt en codeert de beleidsregels voor de systemen, infrastructuur en applicaties voor alle omgevingen.

    De engineer zal bijvoorbeeld coderen dat elk node zich aansluit bij de juiste Microsoft AD-controller voor de omgeving door twee projectvariabelen gs_ad_controller en gs_add_controller_ip in te voeren in de Ansible-groep all.

     group_vars/all/ad.yml

    11
    12gs_ad_controller: "{{ groups['ad'] | intersect(groups[gs_env]) | first }}"
    13gs_ad_controller_ip: "{{ hostvars[gs_ad_controller].ansible_host }}"
    

    Deze variabelen worden vervolgens gebruikt om FME-nodes te configureren om de juiste AD-controller te gebruiken en zich aan te sluiten bij het juiste AD-domein, dat past bij de omgeving (ontwikkeltest):

     group_vars/fme/ad.yml

    ---
    ad_resources_types: ['ad_dns_client', 'ad_membership']
    ad_dns_client:
      - name: Use AD DNS sever
        adapter_names: '*'
        # log_path: C:\dns_log.txt
        dns_servers:
          - "{{ gs_ad_controller_ip }}"
    ad_membership:
      - name: Join domain
        hostname: "{{ inventory_hostname }}"
        dns_domain_name: "{{ gs_ad_domain_name }}"
        domain_admin_user: "{{ gs_ad_domain_name_admin }}@{{ gs_ad_domain_name }}"
        domain_admin_password: "{{ gs_ad_admin_password }}"
        state: domain
        reboot: true
    
  • Operations-Voorbeeld: Een ansible operator gebruikt het Ansible-inventarisproject om de testomgeving in te stellen door een nieuwe Ansible-groep test te creëren en 5 hosts in de groep te plaatsen:

     hosts.ini

    32[test]
    33gst-rproxy1         ansible_host=1.1.5.209
    34gst-awx1            ansible_host=1.1.5.164
    35gst-db1             ansible_host=1.1.5.210
    36gst-fme-core        ansible_host=1.1.8.118
    37gst-ad              ansible_host=1.1.8.119
    

    De operator zal vervolgens elke host in de juiste Ansible-groep plaatsen, en op die manier de juiste rol toewijzen. Bijvoorbeeld, de host gst-ad wordt toegevoegd aan de Microsoft AD-controller groep ad en de host gst-rproxy1 wordt toegevoegd aan de Apache reverse proxy groep reverse_proxy:

     hosts.ini

    72[ad]
    73gsd-ad
    74gst-ad
    75
    76[reverse_proxy]
    77gsd-rproxy1
    78gst-rproxy1
    

    Nu het Ansible-inventarisproject op een dergelijke manier is ontworpen door de ansible engineer dat de gst-fme-core node de juiste AD-controller gst-ad zal gebruiken (en niet de ontwikkelnode gsd-ad). De operator hoeft zich hier niet van bewust te zijn.

Deze scheiding zorgt ervoor dat engineering robuuste content produceert, terwijl operations het effectief toepast.

Aanvullende Informatie

Voor verdere referentie, verken de volgende informatie:

  • Ansible-inventarisproject: Een gestructureerde verzameling bestanden die worden gebruikt voor het beheren van hosts en configuraties. Het omvat doorgaans inventarisbestanden, playbooks, hostvariabelen, groepsvariabelen en Ansible Vault-bestanden.