finish up introducing MajorVersionUpgradeTeamWhitelist option
This commit is contained in:
		
							parent
							
								
									8705ab49f9
								
							
						
					
					
						commit
						a0cba4b698
					
				|  | @ -131,6 +131,10 @@ spec: | |||
|                   major_version_upgrade_mode: | ||||
|                     type: string | ||||
|                     default: "off" | ||||
|                   major_version_upgrade_team_whitelist: | ||||
|                     type: array | ||||
|                     items: | ||||
|                       type: string | ||||
|                   minimal_major_version: | ||||
|                     type: string | ||||
|                     default: "9.6" | ||||
|  |  | |||
|  | @ -64,6 +64,10 @@ configUsers: | |||
| configMajorVersionUpgrade: | ||||
|   # "off": no upgrade, "manual": manifest triggers action, "full": minimal version violation triggers too | ||||
|   major_version_upgrade_mode: "off" | ||||
|   # upgrades will only be carried out for clusters of listed teams | ||||
| 	# major_version_upgrade_team_whitelist: | ||||
|   # - acid | ||||
| 
 | ||||
|   # minimal Postgres major version that will not automatically be upgraded | ||||
|   minimal_major_version: "9.6" | ||||
|   # target Postgres major version when upgrading clusters automatically | ||||
|  |  | |||
|  | @ -184,6 +184,10 @@ CRD-configuration, they are grouped under the `major_version_upgrade` key. | |||
|   Note, that with all three modes increasing the version in the manifest will | ||||
|   trigger a rolling update of the pods. The default is `"off"`. | ||||
| 
 | ||||
| * **major_version_upgrade_team_whitelist** | ||||
|   Upgrades will only be carried out for clusters of listed teams. The default | ||||
|   is empty which means a team filter is not applied. | ||||
| 
 | ||||
| * **minimal_major_version** | ||||
|   The minimal Postgres major version that will not automatically be upgraded | ||||
|   when `major_version_upgrade_mode` is set to `"full"`. The default is `"9.6"`. | ||||
|  |  | |||
|  | @ -77,6 +77,7 @@ data: | |||
|   logical_backup_s3_sse: "AES256" | ||||
|   logical_backup_schedule: "30 00 * * *" | ||||
|   major_version_upgrade_mode: "manual" | ||||
|   # major_version_upgrade_team_whitelist: "" | ||||
|   master_dns_name_format: "{cluster}.{team}.{hostedzone}" | ||||
|   # master_pod_move_timeout: 20m | ||||
|   # max_instances: "-1" | ||||
|  |  | |||
|  | @ -129,6 +129,10 @@ spec: | |||
|                   major_version_upgrade_mode: | ||||
|                     type: string | ||||
|                     default: "off" | ||||
|                   major_version_upgrade_team_whitelist: | ||||
|                     type: array | ||||
|                     items: | ||||
|                       type: string | ||||
|                   minimal_major_version: | ||||
|                     type: string | ||||
|                     default: "9.6" | ||||
|  |  | |||
|  | @ -28,6 +28,8 @@ configuration: | |||
|     super_username: postgres | ||||
|   major_version_upgrade: | ||||
|     major_version_upgrade_mode: "off" | ||||
|     # major_version_upgrade_team_whitelist: | ||||
|     # - acid | ||||
|     minimal_major_version: "9.6" | ||||
|     target_major_version: "14" | ||||
|   kubernetes: | ||||
|  |  | |||
|  | @ -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,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 | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -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") | ||||
| 
 | ||||
|  |  | |||
|  | @ -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
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue