def delete_object(self, name, namespace): self.logger.debug('Starting delete object {0} {1} {2}'.format(self.kind, name, namespace)) delete_method = self.lookup_method('delete', namespace) if not namespace: try: if 'body' in inspect.getargspec(delete_method).args: status_obj = delete_method(name, body=V1DeleteOptions()) else: status_obj = delete_method(name) except ApiException as exc: msg = json.loads(exc.body).get('message', exc.reason) raise self.get_exception_class()(msg, status=exc.status) except MaxRetryError as ex: raise self.get_exception_class()(str(ex.reason)) else: try: if 'body' in inspect.getargspec(delete_method).args: status_obj = delete_method(name, namespace, body=V1DeleteOptions()) else: status_obj = delete_method(name, namespace) except ApiException as exc: msg = json.loads(exc.body).get('message', exc.reason) if exc.body.startswith('{') else exc.body raise self.get_exception_class()(msg, status=exc.status) except MaxRetryError as ex: raise self.get_exception_class()(str(ex.reason)) if status_obj is None or status_obj.status == 'Failure': msg = 'Failed to delete {}'.format(name) if namespace is not None: msg += ' in namespace {}'.format(namespace) msg += ' status: {}'.format(status_obj) raise self.get_exception_class()(msg) self._wait_for_response(name, namespace, 'delete')
def _delete_existing_pvc(self, pvc_name, namespace): """Issue a K8s API request to delete a namespaced PVC, if exists.""" delete_options = V1DeleteOptions() del_status = None try: del_status = yield self.asynchronize( self.api.delete_namespaced_persistent_volume_claim, name=pvc_name, namespace=namespace, body=delete_options) except ApiException as e: if e.status == 404: # The PVC does not exist return del_status else: self.log.warning('Could not delete PVC %s' % pvc_name) raise while True: try: yield self.asynchronize( self.api.read_namespaced_persistent_volume_claim, name=pvc_name, namespace=namespace) except ApiException as e: if e.status == 404: self.log.info('PVC %s was successfully deleted', pvc_name) break return del_status
def evict_pods(self, pods): for namespace, name in pods: definition = {"metadata": {"name": name, "namespace": namespace}} if self._delete_options: definition.update({"delete_options": self._delete_options}) try: if self._drain_options.get("disable_eviction"): body = V1DeleteOptions(**definition) self._api_instance.delete_namespaced_pod( name=name, namespace=namespace, body=body ) else: body = V1beta1Eviction(**definition) self._api_instance.create_namespaced_pod_eviction( name=name, namespace=namespace, body=body ) self._changed = True except ApiException as exc: if exc.reason != "Not Found": self._module.fail_json( msg="Failed to delete pod {0}/{1} due to: {2}".format( namespace, name, exc.reason ) ) except Exception as exc: self._module.fail_json( msg="Failed to delete pod {0}/{1} due to: {2}".format( namespace, name, to_native(exc) ) )
def remove(self, job_id): removed = False body = V1DeleteOptions() success, response = request( self.batch_client.delete_namespaced_job, job_id, self.namespace, body=body, catch=True, ) if success: removed = True return removed
def stop(self, forced=False): """Stop user's server with specific name""" try: status = self._k8s_api_instance.delete_namespaced_custom_object( group=current_app.config["CRD_GROUP"], version=current_app.config["CRD_VERSION"], namespace=self._k8s_namespace, plural=current_app.config["CRD_PLURAL"], name=self.server_name, grace_period_seconds=0 if forced else None, body=V1DeleteOptions(propagation_policy="Foreground"), ) except ApiException as e: current_app.logger.warning( f"Cannot delete server: {self.server_name} for user: "******"{self._user.username}, error: {e}") return None else: return status
def delete_session_js(name, k8s_namespace): k8s_client = client.CustomObjectsApi(client.ApiClient()) try: k8s_client.delete_namespaced_custom_object( group="amalthea.dev", version="v1alpha1", namespace=k8s_namespace, plural="jupyterservers", name=name, body=V1DeleteOptions(propagation_policy="Foreground"), ) except ApiException as err: if err.status == 404: # INFO: The resource is already gone return True else: raise else: # INFO: Wait for session to be fully deleted tstart = datetime.now() timeout = timedelta(minutes=5) while(True): try: k8s_client.get_namespaced_custom_object( group="amalthea.dev", version="v1alpha1", namespace=k8s_namespace, plural="jupyterservers", name=name, ) except ApiException as err: if err.status == 404: return True else: raise if datetime.now() - tstart > timeout: return False else: sleep(10)