Example #1
0
    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')
Example #2
0
    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)
                 )
             )
Example #4
0
 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
Example #6
0
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)