Esempio n. 1
0
 def update_service_definition(self, count, item, opa_service_params,
                               service_definition,
                               stack_infrastructure_template,
                               stack_instance, stack_instance_statuses, svc,
                               svc_doc):
     """Updates a service definition object within a stack instance"""
     capabilities_of_target = stack_infrastructure_template.infrastructure_capabilities[
         service_definition.infrastructure_target].provisioning_parameters
     secrets_of_target = stack_infrastructure_template.infrastructure_capabilities[
         service_definition.infrastructure_target].secrets
     service_definition.opa_outputs = opa_service_params[svc][
         service_definition.infrastructure_target]
     opa_outputs = service_definition.opa_outputs
     agent = stack_infrastructure_template.infrastructure_capabilities[
         service_definition.infrastructure_target].agent
     merged_secrets = {**secrets_of_target, **svc_doc.secrets}
     fr_params = {}
     for fr in svc_doc.functional_requirements:
         if not item.disable_invocation:
             stack_instance_status = StackInstanceStatus(
                 functional_requirement=fr,
                 service=svc,
                 infrastructure_target=service_definition.
                 infrastructure_target,
                 status="in_progress",
                 error_message="")
             stack_instance_statuses.append(stack_instance_status)
         fr_doc = self.document_manager.get_functional_requirement(fr)
         fr_params = {**fr_params, **fr_doc.params}
         merged_secrets = {**merged_secrets, **fr_doc.secrets}
     merged_capabilities = {
         **capabilities_of_target,
         **fr_params,
         **svc_doc.params
     }
     service_definition.provisioning_parameters = {
         **merged_capabilities,
         **opa_outputs,
         **stack_instance.instance_params,
         **stack_instance.service_params.get(svc, {})
     }
     service_definition.secrets = {
         **merged_secrets,
         **stack_instance.instance_secrets,
         **stack_instance.service_secrets.get(svc, {})
     }
     service_definition.agent = agent
     if "stackl_hostname" in service_definition.provisioning_parameters:
         service_definition.template_hosts(
             service_definition.provisioning_parameters["stackl_hostname"],
             service_definition.provisioning_parameters.get(
                 "instances", None), count + 1)
     return service_definition
Esempio n. 2
0
    def add_service_definition(self, infra_target, infra_target_counter, item,
                               opa_service_params,
                               stack_infrastructure_template,
                               stack_instance_statuses, svc, svc_doc):
        """
        Function for adding a service_definition item to a stack_instance
        """
        service_definition = StackInstanceService()
        service_definition.service = svc_doc.name
        service_definition.infrastructure_target = infra_target
        service_definition.opa_outputs = opa_service_params[svc][infra_target]
        capabilities_of_target = stack_infrastructure_template.infrastructure_capabilities[
            infra_target].provisioning_parameters
        secrets_of_target = stack_infrastructure_template.infrastructure_capabilities[
            infra_target].secrets
        agent = stack_infrastructure_template.infrastructure_capabilities[
            infra_target].agent
        cloud_provider = stack_infrastructure_template.infrastructure_capabilities[
            infra_target].cloud_provider
        merged_secrets = {**secrets_of_target, **svc_doc.secrets}
        fr_params = {}
        for fr in svc_doc.functional_requirements:
            fr_doc = self.document_manager.get_functional_requirement(fr)
            fr_params = {**fr_params, **fr_doc.params}
            merged_secrets = {**merged_secrets, **fr_doc.secrets}
            if fr_doc.as_group:
                # First check if the status is already available in the stack instance statuses
                status_already_available = False
                for stack_instance_status in stack_instance_statuses:
                    if stack_instance_status.service == svc and \
                        stack_instance_status.functional_requirement == fr:
                        status_already_available = True
                        # status found, add the infra target
                        stack_instance_status.infrastructure_target += f",{infra_target}"
                        break
                if not status_already_available:
                    stack_instance_status = StackInstanceStatus(
                        functional_requirement=fr,
                        service=svc,
                        infrastructure_target=infra_target,
                        status="in_progress",
                        error_message="")
                    stack_instance_statuses.append(stack_instance_status)
            else:
                stack_instance_status = StackInstanceStatus(
                    functional_requirement=fr,
                    service=svc,
                    infrastructure_target=infra_target,
                    status="in_progress",
                    error_message="")
                stack_instance_statuses.append(stack_instance_status)
        merged_capabilities = {
            **capabilities_of_target,
            **fr_params,
            **svc_doc.params
        }
        service_definition.provisioning_parameters = {
            **merged_capabilities,
            **service_definition.opa_outputs,
            **item.params,
            **item.service_params.get(svc, {})
        }
        if "stackl_hostname" in service_definition.provisioning_parameters:
            service_definition.template_hosts(
                service_definition.provisioning_parameters["stackl_hostname"],
                service_definition.provisioning_parameters.get(
                    "instances", None), infra_target_counter)

        service_definition.secrets = {
            **merged_secrets,
            **item.secrets,
            **item.service_secrets.get(svc, {})
        }
        service_definition.agent = agent
        service_definition.cloud_provider = cloud_provider
        return service_definition