Sha256: b85142b68b9346a9900311db730ae1084d6c4d01c5285392d7015a4dbbdfb98e
Contents?: true
Size: 1.6 KB
Versions: 58
Compression:
Stored size: 1.6 KB
Contents
# frozen_string_literal: true module Krane class Job < KubernetesResource TIMEOUT = 10.minutes def deploy_succeeded? # Don't block deploys for long running jobs, # Instead report success when there is at least 1 active return false unless deploy_started? done? || running? end def deploy_failed? return false unless deploy_started? return true if failed_status_condition return false unless @instance_data.dig("spec", "backoffLimit").present? (@instance_data.dig("status", "failed") || 0) >= @instance_data.dig("spec", "backoffLimit") end def status if !exists? super elsif done? "Succeeded" elsif running? "Started" elsif deploy_failed? "Failed" else "Unknown" end end def failure_message if (condition = failed_status_condition.presence) "#{condition['reason']} (#{condition['message']})" end end private def failed_status_condition @instance_data.dig("status", "conditions")&.detect do |condition| condition["type"] == 'Failed' && condition['status'] == "True" end end def done? (@instance_data.dig("status", "succeeded") || 0) == @instance_data.dig("spec", "completions") end def running? now = Time.now.utc start_time = @instance_data.dig("status", "startTime") # Wait 5 seconds to ensure job doesn't immediately fail. return false if !start_time.present? || now - Time.parse(start_time) < 5.second (@instance_data.dig("status", "active") || 0) >= 1 end end end
Version data entries
58 entries across 58 versions & 3 rubygems