예제 #1
0
파일: routes.py 프로젝트: nuaays/argo
    def delete(self):

        client = KubernetesApiClient(use_proxy=True)
        options = swagger_client.V1DeleteOptions()
        options.grace_period_seconds = 1

        @parse_kubernetes_exception
        @retry(wait_exponential_multiplier=100, stop_max_attempt_number=10)
        def delete_in_provider():
            try:
                client.extensionsvbeta.delete_namespaced_deployment(
                    options, self.namespace, self.name)
                client.extensionsvbeta.deletecollection_namespaced_replica_set(
                    self.namespace, label_selector="app={}".format(self.name))
                client.api.deletecollection_namespaced_pod(
                    self.namespace, label_selector="app={}".format(self.name))
            except swagger_client.rest.ApiException as e:
                if e.status != 404:
                    raise e

        delete_in_provider()
        time.sleep(2)

        s = ServiceEndpoint(self.name, self.namespace)
        s.delete()
예제 #2
0
    def delete(self, timeout=None):
        """
        Delete a kubernetes namespace and image secret for Argo

        Idempotency: Can be repeatedly called
        """
        delete_grace_period = 1
        options = swagger_client.V1DeleteOptions()
        options.grace_period_seconds = delete_grace_period
        options.orphan_dependents = False

        @retry_unless(swallow_code=[404, 409])
        def delete_ns_in_provider():
            """
            The retry is not done for 404 (not found) and also for 409 (conflict)
            The 404 case is for simple retry. 409 happens when application delete was
            requested but not complete and another request came in.
            """
            logger.debug("Deleting application {}".format(self.name))
            self._client.api.delete_namespace(options, self.name)

        delete_ns_in_provider()

        start_time = time.time()
        while self.exists():
            logger.debug("Application {} still exists".format(self.name))
            time.sleep(delete_grace_period + 1)
            wait_time = int(time.time() - start_time)
            if timeout is not None and wait_time > timeout:
                raise AXTimeoutException(
                    "Could not delete namespace {} in {} seconds".format(
                        self.name, timeout))
예제 #3
0
 def delete(namespace, name):
     options = swagger_client.V1DeleteOptions()
     options.grace_period_seconds = 0
     try:
         logger.debug("Delete secret: {}".format(name))
         self.client.api.delete_namespaced_secret(
             options, namespace, name)
     except swagger_client.rest.ApiException as e:
         if e.status != 404:
             raise e
예제 #4
0
파일: pod.py 프로젝트: zhan849/argo
 def delete_from_provider():
     options = swagger_client.V1DeleteOptions()
     options.grace_period_seconds = 0
     try:
         logger.debug("Trying to delete pod {} from namespace {}".format(self.name, self.namespace))
         self.client.api.delete_namespaced_pod(options, self.namespace, self.name)
         logger.debug("Deleted pod {} from namespace {}".format(self.name, self.namespace))
     except swagger_client.rest.ApiException as e:
         logger.debug("Got the following exception {}".format(e))
         if e.status != 404:
             raise e
예제 #5
0
    def delete(self, timeout=None):
        """
        Delete the deployment.

        Idempotency: This function is idempotent. If deployment does not exist then
        delete will silently fail without raising any exceptions.
        Args:
            timeout: In seconds or None for infinite
        """
        options = swagger_client.V1DeleteOptions()
        options.grace_period_seconds = 1
        options.orphan_dependents = False

        def check_result(result):
            # True for retry False for done
            return not result

        @retry(retry_on_result=check_result, wait_fixed=2000, stop_max_delay=timeout)
        def wait_for_scale_to_zero():
            logger.debug("Wait for scale of deployment to 0 for {} {}".format(self.application, self.name))

            @retry_unless(swallow_code=[404])
            def get_scale_from_provider():
                return self.client.apisappsv1beta1_api.read_namespaced_scale_scale(self.application, self.name)

            scale = get_scale_from_provider()
            if scale is None:
                return True
            if scale.status.replicas == 0:
                return True

            return False

        @retry_unless(swallow_code=[404, 409])
        def delete_in_provider():
            logger.debug("Deleting deployment for {} {}".format(self.application, self.name))
            self.client.apisappsv1beta1_api.delete_namespaced_deployment(options, self.application, self.name)

        def delete_rs_in_provider():
            logger.debug("Deleting replica set for {} {}".format(self.application, self.name))
            self.client.extensionsv1beta1.deletecollection_namespaced_replica_set(self.application, label_selector="deployment={}".format(self.name))

        # now delete deployment object and replication set
        with DeploymentOperation(self):
            dep_obj = self._deployment_status()
            self._scale_to(0)
            wait_for_scale_to_zero()

            if dep_obj:
                resources = AXResources(existing=dep_obj)
                resources.delete_all()

            delete_in_provider()
            delete_rs_in_provider()
예제 #6
0
파일: task.py 프로젝트: abhinavdas/argo
    def _delete_job(self, name, delete_pod, force):
        logger.debug("Deleting job for [%s]", self.jobname)
        options = swagger_client.V1DeleteOptions()
        options.grace_period_seconds = 0

        @retry_unless(swallow_code=[404], status_code=[409, 422])
        def delete_in_provider():
            self.batchapi.delete_namespaced_job(options, self.kube_namespace,
                                                name)

        delete_in_provider()
        self.stop_all_pods(delete_pod=delete_pod, force=force)
예제 #7
0
파일: routes.py 프로젝트: nuaays/argo
 def _delete_in_provider(self):
     options = swagger_client.V1DeleteOptions()
     options.grace_period_seconds = 1
     self.client.apisextensionsv1beta1_api.delete_namespaced_ingress(
         options, self.namespace, self.name)
예제 #8
0
파일: secrets.py 프로젝트: nuaays/argo
 def _delete_in_provider(self, namespace, secret):
     options = swagger_client.V1DeleteOptions()
     options.grace_period_seconds = 0
     self.client.api.delete_namespaced_secret(options, namespace, secret)