Gebruik dynamische inventaris in ontwikkeling

Richtlijn voor het gebruik van dynamische inventaris in Ansible-ontwikkelomgevingen als concreet voorbeeld om toekomstige volledige automatisering te illustreren voor organisaties die nieuw zijn met Ansible.

Projects:  c2platform/phx/ansible

Problem

Voor organisaties die nieuw zijn met automatisering, biedt dynamische inventaris mogelijk beperkte directe waarde, omdat handmatige stappen vaak eerst moeten worden geautomatiseerd.

Onbekendheid met Ansible en de werking van inventarissen, zoals regels voor variable precedence rules, kan leiden tot suboptimale oplossingen. Teams kunnen bijvoorbeeld het toevoegen van servers aan het inventarisproject automatiseren om taken voor Ansible operators te vereenvoudigen.

Deze aanpak heeft twee problemen:

  1. Het beheren van het inventarisbestand met Ansible-groepen en nodes is niet overdreven complex, en de Ansible operator moet een grondig begrip ervan hebben, ongeacht, omdat het de basis vormt van effectieve automatisering.
  2. Het automatiseren van deze “complexiteit” wordt natuurlijk opgelost bij het adopteren van dynamische inventaris.

Context

In Nederlandse overheidsorganisaties die beginnen met automatisering, is de vertrouwdheid met Ansible vaak beperkt, laat staan met concepten zoals dynamische inventaris. Dit is de primaire context.

Dynamische inventaris vertegenwoordigt een toekomstige mijlpaal. In een volwassen professionele omgeving kan een aanvraag in tools zoals vRA voor een server of volledige omgeving (meerdere servers) voldoende zijn. Een Ansible operator zou alleen het vRA-portal nodig hebben om te provisionen. De vRA-opzet past labels toe die een dynamische inventaris-plugin gebruikt voor volledige provisioning, zonder het inventarisproject aan te passen.

Solution

Begin met dynamische inventaris in de ontwikkelomgeving, waar dit eenvoudig te implementeren is. Gebruik dit werkende voorbeeld om voordelen uit te leggen en te illustreren aan organisaties die nieuw zijn met Ansible, en toon hoe het volledig geautomatiseerde provisioning mogelijk maakt zonder handmatige stappen. Dit demonstreert toekomstige schaalbaarheid en vereenvoudigt het beheer van inventarissen naarmate de automatisering volwassener wordt.

Benefits

  • Biedt een praktisch voorbeeld om organisaties te begeleiden naar geavanceerde automatisering.
  • Vermindert handmatige updates van inventarissen naarmate de infrastructuur schaalt.
  • Bouwt begrip van Ansible op door toepassing in de praktijk.
  • Bereidt teams voor op productie-achtige automatisering.

Examples and Implementation

VMware vRealize Automation (vRA)

Dit diagram illustreert de collaboratieve rollen van het infra-team en DevOps-team in een op vRA gebaseerde omgeving:

  • Het infra-team richt vRA in voor VM-aanvragen via het vRA-portal en wijst labels toe aan images (bijv. ubuntu, ubuntu24, rhel, rhel9, win, win2022).
  • Het DevOps-team selecteert vooraf gedefinieerde omgevingslabels (bijv. development, test, acceptance, production) en applicatierol-labels (bijv. hello-world) via het portal.
  • Het DevOps-team gebruikt een Dynamische inventaris plugin om gelabelde nodes op te halen uit de vRA API, waarbij hostinformatie en Ansible-groepen worden gegenereerd.
  • Aanvullende statische groepen (bijv. linux) worden gedefinieerd in een hosts.ini bestand voor bredere targeting, en blijven statisch na de initiële setup. Dit bestand is onderdeel van het Ansible-inventarisproject .

Tabel die het labelingschema illustreert voor images en VMs, met hoe vRA labels overeenkomen met Ansible-groepen en de verantwoordelijkheden van Infra- en DevOps-teams.

