diff --git a/operator/controllers/seldondeployment_prepackaged_servers.go b/operator/controllers/seldondeployment_prepackaged_servers.go index 6d98abd047..5886baa396 100644 --- a/operator/controllers/seldondeployment_prepackaged_servers.go +++ b/operator/controllers/seldondeployment_prepackaged_servers.go @@ -419,12 +419,12 @@ func (pi *PrePackedInitialiser) addModelServersAndInitContainers(mlDep *machinel podSecurityContext *v1.PodSecurityContext, log logr.Logger) error { - sPodSpec, idx := utils.GetSeldonPodSpecForPredictiveUnit(p, pu.Name) - if sPodSpec == nil { - return fmt.Errorf("Failed to find PodSpec for Prepackaged server PreditiveUnit named %s", pu.Name) - } - depName := machinelearningv1.GetDeploymentName(mlDep, *p, sPodSpec, idx) if machinelearningv1.IsPrepack(pu) { + sPodSpec, idx := utils.GetSeldonPodSpecForPredictiveUnit(p, pu.Name) + if sPodSpec == nil { + return fmt.Errorf("Failed to find PodSpec for Prepackaged server PreditiveUnit named %s", pu.Name) + } + depName := machinelearningv1.GetDeploymentName(mlDep, *p, sPodSpec, idx) deploy, existing, err := pi.findDeployment(c, depName) if err != nil { @@ -487,27 +487,30 @@ func (pi *PrePackedInitialiser) addModelServersAndInitContainers(mlDep *machinel c.deployments = append(c.deployments, deploy) } } - } else { - // add model uri initializer for non server components - if pu.ModelURI != "" { - log.Info("Add rclone init container for predictive unit", "predictive unit", pu.Name) - deploy, existing, err := pi.findDeployment(c, depName) - if err != nil { - return err - } - if !existing { - return fmt.Errorf("Expected to find a deployment for predictive unit %s", pu.Name) - } - mi := NewModelInitializer(pi.ctx, pi.clientset) - c := utils.GetContainerForDeployment(deploy, pu.Name) - if c == nil { - return fmt.Errorf("Expected to find container for predictive unit %s", pu.Name) - } - envSecretRefName := extractEnvSecretRefName(pu) - _, err = mi.InjectModelInitializer(deploy, c.Name, pu.ModelURI, pu.ServiceAccountName, envSecretRefName, pu.StorageInitializerImage) - if err != nil { - return err - } + } else if pu.ModelURI != "" { // add model uri initializer for non server components + sPodSpec, idx := utils.GetSeldonPodSpecForPredictiveUnit(p, pu.Name) + if sPodSpec == nil { + return fmt.Errorf("Failed to find PodSpec for Prepackaged server PreditiveUnit named %s", pu.Name) + } + depName := machinelearningv1.GetDeploymentName(mlDep, *p, sPodSpec, idx) + + log.Info("Add rclone init container for predictive unit", "predictive unit", pu.Name) + deploy, existing, err := pi.findDeployment(c, depName) + if err != nil { + return err + } + if !existing { + return fmt.Errorf("Expected to find a deployment for predictive unit %s", pu.Name) + } + mi := NewModelInitializer(pi.ctx, pi.clientset) + c := utils.GetContainerForDeployment(deploy, pu.Name) + if c == nil { + return fmt.Errorf("Expected to find container for predictive unit %s", pu.Name) + } + envSecretRefName := extractEnvSecretRefName(pu) + _, err = mi.InjectModelInitializer(deploy, c.Name, pu.ModelURI, pu.ServiceAccountName, envSecretRefName, pu.StorageInitializerImage) + if err != nil { + return err } } diff --git a/operator/controllers/seldondeployment_prepackaged_servers_test.go b/operator/controllers/seldondeployment_prepackaged_servers_test.go index 24ea4f2271..05a5c8b081 100644 --- a/operator/controllers/seldondeployment_prepackaged_servers_test.go +++ b/operator/controllers/seldondeployment_prepackaged_servers_test.go @@ -1218,6 +1218,85 @@ var _ = Describe("Create a prepacked triton server with seldon.io/no-storage-ini }) +var _ = Describe("Create a RANDOM_ABTEST deployment", func() { + const timeout = time.Second * 30 + const interval = time.Second * 1 + const name = "pp1" + const sdepName = "prepack13" + envExecutorUser = "2" + By("Creating a resource") + It("should create a resource with defaults", func() { + Expect(k8sClient).NotTo(BeNil()) + + key := types.NamespacedName{ + Name: sdepName, + Namespace: "default", + } + impl := machinelearningv1.RANDOM_ABTEST + instance := &machinelearningv1.SeldonDeployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: key.Name, + Namespace: key.Namespace, + }, + Spec: machinelearningv1.SeldonDeploymentSpec{ + Predictors: []machinelearningv1.PredictorSpec{ + { + Name: name, + ComponentSpecs: []*machinelearningv1.SeldonPodSpec{ + { + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Image: "seldonio/mock_classifier:1.0", + Name: "classifier1", + }, + { + Image: "seldonio/mock_classifier:1.0", + Name: "classifier2", + }, + }, + }, + }, + }, + Graph: machinelearningv1.PredictiveUnit{ + Implementation: &impl, + Children: []machinelearningv1.PredictiveUnit{ + { + Name: "classifier1", + }, + { + Name: "classifier2", + }, + }, + }, + }, + }, + }, + } + + configMapName := types.NamespacedName{Name: "seldon-config", + Namespace: "seldon-system"} + configResult := &corev1.ConfigMap{} + const timeout = time.Second * 30 + Eventually(func() error { return k8sClient.Get(context.TODO(), configMapName, configResult) }, timeout). + Should(Succeed()) + + // Run Defaulter + instance.Default() + + Expect(k8sClient.Create(context.Background(), instance)).Should(Succeed()) + + fetched := &machinelearningv1.SeldonDeployment{} + Eventually(func() error { + err := k8sClient.Get(context.Background(), key, fetched) + return err + }, timeout, interval).Should(BeNil()) + Expect(fetched.Name).Should(Equal(sdepName)) + + Expect(k8sClient.Delete(context.Background(), instance)).Should(Succeed()) + }) +}) + func createCustomModelWithUri() (*machinelearningv1.SeldonDeployment, *machinelearningv1.PredictorSpec, *components,