Verificatie phx omgevingsgroepcontrole

Verifieer en bekijk de implementatie van een omgevingscontrole om ervoor te zorgen dat nodes precies in één Ansible-omgevingsgroep zitten.

Projects:  c2platform/phx/ansible


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:

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
[:ansible-phx]└2 master(+2/-1)* 130 ± ansible -m debug -a 'msg={{group_names}}' pxd-ubuntu-devtop
ini_path: /home/onknows/git/gitlab/c2/ansible-phx/hosts.ini
pxd-ubuntu-devtop | SUCCESS => {
    "msg": [
        "desktop",
        "development",
        "linux",
        "lxd",
        "radix_guardian",
        "ubuntu",
        "ubuntu24",
        "ubuntu_devtop"
    ]
}
θ65° [:ansible-phx]└2 master(+2/-1)* ±

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.

 Vagrantfile.yml

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
θ65° [:ansible-phx]└2 master(+2/-1)* ± ansible -m debug -a 'msg={{group_names}}' pxt-ubuntu-devtop
ini_path: /home/onknows/git/gitlab/c2/ansible-phx/hosts.ini
pxt-ubuntu-devtop | SUCCESS => {
    "msg": [
        "desktop",
        "linux",
        "lxd",
        "radix_guardian",
        "test",
        "ubuntu",
        "ubuntu24",
        "ubuntu_devtop"
    ]
}

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.

 group_vars/all/env.yml

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:

 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_envs somt toegestane omgevingsgroepen op (test en development).
  • De variabele px_envs_node identificeert tot welke van deze groepen de huidige host behoort door de groepsnamen van de host te snijden met px_envs.
  • De variabele px_envs_node_count telt deze snijpunten.
  • De variabele px_envs_check configureert 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.

 group_vars/linux/main.yml

---
linux_resources:
  0_bootstrap:
    - "{{ px_envs_check }}"

 group_vars/win/main.yml

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.