diff --git a/api/v1/prefectserver_types.go b/api/v1/prefectserver_types.go index 60b2225..da3c6e2 100644 --- a/api/v1/prefectserver_types.go +++ b/api/v1/prefectserver_types.go @@ -66,6 +66,9 @@ type PrefectServerSpec struct { // MigrationJobLabels defines additional labels to add to the migration Job MigrationJobLabels map[string]string `json:"migrationJobLabels,omitempty"` + + // NodeSelector defines the node selector for the Prefect Server Deployment and migration Job + NodeSelector map[string]string `json:"nodeSelector,omitempty"` } type EphemeralConfiguration struct { diff --git a/api/v1/zz_generated.deepcopy.go b/api/v1/zz_generated.deepcopy.go index c450cd2..db79d76 100644 --- a/api/v1/zz_generated.deepcopy.go +++ b/api/v1/zz_generated.deepcopy.go @@ -296,6 +296,13 @@ func (in *PrefectServerSpec) DeepCopyInto(out *PrefectServerSpec) { (*out)[key] = val } } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrefectServerSpec. diff --git a/deploy/charts/prefect-operator/crds/prefect.io_prefectservers.yaml b/deploy/charts/prefect-operator/crds/prefect.io_prefectservers.yaml index b19c249..c277467 100644 --- a/deploy/charts/prefect-operator/crds/prefect.io_prefectservers.yaml +++ b/deploy/charts/prefect-operator/crds/prefect.io_prefectservers.yaml @@ -1482,6 +1482,12 @@ spec: description: MigrationJobLabels defines additional labels to add to the migration Job type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector defines the node selector for the Prefect + Server Deployment and migration Job + type: object postgres: description: |- Postgres defines whether the server will be deployed with a PostgreSQL backend connecting to the diff --git a/internal/controller/prefectserver_controller.go b/internal/controller/prefectserver_controller.go index 2b30357..a601dab 100644 --- a/internal/controller/prefectserver_controller.go +++ b/internal/controller/prefectserver_controller.go @@ -339,6 +339,7 @@ func (r *PrefectServerReconciler) ephemeralDeploymentSpec(server *prefectiov1.Pr Labels: server.ServerLabels(), }, Spec: corev1.PodSpec{ + NodeSelector: server.Spec.NodeSelector, Volumes: []corev1.Volume{ { Name: "prefect-data", @@ -419,6 +420,7 @@ func (r *PrefectServerReconciler) sqliteDeploymentSpec(server *prefectiov1.Prefe Labels: server.ServerLabels(), }, Spec: corev1.PodSpec{ + NodeSelector: server.Spec.NodeSelector, Volumes: []corev1.Volume{ { Name: "prefect-data", @@ -486,6 +488,7 @@ func (r *PrefectServerReconciler) postgresDeploymentSpec(server *prefectiov1.Pre Labels: server.ServerLabels(), }, Spec: corev1.PodSpec{ + NodeSelector: server.Spec.NodeSelector, InitContainers: []corev1.Container{ r.initContainerWaitForPostgres(server), }, @@ -534,6 +537,7 @@ func (r *PrefectServerReconciler) postgresMigrationJob(server *prefectiov1.Prefe Labels: server.MigrationJobLabels(), }, Spec: corev1.PodSpec{ + NodeSelector: server.Spec.NodeSelector, InitContainers: []corev1.Container{ r.initContainerWaitForPostgres(server), }, diff --git a/internal/controller/prefectserver_controller_test.go b/internal/controller/prefectserver_controller_test.go index 4b2610e..95eb4ed 100644 --- a/internal/controller/prefectserver_controller_test.go +++ b/internal/controller/prefectserver_controller_test.go @@ -190,6 +190,9 @@ var _ = Describe("PrefectServer controller", func() { "some": "additional-label", "another": "extra-label", }, + NodeSelector: map[string]string{ + "some": "node-selector", + }, }, } Expect(k8sClient.Create(ctx, prefectserver)).To(Succeed()) @@ -377,6 +380,10 @@ var _ = Describe("PrefectServer controller", func() { FailureThreshold: 2, })) }) + + It("should have the correct nodeSelector value", func() { + Expect(deployment.Spec.Template.Spec.NodeSelector).To(HaveKeyWithValue("some", "node-selector")) + }) }) Describe("the Service", func() { @@ -1192,6 +1199,9 @@ var _ = Describe("PrefectServer controller", func() { "some": "additional-label-for-migrations", "another": "extra-label-for-migrations", }, + NodeSelector: map[string]string{ + "some": "node-selector", + }, }, } Expect(k8sClient.Create(ctx, prefectserver)).To(Succeed()) @@ -1331,6 +1341,10 @@ var _ = Describe("PrefectServer controller", func() { {Name: "PREFECT_API_DATABASE_MIGRATE_ON_START", Value: "False"}, })) }) + + It("should have the correct nodeSelector value", func() { + Expect(migrateJob.Spec.Template.Spec.NodeSelector).To(HaveKeyWithValue("some", "node-selector")) + }) }) })