func()

in controllers/hosting/model_reconciler.go [263:336]


func (r *modelReconciler) extractDesiredModelsFromHostingDeployment(deployment *hostingv1.HostingDeployment) (map[string]*modelv1.Model, map[string]string, error) {

	// If the desired deployment is to be deleted, then there are no desired models.
	if !deployment.ObjectMeta.GetDeletionTimestamp().IsZero() {
		return map[string]*modelv1.Model{}, map[string]string{}, nil
	}

	var err error
	var models map[string]*commonv1.Model
	if models, err = r.getAndValidateModelMap(deployment.Spec.Models); err != nil {
		return nil, nil, err
	}

	desiredModels := map[string]*modelv1.Model{}
	modelNameMap := map[string]string{}

	// For each desired model, create a Kubernetes spec for it.
	for name, model := range models {

		var containers map[string]*commonv1.ContainerDefinition
		if containers, err = r.getAndValidateContainerMap(model); err != nil {
			return nil, nil, err
		}

		var primaryContainer *commonv1.ContainerDefinition
		var modelContainers []*commonv1.ContainerDefinition

		// For multi-container, pass containers list directly - ignore primary container definition
		if len(model.Containers) > 1 {
			// Provide a useful log to inform users that primary container isn't being used
			if model.PrimaryContainer != nil {
				r.log.Info("The primary container field is ignored if more than one containers is specified")
			}

			primaryContainer = nil
			modelContainers = model.Containers
		} else {
			// Determine which container is marked as primary
			if primaryContainer, err = r.getPrimaryContainerDefinition(model, containers); err != nil {
				return nil, nil, err
			}

			modelContainers = nil
		}
		namespacedName := GetSubresourceNamespacedName(name, *deployment)

		// Add labels to model that indicate which particular HostingDeployment
		// owns it.
		ownershipLabels := GetResourceOwnershipLabelsForHostingDeployment(*deployment)

		k8sModel := &modelv1.Model{
			ObjectMeta: metav1.ObjectMeta{
				Name:      namespacedName.Name,
				Namespace: namespacedName.Namespace,
				Labels:    ownershipLabels,
			},
			Spec: modelv1.ModelSpec{
				Containers:             modelContainers,
				EnableNetworkIsolation: model.EnableNetworkIsolation,
				ExecutionRoleArn:       model.ExecutionRoleArn,
				PrimaryContainer:       primaryContainer,
				VpcConfig:              model.VpcConfig,
				Tags:                   commonv1.DeepCopyTagSlice(deployment.Spec.Tags),
				Region:                 deployment.Spec.Region,
				SageMakerEndpoint:      deployment.Spec.SageMakerEndpoint,
			},
		}

		desiredModels[k8sModel.ObjectMeta.Name] = k8sModel
		modelNameMap[name] = k8sModel.ObjectMeta.Name
	}

	return desiredModels, modelNameMap, nil
}