{ "module": "restic", "version": "1", "claims": [ { "name": "node-backup", "scope": "node", "serves": [ "backed-up", "now", "restore" ] } ], "tools": [ "backup_health", "backup_delete_retired", "backup_deleted" ], "own-secrets": { "repository": "${dir:state}/repository.secret" }, "data": { "own": [ { "id": "repository", "path": "${dir:repository}", "class": "rebuildable", "backup": "none", "why": "the restore points themselves: a copy of data kept elsewhere on this machine, never the only copy of anything; lost, the history goes and nothing live does" }, { "id": "state", "path": "${dir:state}", "class": "cache", "why": "what the last nights and measurements were; the next night writes it again" } ] }, "settings": { "keep-daily": { "kind": "preference", "default": 14, "why": "two weeks of nightly restore points undo a mistake noticed within a fortnight; a count from 1 to 9999, read by the night, which thins nothing while it does not read (novox/hq issue 416); lowering it deletes the restore points beyond the new count at the next night, and that cannot be undone" }, "keep-weekly": { "kind": "preference", "default": 8, "why": "two months of weekly restore points behind the dailies; a count from 1 to 9999, refused by the night like keep-daily; lowering it deletes the restore points beyond the new count at the next night, and that cannot be undone" }, "keep-monthly": { "kind": "preference", "default": 6, "why": "half a year of monthly restore points behind the weeklies; a count from 1 to 9999, refused by the night like keep-daily; lowering it deletes the restore points beyond the new count at the next night, and that cannot be undone" }, "keep-hand-taken-days": { "kind": "preference", "default": 7, "why": "a restore point taken by hand (node-backup.now, or the mesh's before a module moves) is kept until a later good night of its module exists, and this many days in any case, so the next thinning never takes the one taken against a risky change (novox/hq issue 453); a count from 1 to 9999, refused by the night like keep-daily; lowering it lets go of the restore points taken by hand that are older than the new count, past a later night, at the next thinning, and that cannot be undone" } }, "resources": [ { "id": "state", "type": "directory", "mode": "0700", "place": "." }, { "id": "repository", "type": "directory", "mode": "0700" }, { "id": "declared", "type": "file", "path": "${dir:state}/backups.conf", "mode": "0600", "content": "# What the modules on this machine back up, composed by the mesh (novox/hq to-be 43). Do not edit.\n${contribution:node-backup:backup}" }, { "id": "data-declared", "type": "file", "path": "${dir:state}/data.conf", "mode": "0600", "content": "# The data the modules on this machine declare, composed by the mesh (novox/hq ADR 0233). Do not edit.\n${contribution:node-backup:data}" }, { "id": "retention", "type": "file", "path": "${dir:state}/retention.conf", "mode": "0644", "trusted": true, "content": "# How many restore points the night keeps, written by the mesh from this machine's settings keep-daily,\n# keep-weekly, keep-monthly (novox/hq issue 416) and keep-hand-taken-days (novox/hq issue 453). Replaced on every push; change the settings, never this file.\ndaily=${setting:keep-daily}\nweekly=${setting:keep-weekly}\nmonthly=${setting:keep-monthly}\nhand=${setting:keep-hand-taken-days}\n" }, { "id": "tool", "type": "package", "package": "restic" }, { "id": "sqlite", "type": "package", "package": "sqlite" }, { "id": "night", "type": "process", "name": "restic-night", "artifact": "tools", "run": [ "./restic-backups", "night" ], "user": "${machine:account}", "env": { "MESH_BACKUP_DECLARED": "${dir:state}/backups.conf", "MESH_BACKUP_REPOSITORY": "${dir:repository}", "MESH_BACKUP_PASSWORD_FILE": "${dir:state}/repository.secret", "MESH_BACKUP_STATE": "${dir:state}", "MESH_BACKUP_DATA": "${dir:state}/data.conf" }, "health": { "kind": "tool", "tool": "backup_health", "interval": "60s", "timeout": "20s", "looks": 2, "grace": "60s" } }, { "id": "measure", "type": "process", "name": "restic-measure", "artifact": "tools", "run": [ "./restic-backups", "measure" ], "user": "${machine:account}", "env": { "MESH_BACKUP_DECLARED": "${dir:state}/backups.conf", "MESH_BACKUP_REPOSITORY": "${dir:repository}", "MESH_BACKUP_PASSWORD_FILE": "${dir:state}/repository.secret", "MESH_BACKUP_STATE": "${dir:state}", "MESH_BACKUP_DATA": "${dir:state}/data.conf" }, "health": { "kind": "unit" } } ], "build": { "artifacts": [ { "name": "tools", "kind": "bundle", "language": "go", "system": "arch", "from": "cmd/restic-backups", "binary": "restic-backups", "loads": [ "restic-backups" ], "env": { "MESH_BACKUP_DECLARED": "${dir:state}/backups.conf", "MESH_BACKUP_REPOSITORY": "${dir:repository}", "MESH_BACKUP_PASSWORD_FILE": "${dir:state}/repository.secret", "MESH_BACKUP_STATE": "${dir:state}", "MESH_BACKUP_DATA": "${dir:state}/data.conf" } } ] } }