From 33d90c34dc6fa0dc3f915497564a20d838c43409 Mon Sep 17 00:00:00 2001 From: Tommy Hughes Date: Mon, 3 Feb 2025 10:13:10 -0600 Subject: [PATCH] operator api struct organization Signed-off-by: Tommy Hughes --- .../api/v1alpha1/featurestore_types.go | 65 +++++-------- .../api/v1alpha1/zz_generated.deepcopy.go | 93 ++++++++----------- infra/feast-operator/docs/api/markdown/ref.md | 83 +++++++++-------- .../featurestore_controller_loglevel_test.go | 16 +++- ...featurestore_controller_test_utils_test.go | 36 +++---- .../featurestore_controller_tls_test.go | 24 +++-- .../controller/services/repo_config_test.go | 2 +- .../internal/controller/services/services.go | 22 ++--- .../internal/controller/services/tls_test.go | 22 +++-- .../internal/controller/services/util.go | 10 +- 10 files changed, 186 insertions(+), 187 deletions(-) diff --git a/infra/feast-operator/api/v1alpha1/featurestore_types.go b/infra/feast-operator/api/v1alpha1/featurestore_types.go index 0283c53c96..83ba206774 100644 --- a/infra/feast-operator/api/v1alpha1/featurestore_types.go +++ b/infra/feast-operator/api/v1alpha1/featurestore_types.go @@ -74,7 +74,7 @@ type FeatureStoreServices struct { OfflineStore *OfflineStore `json:"offlineStore,omitempty"` OnlineStore *OnlineStore `json:"onlineStore,omitempty"` Registry *Registry `json:"registry,omitempty"` - UI *UIService `json:"ui,omitempty"` + UI *ServerConfigs `json:"ui,omitempty"` DeploymentStrategy *appsv1.DeploymentStrategy `json:"deploymentStrategy,omitempty"` // Disable the 'feast repo initialization' initContainer DisableInitContainers bool `json:"disableInitContainers,omitempty"` @@ -82,13 +82,8 @@ type FeatureStoreServices struct { // OfflineStore configures the deployed offline store service type OfflineStore struct { - ServiceConfigs `json:",inline"` - Persistence *OfflineStorePersistence `json:"persistence,omitempty"` - TLS *TlsConfigs `json:"tls,omitempty"` - // LogLevel sets the logging level for the offline store service - // Allowed values: "debug", "info", "warning", "error", "critical". - // +kubebuilder:validation:Enum=debug;info;warning;error;critical - LogLevel string `json:"logLevel,omitempty"` + ServerConfigs `json:",inline"` + Persistence *OfflineStorePersistence `json:"persistence,omitempty"` } // OfflineStorePersistence configures the persistence settings for the offline store service @@ -135,13 +130,8 @@ var ValidOfflineStoreDBStorePersistenceTypes = []string{ // OnlineStore configures the deployed online store service type OnlineStore struct { - ServiceConfigs `json:",inline"` - Persistence *OnlineStorePersistence `json:"persistence,omitempty"` - TLS *TlsConfigs `json:"tls,omitempty"` - // LogLevel sets the logging level for the online store service - // Allowed values: "debug", "info", "warning", "error", "critical". - // +kubebuilder:validation:Enum=debug;info;warning;error;critical - LogLevel string `json:"logLevel,omitempty"` + ServerConfigs `json:",inline"` + Persistence *OnlineStorePersistence `json:"persistence,omitempty"` } // OnlineStorePersistence configures the persistence settings for the online store service @@ -191,13 +181,8 @@ var ValidOnlineStoreDBStorePersistenceTypes = []string{ // LocalRegistryConfig configures the deployed registry service type LocalRegistryConfig struct { - ServiceConfigs `json:",inline"` - Persistence *RegistryPersistence `json:"persistence,omitempty"` - TLS *TlsConfigs `json:"tls,omitempty"` - // LogLevel sets the logging level for the registry service - // Allowed values: "debug", "info", "warning", "error", "critical". - // +kubebuilder:validation:Enum=debug;info;warning;error;critical - LogLevel string `json:"logLevel,omitempty"` + ServerConfigs `json:",inline"` + Persistence *RegistryPersistence `json:"persistence,omitempty"` } // RegistryPersistence configures the persistence settings for the registry service @@ -282,16 +267,6 @@ type RemoteRegistryConfig struct { TLS *TlsRemoteRegistryConfigs `json:"tls,omitempty"` } -// UIService configures the deployed Feast UI service -type UIService struct { - ServiceConfigs `json:",inline"` - TLS *TlsConfigs `json:"tls,omitempty"` - // LogLevel sets the logging level for the UI service - // Allowed values: "debug", "info", "warning", "error", "critical". - // +kubebuilder:validation:Enum=debug;info;warning;error;critical - LogLevel string `json:"logLevel,omitempty"` -} - // FeatureStoreRef defines which existing FeatureStore's registry should be used type FeatureStoreRef struct { // Name of the FeatureStore @@ -300,19 +275,29 @@ type FeatureStoreRef struct { Namespace string `json:"namespace,omitempty"` } -// ServiceConfigs k8s container settings -type ServiceConfigs struct { - DefaultConfigs `json:",inline"` - OptionalConfigs `json:",inline"` +// ServerConfigs server-related configurations for a feast service +type ServerConfigs struct { + ContainerConfigs `json:",inline"` + TLS *TlsConfigs `json:"tls,omitempty"` + // LogLevel sets the logging level for the server + // Allowed values: "debug", "info", "warning", "error", "critical". + // +kubebuilder:validation:Enum=debug;info;warning;error;critical + LogLevel string `json:"logLevel,omitempty"` +} + +// ContainerConfigs k8s container settings for the server +type ContainerConfigs struct { + DefaultCtrConfigs `json:",inline"` + OptionalCtrConfigs `json:",inline"` } -// DefaultConfigs k8s container settings that are applied by default -type DefaultConfigs struct { +// DefaultCtrConfigs k8s container settings that are applied by default +type DefaultCtrConfigs struct { Image *string `json:"image,omitempty"` } -// OptionalConfigs k8s container settings that are optional -type OptionalConfigs struct { +// OptionalCtrConfigs k8s container settings that are optional +type OptionalCtrConfigs struct { Env *[]corev1.EnvVar `json:"env,omitempty"` EnvFrom *[]corev1.EnvFromSource `json:"envFrom,omitempty"` ImagePullPolicy *corev1.PullPolicy `json:"imagePullPolicy,omitempty"` diff --git a/infra/feast-operator/api/v1alpha1/zz_generated.deepcopy.go b/infra/feast-operator/api/v1alpha1/zz_generated.deepcopy.go index 815b6397fb..cb5a4eb34b 100644 --- a/infra/feast-operator/api/v1alpha1/zz_generated.deepcopy.go +++ b/infra/feast-operator/api/v1alpha1/zz_generated.deepcopy.go @@ -53,7 +53,24 @@ func (in *AuthzConfig) DeepCopy() *AuthzConfig { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DefaultConfigs) DeepCopyInto(out *DefaultConfigs) { +func (in *ContainerConfigs) DeepCopyInto(out *ContainerConfigs) { + *out = *in + in.DefaultCtrConfigs.DeepCopyInto(&out.DefaultCtrConfigs) + in.OptionalCtrConfigs.DeepCopyInto(&out.OptionalCtrConfigs) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerConfigs. +func (in *ContainerConfigs) DeepCopy() *ContainerConfigs { + if in == nil { + return nil + } + out := new(ContainerConfigs) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DefaultCtrConfigs) DeepCopyInto(out *DefaultCtrConfigs) { *out = *in if in.Image != nil { in, out := &in.Image, &out.Image @@ -62,12 +79,12 @@ func (in *DefaultConfigs) DeepCopyInto(out *DefaultConfigs) { } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DefaultConfigs. -func (in *DefaultConfigs) DeepCopy() *DefaultConfigs { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DefaultCtrConfigs. +func (in *DefaultCtrConfigs) DeepCopy() *DefaultCtrConfigs { if in == nil { return nil } - out := new(DefaultConfigs) + out := new(DefaultCtrConfigs) in.DeepCopyInto(out) return out } @@ -166,7 +183,7 @@ func (in *FeatureStoreServices) DeepCopyInto(out *FeatureStoreServices) { } if in.UI != nil { in, out := &in.UI, &out.UI - *out = new(UIService) + *out = new(ServerConfigs) (*in).DeepCopyInto(*out) } if in.DeploymentStrategy != nil { @@ -258,17 +275,12 @@ func (in *KubernetesAuthz) DeepCopy() *KubernetesAuthz { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LocalRegistryConfig) DeepCopyInto(out *LocalRegistryConfig) { *out = *in - in.ServiceConfigs.DeepCopyInto(&out.ServiceConfigs) + in.ServerConfigs.DeepCopyInto(&out.ServerConfigs) if in.Persistence != nil { in, out := &in.Persistence, &out.Persistence *out = new(RegistryPersistence) (*in).DeepCopyInto(*out) } - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = new(TlsConfigs) - (*in).DeepCopyInto(*out) - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalRegistryConfig. @@ -284,17 +296,12 @@ func (in *LocalRegistryConfig) DeepCopy() *LocalRegistryConfig { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OfflineStore) DeepCopyInto(out *OfflineStore) { *out = *in - in.ServiceConfigs.DeepCopyInto(&out.ServiceConfigs) + in.ServerConfigs.DeepCopyInto(&out.ServerConfigs) if in.Persistence != nil { in, out := &in.Persistence, &out.Persistence *out = new(OfflineStorePersistence) (*in).DeepCopyInto(*out) } - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = new(TlsConfigs) - (*in).DeepCopyInto(*out) - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OfflineStore. @@ -387,17 +394,12 @@ func (in *OidcAuthz) DeepCopy() *OidcAuthz { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OnlineStore) DeepCopyInto(out *OnlineStore) { *out = *in - in.ServiceConfigs.DeepCopyInto(&out.ServiceConfigs) + in.ServerConfigs.DeepCopyInto(&out.ServerConfigs) if in.Persistence != nil { in, out := &in.Persistence, &out.Persistence *out = new(OnlineStorePersistence) (*in).DeepCopyInto(*out) } - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = new(TlsConfigs) - (*in).DeepCopyInto(*out) - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OnlineStore. @@ -472,7 +474,7 @@ func (in *OnlineStorePersistence) DeepCopy() *OnlineStorePersistence { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OptionalConfigs) DeepCopyInto(out *OptionalConfigs) { +func (in *OptionalCtrConfigs) DeepCopyInto(out *OptionalCtrConfigs) { *out = *in if in.Env != nil { in, out := &in.Env, &out.Env @@ -508,12 +510,12 @@ func (in *OptionalConfigs) DeepCopyInto(out *OptionalConfigs) { } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionalConfigs. -func (in *OptionalConfigs) DeepCopy() *OptionalConfigs { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionalCtrConfigs. +func (in *OptionalCtrConfigs) DeepCopy() *OptionalCtrConfigs { if in == nil { return nil } - out := new(OptionalConfigs) + out := new(OptionalCtrConfigs) in.DeepCopyInto(out) return out } @@ -712,18 +714,22 @@ func (in *SecretKeyNames) DeepCopy() *SecretKeyNames { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceConfigs) DeepCopyInto(out *ServiceConfigs) { +func (in *ServerConfigs) DeepCopyInto(out *ServerConfigs) { *out = *in - in.DefaultConfigs.DeepCopyInto(&out.DefaultConfigs) - in.OptionalConfigs.DeepCopyInto(&out.OptionalConfigs) + in.ContainerConfigs.DeepCopyInto(&out.ContainerConfigs) + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = new(TlsConfigs) + (*in).DeepCopyInto(*out) + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceConfigs. -func (in *ServiceConfigs) DeepCopy() *ServiceConfigs { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServerConfigs. +func (in *ServerConfigs) DeepCopy() *ServerConfigs { if in == nil { return nil } - out := new(ServiceConfigs) + out := new(ServerConfigs) in.DeepCopyInto(out) return out } @@ -784,24 +790,3 @@ func (in *TlsRemoteRegistryConfigs) DeepCopy() *TlsRemoteRegistryConfigs { in.DeepCopyInto(out) return out } - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *UIService) DeepCopyInto(out *UIService) { - *out = *in - in.ServiceConfigs.DeepCopyInto(&out.ServiceConfigs) - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = new(TlsConfigs) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UIService. -func (in *UIService) DeepCopy() *UIService { - if in == nil { - return nil - } - out := new(UIService) - in.DeepCopyInto(out) - return out -} diff --git a/infra/feast-operator/docs/api/markdown/ref.md b/infra/feast-operator/docs/api/markdown/ref.md index 9d903d050a..e29ad08e9e 100644 --- a/infra/feast-operator/docs/api/markdown/ref.md +++ b/infra/feast-operator/docs/api/markdown/ref.md @@ -28,18 +28,39 @@ _Appears in:_ | `oidc` _[OidcAuthz](#oidcauthz)_ | | -#### DefaultConfigs +#### ContainerConfigs -DefaultConfigs k8s container settings that are applied by default +ContainerConfigs k8s container settings for the server _Appears in:_ - [LocalRegistryConfig](#localregistryconfig) - [OfflineStore](#offlinestore) - [OnlineStore](#onlinestore) -- [ServiceConfigs](#serviceconfigs) -- [UIService](#uiservice) +- [ServerConfigs](#serverconfigs) + +| Field | Description | +| --- | --- | +| `image` _string_ | | +| `env` _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core)_ | | +| `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | | +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | | +| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | | + + +#### DefaultCtrConfigs + + + +DefaultCtrConfigs k8s container settings that are applied by default + +_Appears in:_ +- [ContainerConfigs](#containerconfigs) +- [LocalRegistryConfig](#localregistryconfig) +- [OfflineStore](#offlinestore) +- [OnlineStore](#onlinestore) +- [ServerConfigs](#serverconfigs) | Field | Description | | --- | --- | @@ -92,7 +113,7 @@ _Appears in:_ | `offlineStore` _[OfflineStore](#offlinestore)_ | | | `onlineStore` _[OnlineStore](#onlinestore)_ | | | `registry` _[Registry](#registry)_ | | -| `ui` _[UIService](#uiservice)_ | | +| `ui` _[ServerConfigs](#serverconfigs)_ | | | `deploymentStrategy` _[DeploymentStrategy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstrategy-v1-apps)_ | | | `disableInitContainers` _boolean_ | Disable the 'feast repo initialization' initContainer | @@ -169,10 +190,10 @@ _Appears in:_ | `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | | | `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | | | `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | | -| `persistence` _[RegistryPersistence](#registrypersistence)_ | | | `tls` _[TlsConfigs](#tlsconfigs)_ | | -| `logLevel` _string_ | LogLevel sets the logging level for the registry service +| `logLevel` _string_ | LogLevel sets the logging level for the server Allowed values: "debug", "info", "warning", "error", "critical". | +| `persistence` _[RegistryPersistence](#registrypersistence)_ | | #### OfflineStore @@ -191,10 +212,10 @@ _Appears in:_ | `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | | | `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | | | `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | | -| `persistence` _[OfflineStorePersistence](#offlinestorepersistence)_ | | | `tls` _[TlsConfigs](#tlsconfigs)_ | | -| `logLevel` _string_ | LogLevel sets the logging level for the offline store service +| `logLevel` _string_ | LogLevel sets the logging level for the server Allowed values: "debug", "info", "warning", "error", "critical". | +| `persistence` _[OfflineStorePersistence](#offlinestorepersistence)_ | | #### OfflineStoreDBStorePersistence @@ -274,10 +295,10 @@ _Appears in:_ | `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | | | `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | | | `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | | -| `persistence` _[OnlineStorePersistence](#onlinestorepersistence)_ | | | `tls` _[TlsConfigs](#tlsconfigs)_ | | -| `logLevel` _string_ | LogLevel sets the logging level for the online store service +| `logLevel` _string_ | LogLevel sets the logging level for the server Allowed values: "debug", "info", "warning", "error", "critical". | +| `persistence` _[OnlineStorePersistence](#onlinestorepersistence)_ | | #### OnlineStoreDBStorePersistence @@ -326,18 +347,18 @@ _Appears in:_ | `store` _[OnlineStoreDBStorePersistence](#onlinestoredbstorepersistence)_ | | -#### OptionalConfigs +#### OptionalCtrConfigs -OptionalConfigs k8s container settings that are optional +OptionalCtrConfigs k8s container settings that are optional _Appears in:_ +- [ContainerConfigs](#containerconfigs) - [LocalRegistryConfig](#localregistryconfig) - [OfflineStore](#offlinestore) - [OnlineStore](#onlinestore) -- [ServiceConfigs](#serviceconfigs) -- [UIService](#uiservice) +- [ServerConfigs](#serverconfigs) | Field | Description | | --- | --- | @@ -446,17 +467,17 @@ _Appears in:_ | `tlsKey` _string_ | defaults to "tls.key" | -#### ServiceConfigs +#### ServerConfigs -ServiceConfigs k8s container settings +ServerConfigs server-related configurations for a feast service _Appears in:_ +- [FeatureStoreServices](#featurestoreservices) - [LocalRegistryConfig](#localregistryconfig) - [OfflineStore](#offlinestore) - [OnlineStore](#onlinestore) -- [UIService](#uiservice) | Field | Description | | --- | --- | @@ -465,6 +486,9 @@ _Appears in:_ | `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | | | `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | | | `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | | +| `tls` _[TlsConfigs](#tlsconfigs)_ | | +| `logLevel` _string_ | LogLevel sets the logging level for the server +Allowed values: "debug", "info", "warning", "error", "critical". | #### ServiceHostnames @@ -494,7 +518,7 @@ _Appears in:_ - [LocalRegistryConfig](#localregistryconfig) - [OfflineStore](#offlinestore) - [OnlineStore](#onlinestore) -- [UIService](#uiservice) +- [ServerConfigs](#serverconfigs) | Field | Description | | --- | --- | @@ -518,24 +542,3 @@ _Appears in:_ | `certName` _string_ | defines the configmap key name for the client TLS cert. | -#### UIService - - - -UIService configures the deployed Feast UI service - -_Appears in:_ -- [FeatureStoreServices](#featurestoreservices) - -| Field | Description | -| --- | --- | -| `image` _string_ | | -| `env` _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envvar-v1-core)_ | | -| `envFrom` _[EnvFromSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#envfromsource-v1-core)_ | | -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#pullpolicy-v1-core)_ | | -| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core)_ | | -| `tls` _[TlsConfigs](#tlsconfigs)_ | | -| `logLevel` _string_ | LogLevel sets the logging level for the UI service -Allowed values: "debug", "info", "warning", "error", "critical". | - - diff --git a/infra/feast-operator/internal/controller/featurestore_controller_loglevel_test.go b/infra/feast-operator/internal/controller/featurestore_controller_loglevel_test.go index 4588538890..f3500dec08 100644 --- a/infra/feast-operator/internal/controller/featurestore_controller_loglevel_test.go +++ b/infra/feast-operator/internal/controller/featurestore_controller_loglevel_test.go @@ -61,16 +61,22 @@ var _ = Describe("FeatureStore Controller - Feast service LogLevel", func() { Services: &feastdevv1alpha1.FeatureStoreServices{ Registry: &feastdevv1alpha1.Registry{ Local: &feastdevv1alpha1.LocalRegistryConfig{ - LogLevel: "error", + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + LogLevel: "error", + }, }, }, OnlineStore: &feastdevv1alpha1.OnlineStore{ - LogLevel: "debug", + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + LogLevel: "debug", + }, }, OfflineStore: &feastdevv1alpha1.OfflineStore{ - LogLevel: "info", + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + LogLevel: "info", + }, }, - UI: &feastdevv1alpha1.UIService{ + UI: &feastdevv1alpha1.ServerConfigs{ LogLevel: "info", }, }, @@ -193,7 +199,7 @@ var _ = Describe("FeatureStore Controller - Feast service LogLevel", func() { }, OnlineStore: &feastdevv1alpha1.OnlineStore{}, OfflineStore: &feastdevv1alpha1.OfflineStore{}, - UI: &feastdevv1alpha1.UIService{}, + UI: &feastdevv1alpha1.ServerConfigs{}, } Expect(k8sClient.Update(ctx, resource)).To(Succeed()) diff --git a/infra/feast-operator/internal/controller/featurestore_controller_test_utils_test.go b/infra/feast-operator/internal/controller/featurestore_controller_test_utils_test.go index 0e003304a5..e49ba3a920 100644 --- a/infra/feast-operator/internal/controller/featurestore_controller_test_utils_test.go +++ b/infra/feast-operator/internal/controller/featurestore_controller_test_utils_test.go @@ -105,31 +105,35 @@ func createFeatureStoreResource(resourceName string, image string, pullPolicy co FeastProject: feastProject, Services: &feastdevv1alpha1.FeatureStoreServices{ OfflineStore: &feastdevv1alpha1.OfflineStore{ - ServiceConfigs: feastdevv1alpha1.ServiceConfigs{ - OptionalConfigs: feastdevv1alpha1.OptionalConfigs{ - EnvFrom: envFromVar, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + ContainerConfigs: feastdevv1alpha1.ContainerConfigs{ + OptionalCtrConfigs: feastdevv1alpha1.OptionalCtrConfigs{ + EnvFrom: envFromVar, + }, }, }, }, OnlineStore: &feastdevv1alpha1.OnlineStore{ - ServiceConfigs: feastdevv1alpha1.ServiceConfigs{ - DefaultConfigs: feastdevv1alpha1.DefaultConfigs{ - Image: &image, - }, - OptionalConfigs: feastdevv1alpha1.OptionalConfigs{ - Env: envVars, - EnvFrom: envFromVar, - ImagePullPolicy: &pullPolicy, - Resources: &corev1.ResourceRequirements{}, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + ContainerConfigs: feastdevv1alpha1.ContainerConfigs{ + DefaultCtrConfigs: feastdevv1alpha1.DefaultCtrConfigs{ + Image: &image, + }, + OptionalCtrConfigs: feastdevv1alpha1.OptionalCtrConfigs{ + Env: envVars, + EnvFrom: envFromVar, + ImagePullPolicy: &pullPolicy, + Resources: &corev1.ResourceRequirements{}, + }, }, }, }, - UI: &feastdevv1alpha1.UIService{ - ServiceConfigs: feastdevv1alpha1.ServiceConfigs{ - DefaultConfigs: feastdevv1alpha1.DefaultConfigs{ + UI: &feastdevv1alpha1.ServerConfigs{ + ContainerConfigs: feastdevv1alpha1.ContainerConfigs{ + DefaultCtrConfigs: feastdevv1alpha1.DefaultCtrConfigs{ Image: &image, }, - OptionalConfigs: feastdevv1alpha1.OptionalConfigs{ + OptionalCtrConfigs: feastdevv1alpha1.OptionalCtrConfigs{ Env: envVars, EnvFrom: envFromVar, ImagePullPolicy: &pullPolicy, diff --git a/infra/feast-operator/internal/controller/featurestore_controller_tls_test.go b/infra/feast-operator/internal/controller/featurestore_controller_tls_test.go index c0b5f8c68d..76298ce40a 100644 --- a/infra/feast-operator/internal/controller/featurestore_controller_tls_test.go +++ b/infra/feast-operator/internal/controller/featurestore_controller_tls_test.go @@ -71,17 +71,23 @@ var _ = Describe("FeatureStore Controller - Feast service TLS", func() { FeastProject: feastProject, Services: &feastdevv1alpha1.FeatureStoreServices{ OnlineStore: &feastdevv1alpha1.OnlineStore{ - TLS: tlsConfigs, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + TLS: tlsConfigs, + }, }, OfflineStore: &feastdevv1alpha1.OfflineStore{ - TLS: tlsConfigs, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + TLS: tlsConfigs, + }, }, Registry: &feastdevv1alpha1.Registry{ Local: &feastdevv1alpha1.LocalRegistryConfig{ - TLS: tlsConfigs, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + TLS: tlsConfigs, + }, }, }, - UI: &feastdevv1alpha1.UIService{ + UI: &feastdevv1alpha1.ServerConfigs{ TLS: tlsConfigs, }, }, @@ -350,12 +356,16 @@ var _ = Describe("FeatureStore Controller - Feast service TLS", func() { FeastProject: feastProject, Services: &feastdevv1alpha1.FeatureStoreServices{ OnlineStore: &feastdevv1alpha1.OnlineStore{ - TLS: &feastdevv1alpha1.TlsConfigs{ - Disable: &disable, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + TLS: &feastdevv1alpha1.TlsConfigs{ + Disable: &disable, + }, }, }, OfflineStore: &feastdevv1alpha1.OfflineStore{ - TLS: tlsConfigs, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + TLS: tlsConfigs, + }, }, Registry: &feastdevv1alpha1.Registry{ Remote: &feastdevv1alpha1.RemoteRegistryConfig{ diff --git a/infra/feast-operator/internal/controller/services/repo_config_test.go b/infra/feast-operator/internal/controller/services/repo_config_test.go index 3d9ecc5453..0ed0fb62e0 100644 --- a/infra/feast-operator/internal/controller/services/repo_config_test.go +++ b/infra/feast-operator/internal/controller/services/repo_config_test.go @@ -371,7 +371,7 @@ func minimalFeatureStoreWithAllServices() *feastdevv1alpha1.FeatureStore { OfflineStore: &feastdevv1alpha1.OfflineStore{}, OnlineStore: &feastdevv1alpha1.OnlineStore{}, Registry: &feastdevv1alpha1.Registry{}, - UI: &feastdevv1alpha1.UIService{}, + UI: &feastdevv1alpha1.ServerConfigs{}, } return feast } diff --git a/infra/feast-operator/internal/controller/services/services.go b/infra/feast-operator/internal/controller/services/services.go index 5a2ed7aa4e..4bf37e86db 100644 --- a/infra/feast-operator/internal/controller/services/services.go +++ b/infra/feast-operator/internal/controller/services/services.go @@ -381,12 +381,12 @@ func (feast *FeastServices) setContainers(podSpec *corev1.PodSpec) error { func (feast *FeastServices) setContainer(containers *[]corev1.Container, feastType FeastServiceType, fsYamlB64 string) { tls := feast.getTlsConfigs(feastType) - serviceConfigs := feast.getServiceConfigs(feastType) - defaultServiceConfigs := serviceConfigs.DefaultConfigs + containerConfigs := feast.getContainerConfigs(feastType) + defaultCtrConfigs := containerConfigs.DefaultCtrConfigs probeHandler := getProbeHandler(feastType, tls) container := &corev1.Container{ Name: string(feastType), - Image: *defaultServiceConfigs.Image, + Image: *defaultCtrConfigs.Image, WorkingDir: getOfflineMountPath(feast.Handler.FeatureStore) + "/" + feast.Handler.FeatureStore.Status.Applied.FeastProject + FeatureRepoDir, Command: feast.getContainerCommand(feastType), Ports: []corev1.ContainerPort{ @@ -417,7 +417,7 @@ func (feast *FeastServices) setContainer(containers *[]corev1.Container, feastTy PeriodSeconds: 10, }, } - applyOptionalContainerConfigs(container, serviceConfigs.OptionalConfigs) + applyOptionalCtrConfigs(container, containerConfigs.OptionalCtrConfigs) *containers = append(*containers, *container) } @@ -554,27 +554,27 @@ func (feast *FeastServices) createNewPVC(pvcCreate *feastdevv1alpha1.PvcCreate, return pvc, controllerutil.SetControllerReference(feast.Handler.FeatureStore, pvc, feast.Handler.Scheme) } -func (feast *FeastServices) getServiceConfigs(feastType FeastServiceType) feastdevv1alpha1.ServiceConfigs { +func (feast *FeastServices) getContainerConfigs(feastType FeastServiceType) feastdevv1alpha1.ContainerConfigs { appliedServices := feast.Handler.FeatureStore.Status.Applied.Services switch feastType { case OfflineFeastType: if feast.isOfflinStore() { - return appliedServices.OfflineStore.ServiceConfigs + return appliedServices.OfflineStore.ServerConfigs.ContainerConfigs } case OnlineFeastType: if feast.isOnlinStore() { - return appliedServices.OnlineStore.ServiceConfigs + return appliedServices.OnlineStore.ServerConfigs.ContainerConfigs } case RegistryFeastType: if feast.isLocalRegistry() { - return appliedServices.Registry.Local.ServiceConfigs + return appliedServices.Registry.Local.ServerConfigs.ContainerConfigs } case UIFeastType: if feast.isUI() { - return appliedServices.UI.ServiceConfigs + return appliedServices.UI.ContainerConfigs } } - return feastdevv1alpha1.ServiceConfigs{} + return feastdevv1alpha1.ContainerConfigs{} } func (feast *FeastServices) getLogLevelForType(feastType FeastServiceType) *string { @@ -805,7 +805,7 @@ func (feast *FeastServices) initRoute(feastType FeastServiceType) *routev1.Route return route } -func applyOptionalContainerConfigs(container *corev1.Container, optionalConfigs feastdevv1alpha1.OptionalConfigs) { +func applyOptionalCtrConfigs(container *corev1.Container, optionalConfigs feastdevv1alpha1.OptionalCtrConfigs) { if optionalConfigs.Env != nil { container.Env = envOverride(container.Env, *optionalConfigs.Env) } diff --git a/infra/feast-operator/internal/controller/services/tls_test.go b/infra/feast-operator/internal/controller/services/tls_test.go index 2fb58c173b..22102dfb7d 100644 --- a/infra/feast-operator/internal/controller/services/tls_test.go +++ b/infra/feast-operator/internal/controller/services/tls_test.go @@ -164,17 +164,21 @@ var _ = Describe("TLS Config", func() { feast.Handler.FeatureStore = minimalFeatureStore() feast.Handler.FeatureStore.Spec.Services = &feastdevv1alpha1.FeatureStoreServices{ OnlineStore: &feastdevv1alpha1.OnlineStore{ - TLS: &feastdevv1alpha1.TlsConfigs{}, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + TLS: &feastdevv1alpha1.TlsConfigs{}, + }, }, - UI: &feastdevv1alpha1.UIService{ + UI: &feastdevv1alpha1.ServerConfigs{ TLS: &feastdevv1alpha1.TlsConfigs{}, }, Registry: &feastdevv1alpha1.Registry{ Local: &feastdevv1alpha1.LocalRegistryConfig{ - TLS: &feastdevv1alpha1.TlsConfigs{ - SecretRef: &corev1.LocalObjectReference{}, - SecretKeyNames: feastdevv1alpha1.SecretKeyNames{ - TlsCrt: "test.crt", + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + TLS: &feastdevv1alpha1.TlsConfigs{ + SecretRef: &corev1.LocalObjectReference{}, + SecretKeyNames: feastdevv1alpha1.SecretKeyNames{ + TlsCrt: "test.crt", + }, }, }, }, @@ -219,8 +223,10 @@ var _ = Describe("TLS Config", func() { } feast.Handler.FeatureStore.Spec.Services.Registry = &feastdevv1alpha1.Registry{ Local: &feastdevv1alpha1.LocalRegistryConfig{ - TLS: &feastdevv1alpha1.TlsConfigs{ - Disable: &disable, + ServerConfigs: feastdevv1alpha1.ServerConfigs{ + TLS: &feastdevv1alpha1.TlsConfigs{ + Disable: &disable, + }, }, }, } diff --git a/infra/feast-operator/internal/controller/services/util.go b/infra/feast-operator/internal/controller/services/util.go index 84218c47fd..fc6f57c780 100644 --- a/infra/feast-operator/internal/controller/services/util.go +++ b/infra/feast-operator/internal/controller/services/util.go @@ -117,7 +117,7 @@ func ApplyDefaultsToStatus(cr *feastdevv1alpha1.FeatureStore) { ensurePVCDefaults(services.Registry.Local.Persistence.FilePersistence.PvcConfig, RegistryFeastType) } - setServiceDefaultConfigs(&services.Registry.Local.ServiceConfigs.DefaultConfigs) + setDefaultCtrConfigs(&services.Registry.Local.ServerConfigs.ContainerConfigs.DefaultCtrConfigs) } else if services.Registry.Remote.FeastRef != nil && len(services.Registry.Remote.FeastRef.Namespace) == 0 { services.Registry.Remote.FeastRef.Namespace = cr.Namespace } @@ -139,7 +139,7 @@ func ApplyDefaultsToStatus(cr *feastdevv1alpha1.FeatureStore) { ensurePVCDefaults(services.OfflineStore.Persistence.FilePersistence.PvcConfig, OfflineFeastType) } - setServiceDefaultConfigs(&services.OfflineStore.ServiceConfigs.DefaultConfigs) + setDefaultCtrConfigs(&services.OfflineStore.ServerConfigs.ContainerConfigs.DefaultCtrConfigs) } if services.OnlineStore != nil { @@ -159,15 +159,15 @@ func ApplyDefaultsToStatus(cr *feastdevv1alpha1.FeatureStore) { ensurePVCDefaults(services.OnlineStore.Persistence.FilePersistence.PvcConfig, OnlineFeastType) } - setServiceDefaultConfigs(&services.OnlineStore.ServiceConfigs.DefaultConfigs) + setDefaultCtrConfigs(&services.OnlineStore.ServerConfigs.ContainerConfigs.DefaultCtrConfigs) } if services.UI != nil { - setServiceDefaultConfigs(&services.UI.ServiceConfigs.DefaultConfigs) + setDefaultCtrConfigs(&services.UI.ContainerConfigs.DefaultCtrConfigs) } } -func setServiceDefaultConfigs(defaultConfigs *feastdevv1alpha1.DefaultConfigs) { +func setDefaultCtrConfigs(defaultConfigs *feastdevv1alpha1.DefaultCtrConfigs) { if defaultConfigs.Image == nil { img := getFeatureServerImage() defaultConfigs.Image = &img