diff --git a/.patch-backup/Makefile.bak b/.patch-backup/Makefile.bak new file mode 100644 index 0000000..9674188 --- /dev/null +++ b/.patch-backup/Makefile.bak @@ -0,0 +1,105 @@ +SHELL := /bin/bash +.DEFAULT_GOAL := help + +PYTHON ?= python3 +ANSIBLE_PLAYBOOK ?= ansible-playbook +INVENTORY ?= ansible/inventory +PLAYBOOK ?= ansible/site.yml +ARCHIVE ?= life-noc-from-scratch-debian12.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 bootstrap deploy deploy-no-bpm deploy-with-bpm package inventory-example vars-example info + +help: + @echo "Life-NOC - cibles disponibles" + @echo + @echo " make generate Génère services Icinga + BPM" + @echo " make validate Valide YAML, Python, shell et artefacts générés" + @echo " make check Génère puis valide" + @echo " make bootstrap Déploie la plateforme complète depuis Debian 12 vanille" + @echo " make deploy Alias de bootstrap" + @echo " make deploy-with-bpm Déploie explicitement avec artefact BPM" + @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 package Crée une archive zip du dépôt" + @echo " make inventory-example Rappelle comment préparer l'inventaire" + @echo " make vars-example Rappelle comment préparer les variables" + @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 + +bootstrap: check + $(ANSIBLE_PLAYBOOK) -i $(INVENTORY) $(PLAYBOOK) + +deploy: bootstrap + +deploy-no-bpm: bootstrap + +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 l'hôte, l'adresse et l'utilisateur ansible." + +vars-example: + @echo "Copier ansible/group_vars/all.yml.example vers ansible/group_vars/all.yml puis remplacer TOUS les mots de passe par les tiens." + +info: + @echo "PROJECT_NAME=$(PROJECT_NAME)" + @echo "PYTHON=$(PYTHON)" + @echo "ANSIBLE_PLAYBOOK=$(ANSIBLE_PLAYBOOK)" + @echo "INVENTORY=$(INVENTORY)" + @echo "PLAYBOOK=$(PLAYBOOK)" + @echo "ARCHIVE=$(ARCHIVE)" diff --git a/.patch-backup/generate_bpm.py.bak b/.patch-backup/generate_bpm.py.bak new file mode 100644 index 0000000..46da8d2 --- /dev/null +++ b/.patch-backup/generate_bpm.py.bak @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 + +from pathlib import Path +import json +import re +import sys +import yaml + + +INPUT_FILE = Path("domains.yaml") +OUTPUT_DIR = Path("bpm") +OUTPUT_FILE = OUTPUT_DIR / "life-noc.json" +HOST_NAME = "life-noc" + + +def slugify(value: str) -> str: + value = value.strip().lower() + replacements = { + "à": "a", "â": "a", "ä": "a", + "ç": "c", + "é": "e", "è": "e", "ê": "e", "ë": "e", + "î": "i", "ï": "i", + "ô": "o", "ö": "o", + "ù": "u", "û": "u", "ü": "u", + "ÿ": "y", + "œ": "oe", + "æ": "ae", + "'": "", + "’": "", + } + for old, new in replacements.items(): + value = value.replace(old, new) + value = re.sub(r"[^a-z0-9\-]+", "-", value) + value = re.sub(r"-{2,}", "-", value) + return value.strip("-") + + +def build_service_name(domain_slug: str, item_name: str) -> str: + return f"{domain_slug}-{item_name.strip()}" + + +def make_leaf_node(service_name: str) -> dict: + return { + "type": "service", + "host": HOST_NAME, + "service": service_name + } + + +def make_domain_process(domain_label: str, domain_slug: str, services: list[dict]) -> dict: + leaves = [] + for item in services: + service_name = build_service_name(domain_slug, item["name"]) + leaves.append(make_leaf_node(service_name)) + + return { + "name": domain_label.upper(), + "operator": "worst", + "nodes": leaves + } + + +def main() -> int: + if not INPUT_FILE.exists(): + print(f"Erreur: fichier introuvable: {INPUT_FILE}", file=sys.stderr) + return 1 + + with INPUT_FILE.open("r", encoding="utf-8") as f: + data = yaml.safe_load(f) + + if not isinstance(data, dict) or "domains" not in data: + print("Erreur: le YAML doit contenir une clé racine 'domains'.", file=sys.stderr) + return 1 + + domains = data["domains"] + if not isinstance(domains, dict): + print("Erreur: 'domains' doit être un objet YAML.", file=sys.stderr) + return 1 + + processes = [] + root_nodes = [] + + for raw_domain, services in domains.items(): + if not isinstance(services, list): + print(f"Erreur: le domaine '{raw_domain}' doit contenir une liste.", file=sys.stderr) + return 1 + + for idx, item in enumerate(services, start=1): + if not isinstance(item, dict): + print(f"Erreur: entrée invalide dans '{raw_domain}' à la position {idx}.", file=sys.stderr) + return 1 + missing = [key for key in ("name", "date", "notes") if key not in item] + if missing: + print( + f"Erreur: dans le domaine '{raw_domain}', entrée {idx}, champs manquants: {', '.join(missing)}", + file=sys.stderr, + ) + return 1 + + domain_slug = slugify(str(raw_domain)) + domain_label = str(raw_domain) + + domain_process = make_domain_process(domain_label, domain_slug, services) + processes.append(domain_process) + + root_nodes.append({ + "type": "process", + "name": domain_label.upper() + }) + + root_process = { + "name": "LIFE-NOC", + "operator": "worst", + "nodes": root_nodes + } + + bpm_document = { + "version": 1, + "processes": [root_process] + processes + } + + OUTPUT_DIR.mkdir(parents=True, exist_ok=True) + with OUTPUT_FILE.open("w", encoding="utf-8") as f: + json.dump(bpm_document, f, ensure_ascii=False, indent=2) + + print(f"BPM généré: {OUTPUT_FILE}") + print("Processus générés :") + print(" - LIFE-NOC") + for raw_domain in domains.keys(): + print(f" - {str(raw_domain).upper()}") + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.patch-backup/life_noc_defaults_main.yml.bak b/.patch-backup/life_noc_defaults_main.yml.bak new file mode 100644 index 0000000..0635185 --- /dev/null +++ b/.patch-backup/life_noc_defaults_main.yml.bak @@ -0,0 +1,10 @@ +life_noc_project_root: /opt/life-noc +life_noc_icinga_conf_root: /etc/icinga2/conf.d/life-noc +life_noc_plugin_dir: /usr/lib/nagios/plugins +life_noc_validate_icinga: true +life_noc_reload_icinga: true +life_noc_bpm_deploy_enabled: false +life_noc_bpm_destination_dir: /etc/icingaweb2/modules/businessprocess/processes +life_noc_bpm_target_file: /etc/icingaweb2/modules/businessprocess/processes/life-noc.json +life_noc_owner: root +life_noc_group: root diff --git a/.patch-backup/life_noc_tasks_main.yml.bak b/.patch-backup/life_noc_tasks_main.yml.bak new file mode 100644 index 0000000..08a3a71 --- /dev/null +++ b/.patch-backup/life_noc_tasks_main.yml.bak @@ -0,0 +1,191 @@ +--- +- name: install minimal dependencies + ansible.builtin.apt: + name: + - python3 + - python3-yaml + state: present + update_cache: true + +- name: remove legacy life-noc subdirectory under icinga conf.d + ansible.builtin.file: + path: /etc/icinga2/conf.d/life-noc + state: absent + notify: + - validate icinga + - reload icinga + +- name: find previously deployed flattened life-noc config files + ansible.builtin.find: + paths: /etc/icinga2/conf.d + patterns: "life-noc-*" + file_type: file + register: life_noc_flattened_files + +- name: remove previously deployed flattened life-noc config files + ansible.builtin.file: + path: "{{ item.path }}" + state: absent + loop: "{{ life_noc_flattened_files.files }}" + notify: + - validate icinga + - reload icinga + +- name: create project root + ansible.builtin.file: + path: "{{ life_noc_project_root }}" + state: directory + owner: root + group: root + mode: "0755" + +- name: copy project files + ansible.builtin.copy: + src: "{{ playbook_dir }}/../" + dest: "{{ life_noc_project_root }}/" + owner: root + group: root + mode: preserve + +- name: generate icinga services from domains + ansible.builtin.command: + cmd: python3 scripts/generate_services.py + chdir: "{{ life_noc_project_root }}" + changed_when: true + +- name: generate bpm from domains + ansible.builtin.command: + cmd: python3 scripts/generate_bpm.py + chdir: "{{ life_noc_project_root }}" + changed_when: true + +################################## + +- name: find life-noc command files on target + ansible.builtin.find: + paths: "{{ life_noc_project_root }}/icinga/commands" + patterns: "*.conf" + file_type: file + register: life_noc_command_files + +- name: deploy life-noc command files into icinga conf.d + ansible.builtin.copy: + src: "{{ item.path }}" + dest: "/etc/icinga2/conf.d/life-noc-command-{{ item.path | basename }}" + remote_src: true + owner: root + group: root + mode: "0644" + loop: "{{ life_noc_command_files.files }}" + notify: + - validate icinga + - reload icinga + +- name: find life-noc template files on target + ansible.builtin.find: + paths: "{{ life_noc_project_root }}/icinga/templates" + patterns: "*.conf" + file_type: file + register: life_noc_template_files + +- name: deploy life-noc template files into icinga conf.d + ansible.builtin.copy: + src: "{{ item.path }}" + dest: "/etc/icinga2/conf.d/life-noc-template-{{ item.path | basename }}" + remote_src: true + owner: root + group: root + mode: "0644" + loop: "{{ life_noc_template_files.files }}" + notify: + - validate icinga + - reload icinga + +- name: find life-noc host files on target + ansible.builtin.find: + paths: "{{ life_noc_project_root }}/icinga/hosts" + patterns: "*.conf" + file_type: file + register: life_noc_host_files + +- name: deploy life-noc host files into icinga conf.d + ansible.builtin.copy: + src: "{{ item.path }}" + dest: "/etc/icinga2/conf.d/life-noc-host-{{ item.path | basename }}" + remote_src: true + owner: root + group: root + mode: "0644" + loop: "{{ life_noc_host_files.files }}" + notify: + - validate icinga + - reload icinga + +- name: find life-noc service files on target + ansible.builtin.find: + paths: "{{ life_noc_project_root }}/icinga/services" + patterns: "*.conf" + file_type: file + register: life_noc_service_files + +- name: deploy life-noc service files into icinga conf.d + ansible.builtin.copy: + src: "{{ item.path }}" + dest: "/etc/icinga2/conf.d/life-noc-service-{{ item.path | basename }}" + remote_src: true + owner: root + group: root + mode: "0644" + loop: "{{ life_noc_service_files.files }}" + notify: + - validate icinga + - reload icinga + +################################## + +- name: install mock plugin + ansible.builtin.copy: + src: "{{ life_noc_project_root }}/checks/check_life_noc_mock.sh" + dest: /usr/lib/nagios/plugins/check_life_noc_mock.sh + remote_src: true + owner: root + group: root + mode: "0755" + notify: + - validate icinga + - reload icinga + +- name: install compatibility wrapper plugin + ansible.builtin.copy: + src: "{{ life_noc_project_root }}/checks/check_echeance_vie.sh" + dest: /usr/lib/nagios/plugins/check_echeance_vie.sh + remote_src: true + owner: root + group: root + mode: "0755" + notify: + - validate icinga + - reload icinga + +- name: ensure bpm destination directory exists + ansible.builtin.file: + path: "{{ life_noc_bpm_destination_dir }}" + state: directory + owner: root + group: root + mode: "0755" + when: + - life_noc_bpm_deploy_enabled | bool + - life_noc_bpm_destination_dir is defined + +- name: deploy bpm json + ansible.builtin.copy: + src: "{{ life_noc_project_root }}/bpm/life-noc.json" + dest: "{{ life_noc_bpm_destination_dir }}/life-noc.json" + remote_src: true + owner: root + group: root + mode: "0644" + when: + - life_noc_bpm_deploy_enabled | bool + - life_noc_bpm_destination_dir is defined diff --git a/Makefile b/Makefile index 9674188..1a41a06 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ 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) +ICINGA_FILES := $(wildcard icinga/commands/*.conf) $(wildcard icinga/hosts/*.conf) $(wildcard icinga/templates/*.conf) $(wildcard icinga/services/*.conf) $(wildcard icinga/servicegroups/*.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 bootstrap deploy deploy-no-bpm deploy-with-bpm package inventory-example vars-example info @@ -57,11 +57,9 @@ validate-shell: $(CHECKS) @bash -n $(CHECKS) @echo "Shell OK" -validate-generated: $(ICINGA_FILES) bpm/life-noc.json +validate-generated: $(ICINGA_FILES) bpm/Life-NOC.conf @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 + @$(PYTHON) -c 'import pathlib; p = pathlib.Path("bpm/Life-NOC.conf"); text = p.read_text(encoding="utf-8"); lines = [l.strip() for l in text.splitlines() if l.strip()]; assert any(l == "### Business Process Config File ###" for l in lines), "bpm/Life-NOC.conf invalide: en-tête BPM absent"; assert any(l.startswith("display 1;") for l in lines), "bpm/Life-NOC.conf invalide: aucun display absent"; print("Artefacts générés valides")' mock-ok: @bash checks/check_life_noc_mock.sh --state OK --message "Sous contrôle" --item-name "demo" --date "2026-03-13" @@ -88,7 +86,7 @@ package: check @echo "Archive créée: $(ARCHIVE)" clean: - rm -f $(ARCHIVE) + rm -f $(ARCHIVE) bpm/Life-NOC.conf inventory-example: @echo "Copier ansible/inventory.example vers ansible/inventory puis ajuster l'hôte, l'adresse et l'utilisateur ansible." diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index caa297a..db53db7 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -1,16 +1,16 @@ life_noc_fqdn: c7-life-noc-01 life_noc_admin_user: icingadmin -life_noc_admin_password: l1f3_N0C!_ADM +life_noc_admin_password: l1f3_N0C_ADM life_noc_db_root_socket: /run/mysqld/mysqld.sock life_noc_db_icinga_name: icinga life_noc_db_icinga_user: icinga -life_noc_db_icinga_password: l1f3_N0C!_DB +life_noc_db_icinga_password: l1f3_N0C_DB life_noc_db_web_name: icingaweb2 life_noc_db_web_user: icingaweb2 -life_noc_db_web_password: l1f3_N0C!_WEB_DB +life_noc_db_web_password: l1f3_N0C_WEB_DB life_noc_icinga_repo_enabled: true life_noc_icinga_repo_distribution: icinga-bookworm diff --git a/ansible/roles/icingaweb2/tasks/main.yml b/ansible/roles/icingaweb2/tasks/main.yml index 438f8bf..f061566 100644 --- a/ansible/roles/icingaweb2/tasks/main.yml +++ b/ansible/roles/icingaweb2/tasks/main.yml @@ -60,17 +60,15 @@ changed_when: false no_log: true -- name: check whether icingaweb2 admin user exists +- name: ensure icingaweb2 admin user exists with expected password ansible.builtin.shell: | - mysql --socket={{ life_noc_db_root_socket }} -Nse "SELECT COUNT(*) FROM {{ life_noc_db_web_name }}.icingaweb_user WHERE name='{{ life_noc_admin_user }}';" - register: life_noc_admin_user_check - changed_when: false - no_log: true - -- name: create icingaweb2 admin user - ansible.builtin.shell: | - mysql --socket={{ life_noc_db_root_socket }} -Nse "INSERT INTO {{ life_noc_db_web_name }}.icingaweb_user (name, active, password_hash) VALUES ('{{ life_noc_admin_user }}', 1, '{{ life_noc_admin_password_hash.stdout }}');" - when: life_noc_admin_user_check.stdout | trim == '0' + mysql --socket={{ life_noc_db_root_socket }} {{ life_noc_db_web_name }} <<'SQL' + INSERT INTO icingaweb_user (name, active, password_hash) + VALUES ('{{ life_noc_admin_user }}', 1, '{{ life_noc_admin_password_hash.stdout }}') + ON DUPLICATE KEY UPDATE + active = VALUES(active), + password_hash = VALUES(password_hash); + SQL no_log: true - name: ensure icingaweb2 config directories exist diff --git a/ansible/roles/life_noc/defaults/main.yml b/ansible/roles/life_noc/defaults/main.yml index 0635185..30db98d 100644 --- a/ansible/roles/life_noc/defaults/main.yml +++ b/ansible/roles/life_noc/defaults/main.yml @@ -5,6 +5,6 @@ life_noc_validate_icinga: true life_noc_reload_icinga: true life_noc_bpm_deploy_enabled: false life_noc_bpm_destination_dir: /etc/icingaweb2/modules/businessprocess/processes -life_noc_bpm_target_file: /etc/icingaweb2/modules/businessprocess/processes/life-noc.json +life_noc_bpm_target_file: /etc/icingaweb2/modules/businessprocess/processes/Life-NOC.conf life_noc_owner: root life_noc_group: root diff --git a/ansible/roles/life_noc/tasks/main.yml b/ansible/roles/life_noc/tasks/main.yml index 08a3a71..730b6b9 100644 --- a/ansible/roles/life_noc/tasks/main.yml +++ b/ansible/roles/life_noc/tasks/main.yml @@ -101,6 +101,26 @@ - validate icinga - reload icinga +- name: find life-noc servicegroup files on target + ansible.builtin.find: + paths: "{{ life_noc_project_root }}/icinga/servicegroups" + patterns: "*.conf" + file_type: file + register: life_noc_servicegroup_files + +- name: deploy life-noc servicegroup files into icinga conf.d + ansible.builtin.copy: + src: "{{ item.path }}" + dest: "/etc/icinga2/conf.d/life-noc-servicegroup-{{ item.path | basename }}" + remote_src: true + owner: root + group: root + mode: "0644" + loop: "{{ life_noc_servicegroup_files.files }}" + notify: + - validate icinga + - reload icinga + - name: find life-noc host files on target ansible.builtin.find: paths: "{{ life_noc_project_root }}/icinga/hosts" @@ -178,10 +198,10 @@ - life_noc_bpm_deploy_enabled | bool - life_noc_bpm_destination_dir is defined -- name: deploy bpm json +- name: deploy bpm config ansible.builtin.copy: - src: "{{ life_noc_project_root }}/bpm/life-noc.json" - dest: "{{ life_noc_bpm_destination_dir }}/life-noc.json" + src: "{{ life_noc_project_root }}/bpm/Life-NOC.conf" + dest: "{{ life_noc_bpm_destination_dir }}/Life-NOC.conf" remote_src: true owner: root group: root diff --git a/bpm/Life-NOC.conf b/bpm/Life-NOC.conf new file mode 100644 index 0000000..00e14c0 --- /dev/null +++ b/bpm/Life-NOC.conf @@ -0,0 +1,62 @@ +### Business Process Config File ### +# +# Title : Life-NOC +# Description : +# Owner : icingadmin +# AddToMenu : yes +# Backend : +# Statetype : soft +# +################################### + +REVUE = life-noc;revue-revue-quotidienne-life-noc & life-noc;revue-revue-hebdomadaire-priorites & life-noc;revue-revue-mensuelle-systeme-vie & life-noc;revue-revue-trimestrielle-orientation +FOCUS = life-noc;focus-entretien-processus-focus & life-noc;focus-nettoyage-inbox-mentale & life-noc;focus-revue-limitation-engagements +FINANCES-PERSONNELLES = life-noc;finances-personnelles-revision-comptes-bancaires & life-noc;finances-personnelles-verification-cartes-credit & life-noc;finances-personnelles-paiement-cartes-credit & life-noc;finances-personnelles-revision-budget-personnel & life-noc;finances-personnelles-verification-prelevements-automatiques & life-noc;finances-personnelles-verification-placements & life-noc;finances-personnelles-verification-cotisations-reer & life-noc;finances-personnelles-verification-celi & life-noc;finances-personnelles-preparation-dossier-financier-annuel +FISCALITE-PERSONNELLE = life-noc;fiscalite-personnelle-preparation-documents-impots & life-noc;fiscalite-personnelle-production-impots-federal & life-noc;fiscalite-personnelle-production-impots-quebec & life-noc;fiscalite-personnelle-paiement-solde-impots & life-noc;fiscalite-personnelle-verification-avis-cotisation & life-noc;fiscalite-personnelle-archivage-documents-fiscaux & life-noc;fiscalite-personnelle-verification-acomptes-provisionnels +OBLIGATIONS-LEGALES-PERSONNELLES = life-noc;obligations-legales-personnelles-verification-testament & life-noc;obligations-legales-personnelles-verification-mandat-inaptitude & life-noc;obligations-legales-personnelles-verification-directives-medicales & life-noc;obligations-legales-personnelles-verification-papiers-identite & life-noc;obligations-legales-personnelles-renouvellement-permis-conduire & life-noc;obligations-legales-personnelles-verification-carte-assurance-maladie & life-noc;obligations-legales-personnelles-verification-passeport +MAISON = life-noc;maison-remplacement-filtre-fournaise & life-noc;maison-inspection-fournaise & life-noc;maison-inspection-thermopompe & life-noc;maison-nettoyage-unites-exterieures & life-noc;maison-inspection-toiture & life-noc;maison-inspection-gouttieres & life-noc;maison-inspection-fondation & life-noc;maison-verification-drainage-terrain & life-noc;maison-test-detecteurs-fumee & life-noc;maison-test-detecteurs-co & life-noc;maison-remplacement-piles-detecteurs & life-noc;maison-verification-plomberie-visible & life-noc;maison-inspection-sump-pump & life-noc;maison-verification-calfetrage & life-noc;maison-inspection-portes-garage & life-noc;maison-verification-extincteurs +GARAGE-ET-RANGEMENT = life-noc;garage-et-rangement-inspection-rangement-plafond & life-noc;garage-et-rangement-revue-inventaire-garage & life-noc;garage-et-rangement-verification-rouille-outillage & life-noc;garage-et-rangement-inspection-securite-garage & life-noc;garage-et-rangement-rotation-stockage-bacs +ENERGIE = life-noc;energie-inspection-batteries-lifepo4 & life-noc;energie-verification-tension-batteries & life-noc;energie-verification-smartshunt & life-noc;energie-verification-cerbo-gx & life-noc;energie-verification-can-rs485 & life-noc;energie-inspection-cablage-energie & life-noc;energie-verification-busbars & life-noc;energie-verification-parametres-charge & life-noc;energie-test-charge-batteries & life-noc;energie-test-comportement-onduleur & life-noc;energie-verification-journal-evenements-victron +RESILIENCE = life-noc;resilience-test-generatrice-propane & life-noc;resilience-verification-carburant-generatrice & life-noc;resilience-verification-procedure-bascule & life-noc;resilience-verification-stock-lampes-piles & life-noc;resilience-verification-trousses-urgence & life-noc;resilience-revision-plan-urgence & life-noc;resilience-test-autonomie-base & life-noc;resilience-verification-moyens-cuisson-secours +STOCK-ALIMENTAIRE = life-noc;stock-alimentaire-rotation-nourriture-seche & life-noc;stock-alimentaire-verification-reserve-eau & life-noc;stock-alimentaire-verification-mylar-absorbeurs & life-noc;stock-alimentaire-revue-inventaire-conserves & life-noc;stock-alimentaire-revue-inventaire-farine-riz-pates & life-noc;stock-alimentaire-verification-bacs-legumes-racines & life-noc;stock-alimentaire-revue-supplements-vitamines +SANTE = life-noc;sante-verification-trousse-premiers-soins & life-noc;sante-verification-expiration-medicaments & life-noc;sante-revision-rendez-vous-medicaux & life-noc;sante-verification-lunettes-prescriptions & life-noc;sante-verification-dossier-sante +VOITURE = life-noc;voiture-verification-huile-moteur & life-noc;voiture-inspection-freins & life-noc;voiture-verification-pneus & life-noc;voiture-ajustement-valves & life-noc;voiture-verification-timing-belt & life-noc;voiture-verification-batterie-voiture & life-noc;voiture-verification-balais-essuie-glace & life-noc;voiture-verification-liquides & life-noc;voiture-verification-eclairage & life-noc;voiture-verification-immatriculation-assurance +JARDIN = life-noc;jardin-inspection-vignes & life-noc;jardin-entretien-bleuetiers & life-noc;jardin-entretien-framboisiers & life-noc;jardin-inspection-kiwis-nordiques & life-noc;jardin-entretien-rhubarbe & life-noc;jardin-inspection-groseillier & life-noc;jardin-inspection-muriers & life-noc;jardin-entretien-houblon & life-noc;jardin-revision-pharmacopee-jardin & life-noc;jardin-revision-armoire-produits-jardin +OUTILS-ET-EQUIPEMENTS = life-noc;outils-et-equipements-entretien-outils-jardin & life-noc;outils-et-equipements-inspection-outils-electriques & life-noc;outils-et-equipements-verification-rallonges-et-connecteurs & life-noc;outils-et-equipements-verification-compresseur-et-accessoires & life-noc;outils-et-equipements-revision-inventaire-outillage +INFORMATIQUE-PERSONNELLE = life-noc;informatique-personnelle-verification-sauvegardes-personnelles & life-noc;informatique-personnelle-nettoyage-stockage-personnel & life-noc;informatique-personnelle-verification-comptes-importants & life-noc;informatique-personnelle-revue-mots-de-passe-personnels & life-noc;informatique-personnelle-verification-documents-cloud-personnels +INFRASTRUCTURE-CHEZLEPRO = life-noc;infrastructure-chezlepro-verification-proxmox & life-noc;infrastructure-chezlepro-verification-ceph & life-noc;infrastructure-chezlepro-test-restauration-backups & life-noc;infrastructure-chezlepro-verification-pbs-truenas & life-noc;infrastructure-chezlepro-verification-ups-infrastructure & life-noc;infrastructure-chezlepro-verification-capacite-stockage & life-noc;infrastructure-chezlepro-verification-apt-cacher-ng & life-noc;infrastructure-chezlepro-verification-icinga2 & life-noc;infrastructure-chezlepro-verification-keycloak-openldap & life-noc;infrastructure-chezlepro-verification-nextcloud & life-noc;infrastructure-chezlepro-verification-mailcow & life-noc;infrastructure-chezlepro-verification-openvas & life-noc;infrastructure-chezlepro-verification-journaux-systemes +RESEAU-CHEZLEPRO = life-noc;reseau-chezlepro-verification-firewalls & life-noc;reseau-chezlepro-verification-vpn-openvpn & life-noc;reseau-chezlepro-verification-crl-certificats & life-noc;reseau-chezlepro-verification-switches & life-noc;reseau-chezlepro-verification-vlans-segmentation & life-noc;reseau-chezlepro-verification-dns & life-noc;reseau-chezlepro-verification-dynamic-dns & life-noc;reseau-chezlepro-audit-regles-firewall & life-noc;reseau-chezlepro-verification-geoblocking & life-noc;reseau-chezlepro-verification-certificats-publics +SECURITE-CHEZLEPRO = life-noc;securite-chezlepro-verification-mises-a-jour-securite & life-noc;securite-chezlepro-audit-comptes-acces & life-noc;securite-chezlepro-verification-ids-snort & life-noc;securite-chezlepro-revue-pki-privee & life-noc;securite-chezlepro-revue-politiques-securite & life-noc;securite-chezlepro-verification-sauvegardes-configuration +EXPLOITATION-CHEZLEPRO = life-noc;exploitation-chezlepro-revision-playbooks-ansible & life-noc;exploitation-chezlepro-verification-inventaires-ansible & life-noc;exploitation-chezlepro-revision-documentation-technique & life-noc;exploitation-chezlepro-verification-procedures-reprise & life-noc;exploitation-chezlepro-revue-capacite-ressources & life-noc;exploitation-chezlepro-verification-jobs-automatises +OBLIGATIONS-CHEZLEPRO = life-noc;obligations-chezlepro-verification-registraire-entreprise & life-noc;obligations-chezlepro-verification-declarations-taxes & life-noc;obligations-chezlepro-verification-dossier-comptable-entreprise & life-noc;obligations-chezlepro-verification-facturation-clients & life-noc;obligations-chezlepro-verification-paiements-fournisseurs & life-noc;obligations-chezlepro-verification-contrats-ententes & life-noc;obligations-chezlepro-verification-assurances-entreprise & life-noc;obligations-chezlepro-archivage-documents-entreprise +ACTIFS-CHEZLEPRO = life-noc;actifs-chezlepro-revision-inventaire-materiel & life-noc;actifs-chezlepro-verification-amortissables & life-noc;actifs-chezlepro-verification-serveurs-et-composants & life-noc;actifs-chezlepro-verification-reserve-pieces & life-noc;actifs-chezlepro-revision-actifs-transferts +PROJETS = life-noc;projets-revision-life-noc & life-noc;projets-revision-alliance-boreale & life-noc;projets-revision-erplibre & life-noc;projets-revision-semence-numerique & life-noc;projets-revision-ortrux-1 & life-noc;projets-revision-district16 +COMMUNAUTE = life-noc;communaute-verification-outils-aa & life-noc;communaute-verification-espace-87-16 & life-noc;communaute-verification-salles-visio-groupes & life-noc;communaute-verification-depots-rapports-rsg & life-noc;communaute-revision-outils-communication-communaute +DOCUMENTATION = life-noc;documentation-revue-docs-personnelles-importantes & life-noc;documentation-revue-wiki-technique & life-noc;documentation-revue-base-connaissances & life-noc;documentation-verification-sauvegarde-docs-cles +ANIMAUX = life-noc;animaux-verification-stock-nourriture-chats & life-noc;animaux-verification-friandises-et-litiere & life-noc;animaux-revision-routine-soins-animaux + +display 1;REVUE;REVUE +display 1;FOCUS;FOCUS +display 1;FINANCES-PERSONNELLES;FINANCES-PERSONNELLES +display 1;FISCALITE-PERSONNELLE;FISCALITE-PERSONNELLE +display 1;OBLIGATIONS-LEGALES-PERSONNELLES;OBLIGATIONS-LEGALES-PERSONNELLES +display 1;MAISON;MAISON +display 1;GARAGE-ET-RANGEMENT;GARAGE-ET-RANGEMENT +display 1;ENERGIE;ENERGIE +display 1;RESILIENCE;RESILIENCE +display 1;STOCK-ALIMENTAIRE;STOCK-ALIMENTAIRE +display 1;SANTE;SANTE +display 1;VOITURE;VOITURE +display 1;JARDIN;JARDIN +display 1;OUTILS-ET-EQUIPEMENTS;OUTILS-ET-EQUIPEMENTS +display 1;INFORMATIQUE-PERSONNELLE;INFORMATIQUE-PERSONNELLE +display 1;INFRASTRUCTURE-CHEZLEPRO;INFRASTRUCTURE-CHEZLEPRO +display 1;RESEAU-CHEZLEPRO;RESEAU-CHEZLEPRO +display 1;SECURITE-CHEZLEPRO;SECURITE-CHEZLEPRO +display 1;EXPLOITATION-CHEZLEPRO;EXPLOITATION-CHEZLEPRO +display 1;OBLIGATIONS-CHEZLEPRO;OBLIGATIONS-CHEZLEPRO +display 1;ACTIFS-CHEZLEPRO;ACTIFS-CHEZLEPRO +display 1;PROJETS;PROJETS +display 1;COMMUNAUTE;COMMUNAUTE +display 1;DOCUMENTATION;DOCUMENTATION +display 1;ANIMAUX;ANIMAUX diff --git a/bpm/life-noc.json b/bpm/life-noc.json deleted file mode 100644 index 028e221..0000000 --- a/bpm/life-noc.json +++ /dev/null @@ -1,1151 +0,0 @@ -{ - "version": 1, - "processes": [ - { - "name": "LIFE-NOC", - "operator": "worst", - "nodes": [ - { - "type": "process", - "name": "REVUE" - }, - { - "type": "process", - "name": "FOCUS" - }, - { - "type": "process", - "name": "FINANCES-PERSONNELLES" - }, - { - "type": "process", - "name": "FISCALITE-PERSONNELLE" - }, - { - "type": "process", - "name": "OBLIGATIONS-LEGALES-PERSONNELLES" - }, - { - "type": "process", - "name": "MAISON" - }, - { - "type": "process", - "name": "GARAGE-ET-RANGEMENT" - }, - { - "type": "process", - "name": "ENERGIE" - }, - { - "type": "process", - "name": "RESILIENCE" - }, - { - "type": "process", - "name": "STOCK-ALIMENTAIRE" - }, - { - "type": "process", - "name": "SANTE" - }, - { - "type": "process", - "name": "VOITURE" - }, - { - "type": "process", - "name": "JARDIN" - }, - { - "type": "process", - "name": "OUTILS-ET-EQUIPEMENTS" - }, - { - "type": "process", - "name": "INFORMATIQUE-PERSONNELLE" - }, - { - "type": "process", - "name": "INFRASTRUCTURE-CHEZLEPRO" - }, - { - "type": "process", - "name": "RESEAU-CHEZLEPRO" - }, - { - "type": "process", - "name": "SECURITE-CHEZLEPRO" - }, - { - "type": "process", - "name": "EXPLOITATION-CHEZLEPRO" - }, - { - "type": "process", - "name": "OBLIGATIONS-CHEZLEPRO" - }, - { - "type": "process", - "name": "ACTIFS-CHEZLEPRO" - }, - { - "type": "process", - "name": "PROJETS" - }, - { - "type": "process", - "name": "COMMUNAUTE" - }, - { - "type": "process", - "name": "DOCUMENTATION" - }, - { - "type": "process", - "name": "ANIMAUX" - } - ] - }, - { - "name": "REVUE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "revue-revue-quotidienne-life-noc" - }, - { - "type": "service", - "host": "life-noc", - "service": "revue-revue-hebdomadaire-priorites" - }, - { - "type": "service", - "host": "life-noc", - "service": "revue-revue-mensuelle-systeme-vie" - }, - { - "type": "service", - "host": "life-noc", - "service": "revue-revue-trimestrielle-orientation" - } - ] - }, - { - "name": "FOCUS", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "focus-entretien-processus-focus" - }, - { - "type": "service", - "host": "life-noc", - "service": "focus-nettoyage-inbox-mentale" - }, - { - "type": "service", - "host": "life-noc", - "service": "focus-revue-limitation-engagements" - } - ] - }, - { - "name": "FINANCES-PERSONNELLES", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-revision-comptes-bancaires" - }, - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-verification-cartes-credit" - }, - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-paiement-cartes-credit" - }, - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-revision-budget-personnel" - }, - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-verification-prelevements-automatiques" - }, - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-verification-placements" - }, - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-verification-cotisations-reer" - }, - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-verification-celi" - }, - { - "type": "service", - "host": "life-noc", - "service": "finances-personnelles-preparation-dossier-financier-annuel" - } - ] - }, - { - "name": "FISCALITE-PERSONNELLE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "fiscalite-personnelle-preparation-documents-impots" - }, - { - "type": "service", - "host": "life-noc", - "service": "fiscalite-personnelle-production-impots-federal" - }, - { - "type": "service", - "host": "life-noc", - "service": "fiscalite-personnelle-production-impots-quebec" - }, - { - "type": "service", - "host": "life-noc", - "service": "fiscalite-personnelle-paiement-solde-impots" - }, - { - "type": "service", - "host": "life-noc", - "service": "fiscalite-personnelle-verification-avis-cotisation" - }, - { - "type": "service", - "host": "life-noc", - "service": "fiscalite-personnelle-archivage-documents-fiscaux" - }, - { - "type": "service", - "host": "life-noc", - "service": "fiscalite-personnelle-verification-acomptes-provisionnels" - } - ] - }, - { - "name": "OBLIGATIONS-LEGALES-PERSONNELLES", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "obligations-legales-personnelles-verification-testament" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-legales-personnelles-verification-mandat-inaptitude" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-legales-personnelles-verification-directives-medicales" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-legales-personnelles-verification-papiers-identite" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-legales-personnelles-renouvellement-permis-conduire" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-legales-personnelles-verification-carte-assurance-maladie" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-legales-personnelles-verification-passeport" - } - ] - }, - { - "name": "MAISON", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "maison-remplacement-filtre-fournaise" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-inspection-fournaise" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-inspection-thermopompe" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-nettoyage-unites-exterieures" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-inspection-toiture" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-inspection-gouttieres" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-inspection-fondation" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-verification-drainage-terrain" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-test-detecteurs-fumee" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-test-detecteurs-co" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-remplacement-piles-detecteurs" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-verification-plomberie-visible" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-inspection-sump-pump" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-verification-calfetrage" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-inspection-portes-garage" - }, - { - "type": "service", - "host": "life-noc", - "service": "maison-verification-extincteurs" - } - ] - }, - { - "name": "GARAGE-ET-RANGEMENT", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "garage-et-rangement-inspection-rangement-plafond" - }, - { - "type": "service", - "host": "life-noc", - "service": "garage-et-rangement-revue-inventaire-garage" - }, - { - "type": "service", - "host": "life-noc", - "service": "garage-et-rangement-verification-rouille-outillage" - }, - { - "type": "service", - "host": "life-noc", - "service": "garage-et-rangement-inspection-securite-garage" - }, - { - "type": "service", - "host": "life-noc", - "service": "garage-et-rangement-rotation-stockage-bacs" - } - ] - }, - { - "name": "ENERGIE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "energie-inspection-batteries-lifepo4" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-verification-tension-batteries" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-verification-smartshunt" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-verification-cerbo-gx" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-verification-can-rs485" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-inspection-cablage-energie" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-verification-busbars" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-verification-parametres-charge" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-test-charge-batteries" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-test-comportement-onduleur" - }, - { - "type": "service", - "host": "life-noc", - "service": "energie-verification-journal-evenements-victron" - } - ] - }, - { - "name": "RESILIENCE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "resilience-test-generatrice-propane" - }, - { - "type": "service", - "host": "life-noc", - "service": "resilience-verification-carburant-generatrice" - }, - { - "type": "service", - "host": "life-noc", - "service": "resilience-verification-procedure-bascule" - }, - { - "type": "service", - "host": "life-noc", - "service": "resilience-verification-stock-lampes-piles" - }, - { - "type": "service", - "host": "life-noc", - "service": "resilience-verification-trousses-urgence" - }, - { - "type": "service", - "host": "life-noc", - "service": "resilience-revision-plan-urgence" - }, - { - "type": "service", - "host": "life-noc", - "service": "resilience-test-autonomie-base" - }, - { - "type": "service", - "host": "life-noc", - "service": "resilience-verification-moyens-cuisson-secours" - } - ] - }, - { - "name": "STOCK-ALIMENTAIRE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "stock-alimentaire-rotation-nourriture-seche" - }, - { - "type": "service", - "host": "life-noc", - "service": "stock-alimentaire-verification-reserve-eau" - }, - { - "type": "service", - "host": "life-noc", - "service": "stock-alimentaire-verification-mylar-absorbeurs" - }, - { - "type": "service", - "host": "life-noc", - "service": "stock-alimentaire-revue-inventaire-conserves" - }, - { - "type": "service", - "host": "life-noc", - "service": "stock-alimentaire-revue-inventaire-farine-riz-pates" - }, - { - "type": "service", - "host": "life-noc", - "service": "stock-alimentaire-verification-bacs-legumes-racines" - }, - { - "type": "service", - "host": "life-noc", - "service": "stock-alimentaire-revue-supplements-vitamines" - } - ] - }, - { - "name": "SANTE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "sante-verification-trousse-premiers-soins" - }, - { - "type": "service", - "host": "life-noc", - "service": "sante-verification-expiration-medicaments" - }, - { - "type": "service", - "host": "life-noc", - "service": "sante-revision-rendez-vous-medicaux" - }, - { - "type": "service", - "host": "life-noc", - "service": "sante-verification-lunettes-prescriptions" - }, - { - "type": "service", - "host": "life-noc", - "service": "sante-verification-dossier-sante" - } - ] - }, - { - "name": "VOITURE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "voiture-verification-huile-moteur" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-inspection-freins" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-verification-pneus" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-ajustement-valves" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-verification-timing-belt" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-verification-batterie-voiture" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-verification-balais-essuie-glace" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-verification-liquides" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-verification-eclairage" - }, - { - "type": "service", - "host": "life-noc", - "service": "voiture-verification-immatriculation-assurance" - } - ] - }, - { - "name": "JARDIN", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "jardin-inspection-vignes" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-entretien-bleuetiers" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-entretien-framboisiers" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-inspection-kiwis-nordiques" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-entretien-rhubarbe" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-inspection-groseillier" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-inspection-muriers" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-entretien-houblon" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-revision-pharmacopée-jardin" - }, - { - "type": "service", - "host": "life-noc", - "service": "jardin-revision-armoire-produits-jardin" - } - ] - }, - { - "name": "OUTILS-ET-EQUIPEMENTS", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "outils-et-equipements-entretien-outils-jardin" - }, - { - "type": "service", - "host": "life-noc", - "service": "outils-et-equipements-inspection-outils-electriques" - }, - { - "type": "service", - "host": "life-noc", - "service": "outils-et-equipements-verification-rallonges-et-connecteurs" - }, - { - "type": "service", - "host": "life-noc", - "service": "outils-et-equipements-verification-compresseur-et-accessoires" - }, - { - "type": "service", - "host": "life-noc", - "service": "outils-et-equipements-revision-inventaire-outillage" - } - ] - }, - { - "name": "INFORMATIQUE-PERSONNELLE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "informatique-personnelle-verification-sauvegardes-personnelles" - }, - { - "type": "service", - "host": "life-noc", - "service": "informatique-personnelle-nettoyage-stockage-personnel" - }, - { - "type": "service", - "host": "life-noc", - "service": "informatique-personnelle-verification-comptes-importants" - }, - { - "type": "service", - "host": "life-noc", - "service": "informatique-personnelle-revue-mots-de-passe-personnels" - }, - { - "type": "service", - "host": "life-noc", - "service": "informatique-personnelle-verification-documents-cloud-personnels" - } - ] - }, - { - "name": "INFRASTRUCTURE-CHEZLEPRO", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-proxmox" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-ceph" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-test-restauration-backups" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-pbs-truenas" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-ups-infrastructure" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-capacite-stockage" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-apt-cacher-ng" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-icinga2" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-keycloak-openldap" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-nextcloud" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-mailcow" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-openvas" - }, - { - "type": "service", - "host": "life-noc", - "service": "infrastructure-chezlepro-verification-journaux-systemes" - } - ] - }, - { - "name": "RESEAU-CHEZLEPRO", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-firewalls" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-vpn-openvpn" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-crl-certificats" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-switches" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-vlans-segmentation" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-dns" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-dynamic-dns" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-audit-regles-firewall" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-geoblocking" - }, - { - "type": "service", - "host": "life-noc", - "service": "reseau-chezlepro-verification-certificats-publics" - } - ] - }, - { - "name": "SECURITE-CHEZLEPRO", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "securite-chezlepro-verification-mises-a-jour-securite" - }, - { - "type": "service", - "host": "life-noc", - "service": "securite-chezlepro-audit-comptes-acces" - }, - { - "type": "service", - "host": "life-noc", - "service": "securite-chezlepro-verification-ids-snort" - }, - { - "type": "service", - "host": "life-noc", - "service": "securite-chezlepro-revue-pki-privee" - }, - { - "type": "service", - "host": "life-noc", - "service": "securite-chezlepro-revue-politiques-securite" - }, - { - "type": "service", - "host": "life-noc", - "service": "securite-chezlepro-verification-sauvegardes-configuration" - } - ] - }, - { - "name": "EXPLOITATION-CHEZLEPRO", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "exploitation-chezlepro-revision-playbooks-ansible" - }, - { - "type": "service", - "host": "life-noc", - "service": "exploitation-chezlepro-verification-inventaires-ansible" - }, - { - "type": "service", - "host": "life-noc", - "service": "exploitation-chezlepro-revision-documentation-technique" - }, - { - "type": "service", - "host": "life-noc", - "service": "exploitation-chezlepro-verification-procedures-reprise" - }, - { - "type": "service", - "host": "life-noc", - "service": "exploitation-chezlepro-revue-capacite-ressources" - }, - { - "type": "service", - "host": "life-noc", - "service": "exploitation-chezlepro-verification-jobs-automatises" - } - ] - }, - { - "name": "OBLIGATIONS-CHEZLEPRO", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "obligations-chezlepro-verification-registraire-entreprise" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-chezlepro-verification-declarations-taxes" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-chezlepro-verification-dossier-comptable-entreprise" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-chezlepro-verification-facturation-clients" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-chezlepro-verification-paiements-fournisseurs" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-chezlepro-verification-contrats-ententes" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-chezlepro-verification-assurances-entreprise" - }, - { - "type": "service", - "host": "life-noc", - "service": "obligations-chezlepro-archivage-documents-entreprise" - } - ] - }, - { - "name": "ACTIFS-CHEZLEPRO", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "actifs-chezlepro-revision-inventaire-materiel" - }, - { - "type": "service", - "host": "life-noc", - "service": "actifs-chezlepro-verification-amortissables" - }, - { - "type": "service", - "host": "life-noc", - "service": "actifs-chezlepro-verification-serveurs-et-composants" - }, - { - "type": "service", - "host": "life-noc", - "service": "actifs-chezlepro-verification-reserve-pieces" - }, - { - "type": "service", - "host": "life-noc", - "service": "actifs-chezlepro-revision-actifs-transferts" - } - ] - }, - { - "name": "PROJETS", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "projets-revision-life-noc" - }, - { - "type": "service", - "host": "life-noc", - "service": "projets-revision-alliance-boreale" - }, - { - "type": "service", - "host": "life-noc", - "service": "projets-revision-erplibre" - }, - { - "type": "service", - "host": "life-noc", - "service": "projets-revision-semence-numerique" - }, - { - "type": "service", - "host": "life-noc", - "service": "projets-revision-ortrux-1" - }, - { - "type": "service", - "host": "life-noc", - "service": "projets-revision-district16" - } - ] - }, - { - "name": "COMMUNAUTE", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "communaute-verification-outils-aa" - }, - { - "type": "service", - "host": "life-noc", - "service": "communaute-verification-espace-87-16" - }, - { - "type": "service", - "host": "life-noc", - "service": "communaute-verification-salles-visio-groupes" - }, - { - "type": "service", - "host": "life-noc", - "service": "communaute-verification-depots-rapports-rsg" - }, - { - "type": "service", - "host": "life-noc", - "service": "communaute-revision-outils-communication-communaute" - } - ] - }, - { - "name": "DOCUMENTATION", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "documentation-revue-docs-personnelles-importantes" - }, - { - "type": "service", - "host": "life-noc", - "service": "documentation-revue-wiki-technique" - }, - { - "type": "service", - "host": "life-noc", - "service": "documentation-revue-base-connaissances" - }, - { - "type": "service", - "host": "life-noc", - "service": "documentation-verification-sauvegarde-docs-cles" - } - ] - }, - { - "name": "ANIMAUX", - "operator": "worst", - "nodes": [ - { - "type": "service", - "host": "life-noc", - "service": "animaux-verification-stock-nourriture-chats" - }, - { - "type": "service", - "host": "life-noc", - "service": "animaux-verification-friandises-et-litiere" - }, - { - "type": "service", - "host": "life-noc", - "service": "animaux-revision-routine-soins-animaux" - } - ] - } - ] -} \ No newline at end of file diff --git a/icinga/servicegroups/life-noc.conf b/icinga/servicegroups/life-noc.conf new file mode 100644 index 0000000..340151d --- /dev/null +++ b/icinga/servicegroups/life-noc.conf @@ -0,0 +1,105 @@ +/* + AUTO-GENERATED FILE - SERVICE GROUPS + Ne pas modifier manuellement. + Source: domains.yaml +*/ + +object ServiceGroup "REVUE" { + display_name = "REVUE" +} + +object ServiceGroup "FOCUS" { + display_name = "FOCUS" +} + +object ServiceGroup "FINANCES-PERSONNELLES" { + display_name = "FINANCES-PERSONNELLES" +} + +object ServiceGroup "FISCALITE-PERSONNELLE" { + display_name = "FISCALITE-PERSONNELLE" +} + +object ServiceGroup "OBLIGATIONS-LEGALES-PERSONNELLES" { + display_name = "OBLIGATIONS-LEGALES-PERSONNELLES" +} + +object ServiceGroup "MAISON" { + display_name = "MAISON" +} + +object ServiceGroup "GARAGE-ET-RANGEMENT" { + display_name = "GARAGE-ET-RANGEMENT" +} + +object ServiceGroup "ENERGIE" { + display_name = "ENERGIE" +} + +object ServiceGroup "RESILIENCE" { + display_name = "RESILIENCE" +} + +object ServiceGroup "STOCK-ALIMENTAIRE" { + display_name = "STOCK-ALIMENTAIRE" +} + +object ServiceGroup "SANTE" { + display_name = "SANTE" +} + +object ServiceGroup "VOITURE" { + display_name = "VOITURE" +} + +object ServiceGroup "JARDIN" { + display_name = "JARDIN" +} + +object ServiceGroup "OUTILS-ET-EQUIPEMENTS" { + display_name = "OUTILS-ET-EQUIPEMENTS" +} + +object ServiceGroup "INFORMATIQUE-PERSONNELLE" { + display_name = "INFORMATIQUE-PERSONNELLE" +} + +object ServiceGroup "INFRASTRUCTURE-CHEZLEPRO" { + display_name = "INFRASTRUCTURE-CHEZLEPRO" +} + +object ServiceGroup "RESEAU-CHEZLEPRO" { + display_name = "RESEAU-CHEZLEPRO" +} + +object ServiceGroup "SECURITE-CHEZLEPRO" { + display_name = "SECURITE-CHEZLEPRO" +} + +object ServiceGroup "EXPLOITATION-CHEZLEPRO" { + display_name = "EXPLOITATION-CHEZLEPRO" +} + +object ServiceGroup "OBLIGATIONS-CHEZLEPRO" { + display_name = "OBLIGATIONS-CHEZLEPRO" +} + +object ServiceGroup "ACTIFS-CHEZLEPRO" { + display_name = "ACTIFS-CHEZLEPRO" +} + +object ServiceGroup "PROJETS" { + display_name = "PROJETS" +} + +object ServiceGroup "COMMUNAUTE" { + display_name = "COMMUNAUTE" +} + +object ServiceGroup "DOCUMENTATION" { + display_name = "DOCUMENTATION" +} + +object ServiceGroup "ANIMAUX" { + display_name = "ANIMAUX" +} diff --git a/icinga/services/actifs-chezlepro.conf b/icinga/services/actifs-chezlepro.conf index 5140568..7277ff0 100644 --- a/icinga/services/actifs-chezlepro.conf +++ b/icinga/services/actifs-chezlepro.conf @@ -9,6 +9,7 @@ apply Service "actifs-chezlepro-revision-inventaire-materiel" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ACTIFS-CHEZLEPRO" ] notes = "Revoir l'inventaire du matériel de Chezlepro" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "actifs-chezlepro-verification-amortissables" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ACTIFS-CHEZLEPRO" ] notes = "Vérifier le registre des biens amortissables" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "actifs-chezlepro-verification-serveurs-et-composants" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ACTIFS-CHEZLEPRO" ] notes = "Vérifier l'état des serveurs et composants matériels" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "actifs-chezlepro-verification-reserve-pieces" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ACTIFS-CHEZLEPRO" ] notes = "Vérifier les pièces de rechange critiques" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "actifs-chezlepro-revision-actifs-transferts" { vars.date_echeance = "2026-06-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ACTIFS-CHEZLEPRO" ] notes = "Réviser les actifs transférés ou à transférer à l'entreprise" assign where host.name == "life-noc" } diff --git a/icinga/services/animaux.conf b/icinga/services/animaux.conf index 7458fe9..82160df 100644 --- a/icinga/services/animaux.conf +++ b/icinga/services/animaux.conf @@ -9,6 +9,7 @@ apply Service "animaux-verification-stock-nourriture-chats" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ANIMAUX" ] notes = "Vérification du stock de nourriture pour chats" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "animaux-verification-friandises-et-litiere" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ANIMAUX" ] notes = "Vérification des stocks de friandises et de litière" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "animaux-revision-routine-soins-animaux" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ANIMAUX" ] notes = "Revue de la routine de soins et des besoins matériels des chats" assign where host.name == "life-noc" } diff --git a/icinga/services/communaute.conf b/icinga/services/communaute.conf index a93296a..fec6ba3 100644 --- a/icinga/services/communaute.conf +++ b/icinga/services/communaute.conf @@ -9,6 +9,7 @@ apply Service "communaute-verification-outils-aa" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "COMMUNAUTE" ] notes = "Vérifier les outils numériques liés aux activités communautaires" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "communaute-verification-espace-87-16" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "COMMUNAUTE" ] notes = "Vérifier l'espace Nextcloud du district" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "communaute-verification-salles-visio-groupes" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "COMMUNAUTE" ] notes = "Vérifier les salles de visioconférence des groupes" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "communaute-verification-depots-rapports-rsg" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "COMMUNAUTE" ] notes = "Vérifier les dépôts de rapports RSG" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "communaute-revision-outils-communication-communaute" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "COMMUNAUTE" ] notes = "Réviser les moyens de communication communautaires" assign where host.name == "life-noc" } diff --git a/icinga/services/documentation.conf b/icinga/services/documentation.conf index bb609e5..6c17d4a 100644 --- a/icinga/services/documentation.conf +++ b/icinga/services/documentation.conf @@ -9,6 +9,7 @@ apply Service "documentation-revue-docs-personnelles-importantes" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "DOCUMENTATION" ] notes = "Revoir l'organisation des documents personnels importants" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "documentation-revue-wiki-technique" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "DOCUMENTATION" ] notes = "Revoir le wiki technique et sa cohérence" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "documentation-revue-base-connaissances" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "DOCUMENTATION" ] notes = "Revoir la base de connaissances globale" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "documentation-verification-sauvegarde-docs-cles" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "DOCUMENTATION" ] notes = "Vérifier la sauvegarde des documents clés" assign where host.name == "life-noc" } diff --git a/icinga/services/energie.conf b/icinga/services/energie.conf index d635684..763d683 100644 --- a/icinga/services/energie.conf +++ b/icinga/services/energie.conf @@ -9,6 +9,7 @@ apply Service "energie-inspection-batteries-lifepo4" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Inspection physique et logique des batteries LiFePO4" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "energie-verification-tension-batteries" { vars.date_echeance = "2026-03-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Vérification des tensions et cohérence des batteries" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "energie-verification-smartshunt" { vars.date_echeance = "2026-03-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Vérification SmartShunt et cohérence du monitoring" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "energie-verification-cerbo-gx" { vars.date_echeance = "2026-03-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Vérification Cerbo GX et remontée des données" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "energie-verification-can-rs485" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Vérification des communications CAN ou RS485" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "energie-inspection-cablage-energie" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Inspection du câblage et des connexions énergétiques" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "energie-verification-busbars" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Vérification du serrage, corrosion et échauffement des busbars" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "energie-verification-parametres-charge" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Vérification des paramètres de charge et float" assign where host.name == "life-noc" } @@ -81,6 +89,7 @@ apply Service "energie-test-charge-batteries" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Test de comportement en charge des batteries" assign where host.name == "life-noc" } @@ -90,6 +99,7 @@ apply Service "energie-test-comportement-onduleur" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Vérifier le comportement du Multiplus sous charge légère" assign where host.name == "life-noc" } @@ -99,6 +109,7 @@ apply Service "energie-verification-journal-evenements-victron" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "ENERGIE" ] notes = "Vérification des événements et anomalies Victron" assign where host.name == "life-noc" } diff --git a/icinga/services/exploitation-chezlepro.conf b/icinga/services/exploitation-chezlepro.conf index b5b6927..3240348 100644 --- a/icinga/services/exploitation-chezlepro.conf +++ b/icinga/services/exploitation-chezlepro.conf @@ -9,6 +9,7 @@ apply Service "exploitation-chezlepro-revision-playbooks-ansible" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "EXPLOITATION-CHEZLEPRO" ] notes = "Revue des playbooks Ansible" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "exploitation-chezlepro-verification-inventaires-ansible" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "EXPLOITATION-CHEZLEPRO" ] notes = "Vérification des inventaires Ansible" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "exploitation-chezlepro-revision-documentation-technique" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "EXPLOITATION-CHEZLEPRO" ] notes = "Revue de la documentation technique Chezlepro" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "exploitation-chezlepro-verification-procedures-reprise" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "EXPLOITATION-CHEZLEPRO" ] notes = "Vérifier les procédures de reprise et restauration" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "exploitation-chezlepro-revue-capacite-ressources" { vars.date_echeance = "2026-06-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "EXPLOITATION-CHEZLEPRO" ] notes = "Revue CPU RAM stockage et charge de l'infrastructure" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "exploitation-chezlepro-verification-jobs-automatises" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "EXPLOITATION-CHEZLEPRO" ] notes = "Vérification des jobs automatisés et scripts périodiques" assign where host.name == "life-noc" } diff --git a/icinga/services/finances-personnelles.conf b/icinga/services/finances-personnelles.conf index 5cee14e..03f3be9 100644 --- a/icinga/services/finances-personnelles.conf +++ b/icinga/services/finances-personnelles.conf @@ -9,6 +9,7 @@ apply Service "finances-personnelles-revision-comptes-bancaires" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Révision mensuelle des comptes bancaires personnels" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "finances-personnelles-verification-cartes-credit" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Vérification des soldes et transactions des cartes de crédit" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "finances-personnelles-paiement-cartes-credit" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Paiement des cartes de crédit personnelles" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "finances-personnelles-revision-budget-personnel" { vars.date_echeance = "2026-04-05" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Révision mensuelle du budget personnel" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "finances-personnelles-verification-prelevements-automatiques" { vars.date_echeance = "2026-04-03" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Vérification des prélèvements automatiques personnels" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "finances-personnelles-verification-placements" { vars.date_echeance = "2026-06-30" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Vérification périodique des placements et comptes enregistrés" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "finances-personnelles-verification-cotisations-reer" { vars.date_echeance = "2026-02-28" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Vérification des cotisations REER" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "finances-personnelles-verification-celi" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Vérification de l'espace CELI et de son utilisation" assign where host.name == "life-noc" } @@ -81,6 +89,7 @@ apply Service "finances-personnelles-preparation-dossier-financier-annuel" { vars.date_echeance = "2026-01-31" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FINANCES-PERSONNELLES" ] notes = "Préparer le dossier financier annuel personnel" assign where host.name == "life-noc" } diff --git a/icinga/services/fiscalite-personnelle.conf b/icinga/services/fiscalite-personnelle.conf index 4a5f7db..66f5a52 100644 --- a/icinga/services/fiscalite-personnelle.conf +++ b/icinga/services/fiscalite-personnelle.conf @@ -9,6 +9,7 @@ apply Service "fiscalite-personnelle-preparation-documents-impots" { vars.date_echeance = "2026-03-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FISCALITE-PERSONNELLE" ] notes = "Rassembler tous les documents fiscaux personnels" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "fiscalite-personnelle-production-impots-federal" { vars.date_echeance = "2026-04-30" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FISCALITE-PERSONNELLE" ] notes = "Produire la déclaration de revenus fédérale" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "fiscalite-personnelle-production-impots-quebec" { vars.date_echeance = "2026-04-30" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FISCALITE-PERSONNELLE" ] notes = "Produire la déclaration de revenus Québec" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "fiscalite-personnelle-paiement-solde-impots" { vars.date_echeance = "2026-04-30" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FISCALITE-PERSONNELLE" ] notes = "Payer tout solde d'impôt exigible" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "fiscalite-personnelle-verification-avis-cotisation" { vars.date_echeance = "2026-05-31" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FISCALITE-PERSONNELLE" ] notes = "Vérifier les avis de cotisation ARC et Revenu Québec" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "fiscalite-personnelle-archivage-documents-fiscaux" { vars.date_echeance = "2026-06-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FISCALITE-PERSONNELLE" ] notes = "Archiver les documents fiscaux personnels" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "fiscalite-personnelle-verification-acomptes-provisionnels" { vars.date_echeance = "2026-03-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FISCALITE-PERSONNELLE" ] notes = "Vérifier si des acomptes provisionnels sont requis" assign where host.name == "life-noc" } diff --git a/icinga/services/focus.conf b/icinga/services/focus.conf index 245b0bf..ac5137b 100644 --- a/icinga/services/focus.conf +++ b/icinga/services/focus.conf @@ -9,6 +9,7 @@ apply Service "focus-entretien-processus-focus" { vars.date_echeance = "2026-03-09" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FOCUS" ] notes = "Vérifier que les cartouches FOCUS sont à jour" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "focus-nettoyage-inbox-mentale" { vars.date_echeance = "2026-03-09" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FOCUS" ] notes = "Vider et clarifier les éléments capturés hors système" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "focus-revue-limitation-engagements" { vars.date_echeance = "2026-03-31" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "FOCUS" ] notes = "Vérifier que les engagements actifs demeurent réalistes" assign where host.name == "life-noc" } diff --git a/icinga/services/garage-et-rangement.conf b/icinga/services/garage-et-rangement.conf index 198983b..be78f07 100644 --- a/icinga/services/garage-et-rangement.conf +++ b/icinga/services/garage-et-rangement.conf @@ -9,6 +9,7 @@ apply Service "garage-et-rangement-inspection-rangement-plafond" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "GARAGE-ET-RANGEMENT" ] notes = "Vérification des supports suspendus au plafond du garage" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "garage-et-rangement-revue-inventaire-garage" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "GARAGE-ET-RANGEMENT" ] notes = "Revue de l'inventaire et de l'ordre du garage" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "garage-et-rangement-verification-rouille-outillage" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "GARAGE-ET-RANGEMENT" ] notes = "Vérification de la corrosion sur les outils et équipements" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "garage-et-rangement-inspection-securite-garage" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "GARAGE-ET-RANGEMENT" ] notes = "Vérification des conditions de sécurité du garage" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "garage-et-rangement-rotation-stockage-bacs" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "GARAGE-ET-RANGEMENT" ] notes = "Revue des contenus de bacs de rangement" assign where host.name == "life-noc" } diff --git a/icinga/services/informatique-personnelle.conf b/icinga/services/informatique-personnelle.conf index 47fde9d..4b1d56e 100644 --- a/icinga/services/informatique-personnelle.conf +++ b/icinga/services/informatique-personnelle.conf @@ -9,6 +9,7 @@ apply Service "informatique-personnelle-verification-sauvegardes-personnelles" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFORMATIQUE-PERSONNELLE" ] notes = "Vérification des sauvegardes personnelles" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "informatique-personnelle-nettoyage-stockage-personnel" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFORMATIQUE-PERSONNELLE" ] notes = "Nettoyage du stockage numérique personnel" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "informatique-personnelle-verification-comptes-importants" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFORMATIQUE-PERSONNELLE" ] notes = "Vérification des comptes numériques personnels importants" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "informatique-personnelle-revue-mots-de-passe-personnels" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFORMATIQUE-PERSONNELLE" ] notes = "Revue des mots de passe personnels critiques" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "informatique-personnelle-verification-documents-cloud-personnels" vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFORMATIQUE-PERSONNELLE" ] notes = "Vérifier la cohérence des documents personnels sauvegardés" assign where host.name == "life-noc" } diff --git a/icinga/services/infrastructure-chezlepro.conf b/icinga/services/infrastructure-chezlepro.conf index 470b202..fe0e7ed 100644 --- a/icinga/services/infrastructure-chezlepro.conf +++ b/icinga/services/infrastructure-chezlepro.conf @@ -9,6 +9,7 @@ apply Service "infrastructure-chezlepro-verification-proxmox" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification générale de l'environnement Proxmox" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "infrastructure-chezlepro-verification-ceph" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification générale de l'état Ceph" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "infrastructure-chezlepro-test-restauration-backups" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Test de restauration des sauvegardes" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "infrastructure-chezlepro-verification-pbs-truenas" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification des solutions de sauvegarde et synchronisation" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "infrastructure-chezlepro-verification-ups-infrastructure" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification des UPS de l'infrastructure" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "infrastructure-chezlepro-verification-capacite-stockage" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérifier capacité et croissance du stockage" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "infrastructure-chezlepro-verification-apt-cacher-ng" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification du bon fonctionnement d'apt-cacher-ng" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "infrastructure-chezlepro-verification-icinga2" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification de la supervision Icinga2" assign where host.name == "life-noc" } @@ -81,6 +89,7 @@ apply Service "infrastructure-chezlepro-verification-keycloak-openldap" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification de l'identité et de l'authentification centralisées" assign where host.name == "life-noc" } @@ -90,6 +99,7 @@ apply Service "infrastructure-chezlepro-verification-nextcloud" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification de l'état Nextcloud" assign where host.name == "life-noc" } @@ -99,6 +109,7 @@ apply Service "infrastructure-chezlepro-verification-mailcow" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification de l'infrastructure Mailcow" assign where host.name == "life-noc" } @@ -108,6 +119,7 @@ apply Service "infrastructure-chezlepro-verification-openvas" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Vérification de la plateforme OpenVAS" assign where host.name == "life-noc" } @@ -117,6 +129,7 @@ apply Service "infrastructure-chezlepro-verification-journaux-systemes" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "INFRASTRUCTURE-CHEZLEPRO" ] notes = "Revue des journaux systèmes critiques" assign where host.name == "life-noc" } diff --git a/icinga/services/jardin.conf b/icinga/services/jardin.conf index 3560794..fc2341a 100644 --- a/icinga/services/jardin.conf +++ b/icinga/services/jardin.conf @@ -9,6 +9,7 @@ apply Service "jardin-inspection-vignes" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Inspection et entretien des vignes" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "jardin-entretien-bleuetiers" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Entretien des bleuetiers" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "jardin-entretien-framboisiers" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Entretien des framboisiers" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "jardin-inspection-kiwis-nordiques" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Vérification des kiwis nordiques" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "jardin-entretien-rhubarbe" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Entretien de la rhubarbe" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "jardin-inspection-groseillier" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Inspection du groseillier" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "jardin-inspection-muriers" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Inspection des mûriers" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "jardin-entretien-houblon" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Vérification et entretien du houblon" assign where host.name == "life-noc" } @@ -81,6 +89,7 @@ apply Service "jardin-revision-pharmacopée-jardin" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Vérification du stock de soins pour végétaux" assign where host.name == "life-noc" } @@ -90,6 +99,7 @@ apply Service "jardin-revision-armoire-produits-jardin" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "JARDIN" ] notes = "Vérification et ordre de l'armoire des produits pour végétaux" assign where host.name == "life-noc" } diff --git a/icinga/services/maison.conf b/icinga/services/maison.conf index 5cc97dd..ad4c998 100644 --- a/icinga/services/maison.conf +++ b/icinga/services/maison.conf @@ -9,6 +9,7 @@ apply Service "maison-remplacement-filtre-fournaise" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Remplacer le filtre de la fournaise" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "maison-inspection-fournaise" { vars.date_echeance = "2026-09-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Inspection générale de la fournaise avant saison froide" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "maison-inspection-thermopompe" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Inspection et entretien de la thermopompe" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "maison-nettoyage-unites-exterieures" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Nettoyer les unités extérieures et vérifier le dégagement" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "maison-inspection-toiture" { vars.date_echeance = "2026-10-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Inspection annuelle de la toiture" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "maison-inspection-gouttieres" { vars.date_echeance = "2026-11-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Inspection et nettoyage des gouttières" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "maison-inspection-fondation" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Inspection de la fondation et des fissures" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "maison-verification-drainage-terrain" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Vérification du drainage autour de la maison" assign where host.name == "life-noc" } @@ -81,6 +89,7 @@ apply Service "maison-test-detecteurs-fumee" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Test des détecteurs de fumée" assign where host.name == "life-noc" } @@ -90,6 +99,7 @@ apply Service "maison-test-detecteurs-co" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Test des détecteurs de monoxyde de carbone" assign where host.name == "life-noc" } @@ -99,6 +109,7 @@ apply Service "maison-remplacement-piles-detecteurs" { vars.date_echeance = "2026-10-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Remplacement préventif des piles des détecteurs" assign where host.name == "life-noc" } @@ -108,6 +119,7 @@ apply Service "maison-verification-plomberie-visible" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Vérification visuelle de la plomberie accessible" assign where host.name == "life-noc" } @@ -117,6 +129,7 @@ apply Service "maison-inspection-sump-pump" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Vérification de la pompe de puisard si applicable" assign where host.name == "life-noc" } @@ -126,6 +139,7 @@ apply Service "maison-verification-calfetrage" { vars.date_echeance = "2026-10-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Vérification du calfeutrage portes et fenêtres" assign where host.name == "life-noc" } @@ -135,6 +149,7 @@ apply Service "maison-inspection-portes-garage" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Vérification mécanique et sécurité des portes de garage" assign where host.name == "life-noc" } @@ -144,6 +159,7 @@ apply Service "maison-verification-extincteurs" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "MAISON" ] notes = "Vérification des extincteurs" assign where host.name == "life-noc" } diff --git a/icinga/services/obligations-chezlepro.conf b/icinga/services/obligations-chezlepro.conf index a52248e..0bec604 100644 --- a/icinga/services/obligations-chezlepro.conf +++ b/icinga/services/obligations-chezlepro.conf @@ -9,6 +9,7 @@ apply Service "obligations-chezlepro-verification-registraire-entreprise" { vars.date_echeance = "2026-06-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-CHEZLEPRO" ] notes = "Vérifier les obligations au Registraire des entreprises" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "obligations-chezlepro-verification-declarations-taxes" { vars.date_echeance = "2026-04-30" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-CHEZLEPRO" ] notes = "Vérifier les obligations de taxes de l'entreprise si applicables" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "obligations-chezlepro-verification-dossier-comptable-entreprise" vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-CHEZLEPRO" ] notes = "Vérifier l'ordre du dossier comptable Chezlepro" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "obligations-chezlepro-verification-facturation-clients" { vars.date_echeance = "2026-04-10" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-CHEZLEPRO" ] notes = "Vérifier la facturation et son suivi" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "obligations-chezlepro-verification-paiements-fournisseurs" { vars.date_echeance = "2026-04-10" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-CHEZLEPRO" ] notes = "Vérifier les paiements fournisseurs" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "obligations-chezlepro-verification-contrats-ententes" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-CHEZLEPRO" ] notes = "Vérifier contrats, ententes et obligations associées" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "obligations-chezlepro-verification-assurances-entreprise" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-CHEZLEPRO" ] notes = "Vérifier les assurances de l'entreprise" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "obligations-chezlepro-archivage-documents-entreprise" { vars.date_echeance = "2026-05-31" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-CHEZLEPRO" ] notes = "Archiver les documents administratifs et financiers de l'entreprise" assign where host.name == "life-noc" } diff --git a/icinga/services/obligations-legales-personnelles.conf b/icinga/services/obligations-legales-personnelles.conf index bfdb5b5..dfd723c 100644 --- a/icinga/services/obligations-legales-personnelles.conf +++ b/icinga/services/obligations-legales-personnelles.conf @@ -9,6 +9,7 @@ apply Service "obligations-legales-personnelles-verification-testament" { vars.date_echeance = "2026-07-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-LEGALES-PERSONNELLES" ] notes = "Vérifier la pertinence et l'actualité du testament" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "obligations-legales-personnelles-verification-mandat-inaptitude" vars.date_echeance = "2026-07-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-LEGALES-PERSONNELLES" ] notes = "Vérifier le mandat de protection et documents connexes" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "obligations-legales-personnelles-verification-directives-medicale vars.date_echeance = "2026-07-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-LEGALES-PERSONNELLES" ] notes = "Vérifier les directives médicales anticipées" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "obligations-legales-personnelles-verification-papiers-identite" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-LEGALES-PERSONNELLES" ] notes = "Vérifier l'expiration des papiers d'identité" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "obligations-legales-personnelles-renouvellement-permis-conduire" vars.date_echeance = "2027-01-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-LEGALES-PERSONNELLES" ] notes = "Vérifier le renouvellement du permis de conduire" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "obligations-legales-personnelles-verification-carte-assurance-mal vars.date_echeance = "2026-10-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-LEGALES-PERSONNELLES" ] notes = "Vérifier l'expiration de la carte d'assurance maladie" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "obligations-legales-personnelles-verification-passeport" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OBLIGATIONS-LEGALES-PERSONNELLES" ] notes = "Vérifier l'expiration du passeport" assign where host.name == "life-noc" } diff --git a/icinga/services/outils-et-equipements.conf b/icinga/services/outils-et-equipements.conf index 5e910f4..1009e93 100644 --- a/icinga/services/outils-et-equipements.conf +++ b/icinga/services/outils-et-equipements.conf @@ -9,6 +9,7 @@ apply Service "outils-et-equipements-entretien-outils-jardin" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OUTILS-ET-EQUIPEMENTS" ] notes = "Nettoyage et entretien des outils de jardin" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "outils-et-equipements-inspection-outils-electriques" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OUTILS-ET-EQUIPEMENTS" ] notes = "Vérification des outils électriques" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "outils-et-equipements-verification-rallonges-et-connecteurs" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OUTILS-ET-EQUIPEMENTS" ] notes = "Vérification des rallonges et connecteurs" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "outils-et-equipements-verification-compresseur-et-accessoires" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OUTILS-ET-EQUIPEMENTS" ] notes = "Vérification du compresseur et accessoires" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "outils-et-equipements-revision-inventaire-outillage" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "OUTILS-ET-EQUIPEMENTS" ] notes = "Revue de l'inventaire d'outillage" assign where host.name == "life-noc" } diff --git a/icinga/services/projets.conf b/icinga/services/projets.conf index a0e64b9..25b9ba8 100644 --- a/icinga/services/projets.conf +++ b/icinga/services/projets.conf @@ -9,6 +9,7 @@ apply Service "projets-revision-life-noc" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "PROJETS" ] notes = "Révision du projet Life-NOC" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "projets-revision-alliance-boreale" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "PROJETS" ] notes = "Révision du projet Alliance Boréale" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "projets-revision-erplibre" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "PROJETS" ] notes = "Révision du projet ERPLibre" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "projets-revision-semence-numerique" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "PROJETS" ] notes = "Révision du projet semence numérique" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "projets-revision-ortrux-1" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "PROJETS" ] notes = "Révision du système Ortrux-1" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "projets-revision-district16" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "PROJETS" ] notes = "Révision du projet DISTRICT16" assign where host.name == "life-noc" } diff --git a/icinga/services/reseau-chezlepro.conf b/icinga/services/reseau-chezlepro.conf index 01843a4..8831478 100644 --- a/icinga/services/reseau-chezlepro.conf +++ b/icinga/services/reseau-chezlepro.conf @@ -9,6 +9,7 @@ apply Service "reseau-chezlepro-verification-firewalls" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérification des firewalls" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "reseau-chezlepro-verification-vpn-openvpn" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérification des tunnels OpenVPN" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "reseau-chezlepro-verification-crl-certificats" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérification de la CRL et des certificats" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "reseau-chezlepro-verification-switches" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérification des switches et uplinks" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "reseau-chezlepro-verification-vlans-segmentation" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérification de la segmentation réseau" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "reseau-chezlepro-verification-dns" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérification DNS interne et externe" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "reseau-chezlepro-verification-dynamic-dns" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérification du DNS dynamique si utilisé" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "reseau-chezlepro-audit-regles-firewall" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Audit périodique des règles de firewall" assign where host.name == "life-noc" } @@ -81,6 +89,7 @@ apply Service "reseau-chezlepro-verification-geoblocking" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérifier le geoblocking et son effet attendu" assign where host.name == "life-noc" } @@ -90,6 +99,7 @@ apply Service "reseau-chezlepro-verification-certificats-publics" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESEAU-CHEZLEPRO" ] notes = "Vérifier les expirations de certificats publics" assign where host.name == "life-noc" } diff --git a/icinga/services/resilience.conf b/icinga/services/resilience.conf index 27b883f..0875dca 100644 --- a/icinga/services/resilience.conf +++ b/icinga/services/resilience.conf @@ -9,6 +9,7 @@ apply Service "resilience-test-generatrice-propane" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESILIENCE" ] notes = "Test mensuel de la génératrice au propane" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "resilience-verification-carburant-generatrice" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESILIENCE" ] notes = "Vérification de l'approvisionnement propane lié à la génératrice" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "resilience-verification-procedure-bascule" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESILIENCE" ] notes = "Réviser la procédure de bascule en mode secours" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "resilience-verification-stock-lampes-piles" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESILIENCE" ] notes = "Vérification des lampes, piles et éclairage d'urgence" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "resilience-verification-trousses-urgence" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESILIENCE" ] notes = "Vérification des trousses d'urgence" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "resilience-revision-plan-urgence" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESILIENCE" ] notes = "Réviser le plan d'urgence domestique" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "resilience-test-autonomie-base" { vars.date_echeance = "2026-06-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESILIENCE" ] notes = "Vérifier l'autonomie énergétique minimale attendue" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "resilience-verification-moyens-cuisson-secours" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "RESILIENCE" ] notes = "Vérification des moyens de cuisson de secours" assign where host.name == "life-noc" } diff --git a/icinga/services/revue.conf b/icinga/services/revue.conf index bce7daa..3e7d5c3 100644 --- a/icinga/services/revue.conf +++ b/icinga/services/revue.conf @@ -9,6 +9,7 @@ apply Service "revue-revue-quotidienne-life-noc" { vars.date_echeance = "2026-03-07" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "REVUE" ] notes = "Revue quotidienne du tableau Life-NOC" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "revue-revue-hebdomadaire-priorites" { vars.date_echeance = "2026-03-08" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "REVUE" ] notes = "Revue hebdomadaire des priorités personnelles et professionnelles" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "revue-revue-mensuelle-systeme-vie" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "REVUE" ] notes = "Revue mensuelle de l'ensemble du système Life-NOC" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "revue-revue-trimestrielle-orientation" { vars.date_echeance = "2026-06-30" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "REVUE" ] notes = "Revue trimestrielle des orientations de vie et de Chezlepro" assign where host.name == "life-noc" } diff --git a/icinga/services/sante.conf b/icinga/services/sante.conf index 17521c0..fd4a2d9 100644 --- a/icinga/services/sante.conf +++ b/icinga/services/sante.conf @@ -9,6 +9,7 @@ apply Service "sante-verification-trousse-premiers-soins" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SANTE" ] notes = "Vérification de la trousse de premiers soins" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "sante-verification-expiration-medicaments" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SANTE" ] notes = "Vérification des dates d'expiration des médicaments" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "sante-revision-rendez-vous-medicaux" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SANTE" ] notes = "Revoir les rendez-vous médicaux requis" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "sante-verification-lunettes-prescriptions" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SANTE" ] notes = "Vérifier les prescriptions et besoins de renouvellement" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "sante-verification-dossier-sante" { vars.date_echeance = "2026-06-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SANTE" ] notes = "Vérifier l'ordre et l'accessibilité des documents de santé" assign where host.name == "life-noc" } diff --git a/icinga/services/securite-chezlepro.conf b/icinga/services/securite-chezlepro.conf index 9ef897f..33f0d85 100644 --- a/icinga/services/securite-chezlepro.conf +++ b/icinga/services/securite-chezlepro.conf @@ -9,6 +9,7 @@ apply Service "securite-chezlepro-verification-mises-a-jour-securite" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SECURITE-CHEZLEPRO" ] notes = "Vérification des mises à jour de sécurité" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "securite-chezlepro-audit-comptes-acces" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SECURITE-CHEZLEPRO" ] notes = "Audit des comptes et accès privilégiés" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "securite-chezlepro-verification-ids-snort" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SECURITE-CHEZLEPRO" ] notes = "Vérification des IDS et de leur état" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "securite-chezlepro-revue-pki-privee" { vars.date_echeance = "2026-05-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SECURITE-CHEZLEPRO" ] notes = "Revue de la PKI privée et des autorités intermédiaires" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "securite-chezlepro-revue-politiques-securite" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SECURITE-CHEZLEPRO" ] notes = "Revue des politiques et pratiques de sécurité numérique" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "securite-chezlepro-verification-sauvegardes-configuration" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "SECURITE-CHEZLEPRO" ] notes = "Vérifier les sauvegardes des configurations critiques" assign where host.name == "life-noc" } diff --git a/icinga/services/stock-alimentaire.conf b/icinga/services/stock-alimentaire.conf index c8a68a0..2b06fab 100644 --- a/icinga/services/stock-alimentaire.conf +++ b/icinga/services/stock-alimentaire.conf @@ -9,6 +9,7 @@ apply Service "stock-alimentaire-rotation-nourriture-seche" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "STOCK-ALIMENTAIRE" ] notes = "Rotation des stocks de nourriture sèche" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "stock-alimentaire-verification-reserve-eau" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "STOCK-ALIMENTAIRE" ] notes = "Vérification de la réserve d'eau potable" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "stock-alimentaire-verification-mylar-absorbeurs" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "STOCK-ALIMENTAIRE" ] notes = "Vérifier l'intégrité des emballages Mylar et absorbeurs" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "stock-alimentaire-revue-inventaire-conserves" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "STOCK-ALIMENTAIRE" ] notes = "Revue des conserves et dates de rotation" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "stock-alimentaire-revue-inventaire-farine-riz-pates" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "STOCK-ALIMENTAIRE" ] notes = "Vérification des gros stocks alimentaires de base" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "stock-alimentaire-verification-bacs-legumes-racines" { vars.date_echeance = "2026-10-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "STOCK-ALIMENTAIRE" ] notes = "Vérification des bacs de stockage de légumes racines" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "stock-alimentaire-revue-supplements-vitamines" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "STOCK-ALIMENTAIRE" ] notes = "Vérification du stock de suppléments et dates utiles" assign where host.name == "life-noc" } diff --git a/icinga/services/voiture.conf b/icinga/services/voiture.conf index 6db092a..ee03508 100644 --- a/icinga/services/voiture.conf +++ b/icinga/services/voiture.conf @@ -9,6 +9,7 @@ apply Service "voiture-verification-huile-moteur" { vars.date_echeance = "2026-04-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification de l'huile moteur" assign where host.name == "life-noc" } @@ -18,6 +19,7 @@ apply Service "voiture-inspection-freins" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Inspection des freins" assign where host.name == "life-noc" } @@ -27,6 +29,7 @@ apply Service "voiture-verification-pneus" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification usure, pression et permutation des pneus" assign where host.name == "life-noc" } @@ -36,6 +39,7 @@ apply Service "voiture-ajustement-valves" { vars.date_echeance = "2026-08-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification et ajustement des valves Honda Accord" assign where host.name == "life-noc" } @@ -45,6 +49,7 @@ apply Service "voiture-verification-timing-belt" { vars.date_echeance = "2027-01-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification de la courroie de distribution et pompe à eau" assign where host.name == "life-noc" } @@ -54,6 +59,7 @@ apply Service "voiture-verification-batterie-voiture" { vars.date_echeance = "2026-10-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification de l'état de la batterie automobile" assign where host.name == "life-noc" } @@ -63,6 +69,7 @@ apply Service "voiture-verification-balais-essuie-glace" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification des essuie-glaces" assign where host.name == "life-noc" } @@ -72,6 +79,7 @@ apply Service "voiture-verification-liquides" { vars.date_echeance = "2026-04-15" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification des liquides de la voiture" assign where host.name == "life-noc" } @@ -81,6 +89,7 @@ apply Service "voiture-verification-eclairage" { vars.date_echeance = "2026-05-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification de l'éclairage et des phares" assign where host.name == "life-noc" } @@ -90,6 +99,7 @@ apply Service "voiture-verification-immatriculation-assurance" { vars.date_echeance = "2026-06-01" vars.mock_state = "OK" vars.mock_message = "Sous contrôle" + groups = [ "VOITURE" ] notes = "Vérification papiers d'assurance et immatriculation" assign where host.name == "life-noc" } diff --git a/patch_bpm_native.sh b/patch_bpm_native.sh new file mode 100755 index 0000000..6b5b1da --- /dev/null +++ b/patch_bpm_native.sh @@ -0,0 +1,260 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT="${1:-.}" + +need_file() { + local f="$1" + if [[ ! -f "$ROOT/$f" ]]; then + echo "Fichier introuvable: $f" >&2 + exit 1 + fi +} + +echo "==> Vérification du dépôt" +need_file "domains.yaml" +need_file "scripts/generate_bpm.py" +need_file "Makefile" +need_file "ansible/roles/life_noc/defaults/main.yml" +need_file "ansible/roles/life_noc/tasks/main.yml" + +echo "==> Sauvegarde minimale" +mkdir -p "$ROOT/.patch-backup" +cp -a "$ROOT/scripts/generate_bpm.py" "$ROOT/.patch-backup/generate_bpm.py.bak" +cp -a "$ROOT/Makefile" "$ROOT/.patch-backup/Makefile.bak" +cp -a "$ROOT/ansible/roles/life_noc/defaults/main.yml" "$ROOT/.patch-backup/life_noc_defaults_main.yml.bak" +cp -a "$ROOT/ansible/roles/life_noc/tasks/main.yml" "$ROOT/.patch-backup/life_noc_tasks_main.yml.bak" + +[[ -f "$ROOT/preuve-de-reproductibilite.md" ]] && cp -a "$ROOT/preuve-de-reproductibilite.md" "$ROOT/.patch-backup/preuve-de-reproductibilite.md.bak" +[[ -f "$ROOT/decisions-techniques.md" ]] && cp -a "$ROOT/decisions-techniques.md" "$ROOT/.patch-backup/decisions-techniques.md.bak" + +echo "==> Réécriture de scripts/generate_bpm.py" +cat > "$ROOT/scripts/generate_bpm.py" <<'PYEOF' +#!/usr/bin/env python3 +from __future__ import annotations + +import re +from pathlib import Path +import sys +import yaml + +ROOT = Path(__file__).resolve().parents[1] +DOMAINS_YAML = ROOT / "domains.yaml" +OUTPUT_DIR = ROOT / "bpm" +OUTPUT_FILE = OUTPUT_DIR / "Life-NOC.conf" + +HOST_NAME = "life-noc" +TITLE = "Life-NOC" +OWNER = "icingadmin" + + +def slugify(value: str) -> str: + value = value.strip().lower() + replacements = { + "à": "a", "â": "a", "ä": "a", + "ç": "c", + "é": "e", "è": "e", "ê": "e", "ë": "e", + "î": "i", "ï": "i", + "ô": "o", "ö": "o", + "ù": "u", "û": "u", "ü": "u", + "ÿ": "y", + "œ": "oe", "æ": "ae", + "'": "", "’": "", + } + for old, new in replacements.items(): + value = value.replace(old, new) + value = re.sub(r"[^a-z0-9\-]+", "-", value) + value = re.sub(r"-{2,}", "-", value) + return value.strip("-") + + +def aliasify(value: str) -> str: + value = value.strip().upper() + replacements = { + "À": "A", "Â": "A", "Ä": "A", + "Ç": "C", + "É": "E", "È": "E", "Ê": "E", "Ë": "E", + "Î": "I", "Ï": "I", + "Ô": "O", "Ö": "O", + "Ù": "U", "Û": "U", "Ü": "U", + "Ÿ": "Y", + "Œ": "OE", "Æ": "AE", + "'": "", "’": "", + } + for old, new in replacements.items(): + value = value.replace(old, new) + value = re.sub(r"[^A-Z0-9\-]+", "-", value) + value = re.sub(r"-{2,}", "-", value) + return value.strip("-") + + +def read_domains() -> dict: + data = yaml.safe_load(DOMAINS_YAML.read_text(encoding="utf-8")) + if not isinstance(data, dict) or "domains" not in data: + raise ValueError("domains.yaml doit contenir une clé racine 'domains'") + domains = data["domains"] + if not isinstance(domains, dict): + raise ValueError("domains.yaml: 'domains' doit être un mapping") + return domains + + +def collect_services(domain_data: dict, domain_name: str) -> list[str]: + items = domain_data.get("items", []) + if not isinstance(items, list): + raise ValueError(f"Domaine '{domain_name}': 'items' doit être une liste") + + services: list[str] = [] + for item in items: + if not isinstance(item, dict): + raise ValueError(f"Domaine '{domain_name}': item invalide (dict attendu)") + item_name = item.get("name") + if not item_name: + raise ValueError(f"Domaine '{domain_name}': item sans champ 'name'") + service_name = f"{slugify(domain_name)}-{slugify(str(item_name))}" + services.append(f"{HOST_NAME};{service_name}") + + if not services: + raise ValueError(f"Domaine '{domain_name}' ne contient aucun item") + return services + + +def header() -> str: + return f"""### Business Process Config File ### +# +# Title : {TITLE} +# Description : +# Owner : {OWNER} +# AddToMenu : yes +# Backend : +# Statetype : soft +# +################################### + +""" + + +def main() -> int: + domains = read_domains() + OUTPUT_DIR.mkdir(parents=True, exist_ok=True) + + lines: list[str] = [header()] + aliases: list[tuple[str, str]] = [] + + for domain_name, domain_data in domains.items(): + if not isinstance(domain_data, dict): + raise ValueError(f"Domaine '{domain_name}': structure invalide") + alias = aliasify(domain_name) + label = domain_data.get("label", domain_name) + services = collect_services(domain_data, domain_name) + expr = " & ".join(services) + lines.append(f"{alias} = {expr}\n") + aliases.append((alias, str(label))) + + lines.append("\n") + root_expr = " & ".join(alias for alias, _label in aliases) + lines.append(f"LIFE-NOC = {root_expr}\n") + lines.append("display 1;LIFE-NOC;LIFE-NOC\n") + for alias, label in aliases: + lines.append(f"display 1;{alias};{label}\n") + + OUTPUT_FILE.write_text("".join(lines), encoding="utf-8") + print(f"BPM généré: {OUTPUT_FILE.relative_to(ROOT)}") + print("Processus générés :") + print(" - LIFE-NOC") + for alias, _label in aliases: + print(f" - {alias}") + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except Exception as exc: + print(f"ERREUR: {exc}", file=sys.stderr) + raise +PYEOF +chmod +x "$ROOT/scripts/generate_bpm.py" + +echo "==> Ajustements texte ciblés" +python3 - "$ROOT" <<'PYEOF' +from pathlib import Path +import re +import sys + +root = Path(sys.argv[1]) + +def replace_text(path_str, replacements): + path = root / path_str + if not path.exists(): + return + text = path.read_text(encoding="utf-8") + original = text + for old, new in replacements: + text = text.replace(old, new) + if text != original: + path.write_text(text, encoding="utf-8") + print(f"Modifié: {path_str}") + +def regex_replace(path_str, pattern, repl, must_match=False): + path = root / path_str + if not path.exists(): + return + text = path.read_text(encoding="utf-8") + new_text, count = re.subn(pattern, repl, text, flags=re.MULTILINE) + if must_match and count == 0: + raise SystemExit(f"Aucun match dans {path_str} pour: {pattern}") + if new_text != text: + path.write_text(new_text, encoding="utf-8") + print(f"Modifié: {path_str}") + +# Makefile +replace_text("Makefile", [ + ("bpm/life-noc.json", "bpm/Life-NOC.conf"), +]) + +# defaults main.yml +replace_text("ansible/roles/life_noc/defaults/main.yml", [ + ("/etc/icingaweb2/modules/businessprocess/processes/life-noc.json", + "/etc/icingaweb2/modules/businessprocess/processes/Life-NOC.conf"), +]) + +# tasks main.yml +replace_text("ansible/roles/life_noc/tasks/main.yml", [ + ("bpm/life-noc.json", "bpm/Life-NOC.conf"), + ("life-noc.json", "Life-NOC.conf"), +]) + +# docs +for doc in ["preuve-de-reproductibilite.md", "decisions-techniques.md"]: + replace_text(doc, [ + ("bpm/life-noc.json", "bpm/Life-NOC.conf"), + ("life-noc.json", "Life-NOC.conf"), + ("export JSON", "export natif Business Process"), + ("artefact JSON", "artefact natif Business Process"), + ]) + +PYEOF + +echo "==> Nettoyage de l'ancien artefact si présent" +rm -f "$ROOT/bpm/life-noc.json" + +echo "==> Génération du nouveau BPM" +( + cd "$ROOT" + python3 scripts/generate_bpm.py +) + +echo "==> Vérification rapide" +if [[ -f "$ROOT/bpm/Life-NOC.conf" ]]; then + echo "OK: bpm/Life-NOC.conf généré" +else + echo "ERREUR: bpm/Life-NOC.conf absent" >&2 + exit 1 +fi + +echo +echo "Patch terminé." +echo "Fichiers sauvegardés dans: $ROOT/.patch-backup" +echo "Prochaine étape recommandée:" +echo " make check" +echo "Puis redéploiement avec BPM activé." diff --git a/scripts/generate_bpm.py b/scripts/generate_bpm.py old mode 100644 new mode 100755 index 46da8d2..f7d99d7 --- a/scripts/generate_bpm.py +++ b/scripts/generate_bpm.py @@ -1,16 +1,16 @@ #!/usr/bin/env python3 from pathlib import Path -import json import re import sys import yaml - INPUT_FILE = Path("domains.yaml") OUTPUT_DIR = Path("bpm") -OUTPUT_FILE = OUTPUT_DIR / "life-noc.json" +OUTPUT_FILE = OUTPUT_DIR / "Life-NOC.conf" HOST_NAME = "life-noc" +TITLE = "Life-NOC" +OWNER = "icingadmin" def slugify(value: str) -> str: @@ -35,29 +35,41 @@ def slugify(value: str) -> str: return value.strip("-") -def build_service_name(domain_slug: str, item_name: str) -> str: - return f"{domain_slug}-{item_name.strip()}" - - -def make_leaf_node(service_name: str) -> dict: - return { - "type": "service", - "host": HOST_NAME, - "service": service_name +def aliasify(value: str) -> str: + value = value.strip().upper() + replacements = { + "À": "A", "Â": "A", "Ä": "A", + "Ç": "C", + "É": "E", "È": "E", "Ê": "E", "Ë": "E", + "Î": "I", "Ï": "I", + "Ô": "O", "Ö": "O", + "Ù": "U", "Û": "U", "Ü": "U", + "Ÿ": "Y", + "Œ": "OE", + "Æ": "AE", + "'": "", + "’": "", } + for old, new in replacements.items(): + value = value.replace(old, new) + value = re.sub(r"[^A-Z0-9\-]+", "-", value) + value = re.sub(r"-{2,}", "-", value) + return value.strip("-") -def make_domain_process(domain_label: str, domain_slug: str, services: list[dict]) -> dict: - leaves = [] - for item in services: - service_name = build_service_name(domain_slug, item["name"]) - leaves.append(make_leaf_node(service_name)) +def header() -> str: + return f"""### Business Process Config File ### +# +# Title : {TITLE} +# Description : +# Owner : {OWNER} +# AddToMenu : yes +# Backend : +# Statetype : soft +# +################################### - return { - "name": domain_label.upper(), - "operator": "worst", - "nodes": leaves - } +""" def main() -> int: @@ -77,57 +89,51 @@ def main() -> int: print("Erreur: 'domains' doit être un objet YAML.", file=sys.stderr) return 1 - processes = [] - root_nodes = [] + OUTPUT_DIR.mkdir(parents=True, exist_ok=True) - for raw_domain, services in domains.items(): - if not isinstance(services, list): + lines = [header()] + aliases = [] + + for raw_domain, items in domains.items(): + if not isinstance(items, list): print(f"Erreur: le domaine '{raw_domain}' doit contenir une liste.", file=sys.stderr) return 1 - for idx, item in enumerate(services, start=1): + domain_slug = slugify(str(raw_domain)) + domain_alias = aliasify(str(raw_domain)) + + services = [] + for idx, item in enumerate(items, start=1): if not isinstance(item, dict): print(f"Erreur: entrée invalide dans '{raw_domain}' à la position {idx}.", file=sys.stderr) return 1 - missing = [key for key in ("name", "date", "notes") if key not in item] - if missing: - print( - f"Erreur: dans le domaine '{raw_domain}', entrée {idx}, champs manquants: {', '.join(missing)}", - file=sys.stderr, - ) + + if "name" not in item: + print(f"Erreur: dans le domaine '{raw_domain}', entrée {idx}, champ manquant: name", file=sys.stderr) return 1 - domain_slug = slugify(str(raw_domain)) - domain_label = str(raw_domain) + item_name = slugify(str(item["name"])) + services.append(f"{HOST_NAME};{domain_slug}-{item_name}") - domain_process = make_domain_process(domain_label, domain_slug, services) - processes.append(domain_process) + if not services: + print(f"Erreur: le domaine '{raw_domain}' ne contient aucun item.", file=sys.stderr) + return 1 - root_nodes.append({ - "type": "process", - "name": domain_label.upper() - }) + expr = " & ".join(services) + lines.append(f"{domain_alias} = {expr}\n") + aliases.append((domain_alias, str(raw_domain).upper())) - root_process = { - "name": "LIFE-NOC", - "operator": "worst", - "nodes": root_nodes - } + lines.append("\n") + for alias, label in aliases: + lines.append(f"display 1;{alias};{label}\n") - bpm_document = { - "version": 1, - "processes": [root_process] + processes - } - - OUTPUT_DIR.mkdir(parents=True, exist_ok=True) - with OUTPUT_FILE.open("w", encoding="utf-8") as f: - json.dump(bpm_document, f, ensure_ascii=False, indent=2) + OUTPUT_FILE.write_text("".join(lines), encoding="utf-8") print(f"BPM généré: {OUTPUT_FILE}") print("Processus générés :") print(" - LIFE-NOC") - for raw_domain in domains.keys(): - print(f" - {str(raw_domain).upper()}") + for alias, _label in aliases: + print(f" - {alias}") return 0 diff --git a/scripts/generate_services.py b/scripts/generate_services.py index 549b1d5..117dae6 100644 --- a/scripts/generate_services.py +++ b/scripts/generate_services.py @@ -7,6 +7,8 @@ import yaml INPUT_FILE = Path("domains.yaml") OUTPUT_DIR = Path("icinga/services") +SERVICEGROUPS_DIR = Path("icinga/servicegroups") +SERVICEGROUPS_FILE = SERVICEGROUPS_DIR / "life-noc.conf" HOST_NAME = "life-noc" SERVICE_TEMPLATE = "service_echeance" DEFAULT_MOCK_STATE = "OK" @@ -35,6 +37,28 @@ def slugify(value: str) -> str: return value.strip("-") +def aliasify(value: str) -> str: + value = value.strip().upper() + replacements = { + "À": "A", "Â": "A", "Ä": "A", + "Ç": "C", + "É": "E", "È": "E", "Ê": "E", "Ë": "E", + "Î": "I", "Ï": "I", + "Ô": "O", "Ö": "O", + "Ù": "U", "Û": "U", "Ü": "U", + "Ÿ": "Y", + "Œ": "OE", + "Æ": "AE", + "'": "", + "’": "", + } + for old, new in replacements.items(): + value = value.replace(old, new) + value = re.sub(r"[^A-Z0-9\-]+", "-", value) + value = re.sub(r"-{2,}", "-", value) + return value.strip("-") + + def icinga_escape(value: str) -> str: return value.replace("\\", "\\\\").replace('"', '\\"') @@ -49,7 +73,7 @@ def normalize_mock_state(value: str) -> str: return state -def render_service(domain: str, item: dict) -> str: +def render_service(domain: str, group_name: str, item: dict) -> str: name = item["name"].strip() date = str(item["date"]).strip() notes = item.get("notes", "").strip() @@ -66,6 +90,7 @@ def render_service(domain: str, item: dict) -> str: f' vars.date_echeance = "{icinga_escape(date)}"', f' vars.mock_state = "{icinga_escape(mock_state)}"', f' vars.mock_message = "{icinga_escape(mock_message)}"', + f' groups = [ "{icinga_escape(group_name)}" ]', ] if notes: @@ -82,6 +107,15 @@ def render_service(domain: str, item: dict) -> str: return "\n".join(lines) +def render_servicegroup(group_name: str) -> str: + return "\n".join([ + f'object ServiceGroup "{icinga_escape(group_name)}" {{', + f' display_name = "{icinga_escape(group_name)}"', + "}", + "", + ]) + + def main() -> int: if not INPUT_FILE.exists(): print(f"Erreur: fichier introuvable: {INPUT_FILE}", file=sys.stderr) @@ -100,14 +134,28 @@ def main() -> int: return 1 OUTPUT_DIR.mkdir(parents=True, exist_ok=True) + SERVICEGROUPS_DIR.mkdir(parents=True, exist_ok=True) for existing_conf in OUTPUT_DIR.glob("*.conf"): existing_conf.unlink() + if SERVICEGROUPS_FILE.exists(): + SERVICEGROUPS_FILE.unlink() + generated_files = [] + servicegroup_content = [ + "/*", + " AUTO-GENERATED FILE - SERVICE GROUPS", + " Ne pas modifier manuellement.", + " Source: domains.yaml", + "*/", + "", + ] for raw_domain, services in domains.items(): domain = slugify(str(raw_domain)) + group_name = aliasify(str(raw_domain)) + if not isinstance(services, list): print(f"Erreur: le domaine '{raw_domain}' doit contenir une liste.", file=sys.stderr) return 1 @@ -122,6 +170,8 @@ def main() -> int: "", ] + servicegroup_content.append(render_servicegroup(group_name)) + for idx, item in enumerate(services, start=1): if not isinstance(item, dict): print(f"Erreur: entrée invalide dans '{raw_domain}' à la position {idx}.", file=sys.stderr) @@ -136,7 +186,7 @@ def main() -> int: return 1 try: - content.append(render_service(domain, item)) + content.append(render_service(domain, group_name, item)) except ValueError as exc: print(f"Erreur dans '{raw_domain}', entrée {idx}: {exc}", file=sys.stderr) return 1 @@ -144,6 +194,9 @@ def main() -> int: output_file.write_text("\n".join(content).rstrip() + "\n", encoding="utf-8") generated_files.append(str(output_file)) + SERVICEGROUPS_FILE.write_text("\n".join(servicegroup_content).rstrip() + "\n", encoding="utf-8") + generated_files.append(str(SERVICEGROUPS_FILE)) + print("Fichiers générés :") for file_path in generated_files: print(f" - {file_path}")