TypeInfra-teamDevOps-teamLabel(s)Ansible-groep(en)Beschrijving
VM ImageVerantwoordelijkubuntu ubuntu24ubuntu ubuntu24Labels voor op Ubuntu 24 gebaseerde images; vormt een Ansible-groep voor alle Ubuntu-hosts
VM ImageVerantwoordelijkrhel rhel9rhel rhel9Labels voor Red Hat Enterprise Linux 9 images; groepeert RHEL-hosts.
VM ImageVerantwoordelijkwin win2022win win2022Labels voor Windows 2022 images; groepeert alle Windows-hosts.
DTAPBiedt optiesSelecteertdevelopment test acceptance productiondevelopment test acceptance productionOmgevingslabels; wijst hosts toe aan een specifieke omgeving.
Service/ApplicationBiedt optiesSelecteerthello-worldhello-worldApplicatierol-label; creëert een groep voor hosts die de “hello-world”-app draaien.
Ansible-inventarisVerantwoordelijklinuxlinuxStatische groep gedefinieerd in hosts.ini voor bredere targeting van Linux-hosts.

Example in Development

De inventaris-plugin voor Vagrant illustreert hoe het vRA-voorbeeld zou werken. Het werkt op dezelfde fundamentele principes en biedt een concreet voorbeeld van hoe labels in de virtualisatietechnologie—vRA in productie-achtige domeinen of Vagrant in ontwikkeling—worden gebruikt met een plugin om dynamisch hostinformatie te genereren en Ansible-groepen te definiëren.

Inventory Plugin for Vagrant

Vagrantfile.yml

De Vagrantfile.yml definieert de pxd-s3-node met behulp van de ubuntu22-lxd box, wijst IP 192.168.60.14 toe en specificeert de playbook mgmt/s3 voor provisioning. Vagrant gebruikt dit om de node te creëren en te configureren.

 Vagrantfile.yml

22  ubuntu22-lxd:
23    name: c2platform/ubuntu-jammy
24    version: 0.1.1
25    provider: lxd
26    labels: [ubuntu, lxd, ubuntu22]

 Vagrantfile.yml

264  - name: s3
265    short_description: S3
266    description: MinIO S3
267    box: ubuntu22-lxd
268    ip-address: 192.168.60.14
269    plays:
270      - mgmt/s3
271    labels:
272      - s3
273      - s3_download_server

De dynamische inventaris-plugin wijst deze node toe aan de Ansible-groepen s3 en s3_download_server op basis van de labels. In deze testopzet behoort pxd-s3 tot beide groepen en dient als zowel de S3-server als de testclient. In productie-achtige scenario’s zouden deze rollen worden gescheiden.

hosts.ini

Dit statische inventarisbestand biedt basisgroepen en variabelen.

 hosts.ini

# Note: hosts and groups come from Vagrantfile.yml primarily

[linux:children]
ubuntu
rhel

[win_ssh_server:children]
win

[linux:vars]
ansible_user=vagrant
ansible_password=vagrant

[win:vars]
#ansible_connection=ssh
#ansible_shell_type=cmd
ansible_user=vagrant
ansible_password=vagrant
ansible_connection=winrm
#ansible_port=5985
ansible_winrm_transport=basic
ansible_winrm_server_cert_validation=ignore

Group Membership Example

Deze sectie demonstreert hoe Ansible-groepen dynamisch worden toegewezen aan een node met behulp van de dynamische inventaris-plugin en statische definities.

Laten we de node pxd-s3 als voorbeeld nemen. Met de debug-module kunnen we de group_names voor pxd-s3 opvragen. Zie hieronder.

ansible -m debug -a 'msg={{group_names}}' pxd-s3
θ61° [:ansible-phx]└2 master(+2/-1) ± ansible -m debug -a 'msg={{group_names}}' pxd-s3
ini_path: /home/onknows/git/gitlab/c2/ansible-phx/hosts.ini
pxd-s3 | SUCCESS => {
    "msg": [
        "development",
        "linux",
        "lxd",
        "s3",
        "s3_download_server",
        "ubuntu",
        "ubuntu22"
    ]
}

De Ansible-groepen worden als volgt afgeleid:

  1. lxd, ubuntu en ubuntu22 zijn afkomstig van de definitie van de Vagrant box ubuntu22-lxd in Vagrantfile.yml.
  2. s3 en s3_download_server van de definitie van de node pxd-s3 in Vagrantfile.yml.
  3. linux van hosts.ini.

Additional Information



Laatst gewijzigd 2026.02.02: phx dev environment PHX-1 (01c489d)