SHELL := /bin/bash .DEFAULT_GOAL := help PYTHON ?= python3 ANSIBLE_PLAYBOOK ?= ansible-playbook INVENTORY ?= ansible/inventory PLAYBOOK ?= ansible/deploy_life_noc.yml ARCHIVE ?= life-noc-poc-mock-first.zip PROJECT_NAME ?= life-noc GENERATORS := scripts/generate_services.py scripts/generate_bpm.py CHECKS := checks/check_life_noc_mock.sh checks/check_echeance_vie.sh ICINGA_FILES := $(wildcard icinga/commands/*.conf) $(wildcard icinga/hosts/*.conf) $(wildcard icinga/templates/*.conf) $(wildcard icinga/services/*.conf) .PHONY: help all generate regen services bpm validate validate-yaml validate-python validate-shell validate-generated check mock-ok mock-warning mock-critical clean deploy deploy-no-bpm deploy-with-bpm package inventory-example info help: @echo "Life-NOC - cibles disponibles" @echo @echo " make generate Génère services Icinga + BPM" @echo " make regen Alias de generate" @echo " make validate Valide YAML, Python, shell et artefacts générés" @echo " make check Génère puis valide" @echo " make mock-ok Teste la sonde mock en état OK" @echo " make mock-warning Teste la sonde mock en état WARNING" @echo " make mock-critical Teste la sonde mock en état CRITICAL" @echo " make deploy Déploie via Ansible (BPM désactivé)" @echo " make deploy-with-bpm Déploie via Ansible avec BPM activé" @echo " make package Crée une archive zip du dépôt" @echo " make clean Supprime l'archive générée" @echo " make info Affiche les variables utiles" @echo @echo "Variables surchargables : INVENTORY=..., PLAYBOOK=..., ARCHIVE=..." all: check regen: generate generate: services bpm services: domains.yaml scripts/generate_services.py $(PYTHON) scripts/generate_services.py bpm: domains.yaml scripts/generate_bpm.py $(PYTHON) scripts/generate_bpm.py validate: validate-yaml validate-python validate-shell validate-generated validate-yaml: domains.yaml @$(PYTHON) -c 'import yaml, pathlib; p = pathlib.Path("domains.yaml"); data = yaml.safe_load(p.read_text(encoding="utf-8")); assert isinstance(data, dict) and isinstance(data.get("domains"), dict), "domains.yaml invalide: clé racine domains requise"; print("YAML valide: domains.yaml")' validate-python: $(GENERATORS) @$(PYTHON) -m py_compile $(GENERATORS) @echo "Python OK" validate-shell: $(CHECKS) @bash -n $(CHECKS) @echo "Shell OK" validate-generated: $(ICINGA_FILES) bpm/life-noc.json @grep -R 'check_life_noc_mock' icinga/templates icinga/commands icinga/services >/dev/null @$(PYTHON) -c 'import json, pathlib; p = pathlib.Path("bpm/life-noc.json"); data = json.loads(p.read_text(encoding="utf-8")); assert isinstance(data.get("processes"), list) and data["processes"], "bpm/life-noc.json invalide: processes absent ou vide"; print("Artefacts générés valides")' check: generate validate mock-ok: @bash checks/check_life_noc_mock.sh --state OK --message "Sous contrôle" --item-name "demo" --date "2026-03-13" mock-warning: @bash checks/check_life_noc_mock.sh --state WARNING --message "Attention requise" --item-name "demo" --date "2026-03-13"; test $$? -eq 1 mock-critical: @bash checks/check_life_noc_mock.sh --state CRITICAL --message "Action requise" --item-name "demo" --date "2026-03-13"; test $$? -eq 2 deploy: check $(ANSIBLE_PLAYBOOK) -i $(INVENTORY) $(PLAYBOOK) -e life_noc_bpm_deploy_enabled=false deploy-no-bpm: deploy deploy-with-bpm: check $(ANSIBLE_PLAYBOOK) -i $(INVENTORY) $(PLAYBOOK) -e life_noc_bpm_deploy_enabled=true package: check @rm -f $(ARCHIVE) @zip -qr $(ARCHIVE) . -x '*.git*' -x '__pycache__/*' -x '*.pyc' -x '$(ARCHIVE)' @echo "Archive créée: $(ARCHIVE)" clean: rm -f $(ARCHIVE) inventory-example: @echo "Copier ansible/inventory.example vers ansible/inventory puis ajuster les hôtes." info: @echo "PROJECT_NAME=$(PROJECT_NAME)" @echo "PYTHON=$(PYTHON)" @echo "ANSIBLE_PLAYBOOK=$(ANSIBLE_PLAYBOOK)" @echo "INVENTORY=$(INVENTORY)" @echo "PLAYBOOK=$(PLAYBOOK)" @echo "ARCHIVE=$(ARCHIVE)"