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

Version Path
krane-3.7.0 lib/krane/kubernetes_resource/job.rb
krane-3.6.2 lib/krane/kubernetes_resource/job.rb
krane-3.6.1 lib/krane/kubernetes_resource/job.rb
krane-3.5.2 lib/krane/kubernetes_resource/job.rb
krane-3.5.1 lib/krane/kubernetes_resource/job.rb
krane-3.5.0 lib/krane/kubernetes_resource/job.rb
krane-3.4.2 lib/krane/kubernetes_resource/job.rb
krane-3.4.1 lib/krane/kubernetes_resource/job.rb
krane-3.4.0 lib/krane/kubernetes_resource/job.rb
krane-3.3.0 lib/krane/kubernetes_resource/job.rb
krane-3.2.0 lib/krane/kubernetes_resource/job.rb
krane-3.1.0 lib/krane/kubernetes_resource/job.rb
krane-3.0.1 lib/krane/kubernetes_resource/job.rb
krane-3.0.0 lib/krane/kubernetes_resource/job.rb
krane-2.4.9 lib/krane/kubernetes_resource/job.rb
krane-2.4.8 lib/krane/kubernetes_resource/job.rb
krane-2.4.7 lib/krane/kubernetes_resource/job.rb
krane-2.4.6 lib/krane/kubernetes_resource/job.rb
krane-2.4.5 lib/krane/kubernetes_resource/job.rb
krane-2.4.4 lib/krane/kubernetes_resource/job.rb