Verificatie phx omgevingsgroepcontrole
Categories:
Projects: c2platform/phx/ansible
Opmerking:
De
ontwikkelomgeving van de open source PHX
Referentie-implementatie maakt gebruik van een
Dynamische inventaris om hostinformatie dynamisch te genereren. Deze plugin zorgt ervoor dat het onmogelijk is om een node in
twee omgevingen te plaatsen omdat het omgevingslabel wordt afgeleid van het prefix—bijvoorbeeld,
pxd voor development, pxt voor test, enzovoort. Met andere woorden,
het is moeilijk en onwaarschijnlijk om een configuratiefout te maken.
In het air-gapped PHX-domein / datacenter wordt “normale” statische inventaris gebruikt, en als gevolg daarvan is het mogelijk voor de Ansible engineer of Ansible operator om onopzettelijk de node in “geen” of meer dan één omgeving te plaatsen. Het is niet onwaarschijnlijk dat configuratiefouten worden gemaakt.
In deze handleiding simuleren we een configuratiefout om te valideren dat de omgevingscontrole correct werkt.
Randvoorwaarden
Voor het doel van deze handleiding maakt de specifieke node niet uit, omdat de
omgevingscontrole het volledige
Ansible-inventarisproject valideert. We gebruiken de
ontwikkeldesktop pxd-ubuntu-devtop. Zie voor het aanmaken en starten
van deze node:
- Ansible ontwikkeldesktop in PHX-domein: Uitrollen en beheren van een Ansible ontwikkeldesktop die de setup in het air-gapped PHX-domein simuleert.
Verificatie omgevingscontrole
Een omgevingscontrole is geïmplementeerd in het
Ansible-inventarisproject van het PHX-project
c2platform/phx/ansible .
De controle zorgt ervoor dat als onderdeel van een aanpak met
groepgebaseerde omgevingen,
die deel uitmaakt van de inventarisstrategie van dit project, een host in niet meer dan één
en ten minste één
Ansible-omgevingsgroep zit. Laten we controleren of dat werkt.
Actieve groepen
Voer de volgende opdracht uit om de
Ansible-groepen te zien waarvan de Vagrant-node
pxd-ubuntu-devtop deel uitmaakt. Dit zal tonen dat deze node deel uitmaakt van
omgevingsgroep development.
ansible -m debug -a 'msg={{group_names}}' pxd-ubuntu-devtop
Toon me
Zoals eerder vermeld, wordt de “omgeving” afgeleid van het prefix. Om dit te controleren
kun je het bestand Vagrantfile.yml openen, de configuratie van de node
pxd-ubuntu-devtop vinden en een regel prefix: pxt toevoegen onder de regel met name.
100 - name: ubuntu-devtop
101 description: Ansible Development Desktop
102 box: ubuntu24-lxd
103 ip-address: 192.168.60.11
104 plays:
105 - dev/desktop
106 labels:
107 - desktop
108 - ubuntu_devtop
109 - radix_guardian
Met de regel toegevoegd, moet de configuratie er ongeveer als volgt uitzien:
- name: ubuntu-devtop
prefix: pxt
description: Ansible Development Desktop
box: ubuntu24-lxd
ip-address: 192.168.60.11
plays:
- dev/desktop
labels:
- desktop
- ubuntu_devtop
- radix_guardian
Het uitvoeren van de debug-opdracht opnieuw, nu voor node pxt-ubuntu-devtop, zal nu tonen
dat pxt-ubuntu-devtop deel uitmaakt van de test-omgeving.
ansible -m debug -a 'msg={{group_names}}' pxt-ubuntu-devtop
Toon me
Niet meer dan één
Om te valideren dat de omgevingscontrole werkt, introduceren we opzettelijk een
configuratiefout die onmogelijk zou zijn bij normaal gebruik van dynamische inventaris.
In het inventarisproject is een variabele px_envs geïntroduceerd om te definiëren welke
Ansible-groepen van het speciale type
Ansible-omgevingsgroep zijn.
3px_envs: ['test', 'development']
Open dat bestand group_vars/all/env.yml en voeg linux toe.
px_envs: [test, development, linux]
Nu de node in twee omgevingsgroepen zit, voer provisioning opnieuw uit:
vagrant provision pxd-ubuntu-devtop
Dit zal nu mislukken met een bericht zoals hieronder:
Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test, development, linux!
TASK [c2platform.core.linux : Fail with custom message] ************************
failed: [pxd-ubuntu-devtop] (item=Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test, development, linux!) => changed=false
ansible_loop_var: item
item:
msg: 'Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test, development, linux!'
name: Environment pxd-ubuntu-devtop → development, linux
resource_group: 0_bootstrap
type: fail
when: true
msg: 'Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test, development, linux!'
Dit verifieert dat - in geval we statische inventaris gebruiken zoals in het
air-gapped PHX-domein/datacenter, de omgevingscontrole die de gedefinieerde
omgevingsgroepen-variabele px_envs gebruikt, ons beschermt tegen het maken van
configuratiefouten.
Ten minste één
Om de omgevingscontrole verder te verifiëren, herstel de vorige wijziging in
px_envs door linux te verwijderen, en verwijder ook development uit px_envs.
De bijgewerkte variabele moet er als volgt uitzien:
px_envs: [test]
Nu, met de node niet langer geassocieerd met enige omgevingsgroep, voer provisioning opnieuw uit:
vagrant provision pxd-ubuntu-devtop
Dit zal mislukken met een bericht zoals hieronder, wat aangeeft dat de node niet in enige van de gedefinieerde omgevingsgroepen zit:
Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test!
TASK [c2platform.core.linux : Fail with custom message] ************************
failed: [pxd-ubuntu-devtop] (item=Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test!) => changed=false
ansible_loop_var: item
item:
msg: 'Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test!'
name: 'Environment pxd-ubuntu-devtop → '
resource_group: 0_bootstrap
type: fail
when: true
msg: 'Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test!'
Deze stap bevestigt dat de omgevingscontrole niet alleen de regel “niet meer dan één” afdwingt, maar ook de regel “ten minste één”. Door ervoor te zorgen dat elke node is toegewezen aan precies één omgevingsgroep, voorkomt het configuratiefouten zoals wees-nodes of onvolledige setups. In een productielijke statische inventarisscenario is deze validatie cruciaal voor het behouden van consistentie en betrouwbaarheid over omgevingen heen.
Review
Hoe is dit nu geïmplementeerd in het
Ansible-inventarisproject in de map
groepsvariabelen?
Kijk eerst naar de group_vars/all/env.yml:
---
px_env: "{{ group_names | intersect(px_envs) | first }}"
px_envs: ['test', 'development']
px_envs_node: "{{ group_names | intersect(px_envs) }}"
px_envs_node_count: "{{ px_envs_node | length }}"
px_envs_check:
name: >-
Environment {{ inventory_hostname }} → {{ px_envs_node | join(', ') }}
type: fail
msg: >-
Node {{ inventory_hostname }} should be associated with exactly
one environment group of: {{ px_envs | join(', ') }}!
when: "{{ px_envs_node_count != '1' }}"
Dit YAML-bestand definieert variabelen om het beleid voor omgevingsgroepen af te dwingen als onderdeel van een strategie met groepgebaseerde omgevingen:
- De variabele
px_envssomt toegestane omgevingsgroepen op (testendevelopment). - De variabele
px_envs_nodeidentificeert tot welke van deze groepen de huidige host behoort door de groepsnamen van de host te snijden metpx_envs. - De variabele
px_envs_node_counttelt deze snijpunten. - De variabele
px_envs_checkconfigureert een faalconditie: het activeert een faaltaak als het aantal niet precies 1 is, met een bericht dat aangeeft dat de host aan precies één omgevingsgroep moet behoren.
We kunnen nu de variabele px_envs_check gebruiken om de controle te configureren voor Linux-systemen
(die deel uitmaken van de linux-groep). En om de controle te configureren voor Windows-systemen
(die deel uitmaken van de win-groep). Merk op dat we op zowel Linux- als Windows-hosts de module
ansible.builtin.fail kunnen gebruiken.
---
linux_resources:
0_bootstrap:
- "{{ px_envs_check }}"
26win_resources:
27 0_bootstrap:
28 - name: Apps folder
29 type: win_file
30 path: "{{ px_apps_dir }}"
31 state: directory
32 - "{{ px_envs_check }}"
Merk verder op dat de variabelen linux_resources en win_resources die worden gebruikt om
de omgevingscontrole te configureren, deel uitmaken van respectievelijk de Linux-rol
Ansible Linux-rol ( c2platform.core.linux)
en de Windows-rol
Ansible Win-rol ( c2platform.wincore.win).
Aanvullende informatie
Voor aanvullende inzichten en richtlijnen:
- Groepgebaseerde omgevingen: Gebruik een groepgebaseerde aanpak om je Ansible-inventaris en variabelen voor verschillende omgevingen te organiseren.
- 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.
- 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.
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.