def delete(self, context, params): err = "" # load context err = load_context(context) # do not proceed if context could not be loaded if err: return err # get the namespace from the current context self.namespace, err = get_current_namespace() # do not proceed if namespace not found if err: return err self.api = self.get_core_api() # render intrinsics in secrets rendered_secrets = apply_intrinsics(self.resource_array, params) # save a hash of the rendered secrets into the params for downstream # consumption set_secrets_hash(rendered_secrets, params) for secret in rendered_secrets: secret_name = secret['metadata']['name'] _secret_exists,err = self.secret_exists(secret_name) if _secret_exists and not err: try: body = kubernetes.client.V1DeleteOptions() print("deleting secret: %s"%secret_name) api_response = self.api.delete_namespaced_secret(secret_name, self.namespace, body) except ApiException as e: err = "\n%s"%(json.dumps(json.loads(e.body),indent=2)) return err
def delete(self, context, params): err = "" # load context err = load_context(context) # do not proceed if context could not be loaded if err: return err # get the namespace from the current context self.namespace, err = get_current_namespace() # do not proceed if namespace not found if err: return err self.api = self.get_apps_api() # render intrinsics in deployments rendered_deployments = apply_intrinsics(self.resource_array, params) for deployment in rendered_deployments: deployment_name = deployment['metadata']['name'] _deployment_exists, err = self.deployment_exists(deployment_name) if _deployment_exists and not err: try: body = kubernetes.client.V1DeleteOptions() print("deleting deployment: %s in namespace: %s" % (deployment_name, self.namespace)) api_response = self.api.delete_namespaced_deployment( deployment_name, self.namespace, body, propagation_policy='Orphan') except ApiException as e: err = "\n%s" % (json.dumps(json.loads(e.body), indent=2)) break return err
def get_secret_value(self, context, secret_name, field): err = "" secret_value = "" # load context err = load_context(context) # do not proceed if context could not be loaded if err: return secret_value,err # get the namespace from the current context self.namespace, err = get_current_namespace() # do not proceed if namespace not found if err: return secret_value,err self.api = self.get_core_api() try: api_response = self.api.read_namespaced_secret(secret_name, self.namespace) secret_data = api_response.data # if the secret is found, no ApiException will be raised if field in secret_data: secret_value = base64.b64decode(secret_data[field]) except ApiException as e: # the "Not Found" reason is the expected response it the secret # does not exists. any other reason constitutes an error if e.reason != "Not Found": err = e print(e) return secret_value, err
def delete(self, context, params): err = "" # load context err = load_context(context) # do not proceed if context could not be loaded if err: return err # get the namespace from the current context self.namespace, err = get_current_namespace() # do not proceed if namespace not found if err: return err self.api = self.get_core_api() # render intrinsics in the services rendered_svcs = apply_intrinsics(self.resource_array, params) for service in rendered_svcs: service_name = service['metadata']['name'] _service_exists, err = self._service_exists(service_name) if _service_exists and not err: try: body = kubernetes.client.V1DeleteOptions() print("deleting service: %s in namespace: %s" % (service_name, self.namespace)) api_response = self.api.delete_namespaced_service( service_name, self.namespace, body) except ApiException as e: err = e return err
def build(self, context, params, dry_run_bool, deploy_mode_bool): self.params = params # load context err = load_context(context) # do not proceed if context could not be loaded if err: return err # get the namespace from the current context self.namespace, err = get_current_namespace() # do not proceed if namespace not found if err: return err self.api = self.get_core_api() # render intrinsics in secrets rendered_secrets = apply_intrinsics(self.resource_array, params) # render template variables in the body elements self.render_body_elements(rendered_secrets) # save a hash of the rendered secrets into the params for downstream # consumption set_secrets_hash(rendered_secrets,params) err = "" if dry_run_bool: return self.build_dryrun(rendered_secrets, deploy_mode_bool) for secret in rendered_secrets: secret_name = secret['metadata']['name'] secret_exists,err = self.secret_exists(secret_name) if not secret_exists and not err: # secret does not yet exist # create it from scratch try: api_response = self.api.create_namespaced_secret(self.namespace, secret) print("secret '%s' created"%secret_name) except ApiException as e: err = "\n%s"%(json.dumps(json.loads(e.body),indent=2)) break elif secret_exists and not err: # secret exists, so update it try: api_response = self.api.replace_namespaced_secret(secret_name, self.namespace, secret) print("secret '%s' updated"%secret_name) except ApiException as e: err = "\n%s"%(json.dumps(json.loads(e.body),indent=2)) break else: err = "Exception when attempting to inspect the secret %s:\n %s"%(secret_name,err) break return err
def build(self, context, params, dry_run_bool, deploy_mode_bool): self.params = params # load context err = load_context(context) # do not proceed if context could not be loaded if err: return err # get the namespace from the current context self.namespace, err = get_current_namespace() # do not proceed if namespace not found if err: return err self.api = self.get_core_api() # render intrinsics in services services_copy = apply_intrinsics(self.resource_array, params) err = "" if dry_run_bool: return self._build_dryrun(services_copy, deploy_mode_bool) for service in services_copy: service_name = service['metadata']['name'] _service_exists, err = self._service_exists(service_name) if not _service_exists and not err: # service does not yet exist # create it from scratch try: api_response = self.api.create_namespaced_service( self.namespace, service) print("service '%s' created" % service_name) except ApiException as e: err = "Exception when creating service %s:\n %s" % ( service_name, e) break elif _service_exists and not err: # service exists, and services are immutable. print("service '%s' already exists. services are immutable, " % service_name) print( " so if you want it replaced, delete it manually then re-build the stack" ) else: err = "Exception when attempting to inspect the service %s:\n %s" % ( service_name, e) break # if we are error free AND this build is happening in the context of a # deploy, wait for svc to resolve if not err and deploy_mode_bool: self.wait(service_name) return err
def build(self, context, params, dry_run_bool, deploy_mode_bool): self.params = params # load context err = load_context(context) # do not proceed if context could not be loaded if err: return err # get the namespace from the current context self.namespace, err = get_current_namespace() # do not proceed if namespace not found if err: return err # statefulset apis live under AppsV1beta1Api self.api = self.get_apps_api() # render intrinsics in statefulsets rendered_statefulsets = apply_intrinsics(self.resource_array, params) err = "" if dry_run_bool: return self.build_dryrun(rendered_statefulsets, deploy_mode_bool) for statefulset in rendered_statefulsets: statefulset_name = statefulset['metadata']['name'] statefulset_exists, err = self.statefulset_exists(statefulset_name) if not statefulset_exists and not err: # statefulset does not yet exist # create it from scratch try: api_response = self.api.create_namespaced_stateful_set( self.namespace, statefulset) print("statefulset '%s' created" % statefulset_name) except ApiException as e: err = "\n%s" % (json.dumps(json.loads(e.body), indent=2)) break elif statefulset_exists and not err: # statefulset exists, so update it try: api_response = self.api.replace_namespaced_stateful_set( statefulset_name, self.namespace, statefulset) print("statefulset '%s' updated" % statefulset_name) except ApiException as e: err = "\n%s" % (json.dumps(json.loads(e.body), indent=2)) break else: err = "Exception when attempting to inspect the statefulset %s:\n %s" % ( statefulset_name, err) break # if we are error free AND this build is happening in the context of a # deploy, wait for pods to pass readiness if not err and deploy_mode_bool: self.wait(statefulset_name) return err