100 lines
4 KiB
Makefile
100 lines
4 KiB
Makefile
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)"
|