Gebruik dynamische inventaris in ontwikkeling
Categories:
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:
- 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.
- 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 eenhosts.inibestand 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.
| Type | Infra-team | DevOps-team | Label(s) | Ansible-groep(en) | Beschrijving |
|---|---|---|---|---|---|
| VM Image | Verantwoordelijk | ubuntu ubuntu24 | ubuntu ubuntu24 | Labels voor op Ubuntu 24 gebaseerde images; vormt een Ansible-groep voor alle Ubuntu-hosts | |
| VM Image | Verantwoordelijk | rhel rhel9 | rhel rhel9 | Labels voor Red Hat Enterprise Linux 9 images; groepeert RHEL-hosts. | |
| VM Image | Verantwoordelijk | win win2022 | win win2022 | Labels voor Windows 2022 images; groepeert alle Windows-hosts. | |
| DTAP | Biedt opties | Selecteert | development test acceptance production | development test acceptance production | Omgevingslabels; wijst hosts toe aan een specifieke omgeving. |
| Service/Application | Biedt opties | Selecteert | hello-world | hello-world | Applicatierol-label; creëert een groep voor hosts die de “hello-world”-app draaien. |
| Ansible-inventaris | Verantwoordelijk | linux | linux | Statische 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.
22 ubuntu22-lxd:
23 name: c2platform/ubuntu-jammy
24 version: 0.1.1
25 provider: lxd
26 labels: [ubuntu, lxd, ubuntu22]
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.
# 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:
lxd,ubuntuenubuntu22zijn afkomstig van de definitie van de Vagrant boxubuntu22-lxdinVagrantfile.yml.s3ens3_download_servervan de definitie van de nodepxd-s3inVagrantfile.yml.linuxvanhosts.ini.
Additional Information
- Voor meer informatie over GitLab Runner als controlenode: Gebruik van GitLab Runner als Ansible Control Node
- Voor meer informatie over de
pxd-s3-node: Creëren en testen van een S3-service - Ansible-inventarisproject: Een gestructureerde verzameling bestanden die worden gebruikt voor het beheren van hosts en configuraties. Het omvat doorgaans inventarisbestanden, playbooks, hostconfiguraties, groepsvariabelen en Ansible Vault-bestanden.
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.