in ee/lib/remote_development/workspace_operations/reconcile/input/actual_state_calculator.rb [38:182]
def self.calculate_actual_state(
latest_k8s_deployment_info:, termination_progress: nil, latest_error_details: nil)
return TERMINATED if termination_progress == TerminationProgress::TERMINATED
return ERROR if latest_error_details
return TERMINATING if termination_progress == TerminationProgress::TERMINATING
return UNKNOWN unless latest_k8s_deployment_info
spec = latest_k8s_deployment_info[:spec]
status = latest_k8s_deployment_info[:status]
conditions = status&.[](:conditions)
return UNKNOWN unless spec && status && conditions
progressing_condition = conditions.detect do |condition|
condition[:type] == CONDITION_TYPE_PROGRESSING
end
return UNKNOWN if progressing_condition.nil?
progressing_reason = progressing_condition[:reason]
spec_replicas = spec[:replicas]
return UNKNOWN if progressing_reason.nil? || spec_replicas.nil?
return FAILED if DEPLOYMENT_PROGRESSING_STATUS_FAILED.include?(progressing_reason)
if DEPLOYMENT_PROGRESSING_STATUS_PROGRESSING.include?(progressing_reason)
return STOPPING if spec_replicas == 0
return STARTING if spec_replicas == 1
end
status_available_replicas = status.fetch(:availableReplicas, 0)
status_unavailable_replicas = status.fetch(:unavailableReplicas, 0)
available_condition = conditions.detect do |condition|
condition[:type] == CONDITION_TYPE_AVAILABLE
end
return UNKNOWN if available_condition.nil?
available_reason = available_condition[:reason]
return UNKNOWN if available_reason.nil?
if DEPLOYMENT_PROGRESSING_STATUS_COMPLETE.include?(progressing_reason)
if available_reason == AVAILABLE_CONDITION_REASON_MINIMUM_REPLICAS_AVAILABLE &&
spec_replicas == 0 && status_available_replicas == 0
return STOPPED
end
if available_reason == AVAILABLE_CONDITION_REASON_MINIMUM_REPLICAS_AVAILABLE &&
spec_replicas == status_available_replicas &&
status_unavailable_replicas == 0
return RUNNING
end
if available_reason == AVAILABLE_CONDITION_REASON_MINIMUM_REPLICAS_AVAILABLE &&
spec_replicas == 0 && status_available_replicas == 1
return STOPPING
end
if [
AVAILABLE_CONDITION_REASON_MINIMUM_REPLICAS_AVAILABLE,
AVAILABLE_CONDITION_REASON_MINIMUM_REPLICAS_UNAVAILABLE
].include?(available_reason) &&
spec_replicas == 1 && status_available_replicas == 0
return STARTING
end
end
UNKNOWN
end