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