diff --git a/cmd/thv-operator/api/v1beta1/embeddingserver_types.go b/cmd/thv-operator/api/v1beta1/embeddingserver_types.go index 2b14b22c34..297579303c 100644 --- a/cmd/thv-operator/api/v1beta1/embeddingserver_types.go +++ b/cmd/thv-operator/api/v1beta1/embeddingserver_types.go @@ -4,6 +4,7 @@ package v1beta1 import ( + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" ) @@ -60,7 +61,7 @@ type EmbeddingServerSpec struct { // +kubebuilder:validation:Enum=Always;Never;IfNotPresent // +kubebuilder:default="IfNotPresent" // +optional - ImagePullPolicy string `json:"imagePullPolicy,omitempty"` + ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"` // Port is the port to expose the embedding service on // +kubebuilder:validation:Minimum=1 @@ -270,11 +271,11 @@ func (e *EmbeddingServer) IsModelCacheEnabled() bool { } // GetImagePullPolicy returns the image pull policy for the EmbeddingServer -func (e *EmbeddingServer) GetImagePullPolicy() string { +func (e *EmbeddingServer) GetImagePullPolicy() corev1.PullPolicy { if e.Spec.ImagePullPolicy != "" { return e.Spec.ImagePullPolicy } - return "IfNotPresent" + return corev1.PullIfNotPresent } func init() { diff --git a/cmd/thv-operator/controllers/embeddingserver_controller.go b/cmd/thv-operator/controllers/embeddingserver_controller.go index 8149ad9d85..e9ec71a3b8 100644 --- a/cmd/thv-operator/controllers/embeddingserver_controller.go +++ b/cmd/thv-operator/controllers/embeddingserver_controller.go @@ -526,7 +526,7 @@ func (r *EmbeddingServerReconciler) buildEmbeddingContainer(embedding *mcpv1beta Image: embedding.Spec.Image, Args: args, Env: envVars, - ImagePullPolicy: corev1.PullPolicy(embedding.GetImagePullPolicy()), + ImagePullPolicy: embedding.GetImagePullPolicy(), Ports: []corev1.ContainerPort{ { Name: "http", diff --git a/cmd/thv-operator/controllers/embeddingserver_controller_test.go b/cmd/thv-operator/controllers/embeddingserver_controller_test.go index 2a5d84b70b..634bbb1797 100644 --- a/cmd/thv-operator/controllers/embeddingserver_controller_test.go +++ b/cmd/thv-operator/controllers/embeddingserver_controller_test.go @@ -146,28 +146,28 @@ func TestEmbeddingServer_GetImagePullPolicy(t *testing.T) { tests := []struct { name string - imagePullPolicy string - expected string + imagePullPolicy corev1.PullPolicy + expected corev1.PullPolicy }{ { name: "default pull policy", imagePullPolicy: "", - expected: "IfNotPresent", + expected: corev1.PullIfNotPresent, }, { name: "Never pull policy", - imagePullPolicy: "Never", - expected: "Never", + imagePullPolicy: corev1.PullNever, + expected: corev1.PullNever, }, { name: "Always pull policy", - imagePullPolicy: "Always", - expected: "Always", + imagePullPolicy: corev1.PullAlways, + expected: corev1.PullAlways, }, { name: "IfNotPresent pull policy", - imagePullPolicy: "IfNotPresent", - expected: "IfNotPresent", + imagePullPolicy: corev1.PullIfNotPresent, + expected: corev1.PullIfNotPresent, }, } diff --git a/cmd/thv-operator/test-integration/embedding-server/embeddingserver_creation_test.go b/cmd/thv-operator/test-integration/embedding-server/embeddingserver_creation_test.go index 8160fc709f..4290e10a3e 100644 --- a/cmd/thv-operator/test-integration/embedding-server/embeddingserver_creation_test.go +++ b/cmd/thv-operator/test-integration/embedding-server/embeddingserver_creation_test.go @@ -601,7 +601,7 @@ var _ = Describe("EmbeddingServer Controller Integration Tests", func() { Spec: mcpv1beta1.EmbeddingServerSpec{ Model: "sentence-transformers/all-MiniLM-L6-v2", Image: "ghcr.io/huggingface/text-embeddings-inference:latest", - ImagePullPolicy: "Always", + ImagePullPolicy: corev1.PullAlways, }, }, }, @@ -631,7 +631,7 @@ var _ = Describe("EmbeddingServer Controller Integration Tests", func() { Spec: mcpv1beta1.EmbeddingServerSpec{ Model: "sentence-transformers/all-MiniLM-L6-v2", Image: "ghcr.io/huggingface/text-embeddings-inference:latest", - ImagePullPolicy: "Never", + ImagePullPolicy: corev1.PullNever, }, }, }, diff --git a/cmd/thv-operator/test-integration/embedding-server/embeddingserver_update_test.go b/cmd/thv-operator/test-integration/embedding-server/embeddingserver_update_test.go index b91f9d021d..95c057cca0 100644 --- a/cmd/thv-operator/test-integration/embedding-server/embeddingserver_update_test.go +++ b/cmd/thv-operator/test-integration/embedding-server/embeddingserver_update_test.go @@ -373,14 +373,14 @@ var _ = Describe("EmbeddingServer Controller Update Tests", func() { Spec: mcpv1beta1.EmbeddingServerSpec{ Model: "sentence-transformers/all-MiniLM-L6-v2", Image: "ghcr.io/huggingface/text-embeddings-inference:latest", - ImagePullPolicy: "IfNotPresent", + ImagePullPolicy: corev1.PullIfNotPresent, }, }, Updates: []UpdateStep{ { Name: "Should update StatefulSet when ImagePullPolicy changes", ApplyUpdate: func(es *mcpv1beta1.EmbeddingServer) { - es.Spec.ImagePullPolicy = "Always" + es.Spec.ImagePullPolicy = corev1.PullAlways }, ExpectedStatefulSet: &appsv1.StatefulSet{ Spec: appsv1.StatefulSetSpec{ diff --git a/docs/operator/crd-api.md b/docs/operator/crd-api.md index 44e36106de..cbe2011a85 100644 --- a/docs/operator/crd-api.md +++ b/docs/operator/crd-api.md @@ -1251,7 +1251,7 @@ _Appears in:_ | `model` _string_ | Model is the HuggingFace embedding model to use (e.g., "sentence-transformers/all-MiniLM-L6-v2") | BAAI/bge-small-en-v1.5 | Optional: \{\}
| | `hfTokenSecretRef` _[api.v1beta1.SecretKeyRef](#apiv1beta1secretkeyref)_ | HFTokenSecretRef is a reference to a Kubernetes Secret containing the huggingface token.
If provided, the secret value will be provided to the embedding server for authentication with huggingface. | | Optional: \{\}
| | `image` _string_ | Image is the container image for the embedding inference server.
Images must be from HuggingFace Text Embeddings Inference (https://github.com/huggingface/text-embeddings-inference). | ghcr.io/huggingface/text-embeddings-inference:cpu-latest | Optional: \{\}
| -| `imagePullPolicy` _string_ | ImagePullPolicy defines the pull policy for the container image | IfNotPresent | Enum: [Always Never IfNotPresent]
Optional: \{\}
| +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#pullpolicy-v1-core)_ | ImagePullPolicy defines the pull policy for the container image | IfNotPresent | Enum: [Always Never IfNotPresent]
Optional: \{\}
| | `port` _integer_ | Port is the port to expose the embedding service on | 8080 | Maximum: 65535
Minimum: 1
| | `args` _string array_ | Args are additional arguments to pass to the embedding inference server | | Optional: \{\}
| | `env` _[api.v1beta1.EnvVar](#apiv1beta1envvar) array_ | Env are environment variables to set in the container | | Optional: \{\}
|