示例#1
0
    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
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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
示例#7
0
    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