finish up introducing MajorVersionUpgradeTeamWhitelist option

This commit is contained in:
Felix Kunde
2021-11-25 12:26:27 +01:00
parent 8705ab49f9
commit a0cba4b698
11 changed files with 37 additions and 13 deletions
+8
View File
@@ -1019,6 +1019,14 @@ var OperatorConfigCRDResourceValidation = apiextv1.CustomResourceValidation{
"major_version_upgrade_mode": {
Type: "string",
},
"major_version_upgrade_team_whitelist": {
Type: "array",
Items: &apiextv1.JSONSchemaPropsOrArray{
Schema: &apiextv1.JSONSchemaProps{
Type: "string",
},
},
},
"minimal_major_version": {
Type: "string",
},
@@ -43,9 +43,10 @@ type PostgresUsersConfiguration struct {
// MajorVersionUpgradeConfiguration defines how to execute major version upgrades of Postgres.
type MajorVersionUpgradeConfiguration struct {
MajorVersionUpgradeMode string `json:"major_version_upgrade_mode" default:"off"` // off - no actions, manual - manifest triggers action, full - manifest and minimal version violation trigger upgrade
MinimalMajorVersion string `json:"minimal_major_version" default:"9.6"`
TargetMajorVersion string `json:"target_major_version" default:"14"`
MajorVersionUpgradeMode string `json:"major_version_upgrade_mode" default:"off"` // off - no actions, manual - manifest triggers action, full - manifest and minimal version violation trigger upgrade
MajorVersionUpgradeTeamWhitelist []string `json:"major_version_upgrade_team_whitelist,omitempty"`
MinimalMajorVersion string `json:"minimal_major_version" default:"9.6"`
TargetMajorVersion string `json:"target_major_version" default:"14"`
}
// KubernetesMetaConfiguration defines k8s conf required for all Postgres clusters and the operator itself
+4 -9
View File
@@ -4,6 +4,7 @@ import (
"fmt"
"github.com/zalando/postgres-operator/pkg/spec"
"github.com/zalando/postgres-operator/pkg/util"
v1 "k8s.io/api/core/v1"
)
@@ -44,20 +45,14 @@ func (c *Cluster) GetDesiredMajorVersion() string {
return c.Spec.PgVersion
}
func isTeamWhitelisted(c *Cluster) bool {
func (c *Cluster) isTeamWhitelisted(owningTeam string) bool {
whitelistedTeams := c.OpConfig.MajorVersionUpgradeTeamWhitelist
owningTeam := c.Spec.TeamID
if len(whitelistedTeams) == 0 {
return false
}
for _, t := range whitelistedTeams {
if t == owningTeam {
return true
}
}
return false
return util.SliceContains(whitelistedTeams, owningTeam)
}
/*
@@ -68,7 +63,7 @@ func isTeamWhitelisted(c *Cluster) bool {
*/
func (c *Cluster) majorVersionUpgrade() error {
if c.OpConfig.MajorVersionUpgradeMode == "off" && !isTeamWhitelisted(c) {
if c.OpConfig.MajorVersionUpgradeMode == "off" && !c.isTeamWhitelisted(c.Spec.TeamID) {
return nil
}
+1
View File
@@ -56,6 +56,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur
// major version upgrade config
result.MajorVersionUpgradeMode = util.Coalesce(fromCRD.MajorVersionUpgrade.MajorVersionUpgradeMode, "off")
result.MajorVersionUpgradeTeamWhitelist = fromCRD.MajorVersionUpgrade.MajorVersionUpgradeTeamWhitelist
result.MinimalMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.MinimalMajorVersion, "9.6")
result.TargetMajorVersion = util.Coalesce(fromCRD.MajorVersionUpgrade.TargetMajorVersion, "14")
+1 -1
View File
@@ -212,9 +212,9 @@ type Config struct {
EnablePgVersionEnvVar bool `name:"enable_pgversion_env_var" default:"true"`
EnableSpiloWalPathCompat bool `name:"enable_spilo_wal_path_compat" default:"false"`
MajorVersionUpgradeMode string `name:"major_version_upgrade_mode" default:"off"`
MajorVersionUpgradeTeamWhitelist []string `name:"major_version_upgrade_team_whitelist" default:""`
MinimalMajorVersion string `name:"minimal_major_version" default:"9.6"`
TargetMajorVersion string `name:"target_major_version" default:"14"`
MajorVersionUpgradeTeamWhitelist []string `name:"major_version_upgrade_team_whitelist" default:""`
}
// MustMarshal marshals the config or panics