Retour au blogNouveauté 0.3 · Open Source

    Déploiement automatisé de la sauvegarde Windows via Ansible

    Nouveauté Nimbus Backup 0.3 : installez et configurez la sauvegarde Windows vers PBS entièrement par fichiers, sans clic. Deux voies (CLI + service/GUI), codes retour fiables, playbooks Ansible prêts à l'emploi.

    9 min de lecture

    C'est la nouveauté phare de Nimbus Backup 0.3 : le client de sauvegarde Windows vers Proxmox Backup Server peut désormais être installé et configuré entièrement par fichiers, sans aucune étape interactive.

    Pensé pour Ansible — mais compatible avec n'importe quel outil de gestion de configuration (Salt, DSC, GPO, un simple script de login) — c'est l'argument qui manquait pour industrialiser le déploiement sur un parc de postes et de serveurs. Deux voies existent : choisissez celle qui correspond à votre orchestration.

    Rien ne change dans le fonctionnement interactif habituel : ce guide s'adresse aux équipes qui veulent déployer à l'échelle, sans ouvrir l'interface graphique sur chaque machine. Tout ce qui suit s'appuie sur les exemples fournis dans le dépôt, dossier examples/automation/.

    Voie A — Ligne de commande (recommandée pour l'IaC)

    Un seul fichier JSON porte tout ce qu'il faut pour une sauvegarde (adresse du serveur, token, empreinte SSL, datastore, namespace…) ; la planification est déléguée au Planificateur de tâches Windows. C'est l'approche la plus déterministe pour de l'infrastructure-as-code pure.

    {
      "baseurl": "https://pbs.example.net:8007",
      "certfingerprint": "AA:BB:CC:...",
      "authid": "ansible@pbs!deploy",
      "secret": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "datastore": "myDatastore",
      "namespace": "clients/acme",
      "backup-id": "srv-files",
      "backupdir": "C:",
      "usevss": true
    }

    Lancement :

    directorybackup.exe --config "C:\ProgramData\NimbusBackup\backup.json"
    • Un fichier de config unique regroupe tous les champs (connexion PBS, dossiers, VSS, exclusions…).
    • Chaque champ peut être surchargé par un flag CLI (le flag l'emporte sur le fichier) — pratique pour un template partagé avec des surcharges par machine.
    • Les codes de retour sont fiables, votre orchestrateur détecte donc les échecs sans ambiguïté.

    Codes de retour — le socle de l'automatisation

    CodeSignification
    0Succès
    1Échec fatal (connexion, authentification, mail…)
    2Une autre sauvegarde tourne déjà (verrou)
    3Sauvegarde partielle — des fichiers étaient illisibles, le snapshot est incomplet

    Le playbook d'exemple ansible/deploy-cli.yml (avec le template cli-single-config.json.j2) copie le binaire, rend la configuration et enregistre une tâche planifiée quotidienne (win_scheduled_task) exécutée en tant que SYSTEM au niveau highest — indispensable pour que VSS fonctionne.

    - name: Sauvegarde quotidienne (Task Scheduler)
      community.windows.win_scheduled_task:
        name: NimbusBackup-Daily
        actions:
          - path: 'C:\Program Files\NimbusBackup\directorybackup.exe'
            arguments: '--config "C:\ProgramData\NimbusBackup\backup.json"'
        triggers:
          - type: daily
            start_boundary: '2026-01-01T02:30:00'
        username: SYSTEM
        run_level: highest   # requis pour VSS
        state: present
        enabled: true

    Voie B — Service/GUI (MSI) : un fichier pour connexion et planification

    Le MSI installe un service Windows. Depuis la 0.3, un unique config.json peut porter la connexion PBS, les paramètres de sauvegarde et la planification, via un tableau scheduled_jobs. Au (re)démarrage, le service réconcilie ces jobs dans son magasin et calcule automatiquement chaque nextRun : vous n'avez pas à produire d'horodatage dans votre template.

    {
      "pbs_servers": {
        "default": {
          "id": "default",
          "baseurl": "https://pbs.example.net:8007",
          "certfingerprint": "AA:BB:CC:...",
          "authid": "ansible@pbs!deploy",
          "secret": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "datastore": "myDatastore",
          "namespace": "clients/acme"
        }
      },
      "default_pbs_id": "default",
      "usevss": true,
      "scheduled_jobs": [
        {
          "id": "nightly-c",
          "name": "Nightly C:",
          "scheduleTime": "02:30",
          "enabled": true,
          "backupType": "host",
          "backupDirs": ["C:"],
          "backupId": "srv-files",
          "useVSS": true,
          "compression": "fastest"
        }
      ]
    }

    En trois gestes :

    1. Déposez le fichier dans C:\ProgramData\NimbusBackup\config.json.
    2. Redémarrez le service NimbusBackup.
    3. C'est fait — les jobs sont pris en compte, les nextRun calculés.

    Playbook d'exemple : ansible/deploy-gui-service.yml (avec le template ansible/gui-service-config.json.j2). Déposez le fichier, notifiez le redémarrage du service, c'est tout :

    - name: Config unifiée (connexion + planification)
      ansible.windows.win_template:
        src: config.json.j2
        dest: 'C:\ProgramData\NimbusBackup\config.json'
      notify: Restart NimbusBackup
    
    # handlers
    - name: Restart NimbusBackup
      ansible.windows.win_service:
        name: NimbusBackup
        state: restarted

    Idempotence : rejouer le playbook ne casse rien

    Les jobs sont appariés par leur id. Repousser la même config fait un upsert — pas de doublon.

    Une planification inchangée n'est pas re-déclenchée : un nextRun encore valide est conservé.

    Les jobs créés à la main dans l'interface (dont vous ne listez pas l'id) sont laissés intacts.

    Si l'id est omis, il est dérivé de façon stable du nom du job.

    Référence des champs

    Connexion (pbs_servers[*])

    CléNote
    baseurlhttps://hôte:8007
    certfingerprintEmpreinte SHA-256 (AA:BB:…) ; requise pour un certificat auto-signé
    authidToken API PBS, ex. user@pbs!token
    secretSecret du token (à garder dans Ansible Vault)
    datastoreDatastore cible
    namespaceNamespace optionnel

    Besoin de créer le token en amont ? Voir Gérer les tokens API d'un datastore PBS.

    Job planifié (scheduled_jobs[*], voie service/GUI)

    CléNote
    idIdentifiant stable ; dérivé du name si omis
    nameNom affiché
    scheduleTimeHH:MM, 24 h, heure locale
    enabledDoit être true pour s'exécuter
    backupTypehost (dossiers) ou vm (machine entière)
    backupDirsListe de chemins, ex. ["C:"]
    useVSSSnapshot cohérent via VSS
    compressionfastest | default | better | best
    excludeListMotifs d'exclusion optionnels
    runAtStartupExécute aussi une fois au démarrage du service
    nextRunOptionnel — calculé automatiquement si vide

    Secrets : ne jamais committer un vrai token

    • Utilisez Ansible Vault ({{ vault_pbs_secret }} dans les exemples).
    • Sur disque, config.json est écrit en 0600.
    • Le token est retiré avant d'atteindre le frontend de l'interface graphique.

    Quelle voie choisir ?

    Voie A — CLI

    IaC pure, orchestrateur qui gère déjà la planification (Task Scheduler, cron distant, pipeline). Codes retour fiables, surcharge par flags. La plus déterministe.

    Voie B — Service/GUI

    Vous voulez un service Windows résilient (survit au reboot, à la veille), une planification interne et un seul fichier à pousser. Réconciliation idempotente, cohabitation avec les jobs créés à la main.

    Récupérer le client et les exemples

    Open Source (GPL-3.0) · playbooks Ansible et templates Jinja2 fournis

    Nouveau sur le client Windows ? Commencez par le guide du client GUI open source (installation, VSS, premier backup), puis revenez ici pour l'industrialiser. Pour un cas réel chiffré, voir le retour d'expérience d'un premier backup 1 To en production.

    Un PBS managé pour recevoir ces sauvegardes

    Le déploiement automatisé pousse les sauvegardes ; encore faut-il une destination fiable. NimbusBackup fournit un Proxmox Backup Server hébergé, mis à jour et sauvegardé, prêt à recevoir vos postes et serveurs Windows.