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
}