68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
from kubeflow.kubeflow.crud_backend import api, status
|
|
|
|
|
|
def pvc_status(pvc):
|
|
"""
|
|
Set the status of the pvc
|
|
"""
|
|
if pvc.metadata.deletion_timestamp is not None:
|
|
return status.create_status(
|
|
status.STATUS_PHASE.TERMINATING, "Deleting Volume..."
|
|
)
|
|
|
|
if pvc.status.phase == "Bound":
|
|
return status.create_status(status.STATUS_PHASE.READY, "Bound")
|
|
|
|
# The PVC is in Pending state, we check the Events to find out why
|
|
evs = api.v1_core.list_namespaced_event(
|
|
namespace=pvc.metadata.namespace,
|
|
field_selector=api.events_field_selector(
|
|
"PersistentVolumeClaim", pvc.metadata.name
|
|
),
|
|
).items
|
|
|
|
# If there are no events, then the PVC was just created
|
|
if len(evs) == 0:
|
|
return status.create_status(
|
|
status.STATUS_PHASE.WAITING, "Provisioning Volume..."
|
|
)
|
|
|
|
msg = f"Pending: {evs[0].message}"
|
|
state = evs[0].reason
|
|
if evs[0].reason == "WaitForFirstConsumer":
|
|
phase = status.STATUS_PHASE.UNAVAILABLE
|
|
msg = (
|
|
"Pending: This volume will be bound when its first consumer"
|
|
+ " is created. E.g., when you first browse its contents, or"
|
|
+ " attach it to a notebook server"
|
|
)
|
|
elif evs[0].reason == "Provisioning":
|
|
phase = status.STATUS_PHASE.WAITING
|
|
elif evs[0].reason == "FailedBinding":
|
|
phase = status.STATUS_PHASE.WARNING
|
|
elif evs[0].type == "Warning":
|
|
phase = status.STATUS_PHASE.WARNING
|
|
elif evs[0].type == "Normal":
|
|
phase = status.STATUS_PHASE.READY
|
|
|
|
return status.create_status(phase, msg, state)
|
|
|
|
|
|
def viewer_status(viewer):
|
|
"""
|
|
Return a string representing the status of that viewer. If a deletion
|
|
timestamp is set we want to return a `Terminating` state.
|
|
"""
|
|
try:
|
|
ready = viewer["status"]["ready"]
|
|
except KeyError:
|
|
return status.STATUS_PHASE.UNINITIALIZED
|
|
|
|
if "deletionTimestamp" in viewer["metadata"]:
|
|
return status.STATUS_PHASE.TERMINATING
|
|
|
|
if not ready:
|
|
return status.STATUS_PHASE.WAITING
|
|
|
|
return status.STATUS_PHASE.READY
|