class Krane::PersistentVolumeClaim

Constants

TIMEOUT

Public Instance Methods

deploy_failed?() click to toggle source
# File lib/krane/kubernetes_resource/persistent_volume_claim.rb, line 27
def deploy_failed?
  status == "Lost" || failure_message.present?
end
deploy_succeeded?() click to toggle source
# File lib/krane/kubernetes_resource/persistent_volume_claim.rb, line 15
def deploy_succeeded?
  return true if status == "Bound"

  # if the StorageClass has volumeBindingMode: WaitForFirstConsumer,
  # it won't bind until after a Pod mounts it. But it must be pre-deployed,
  # as the Pod requires it. So 'Pending' must be treated as a 'Success' state
  if storage_class&.volume_binding_mode == "WaitForFirstConsumer"
    return status == "Pending" || status == "Bound"
  end
  false
end
failure_message() click to toggle source
# File lib/krane/kubernetes_resource/persistent_volume_claim.rb, line 31
def failure_message
  if storage_class_name.nil? && @storage_classes.count(&:default?) > 1
    "PVC has no StorageClass specified and there are multiple StorageClasses " \
    "annotated as default. This is an invalid cluster configuration."
  end
end
status() click to toggle source
# File lib/krane/kubernetes_resource/persistent_volume_claim.rb, line 11
def status
  exists? ? @instance_data["status"]["phase"] : "Not Found"
end
sync(cache) click to toggle source
Calls superclass method Krane::KubernetesResource#sync
# File lib/krane/kubernetes_resource/persistent_volume_claim.rb, line 6
def sync(cache)
  super
  @storage_classes = cache.get_all("StorageClass").map { |sc| StorageClass.new(sc) }
end
timeout_message() click to toggle source
# File lib/krane/kubernetes_resource/persistent_volume_claim.rb, line 38
def timeout_message
  return STANDARD_TIMEOUT_MESSAGE unless storage_class_name.present? && !storage_class
  "PVC specified a StorageClass of #{storage_class_name} but the resource does not exist"
end

Private Instance Methods

storage_class() click to toggle source
# File lib/krane/kubernetes_resource/persistent_volume_claim.rb, line 49
def storage_class
  if storage_class_name.present?
    @storage_classes.detect { |sc| sc.name == storage_class_name }
  # storage_class_name = "" is an explicit request for no storage class
  # storage_class_name = nil is an impplicit request for default storage class
  elsif storage_class_name != ""
    @storage_classes.detect(&:default?)
  end
end
storage_class_name() click to toggle source
# File lib/krane/kubernetes_resource/persistent_volume_claim.rb, line 45
def storage_class_name
  @definition.dig("spec", "storageClassName")
end