job "backup%{ if batch_node != null }-oneoff-${batch_node}%{ endif }" { datacenters = ["dc1"] priority = 90 %{ if batch_node == null ~} type = "system" %{ else ~} type = "batch" parameterized { meta_required = ["job_name"] meta_optional = ["task", "snapshot"] } meta { task = "backup" snapshot = "latest" } %{ endif ~} %{ if batch_node != null ~} constraint { attribute = "$${node.unique.name}" value = "${batch_node}" } %{ endif ~} group "backup" { network { mode = "bridge" port "metrics" { %{~ if use_wesher ~} host_network = "wesher" %{~ endif ~} to = 8080 } } volume "all-volumes" { type = "host" read_only = false source = "all-volumes" } ephemeral_disk { # Try to keep restic cache intact sticky = true } service { name = "backup" provider = "nomad" port = "metrics" tags = [ "prometheus.scrape" ] } task "backup" { driver = "docker" shutdown_delay = "5m" volume_mount { volume = "all-volumes" destination = "/data" read_only = false } config { image = "iamthefij/restic-scheduler:0.4.2" ports = ["metrics"] args = [ %{ if batch_node != null ~} "-once", "-$${NOMAD_META_task}", "$${NOMAD_META_job_name}", "--snapshot", "$${NOMAD_META_snapshot}", "--push-gateway", "http://pushgateway.nomad:9091", %{ endif ~} "$${NOMAD_TASK_DIR}/node-jobs.hcl", ] } action "unlockenv" { command = "sh" args = ["-c", "/bin/resticscheduler -once -unlock all $${NOMAD_TASK_DIR}/node-jobs.hcl"] } action "unlocktmpl" { command = "/bin/resticscheduler" args = ["-once", "-unlock", "all", "{{ env 'NOMAD_TASK_DIR' }}/node-jobs.hcl"] } action "unlockhc" { command = "/bin/resticscheduler" args = ["-once", "-unlock", "all", "/local/node-jobs.hcl"] } env = { RCLONE_CHECKERS = "2" RCLONE_TRANSFERS = "2" RCLONE_FTP_CONCURRENCY = "5" RESTIC_CACHE_DIR = "$${NOMAD_ALLOC_DIR}/data" TZ = "America/Los_Angeles" } template { data = <