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()
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))
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
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
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()
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)
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)
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)