Verificatie omgevingsgroepcontrole

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

Projecten:  c2platform/phx/ansible


Randvoorwaarden

Voor het doel van deze handleiding maakt de specifieke node niet uit, omdat de omgevingscontrole het volledige inventarisbestand hosts.ini valideert. We gebruiken de ontwikkel-desktop pxd-ubuntu-devtop. Zie voor het aanmaken en starten van deze node:

  • Instellen van een Ansible Ontwikkel Desktop: Deze handleiding beschrijft de stappen om een Ansible Ontwikkel Desktop in te stellen met Ubuntu 22, vergelijkbaar met het bureaublad dat wordt gebruikt binnen het PHX-domein.

Verificatie omgevingscontrole

Een omgevingscontrole is geïmplementeerd in het Ansible-inventarisproject van het PHX-project  c2platform/phx/ansible/-/tree/master. 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.

Niet meer dan één

De onderstaande inhoud toont de Ansible omgevingsgroepen development en test met respectievelijk 7 en 1 node. Merk op dat er slechts 1 node in test zit.

 hosts.ini

 1[development]
 2# lxd
 3pxd-rproxy1       ansible_host=192.168.60.10
 4pxd-ubuntu-devtop ansible_host=192.168.60.11
 5pxd-gitlab        ansible_host=192.168.60.12
 6pxd-gitlab-runner ansible_host=192.168.60.13
 7
 8# virtualbox
 9pxd-ad            ansible_host=192.168.61.11
10pxd-win-devtop    ansible_host=192.168.61.10
11pxd-win           ansible_host=192.168.61.12
12
13[test]
14# lxd
15pxt-rproxy1       ansible_host=192.168.60.20

Open het hosts.ini-bestand en voeg pxd-ubuntu-devtop toe aan de test-groep. Merk op dat dit niet correct is; dit is een opzettelijke verkeerde configuratie. Nu maakt de node pxd-ubuntu-devtop deel uit van zowel test als development, wat we absoluut willen vermijden omdat het gedrag onbepaald zal zijn. Het gewijzigde gedeelte moet er als volgt uitzien:

[test]
# lxd
pxt-rproxy1       ansible_host=192.168.60.20

# virtualbox
pxd-ubuntu-devtop

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:

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!) => changed=false
  ansible_loop_var: item
  item:
    msg: 'Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test, development!'
    name: Environment pxd-ubuntu-devtop → test, development
    resource_group: 0_bootstrap
    type: fail
    when: true
  msg: 'Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test, development!'

Ten minste één

Herstel nu de wijziging in hosts.ini en haal het commentaar weg van regel 4, de regel die pxd-ubuntu-devtop in de development-omgeving plaatst. Nu maakt de node niet langer deel uit van een omgevingsgroep. Dit is ook een verkeerde configuratie die de omgevingscontrole zal detecteren.

[development]
# lxd
pxd-rproxy1       ansible_host=192.168.60.10
# pxd-ubuntu-devtop ansible_host=192.168.60.11
pxd-gitlab        ansible_host=192.168.60.12
pxd-gitlab-runner ansible_host=192.168.60.13

# virtualbox
pxd-ad            ansible_host=192.168.61.11
pxd-win-devtop    ansible_host=192.168.61.10
pxd-win           ansible_host=192.168.61.12

En voeg in de ubuntu-groep de regel ansible_host toe

[ubuntu]
pxd-rproxy1
pxd-ubuntu-devtop ansible_host=192.168.60.11
pxd-gitlab
pxd-gitlab-runner

Voer provisioning opnieuw uit

vagrant provision pxd-ubuntu-devtop

Dit zal nu mislukken met

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!) => changed=false
  ansible_loop_var: item
  item:
    msg: 'Node pxd-ubuntu-devtop should be associated with exactly one environment group of: test, development!'
    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, development!'

Review

Hoe is dit nu geïmplementeerd in het Ansible-inventarisproject in de map groepsvariabelen?

Kijk eerst naar 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. 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. Ten slotte configureert px_envs_check 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.

---
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' }}"

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  c2platform.core.linux en de Windows-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, hostvariabelen, groepsvariabelen en Ansible Vault-bestanden.


Laatst gewijzigd 2025.09.19: how-to environment check PHX-162 (9f3934e)