Stabilise le POC Life-NOC: BPM natif, servicegroups et déploiement idempotent

This commit is contained in:
Daniel Allaire 2026-03-14 15:31:28 -04:00
parent 6e4026b541
commit f865013a54
40 changed files with 1203 additions and 1232 deletions

105
.patch-backup/Makefile.bak Normal file
View file

@ -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)"

View file

@ -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())

View file

@ -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

View file

@ -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

View file

@ -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."

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

62
bpm/Life-NOC.conf Normal file
View file

@ -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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

260
patch_bpm_native.sh Executable file
View file

@ -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é."

118
scripts/generate_bpm.py Normal file → Executable file
View file

@ -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

View file

@ -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}")