Adds create-missing and run-all

This commit is contained in:
2025-06-01 16:10:08 -04:00
parent 76b15212f0
commit b6feefe8a8

View File

@@ -3,15 +3,33 @@
# slug pattern: # slug pattern:
# {thing}-{location}-{kopia|zfs} # {thing}-{location}-{kopia|zfs}
# TODO:
# add the rest of the jobs
# run-all command
# create checks implementation to use management API to create each one
let b2Repo = "/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config" let b2Repo = "/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config"
let statusHost = "https://status.roo.lol" let rootURL = "https://status.roo.lol"
let pingKey = "pRybo-Yjebna0KHQCYCpTg" let pingKey = "pRybo-Yjebna0KHQCYCpTg"
let jobs = [{ statusSlug: "photos-content-b2-kopia", type: "kopia", source: "/nas1/photos.roo.lol", target: $b2Repo, } let jobs = [{ statusSlug: "photos-content-b2-kopia", type: "kopia", source: "/nas1/photos.roo.lol", target: $b2Repo, }
,{ statusSlug: "photos-service-b2-kopia", type: "kopia", source: "/services/photos.roo.lol", target: $b2Repo, } ,{ statusSlug: "photos-service-b2-kopia", type: "kopia", source: "/services/photos.roo.lol", target: $b2Repo, }
,{ statusSlug: "network-fileshare-b2-kopia", type: "kopia", source: "/nas/files", target: $b2Repo, } ,{ statusSlug: "network-fileshare-b2-kopia", type: "kopia", source: "/nas/files", target: $b2Repo, }
,{ statusSlug: "vaultwarden-b2-kopia", type: "kopia", source: "/services/passwords.roo.lol", target: $b2Repo, } ,{ statusSlug: "vaultwarden-b2-kopia", type: "kopia", source: "/services/passwords.roo.lol", target: $b2Repo, }
,{ statusSlug: "paperless-b2-kopia", type: "kopia", source: "/services/paperless.roo.lol", target: $b2Repo, }
,{ statusSlug: "caddy-b2-kopia", type: "kopia", source: "/services/caddy", target: $b2Repo, }
,{ statusSlug: "kitchen-b2-kopia", type: "kopia", source: "/services/kitchen.roo.lol", target: $b2Repo, }
,{ statusSlug: "ha-backups-b2-kopia", type: "kopia", source: "/services/ha.roo.lol/config/backups", target: $b2Repo, }
,{ statusSlug: "zendo-home-azul-zfs", type: "zfs", source: "backups@zendo.brechtel:rpool/home", target: "backups@azul:dune/backups/zendo/home"} ,{ statusSlug: "zendo-home-azul-zfs", type: "zfs", source: "backups@zendo.brechtel:rpool/home", target: "backups@azul:dune/backups/zendo/home"}
,{ statusSlug: "zendo-flipstone-azul-zfs", type: "zfs", source:"backups@zendo.brechtel:rpool/work/flipstone", target:"backups@azul:dune/backups/zendo/flipstone" }
,{ statusSlug: "zendo-root-azul-zfs", type: "zfs", source:"backups@zendo.brechtel:rpool/root", target:"backups@azul:dune/backups/zendo/root" }
,{ statusSlug: "splendor-home-azul-zfs", type: "zfs", source:"backups@splendor.brechtel:zpcachyos/ROOT/cos/home", target:"backups@azul:dune/backups/splendor/home" }
,{ statusSlug: "splendor-root-azul-zfs", type: "zfs", source:"backups@splendor.brechtel:zpcachyos/ROOT/cos/root", target:"backups@azul:dune/backups/splendor/root" }
,{ statusSlug: "pandemic-services-azul-zfs", type: "zfs", source:"backups@pandemic.brechtel:primary/services", target:"backups@azul:dune/backups/pandemic/services" }
,{ statusSlug: "photos-content-azul-zfs", type: "zfs", source:"backups@pandemic:nas1/photos.roo.lol", target:"backups@azul:dune/backups/photos.roo.lol" }
,{ statusSlug: "network-fileshare-azul-zfs", type: "zfs", source:"backups@pandemic:nas1/files", target:"backups@azul:dune/backups/files" }
,{ statusSlug: "pandemic-maggie-kopia-azul-zfs", type: "zfs", source:"backups@pandemic:nas1/maggie-kopia", target:"backups@azul:dune/backups/maggie-kopia" }
,{ statusSlug: "pandemic-maggie-azul-zfs", type: "zfs", source:"backups@pandemic:nas1/maggie", target:"backups@azul:dune/backups/files/maggie" }
] ]
def backup [job] { def backup [job] {
@@ -48,24 +66,39 @@ def kopiaBackup [job] {
def logStartJob [slug] { def logStartJob [slug] {
print $"starting job: ($slug)" print $"starting job: ($slug)"
print $"($statusHost)/ping/($pingKey)/($slug)/start" print $"($rootURL)/ping/($pingKey)/($slug)/start"
curl -s $"($statusHost)/ping/($pingKey)/($slug)/start" | save -f /dev/null curl -s $"($rootURL)/ping/($pingKey)/($slug)/start" | save -f /dev/null
} }
def logFailedJob [slug, err] { def logFailedJob [slug, err] {
print $"failed to run job: ($slug) with error: ($err)" print $"failed to run job: ($slug) with error: ($err)"
curl -s $"($statusHost)/ping/($pingKey)/($slug)/fail" | save -f /dev/null curl -s $"($rootURL)/ping/($pingKey)/($slug)/fail" | save -f /dev/null
} }
def logFinishedJob [slug] { def logFinishedJob [slug] {
print $"finished job: ($slug)" print $"finished job: ($slug)"
curl -s $"($statusHost)/ping/($pingKey)/($slug)" | save -f /dev/null curl -s $"($rootURL)/ping/($pingKey)/($slug)" | save -f /dev/null
}
def createJob [job] {
let jobDetails = { name: $job.statusSlug, slug: $job.statusSlug, timeout: 86400 }
http post --full --headers {"X-API-Key": $env.HC_API } --content-type "application/json" $"($rootURL)/api/v3/checks/" ($jobDetails | to json)
} }
def "main list" [] { def "main list" [] {
print "Known jobs:" print "Known jobs:"
print $"($jobs | get statusSlug | to text)" print $"($jobs | get statusSlug | to text)"
} }
def "main create-missing" [] {
let existingSlugs = (curl -H $"X-API-Key: ($env.HC_API)" $"($rootURL)/api/v3/checks/" | from json | get checks.slug | to nuon)
let missingJobs = $jobs | filter { |job| not ($job.statusSlug in $existingSlugs) }
$missingJobs | each { createJob $in }
}
def "main run-all" [] {
$jobs | each { backup $in }
}
def main [statusSlug] { def main [statusSlug] {
let matches = $jobs | where statusSlug == $statusSlug let matches = $jobs | where statusSlug == $statusSlug
@@ -85,34 +118,3 @@ def main [statusSlug] {
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/caddy #sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/caddy
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/kitchen.roo.lol #sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/kitchen.roo.lol
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/ha.roo.lol/config/backups #sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/ha.roo.lol/config/backups
#
#
#echo "Backing up zendo.brechtel:rpool/home"
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@zendo.brechtel:rpool/home dune/backups/zendo/home
#
#echo "Backing up zendo.brechtel:rpool/work/flipstone"
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@zendo.brechtel:rpool/work/flipstone dune/backups/zendo/flipstone
#
#echo "Backing up zendo.brechtel:rpool/ROOT/archlinux"
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@zendo.brechtel:rpool/root dune/backups/zendo/root
#
##echo "Backing up splendor.brechtel:zpcachyos/ROOT/cos/home"
##zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@splendor.brechtel:zpcachyos/ROOT/cos/home dune/backups/splendor/home
#
##echo "Backing up splendor.brechtel:zpcachyos/ROOT"
##zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@splendor.brechtel:zpcachyos/ROOT/cos/root dune/backups/splendor/root
#
#echo "Backing up pandemic:primary/services"
#zfs --no-sync-snap --skip-parent --create-bookmark --no-privilege-elevation --recursive backups@pandemic.brechtel:primary/services dune/backups/pandemic/services
#
#echo "Backing up nas1/photos.roo.lol"
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@pandemic:nas1/photos.roo.lol dune/backups/photos.roo.lol
#
#echo "Backing up nas1/maggie"
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@pandemic:nas1/maggie dune/backups/files/maggie
#
#echo "Backing up nas1/maggie-kopia"
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@pandemic:nas1/maggie-kopia dune/backups/maggie-kopia
#
#echo "Backing up nas1/files"
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@pandemic:nas1/files dune/backups/files