hasResource($run, 'backup_job_id')) { return StepResult::advance(); } $instance = $this->instance($run); $schedule = '02:00'; // Proxmox calendar-event: daily at 02:00 // Create a real scheduled vzdump job on the host [E] before recording it. $jobId = $this->pve->forHost($instance->host) ->createBackupJob((string) $run->context('node'), (int) $instance->vmid, $schedule); $this->recordResource($run, $instance->host, 'backup_job_id', $jobId); // firstOrCreate keyed on the deterministic job id → no duplicate row if a // crash re-runs this step before the breadcrumb was recorded. $instance->backups()->firstOrCreate( ['external_job_id' => $jobId], ['schedule' => $schedule, 'status' => 'scheduled'], ); return StepResult::advance(); } }