def get_serializable_launch_plan(settings: SerializationSettings, entity: FlyteLocalEntity, fast: bool) -> FlyteControlPlaneEntity: sdk_workflow = get_serializable(settings, entity.workflow) cp_entity = SdkLaunchPlan( workflow_id=sdk_workflow.id, entity_metadata=_launch_plan_models.LaunchPlanMetadata( schedule=entity.schedule, notifications=entity.notifications, ), default_inputs=entity.parameters, fixed_inputs=entity.fixed_inputs, labels=entity.labels or _common_models.Labels({}), annotations=entity.annotations or _common_models.Annotations({}), auth_role=entity._auth_role, raw_output_data_config=entity.raw_output_data_config, ) # These two things are normally set to None in the SdkLaunchPlan constructor and filled in by # SdkRunnableLaunchPlan/the registration process, so we need to set them manually. The reason is because these # fields are not part of the underlying LaunchPlanSpec cp_entity._interface = sdk_workflow.interface cp_entity._id = _identifier_model.Identifier( resource_type=_identifier_model.ResourceType.LAUNCH_PLAN, project=settings.project, domain=settings.domain, name=entity.name, version=settings.version, ) return cp_entity
def create_launch_plan(self, *args, **kwargs): # TODO: Correct after implementing new launch plan assumable_iam_role = _auth_config.ASSUMABLE_IAM_ROLE.get() kubernetes_service_account = _auth_config.KUBERNETES_SERVICE_ACCOUNT.get( ) if not (assumable_iam_role or kubernetes_service_account): raise _user_exceptions.FlyteValidationException( "No assumable role or service account found") auth_role = _common_models.AuthRole( assumable_iam_role=assumable_iam_role, kubernetes_service_account=kubernetes_service_account, ) return SdkLaunchPlan( workflow_id=self.id, entity_metadata=_launch_plan_models.LaunchPlanMetadata( schedule=_schedule_models.Schedule(""), notifications=[], ), default_inputs=_interface_models.ParameterMap({}), fixed_inputs=_literal_models.LiteralMap(literals={}), labels=_common_models.Labels({}), annotations=_common_models.Annotations({}), auth_role=auth_role, raw_output_data_config=_common_models.RawOutputDataConfig(""), )
def get_serializable_references( entity_mapping: OrderedDict, settings: SerializationSettings, entity: FlyteLocalEntity, fast: bool, ) -> FlyteControlPlaneEntity: # TODO: This entire function isn't necessary. We should just return None or raise an Exception or something. # Reference entities should already exist on the Admin control plane - they should not be serialized/registered # again. Indeed we don't actually have enough information to serialize it properly. if isinstance(entity, ReferenceTask): cp_entity = SdkTask( type="ignore", metadata=TaskMetadata().to_taskmetadata_model(), interface=entity.interface, custom={}, container=None, ) elif isinstance(entity, ReferenceWorkflow): workflow_metadata = WorkflowMetadata( on_failure=WorkflowFailurePolicy.FAIL_IMMEDIATELY) cp_entity = SdkWorkflow( nodes=[], # Fake an empty list for nodes, id=entity.reference.id, metadata=workflow_metadata, metadata_defaults=workflow_model.WorkflowMetadataDefaults(), interface=entity.interface, output_bindings=[], ) elif isinstance(entity, ReferenceLaunchPlan): cp_entity = SdkLaunchPlan( workflow_id=None, entity_metadata=_launch_plan_models.LaunchPlanMetadata( schedule=None, notifications=[]), default_inputs=interface_models.ParameterMap({}), fixed_inputs=literal_models.LiteralMap({}), labels=_common_models.Labels({}), annotations=_common_models.Annotations({}), auth_role=_common_models.AuthRole(assumable_iam_role="fake:role"), raw_output_data_config=RawOutputDataConfig(""), ) # Because of how SdkNodes work, it needs one of these interfaces # Hopefully this is more trickery that can be cleaned up in the future cp_entity._interface = TypedInterface.promote_from_model( entity.interface) else: raise Exception("Invalid reference type when serializing") # Make sure we don't serialize this cp_entity._has_registered = True cp_entity.assign_name(entity.id.name) cp_entity._id = entity.id return cp_entity