func ApplySQLInstanceGCPDefaults()

in pkg/controller/direct/sql/sqlinstance_defaults.go [25:122]


func ApplySQLInstanceGCPDefaults(in *krm.SQLInstance, out *api.DatabaseInstance, actual *api.DatabaseInstance) {
	if in.Spec.InstanceType == nil {
		// GCP default InstanceType is CLOUD_SQL_INSTANCE.
		out.InstanceType = "CLOUD_SQL_INSTANCE"
	}
	if in.Spec.MaintenanceVersion == nil && actual != nil {
		// If desired maintenanceVersion is not specified, assume user wants the actual.
		out.MaintenanceVersion = actual.MaintenanceVersion
	}
	if in.Spec.Settings.ActivationPolicy == nil {
		// GCP default ActivationPolicy is ALWAYS.
		out.Settings.ActivationPolicy = "ALWAYS"
	}
	if in.Spec.Settings.AuthorizedGaeApplications == nil {
		// For some reason, GCP API uses empty slice instead of nil.
		out.Settings.AuthorizedGaeApplications = make([]string, 0)
	}
	if in.Spec.Settings.AvailabilityType == nil {
		// GCP default AvailailbilityType is ZONAL.
		out.Settings.AvailabilityType = "ZONAL"
	}
	if in.Spec.Settings.BackupConfiguration == nil && actual != nil && !actual.Settings.BackupConfiguration.Enabled {
		// If desired backupConfiguration is not specified and actual is disabled, use the actual.
		out.Settings.BackupConfiguration = actual.Settings.BackupConfiguration
	}
	if in.Spec.Settings.BackupConfiguration != nil {
		if in.Spec.Settings.BackupConfiguration.BackupRetentionSettings != nil && in.Spec.Settings.BackupConfiguration.BackupRetentionSettings.RetentionUnit == nil {
			// GCP default retentionUnit is COUNT.
			out.Settings.BackupConfiguration.BackupRetentionSettings.RetentionUnit = "COUNT"
		}
	}
	if in.Spec.Settings.ConnectorEnforcement == nil {
		// GCP default ConnectorEnforcement is NOT_REQUIRED.
		out.Settings.ConnectorEnforcement = "NOT_REQUIRED"
	}
	if in.Spec.Settings.DiskType == nil {
		// GCP default DiskType is PD_SSD.
		out.Settings.DataDiskType = "PD_SSD"
	}
	if in.Spec.Settings.Edition == nil {
		// GCP default Edition is ENTERPRISE.
		out.Settings.Edition = "ENTERPRISE"
	}
	if in.Spec.Settings.IpConfiguration == nil {
		// GCP default IpConfiguration.
		out.Settings.IpConfiguration = &api.IpConfiguration{
			Ipv4Enabled: true,
			SslMode:     "ALLOW_UNENCRYPTED_AND_ENCRYPTED",
		}
	}
	if in.Spec.Settings.IpConfiguration != nil {
		if in.Spec.Settings.IpConfiguration.Ipv4Enabled == nil {
			// GCP default IpConfiguration.Ipv4Enabled is true.
			out.Settings.IpConfiguration.Ipv4Enabled = true
		}
		if in.Spec.Settings.IpConfiguration.SslMode == nil {
			if out.Settings.IpConfiguration.RequireSsl {
				if strings.HasPrefix(out.DatabaseVersion, "MYSQL") || strings.HasPrefix(out.DatabaseVersion, "POSTGRES") {
					// If RequireSsl is true, and db version is MySQL or Postgres,
					// GCP default SslMode is TRUSTED_CLIENT_CERTIFICATE_REQUIRED.
					out.Settings.IpConfiguration.SslMode = "TRUSTED_CLIENT_CERTIFICATE_REQUIRED"
				} else {
					// Otherwise, if RequireSsl is true and db version is SQLSERVER,
					// GCP default SslMode is ENCRYPTED_ONLY.
					out.Settings.IpConfiguration.SslMode = "ENCRYPTED_ONLY"
				}
			} else {
				// If RequireSsl is false, GCP default IpConfiguration.SslMode is ALLOW_UNENCRYPTED_AND_ENCRYPTED.
				out.Settings.IpConfiguration.SslMode = "ALLOW_UNENCRYPTED_AND_ENCRYPTED"
			}
		}
	}
	if in.Spec.Settings.LocationPreference == nil && actual != nil {
		// Use GCP specified locationPreference.
		out.Settings.LocationPreference = actual.Settings.LocationPreference
	}
	if in.Spec.Settings.PricingPlan == nil {
		// GCP default PricingPlan is PER_USE.
		out.Settings.PricingPlan = "PER_USE"
	}
	if in.Spec.Settings.ReplicationType == nil {
		// GCP default ReplicationType is SYNCHRONOUS.
		out.Settings.ReplicationType = "SYNCHRONOUS"
	}
	if in.Spec.Settings.DiskAutoresize == nil {
		// GCP default StorageAutoResize is true.
		out.Settings.StorageAutoResize = direct.PtrTo(true)
	}
	if in.Spec.Settings.DiskSize == nil && actual != nil && *out.Settings.StorageAutoResize {
		// If desired DiskSize is not specified and StorageAutoResize is enabled, use the actual disk size.
		// Note: This must be set AFTER setting the default value for StorageAutoResize.
		out.Settings.DataDiskSizeGb = actual.Settings.DataDiskSizeGb
	}
	if actual != nil {
		// GCP API requires we set the current settings version, otherwise update will fail.
		out.Settings.SettingsVersion = actual.Settings.SettingsVersion
	}
}