diff --git a/apis/catalog/v1alpha1/mssql_version_helpers.go b/apis/catalog/v1alpha1/mssqlserver_version_helpers.go similarity index 100% rename from apis/catalog/v1alpha1/mssql_version_helpers.go rename to apis/catalog/v1alpha1/mssqlserver_version_helpers.go diff --git a/apis/catalog/v1alpha1/mssql_version_types.go b/apis/catalog/v1alpha1/mssqlserver_version_types.go similarity index 100% rename from apis/catalog/v1alpha1/mssql_version_types.go rename to apis/catalog/v1alpha1/mssqlserver_version_types.go diff --git a/apis/kubedb/constants.go b/apis/kubedb/constants.go index 19bfafa52f..c03f6bcae6 100644 --- a/apis/kubedb/constants.go +++ b/apis/kubedb/constants.go @@ -396,6 +396,7 @@ const ( EnvMSSQLAgentEnabled = "MSSQL_AGENT_ENABLED" EnvMSSQLSAUsername = "MSSQL_SA_USERNAME" EnvMSSQLSAPassword = "MSSQL_SA_PASSWORD" + EnvMSSQLVersion = "VERSION" // container related MSSQLContainerName = "mssql" diff --git a/apis/kubedb/v1alpha2/mssqlserver_helpers.go b/apis/kubedb/v1alpha2/mssqlserver_helpers.go index d8875b6cf1..b0aab5c907 100644 --- a/apis/kubedb/v1alpha2/mssqlserver_helpers.go +++ b/apis/kubedb/v1alpha2/mssqlserver_helpers.go @@ -88,7 +88,7 @@ func (m *MSSQLServer) ServiceName() string { } func (m *MSSQLServer) SecondaryServiceName() string { - return metautil.NameWithPrefix(m.ServiceName(), "secondary") + return metautil.NameWithPrefix(m.ServiceName(), string(SecondaryServiceAlias)) } func (m *MSSQLServer) GoverningServiceName() string { @@ -245,6 +245,7 @@ func (m *MSSQLServer) GetPersistentSecrets() []string { secrets = append(secrets, m.EndpointCertSecretName()) secrets = append(secrets, m.DbmLoginSecretName()) secrets = append(secrets, m.MasterKeySecretName()) + secrets = append(secrets, m.ConfigSecretName()) return secrets } diff --git a/apis/kubedb/v1alpha2/mssqlserver_webhook.go b/apis/kubedb/v1alpha2/mssqlserver_webhook.go index 4cd24ea3cc..a088f2b982 100644 --- a/apis/kubedb/v1alpha2/mssqlserver_webhook.go +++ b/apis/kubedb/v1alpha2/mssqlserver_webhook.go @@ -19,10 +19,13 @@ package v1alpha2 import ( "context" "errors" + "fmt" catalog "kubedb.dev/apimachinery/apis/catalog/v1alpha1" "kubedb.dev/apimachinery/apis/kubedb" + "gomodules.xyz/x/arrays" + core "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -156,6 +159,14 @@ func (m *MSSQLServer) ValidateCreateOrUpdate() field.ErrorList { m.Name, "spec.tls.issuerRef' is missing")) } + if m.Spec.PodTemplate != nil { + if err = ValidateMSSQLServerEnvVar(getMSSQLServerContainerEnvs(m), forbiddenMSSQLServerEnvVars, m.ResourceKind()); err != nil { + allErr = append(allErr, field.Invalid(field.NewPath("spec").Child("podTemplate"), + m.Name, + err.Error())) + } + } + err = mssqlValidateVolumes(m.Spec.PodTemplate) if err != nil { allErr = append(allErr, field.Invalid(field.NewPath("spec").Child("podTemplate").Child("spec").Child("volumes"), @@ -276,3 +287,31 @@ func mssqlValidateVolumesMountPaths(podTemplate *ofst.PodTemplateSpec) error { return nil } + +var forbiddenMSSQLServerEnvVars = []string{ + kubedb.EnvMSSQLSAUsername, + kubedb.EnvMSSQLSAPassword, + kubedb.EnvAcceptEula, + kubedb.EnvMSSQLEnableHADR, + kubedb.EnvMSSQLAgentEnabled, + kubedb.EnvMSSQLVersion, +} + +func getMSSQLServerContainerEnvs(m *MSSQLServer) []core.EnvVar { + for _, container := range m.Spec.PodTemplate.Spec.Containers { + if container.Name == kubedb.MSSQLContainerName { + return container.Env + } + } + return []core.EnvVar{} +} + +func ValidateMSSQLServerEnvVar(envs []core.EnvVar, forbiddenEnvs []string, resourceType string) error { + for _, env := range envs { + present, _ := arrays.Contains(forbiddenEnvs, env.Name) + if present { + return fmt.Errorf("environment variable %s is forbidden to use in %s spec", env.Name, resourceType) + } + } + return nil +} diff --git a/apis/kubedb/v1alpha2/types.go b/apis/kubedb/v1alpha2/types.go index 8e3d41bb26..61cb5e739b 100644 --- a/apis/kubedb/v1alpha2/types.go +++ b/apis/kubedb/v1alpha2/types.go @@ -124,7 +124,7 @@ const ( TerminationPolicyDoNotTerminate TerminationPolicy = "DoNotTerminate" ) -// +kubebuilder:validation:Enum=primary;standby;stats;dashboard +// +kubebuilder:validation:Enum=primary;standby;stats;dashboard;secondary type ServiceAlias string const ( @@ -132,6 +132,7 @@ const ( StandbyServiceAlias ServiceAlias = "standby" StatsServiceAlias ServiceAlias = "stats" DashboardServiceAlias ServiceAlias = "dashboard" + SecondaryServiceAlias ServiceAlias = "secondary" ) // +kubebuilder:validation:Enum=DNS;IP;IPv4;IPv6 diff --git a/crds/kubedb.com_cassandras.yaml b/crds/kubedb.com_cassandras.yaml index 1aa309c95f..c8ec727e8c 100644 --- a/crds/kubedb.com_cassandras.yaml +++ b/crds/kubedb.com_cassandras.yaml @@ -3168,6 +3168,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_clickhouses.yaml b/crds/kubedb.com_clickhouses.yaml index d18a05e722..d07e317a05 100644 --- a/crds/kubedb.com_clickhouses.yaml +++ b/crds/kubedb.com_clickhouses.yaml @@ -9720,6 +9720,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_druids.yaml b/crds/kubedb.com_druids.yaml index e665f73212..aa763ade60 100644 --- a/crds/kubedb.com_druids.yaml +++ b/crds/kubedb.com_druids.yaml @@ -1349,6 +1349,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_elasticsearches.yaml b/crds/kubedb.com_elasticsearches.yaml index 3cc06a8200..1c182edce8 100644 --- a/crds/kubedb.com_elasticsearches.yaml +++ b/crds/kubedb.com_elasticsearches.yaml @@ -43675,6 +43675,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_etcds.yaml b/crds/kubedb.com_etcds.yaml index a4a449436a..9a33935e85 100644 --- a/crds/kubedb.com_etcds.yaml +++ b/crds/kubedb.com_etcds.yaml @@ -3917,6 +3917,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_ferretdbs.yaml b/crds/kubedb.com_ferretdbs.yaml index 67a34ccfab..d7535e1779 100644 --- a/crds/kubedb.com_ferretdbs.yaml +++ b/crds/kubedb.com_ferretdbs.yaml @@ -3382,6 +3382,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_kafkas.yaml b/crds/kubedb.com_kafkas.yaml index db418404a8..3d1b52d0ed 100644 --- a/crds/kubedb.com_kafkas.yaml +++ b/crds/kubedb.com_kafkas.yaml @@ -19610,6 +19610,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_mariadbs.yaml b/crds/kubedb.com_mariadbs.yaml index 8b1028f32c..7ae0220a92 100644 --- a/crds/kubedb.com_mariadbs.yaml +++ b/crds/kubedb.com_mariadbs.yaml @@ -8899,6 +8899,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_memcacheds.yaml b/crds/kubedb.com_memcacheds.yaml index 03478b34df..d7ba8f193e 100644 --- a/crds/kubedb.com_memcacheds.yaml +++ b/crds/kubedb.com_memcacheds.yaml @@ -8033,6 +8033,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_mongodbs.yaml b/crds/kubedb.com_mongodbs.yaml index 027fc74ae9..681aa6e4dc 100644 --- a/crds/kubedb.com_mongodbs.yaml +++ b/crds/kubedb.com_mongodbs.yaml @@ -30038,6 +30038,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_mssqlservers.yaml b/crds/kubedb.com_mssqlservers.yaml index 01b8a92082..79876c0eeb 100644 --- a/crds/kubedb.com_mssqlservers.yaml +++ b/crds/kubedb.com_mssqlservers.yaml @@ -4621,6 +4621,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_mysqls.yaml b/crds/kubedb.com_mysqls.yaml index 97279dc2a8..60825e52f5 100644 --- a/crds/kubedb.com_mysqls.yaml +++ b/crds/kubedb.com_mysqls.yaml @@ -12182,6 +12182,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_perconaxtradbs.yaml b/crds/kubedb.com_perconaxtradbs.yaml index 5854c5b92b..6d674da13f 100644 --- a/crds/kubedb.com_perconaxtradbs.yaml +++ b/crds/kubedb.com_perconaxtradbs.yaml @@ -8882,6 +8882,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_pgbouncers.yaml b/crds/kubedb.com_pgbouncers.yaml index a88d7fac46..7fa68f8016 100644 --- a/crds/kubedb.com_pgbouncers.yaml +++ b/crds/kubedb.com_pgbouncers.yaml @@ -6650,6 +6650,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_pgpools.yaml b/crds/kubedb.com_pgpools.yaml index 92a975ccf4..f0d6349b40 100644 --- a/crds/kubedb.com_pgpools.yaml +++ b/crds/kubedb.com_pgpools.yaml @@ -3389,6 +3389,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_postgreses.yaml b/crds/kubedb.com_postgreses.yaml index 16fe0db8d7..5af5a699db 100644 --- a/crds/kubedb.com_postgreses.yaml +++ b/crds/kubedb.com_postgreses.yaml @@ -9182,6 +9182,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_proxysqls.yaml b/crds/kubedb.com_proxysqls.yaml index c5941a6f6f..9fe80bb971 100644 --- a/crds/kubedb.com_proxysqls.yaml +++ b/crds/kubedb.com_proxysqls.yaml @@ -6620,6 +6620,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_rabbitmqs.yaml b/crds/kubedb.com_rabbitmqs.yaml index 120ae96fc4..369687f7f2 100644 --- a/crds/kubedb.com_rabbitmqs.yaml +++ b/crds/kubedb.com_rabbitmqs.yaml @@ -3384,6 +3384,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_redises.yaml b/crds/kubedb.com_redises.yaml index 29920709cb..8a9b13a184 100644 --- a/crds/kubedb.com_redises.yaml +++ b/crds/kubedb.com_redises.yaml @@ -8905,6 +8905,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_redissentinels.yaml b/crds/kubedb.com_redissentinels.yaml index f0c0fd5453..eefb10d048 100644 --- a/crds/kubedb.com_redissentinels.yaml +++ b/crds/kubedb.com_redissentinels.yaml @@ -6584,6 +6584,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_singlestores.yaml b/crds/kubedb.com_singlestores.yaml index 4b1b0d8339..46f0979758 100644 --- a/crds/kubedb.com_singlestores.yaml +++ b/crds/kubedb.com_singlestores.yaml @@ -4381,6 +4381,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_solrs.yaml b/crds/kubedb.com_solrs.yaml index ecd6f8b676..0fe5771416 100644 --- a/crds/kubedb.com_solrs.yaml +++ b/crds/kubedb.com_solrs.yaml @@ -3385,6 +3385,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: diff --git a/crds/kubedb.com_zookeepers.yaml b/crds/kubedb.com_zookeepers.yaml index b8de8e77f8..633daecafc 100644 --- a/crds/kubedb.com_zookeepers.yaml +++ b/crds/kubedb.com_zookeepers.yaml @@ -3375,6 +3375,7 @@ spec: - standby - stats - dashboard + - secondary type: string metadata: properties: