Stabilise le POC Life-NOC: BPM natif, servicegroups et déploiement idempotent
This commit is contained in:
parent
6e4026b541
commit
f865013a54
40 changed files with 1203 additions and 1232 deletions
105
.patch-backup/Makefile.bak
Normal file
105
.patch-backup/Makefile.bak
Normal 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)"
|
||||
136
.patch-backup/generate_bpm.py.bak
Normal file
136
.patch-backup/generate_bpm.py.bak
Normal 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())
|
||||
10
.patch-backup/life_noc_defaults_main.yml.bak
Normal file
10
.patch-backup/life_noc_defaults_main.yml.bak
Normal 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
|
||||
191
.patch-backup/life_noc_tasks_main.yml.bak
Normal file
191
.patch-backup/life_noc_tasks_main.yml.bak
Normal 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
|
||||
10
Makefile
10
Makefile
|
|
@ -10,7 +10,7 @@ PROJECT_NAME ?= life-noc
|
|||
|
||||
GENERATORS := scripts/generate_services.py scripts/generate_bpm.py
|
||||
CHECKS := checks/check_life_noc_mock.sh checks/check_echeance_vie.sh
|
||||
ICINGA_FILES := $(wildcard icinga/commands/*.conf) $(wildcard icinga/hosts/*.conf) $(wildcard icinga/templates/*.conf) $(wildcard icinga/services/*.conf)
|
||||
ICINGA_FILES := $(wildcard icinga/commands/*.conf) $(wildcard icinga/hosts/*.conf) $(wildcard icinga/templates/*.conf) $(wildcard icinga/services/*.conf) $(wildcard icinga/servicegroups/*.conf)
|
||||
|
||||
.PHONY: help all generate regen services bpm validate validate-yaml validate-python validate-shell validate-generated check mock-ok mock-warning mock-critical clean bootstrap deploy deploy-no-bpm deploy-with-bpm package inventory-example vars-example info
|
||||
|
||||
|
|
@ -57,11 +57,9 @@ validate-shell: $(CHECKS)
|
|||
@bash -n $(CHECKS)
|
||||
@echo "Shell OK"
|
||||
|
||||
validate-generated: $(ICINGA_FILES) bpm/life-noc.json
|
||||
validate-generated: $(ICINGA_FILES) bpm/Life-NOC.conf
|
||||
@grep -R 'check_life_noc_mock' icinga/templates icinga/commands icinga/services >/dev/null
|
||||
@$(PYTHON) -c 'import json, pathlib; p = pathlib.Path("bpm/life-noc.json"); data = json.loads(p.read_text(encoding="utf-8")); assert isinstance(data.get("processes"), list) and data["processes"], "bpm/life-noc.json invalide: processes absent ou vide"; print("Artefacts générés valides")'
|
||||
|
||||
check: generate validate
|
||||
@$(PYTHON) -c 'import pathlib; p = pathlib.Path("bpm/Life-NOC.conf"); text = p.read_text(encoding="utf-8"); lines = [l.strip() for l in text.splitlines() if l.strip()]; assert any(l == "### Business Process Config File ###" for l in lines), "bpm/Life-NOC.conf invalide: en-tête BPM absent"; assert any(l.startswith("display 1;") for l in lines), "bpm/Life-NOC.conf invalide: aucun display absent"; print("Artefacts générés valides")'
|
||||
|
||||
mock-ok:
|
||||
@bash checks/check_life_noc_mock.sh --state OK --message "Sous contrôle" --item-name "demo" --date "2026-03-13"
|
||||
|
|
@ -88,7 +86,7 @@ package: check
|
|||
@echo "Archive créée: $(ARCHIVE)"
|
||||
|
||||
clean:
|
||||
rm -f $(ARCHIVE)
|
||||
rm -f $(ARCHIVE) bpm/Life-NOC.conf
|
||||
|
||||
inventory-example:
|
||||
@echo "Copier ansible/inventory.example vers ansible/inventory puis ajuster l'hôte, l'adresse et l'utilisateur ansible."
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
62
bpm/Life-NOC.conf
Normal 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
|
||||
1151
bpm/life-noc.json
1151
bpm/life-noc.json
File diff suppressed because it is too large
Load diff
105
icinga/servicegroups/life-noc.conf
Normal file
105
icinga/servicegroups/life-noc.conf
Normal 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"
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
260
patch_bpm_native.sh
Executable 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
118
scripts/generate_bpm.py
Normal file → Executable 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
|
||||
|
||||
|
|
|
|||
|
|
@ -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}")
|
||||
|
|
|
|||
Loading…
Reference in a new issue