Apply the configuration from CRD.
This commit is contained in:
		
							parent
							
								
									5a6aa9b6d9
								
							
						
					
					
						commit
						e558240fdf
					
				
							
								
								
									
										20
									
								
								cmd/main.go
								
								
								
								
							
							
						
						
									
										20
									
								
								cmd/main.go
								
								
								
								
							|  | @ -7,6 +7,7 @@ import ( | |||
| 	"os/signal" | ||||
| 	"sync" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/controller" | ||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/spec" | ||||
|  | @ -20,6 +21,14 @@ var ( | |||
| 	config         spec.ControllerConfig | ||||
| ) | ||||
| 
 | ||||
| func mustParseDuration(d string) time.Duration { | ||||
| 	duration, err := time.ParseDuration(d) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return duration | ||||
| } | ||||
| 
 | ||||
| func init() { | ||||
| 	flag.StringVar(&kubeConfigFile, "kubeconfig", "", "Path to kubeconfig file with authorization and master location information.") | ||||
| 	flag.BoolVar(&outOfCluster, "outofcluster", false, "Whether the operator runs in- our outside of the Kubernetes cluster.") | ||||
|  | @ -38,6 +47,17 @@ func init() { | |||
| 		log.Printf("Fully qualified configmap name: %v", config.ConfigMapName) | ||||
| 
 | ||||
| 	} | ||||
| 	if crd_interval := os.Getenv("CRD_READY_WAIT_INTERVAL"); crd_interval != "" { | ||||
| 		config.CRDReadyWaitInterval = mustParseDuration(crd_interval) | ||||
| 	} else { | ||||
| 		config.CRDReadyWaitInterval = 4 * time.Second | ||||
| 	} | ||||
| 
 | ||||
| 	if crd_timeout := os.Getenv("CRD_READY_WAIT_TIMEOUT"); crd_timeout != "" { | ||||
| 		config.CRDReadyWaitTimeout = mustParseDuration(crd_timeout) | ||||
| 	} else { | ||||
| 		config.CRDReadyWaitTimeout = 30 * time.Second | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
|  |  | |||
|  | @ -101,23 +101,24 @@ func (c *Controller) initOperatorConfig() { | |||
| 		c.logger.Infoln("no ConfigMap specified. Loading default values") | ||||
| 	} | ||||
| 
 | ||||
| 	configMapData["watched_namespace"] = c.getEffectiveNamespace(os.Getenv("WATCHED_NAMESPACE"), configMapData["watched_namespace"]) | ||||
| 
 | ||||
| 	if c.config.NoDatabaseAccess { | ||||
| 		configMapData["enable_database_access"] = "false" | ||||
| 	} | ||||
| 	if c.config.NoTeamsAPI { | ||||
| 		configMapData["enable_teams_api"] = "false" | ||||
| 	} | ||||
| 
 | ||||
| 	c.opConfig = config.NewFromMap(configMapData) | ||||
| 	c.warnOnDeprecatedOperatorParameters() | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func (c *Controller) modifyConfigFromEnvironment() { | ||||
| 	c.opConfig.WatchedNamespace = c.getEffectiveNamespace(os.Getenv("WATCHED_NAMESPACE"), c.opConfig.WatchedNamespace) | ||||
| 
 | ||||
| 	if c.config.NoDatabaseAccess { | ||||
| 		c.opConfig.EnableDBAccess = c.config.NoDatabaseAccess | ||||
| 	} | ||||
| 	if c.config.NoTeamsAPI { | ||||
| 		c.opConfig.EnableTeamsAPI = c.config.NoTeamsAPI | ||||
| 	} | ||||
| 	scalyrAPIKey := os.Getenv("SCALYR_API_KEY") | ||||
| 	if scalyrAPIKey != "" { | ||||
| 		c.opConfig.ScalyrAPIKey = scalyrAPIKey | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| // warningOnDeprecatedParameters emits warnings upon finding deprecated parmaters
 | ||||
|  | @ -163,33 +164,34 @@ func (c *Controller) initPodServiceAccount() { | |||
| 
 | ||||
| func (c *Controller) initController() { | ||||
| 	c.initClients() | ||||
| 	c.initOperatorConfig() | ||||
| 	c.initPodServiceAccount() | ||||
| 
 | ||||
| 	c.initSharedInformers() | ||||
| 
 | ||||
| 	c.logger.Infof("config: %s", c.opConfig.MustMarshal()) | ||||
| 
 | ||||
| 	if c.opConfig.DebugLogging { | ||||
| 		c.logger.Logger.Level = logrus.DebugLevel | ||||
| 	if configObjectName := os.Getenv("POSTGRES_OPERATOR_CONFIGURATION_OBJECT"); configObjectName != "" { | ||||
| 		if err := c.createOperatorCRD(); err != nil { | ||||
| 			c.logger.Fatalf("could not register Operator Configuration CustomResourceDefinition: %v", err) | ||||
| 		} | ||||
| 		if cfg, err := c.readOperatorConfigurationFromCRD(configObjectName); err != nil { | ||||
| 			c.logger.Fatalf("unable to read operator configuration: %v", err) | ||||
| 		} else { | ||||
| 			c.opConfig = c.importConfigurationFromCRD(&cfg.Configuration) | ||||
| 		} | ||||
| 	} else { | ||||
| 		c.initOperatorConfig() | ||||
| 	} | ||||
| 
 | ||||
| 	c.modifyConfigFromEnvironment() | ||||
| 
 | ||||
| 	if err := c.createPostgresCRD(); err != nil { | ||||
| 		c.logger.Fatalf("could not register Postgres CustomResourceDefinition: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := c.createOperatorCRD(); err != nil { | ||||
| 		c.logger.Fatalf("could not register Operator Configuration CustomResourceDefinition: %v", err) | ||||
| 	c.initPodServiceAccount() | ||||
| 	c.initSharedInformers() | ||||
| 
 | ||||
| 	if c.opConfig.DebugLogging { | ||||
| 		c.logger.Logger.Level = logrus.DebugLevel | ||||
| 	} | ||||
| 
 | ||||
| 	if configObjectName := os.Getenv("POSTGRES_OPERATOR_CONFIGURATION_OBJECT"); configObjectName != "" { | ||||
| 		if config, err := c.readOperatorConfigurationFromCRD(configObjectName); err != nil { | ||||
| 			c.logger.Fatalf("unable to read operator configuration: %v", err) | ||||
| 		} else { | ||||
| 			c.logger.Fatalf("operator configuration: %#v", config) | ||||
| 		} | ||||
| 	} | ||||
| 	c.logger.Infof("config: %s", c.opConfig.MustMarshal()) | ||||
| 
 | ||||
| 	if infraRoles, err := c.getInfrastructureRoles(&c.opConfig.InfrastructureRolesSecretName); err != nil { | ||||
| 		c.logger.Warningf("could not get infrastructure roles: %v", err) | ||||
|  |  | |||
|  | @ -4,14 +4,12 @@ import ( | |||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | ||||
| 
 | ||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/config" | ||||
| 	"github.com/zalando-incubator/postgres-operator/pkg/util/constants" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| func (c *Controller) readOperatorConfigurationFromCRD(configObjectName string) (*config.OperatorConfiguration, error){ | ||||
| func (c *Controller) readOperatorConfigurationFromCRD(configObjectName string) (*config.OperatorConfiguration, error) { | ||||
| 	var ( | ||||
| 		config config.OperatorConfiguration | ||||
| 	) | ||||
|  | @ -22,7 +20,7 @@ func (c *Controller) readOperatorConfigurationFromCRD(configObjectName string) ( | |||
| 		Resource(constants.OperatorConfigCRDResource). | ||||
| 		VersionedParams(&metav1.ListOptions{ResourceVersion: "0"}, metav1.ParameterCodec) | ||||
| 
 | ||||
| 	data, err := req.DoRaw(); | ||||
| 	data, err := req.DoRaw() | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("could not get operator configuration object %s: %v", configObjectName, err) | ||||
| 	} | ||||
|  | @ -31,4 +29,77 @@ func (c *Controller) readOperatorConfigurationFromCRD(configObjectName string) ( | |||
| 	} | ||||
| 
 | ||||
| 	return &config, nil | ||||
| } | ||||
| } | ||||
| 
 | ||||
| // importConfigurationFromCRD is a transitional function that converts CRD configuration to the one based on the configmap
 | ||||
| func (c *Controller) importConfigurationFromCRD(fromCRD *config.OperatorConfigurationData) *config.Config { | ||||
| 	result := &config.Config{} | ||||
| 
 | ||||
| 	result.EtcdHost = fromCRD.EtcdHost | ||||
| 	result.DockerImage = fromCRD.DockerImage | ||||
| 	result.Workers = fromCRD.Workers | ||||
| 	result.MinInstances = fromCRD.MinInstances | ||||
| 	result.MaxInstances = fromCRD.MaxInstances | ||||
| 	result.ResyncPeriod = fromCRD.ResyncPeriod | ||||
| 
 | ||||
| 	result.SuperUsername = fromCRD.PostgresUsersConfiguration.SuperUsername | ||||
| 	result.ReplicationUsername = fromCRD.PostgresUsersConfiguration.ReplicationUsername | ||||
| 
 | ||||
| 	result.PodServiceAccountName = fromCRD.Kubernetes.PodServiceAccountName | ||||
| 	result.PodServiceAccountDefinition = fromCRD.Kubernetes.PodServiceAccountDefinition | ||||
| 	result.PodTerminateGracePeriod = fromCRD.Kubernetes.PodTerminateGracePeriod | ||||
| 	result.WatchedNamespace = fromCRD.Kubernetes.WatchedNamespace | ||||
| 	result.PDBNameFormat = fromCRD.Kubernetes.PDBNameFormat | ||||
| 	result.SecretNameTemplate = fromCRD.Kubernetes.SecretNameTemplate | ||||
| 	result.OAuthTokenSecretName = fromCRD.Kubernetes.OAuthTokenSecretName | ||||
| 	result.InfrastructureRolesSecretName = fromCRD.Kubernetes.InfrastructureRolesSecretName | ||||
| 	result.PodRoleLabel = fromCRD.Kubernetes.PodRoleLabel | ||||
| 	result.ClusterLabels = fromCRD.Kubernetes.ClusterLabels | ||||
| 	result.ClusterNameLabel = fromCRD.Kubernetes.ClusterNameLabel | ||||
| 	result.NodeReadinessLabel = fromCRD.Kubernetes.NodeReadinessLabel | ||||
| 
 | ||||
| 	result.DefaultCPURequest = fromCRD.PostgresPodResources.DefaultCPURequest | ||||
| 	result.DefaultMemoryRequest = fromCRD.PostgresPodResources.DefaultMemoryRequest | ||||
| 	result.DefaultCPULimit = fromCRD.PostgresPodResources.DefaultCPULimit | ||||
| 	result.DefaultMemoryLimit = fromCRD.PostgresPodResources.DefaultMemoryLimit | ||||
| 
 | ||||
| 	result.ResourceCheckInterval = fromCRD.Timeouts.ResourceCheckInterval | ||||
| 	result.ResourceCheckTimeout = fromCRD.Timeouts.ResourceCheckTimeout | ||||
| 	result.PodLabelWaitTimeout = fromCRD.Timeouts.PodLabelWaitTimeout | ||||
| 	result.PodDeletionWaitTimeout = fromCRD.Timeouts.PodDeletionWaitTimeout | ||||
| 	result.ReadyWaitInterval = fromCRD.Timeouts.ReadyWaitInterval | ||||
| 	result.ReadyWaitTimeout = fromCRD.Timeouts.ReadyWaitTimeout | ||||
| 
 | ||||
| 	result.DbHostedZone = fromCRD.LoadBalancer.DbHostedZone | ||||
| 	result.EnableMasterLoadBalancer = fromCRD.LoadBalancer.EnableMasterLoadBalancer | ||||
| 	result.EnableReplicaLoadBalancer = fromCRD.LoadBalancer.EnableReplicaLoadBalancer | ||||
| 	result.MasterDNSNameFormat = fromCRD.LoadBalancer.MasterDNSNameFormat | ||||
| 	result.ReplicaDNSNameFormat = fromCRD.LoadBalancer.ReplicaDNSNameFormat | ||||
| 
 | ||||
| 	result.WALES3Bucket = fromCRD.AWSGCP.WALES3Bucket | ||||
| 	result.LogS3Bucket = fromCRD.AWSGCP.LogS3Bucket | ||||
| 	result.KubeIAMRole = fromCRD.AWSGCP.KubeIAMRole | ||||
| 
 | ||||
| 	result.DebugLogging = fromCRD.OperatorDebug.DebugLogging | ||||
| 	result.EnableDBAccess = fromCRD.OperatorDebug.EnableDBAccess | ||||
| 	result.EnableTeamsAPI = fromCRD.TeamsAPI.EnableTeamsAPI | ||||
| 	result.TeamsAPIUrl = fromCRD.TeamsAPI.TeamsAPIUrl | ||||
| 	result.TeamAPIRoleConfiguration = fromCRD.TeamsAPI.TeamAPIRoleConfiguration | ||||
| 	result.EnableTeamSuperuser = fromCRD.TeamsAPI.EnableTeamSuperuser | ||||
| 	result.TeamAdminRole = fromCRD.TeamsAPI.TeamAdminRole | ||||
| 	result.PamRoleName = fromCRD.TeamsAPI.PamRoleName | ||||
| 
 | ||||
| 	result.APIPort = fromCRD.LoggingRESTAPI.APIPort | ||||
| 	result.RingLogLines = fromCRD.LoggingRESTAPI.RingLogLines | ||||
| 	result.ClusterHistoryEntries = fromCRD.LoggingRESTAPI.ClusterHistoryEntries | ||||
| 
 | ||||
| 	result.ScalyrAPIKey = fromCRD.Scalyr.ScalyrAPIKey | ||||
| 	result.ScalyrImage = fromCRD.Scalyr.ScalyrImage | ||||
| 	result.ScalyrServerURL = fromCRD.Scalyr.ScalyrServerURL | ||||
| 	result.ScalyrCPURequest = fromCRD.Scalyr.ScalyrCPURequest | ||||
| 	result.ScalyrMemoryRequest = fromCRD.Scalyr.ScalyrMemoryRequest | ||||
| 	result.ScalyrCPULimit = fromCRD.Scalyr.ScalyrCPULimit | ||||
| 	result.ScalyrMemoryLimit = fromCRD.Scalyr.ScalyrMemoryLimit | ||||
| 
 | ||||
| 	return result | ||||
| } | ||||
|  |  | |||
|  | @ -75,7 +75,7 @@ func (c *Controller) createZalandoCRD(plural, singular, short string) error { | |||
| 		c.logger.Infof("customResourceDefinition %q has been registered", crd.Name) | ||||
| 	} | ||||
| 
 | ||||
| 	return wait.Poll(c.opConfig.CRD.ReadyWaitInterval, c.opConfig.CRD.ReadyWaitTimeout, func() (bool, error) { | ||||
| 	return wait.Poll(c.config.CRDReadyWaitInterval, c.config.CRDReadyWaitTimeout, func() (bool, error) { | ||||
| 		c, err := c.KubeClient.CustomResourceDefinitions().Get(crd.Name, metav1.GetOptions{}) | ||||
| 		if err != nil { | ||||
| 			return false, err | ||||
|  |  | |||
|  | @ -162,10 +162,12 @@ type ControllerConfig struct { | |||
| 	RestConfig          *rest.Config `json:"-"` | ||||
| 	InfrastructureRoles map[string]PgUser | ||||
| 
 | ||||
| 	NoDatabaseAccess bool | ||||
| 	NoTeamsAPI       bool | ||||
| 	ConfigMapName    NamespacedName | ||||
| 	Namespace        string | ||||
| 	NoDatabaseAccess     bool | ||||
| 	NoTeamsAPI           bool | ||||
| 	CRDReadyWaitInterval time.Duration | ||||
| 	CRDReadyWaitTimeout  time.Duration | ||||
| 	ConfigMapName        NamespacedName | ||||
| 	Namespace            string | ||||
| } | ||||
| 
 | ||||
| // cached value for the GetOperatorNamespace
 | ||||
|  |  | |||
|  | @ -40,11 +40,11 @@ type Resources struct { | |||
| 
 | ||||
| // Auth describes authentication specific configuration parameters
 | ||||
| type Auth struct { | ||||
| 	SecretNameTemplate   StringTemplate      `name:"secret_name_template" default:"{username}.{cluster}.credentials.{tprkind}.{tprgroup}"` | ||||
| 	PamRoleName          string              `name:"pam_role_name" default:"zalandos"` | ||||
| 	PamConfiguration     string              `name:"pam_configuration" default:"https://info.example.com/oauth2/tokeninfo?access_token= uid realm=/employees"` | ||||
| 	TeamsAPIUrl          string              `name:"teams_api_url" default:"https://teams.example.com/api/"` | ||||
| 	OAuthTokenSecretName spec.NamespacedName `name:"oauth_token_secret_name" default:"postgresql-operator"` | ||||
| 	SecretNameTemplate            StringTemplate      `name:"secret_name_template" default:"{username}.{cluster}.credentials.{tprkind}.{tprgroup}"` | ||||
| 	PamRoleName                   string              `name:"pam_role_name" default:"zalandos"` | ||||
| 	PamConfiguration              string              `name:"pam_configuration" default:"https://info.example.com/oauth2/tokeninfo?access_token= uid realm=/employees"` | ||||
| 	TeamsAPIUrl                   string              `name:"teams_api_url" default:"https://teams.example.com/api/"` | ||||
| 	OAuthTokenSecretName          spec.NamespacedName `name:"oauth_token_secret_name" default:"postgresql-operator"` | ||||
| 	InfrastructureRolesSecretName spec.NamespacedName `name:"infrastructure_roles_secret_name"` | ||||
| 	SuperUsername                 string              `name:"super_username" default:"postgres"` | ||||
| 	ReplicationUsername           string              `name:"replication_username" default:"standby"` | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| package config | ||||
| 
 | ||||
| import ( | ||||
| 
 | ||||
| 	"encoding/json" | ||||
| 	"time" | ||||
| 
 | ||||
|  | @ -15,93 +14,91 @@ type OperatorConfiguration struct { | |||
| 	metav1.ObjectMeta `json:"metadata"` | ||||
| 
 | ||||
| 	Configuration OperatorConfigurationData `json:"configuration"` | ||||
| 	Error         error                      `json:"-"` | ||||
| 	Error         error                     `json:"-"` | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| type OperatorConfigurationList struct { | ||||
| 	metav1.TypeMeta   `json:",inline"` | ||||
| 	metav1.TypeMeta `json:",inline"` | ||||
| 	metav1.ListMeta `json:"metadata"` | ||||
| 
 | ||||
| 	Items []OperatorConfiguration `json:"items"` | ||||
| } | ||||
| 
 | ||||
| type PostgresUsersConfiguration struct { | ||||
| 	SuperUsername                 string              `json:"super_username,omitempty"` | ||||
| 	ReplicationUsername           string              `json:"replication_username,omitempty"` | ||||
| 	SuperUsername       string `json:"super_username,omitempty"` | ||||
| 	ReplicationUsername string `json:"replication_username,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type KubernetesMetaConfiguration struct { | ||||
| 	PodServiceAccountName string `json:"pod_service_account_name,omitempty"` | ||||
| 	// TODO: change it to the proper json
 | ||||
| 	PodServiceAccountDefinition   string                `json:"pod_service_account_definition,omitempty"` | ||||
| 	PodTerminateGracePeriod       time.Duration         `json:"pod_terminate_grace_period,omitempty"` | ||||
| 	WatchedNamespace              string                `json:"watched_namespace,omitempty"` | ||||
| 	PDBNameFormat                 StringTemplate `json:"pdb_name_format,omitempty"` | ||||
| 	SecretNameTemplate            StringTemplate `json:"secret_name_template,omitempty"` | ||||
| 	OAuthTokenSecretName          spec.NamespacedName   `json:"oauth_token_secret_name,omitempty"` | ||||
| 	InfrastructureRolesSecretName spec.NamespacedName   `json:"infrastructure_roles_secret_name,omitempty"` | ||||
| 	PodRoleLabel                  string                `json:"pod_role_label,omitempty"` | ||||
| 	ClusterLabels                 map[string]string     `json:"cluster_labels,omitempty"` | ||||
| 	ClusterNameLabel              string                `json:"cluster_name_label,omitempty"` | ||||
| 	NodeReadinessLabel            map[string]string     `json:"node_readiness_label,omitempty"` | ||||
| 	PodServiceAccountDefinition   string              `json:"pod_service_account_definition,omitempty"` | ||||
| 	PodTerminateGracePeriod       time.Duration       `json:"pod_terminate_grace_period,omitempty"` | ||||
| 	WatchedNamespace              string              `json:"watched_namespace,omitempty"` | ||||
| 	PDBNameFormat                 StringTemplate      `json:"pdb_name_format,omitempty"` | ||||
| 	SecretNameTemplate            StringTemplate      `json:"secret_name_template,omitempty"` | ||||
| 	OAuthTokenSecretName          spec.NamespacedName `json:"oauth_token_secret_name,omitempty"` | ||||
| 	InfrastructureRolesSecretName spec.NamespacedName `json:"infrastructure_roles_secret_name,omitempty"` | ||||
| 	PodRoleLabel                  string              `json:"pod_role_label,omitempty"` | ||||
| 	ClusterLabels                 map[string]string   `json:"cluster_labels,omitempty"` | ||||
| 	ClusterNameLabel              string              `json:"cluster_name_label,omitempty"` | ||||
| 	NodeReadinessLabel            map[string]string   `json:"node_readiness_label,omitempty"` | ||||
| 	// TODO: use a proper toleration structure?
 | ||||
| 	PodToleration map[string]string `json:"toleration,omitempty"` | ||||
| 	// TODO: use namespacedname
 | ||||
| 	PodEnvironmentConfigMap string `json:"pod_environment_configmap,omitempty"` | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| type PostgresPodResourcesDefaults struct { | ||||
| 	DefaultCPURequest       string            `json:"default_cpu_request,omitempty"` | ||||
| 	DefaultMemoryRequest    string            `json:"default_memory_request,omitempty"` | ||||
| 	DefaultCPULimit         string            `json:"default_cpu_limit,omitempty"` | ||||
| 	DefaultMemoryLimit      string            `json:"default_memory_limit,omitempty"` | ||||
| 	DefaultCPURequest    string `json:"default_cpu_request,omitempty"` | ||||
| 	DefaultMemoryRequest string `json:"default_memory_request,omitempty"` | ||||
| 	DefaultCPULimit      string `json:"default_cpu_limit,omitempty"` | ||||
| 	DefaultMemoryLimit   string `json:"default_memory_limit,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type OperatorTimeouts struct { | ||||
| 	ResourceCheckInterval   time.Duration     `json:"resource_check_interval,omitempty"` | ||||
| 	ResourceCheckTimeout    time.Duration     `json:"resource_check_timeout,omitempty"` | ||||
| 	PodLabelWaitTimeout     time.Duration     `json:"pod_label_wait_timeout,omitempty"` | ||||
| 	PodDeletionWaitTimeout  time.Duration     `json:"pod_deletion_wait_timeout,omitempty"` | ||||
| 	ReadyWaitInterval time.Duration `json:"ready_wait_interval,omitempty"` | ||||
| 	ReadyWaitTimeout  time.Duration `json:"ready_wait_timeout,omitempty"` | ||||
| 	ResourceCheckInterval  time.Duration `json:"resource_check_interval,omitempty"` | ||||
| 	ResourceCheckTimeout   time.Duration `json:"resource_check_timeout,omitempty"` | ||||
| 	PodLabelWaitTimeout    time.Duration `json:"pod_label_wait_timeout,omitempty"` | ||||
| 	PodDeletionWaitTimeout time.Duration `json:"pod_deletion_wait_timeout,omitempty"` | ||||
| 	ReadyWaitInterval      time.Duration `json:"ready_wait_interval,omitempty"` | ||||
| 	ReadyWaitTimeout       time.Duration `json:"ready_wait_timeout,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type LoadBalancerConfiguration struct { | ||||
| 	DbHostedZone                string `json:"db_hosted_zone,omitempty"` | ||||
| 	EnableMasterLoadBalancer    bool   `json:"enable_master_load_balancer,omitempty"` | ||||
| 	EnableReplicaLoadBalancer   bool   `json:"enable_replica_load_balancer,omitempty"` | ||||
| 	MasterDNSNameFormat      StringTemplate    `json:"master_dns_name_format,omitempty"` | ||||
| 	ReplicaDNSNameFormat     StringTemplate    `json:"replica_dns_name_format,omitempty"` | ||||
| 	DbHostedZone              string         `json:"db_hosted_zone,omitempty"` | ||||
| 	EnableMasterLoadBalancer  bool           `json:"enable_master_load_balancer,omitempty"` | ||||
| 	EnableReplicaLoadBalancer bool           `json:"enable_replica_load_balancer,omitempty"` | ||||
| 	MasterDNSNameFormat       StringTemplate `json:"master_dns_name_format,omitempty"` | ||||
| 	ReplicaDNSNameFormat      StringTemplate `json:"replica_dns_name_format,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type AWSGCPConfiguration struct { | ||||
| 	WALES3Bucket                string `json:"wal_s3_bucket,omitempty"` | ||||
| 	LogS3Bucket                 string `json:"log_s3_bucket,omitempty"` | ||||
| 	KubeIAMRole                 string `json:"kube_iam_role,omitempty"` | ||||
| 	WALES3Bucket string `json:"wal_s3_bucket,omitempty"` | ||||
| 	LogS3Bucket  string `json:"log_s3_bucket,omitempty"` | ||||
| 	KubeIAMRole  string `json:"kube_iam_role,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type OperatorDebugConfiguration struct { | ||||
| 	DebugLogging                bool   `json:"debug_logging,omitempty"` | ||||
| 	EnableDBAccess              bool   `json:"enable_database_access,omitempty"` | ||||
| 	DebugLogging   bool `json:"debug_logging,omitempty"` | ||||
| 	EnableDBAccess bool `json:"enable_database_access,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type TeamsAPIConfiguration struct { | ||||
| 	EnableTeamsAPI              bool   `json:"enable_teams_api,omitempty"` | ||||
| 	TeamsAPIUrl          string              `json:"teams_api_url,omitempty"` | ||||
| 	EnableTeamsAPI           bool              `json:"enable_teams_api,omitempty"` | ||||
| 	TeamsAPIUrl              string            `json:"teams_api_url,omitempty"` | ||||
| 	TeamAPIRoleConfiguration map[string]string `json:"team_api_role_configuration,omitempty"` | ||||
| 	EnableTeamSuperuser         bool   `json:"enable_team_superuser,omitempty"` | ||||
| 	TeamAdminRole               string `json:"team_admin_role,omitempty"` | ||||
| 	PamRoleName          string              `json:"pam_role_name,omitempty"` | ||||
| 	PamConfiguration     string              `json:"pam_configuration,omitempty"` | ||||
| 	EnableTeamSuperuser      bool              `json:"enable_team_superuser,omitempty"` | ||||
| 	TeamAdminRole            string            `json:"team_admin_role,omitempty"` | ||||
| 	PamRoleName              string            `json:"pam_role_name,omitempty"` | ||||
| 	PamConfiguration         string            `json:"pam_configuration,omitempty"` | ||||
| 	ProtectedRoles           []string          `json:"protected_role_names,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type LoggingRESTAPIConfiguration struct { | ||||
| 	APIPort                  int               `json:"api_port,omitempty"` | ||||
| 	RingLogLines             int               `json:"ring_log_lines,omitempty"` | ||||
| 	ClusterHistoryEntries    int               `json:"cluster_history_entries,omitempty"` | ||||
| 	APIPort               int `json:"api_port,omitempty"` | ||||
| 	RingLogLines          int `json:"ring_log_lines,omitempty"` | ||||
| 	ClusterHistoryEntries int `json:"cluster_history_entries,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type ScalyrConfiguration struct { | ||||
|  | @ -115,36 +112,34 @@ type ScalyrConfiguration struct { | |||
| } | ||||
| 
 | ||||
| type OperatorConfigurationData struct { | ||||
| 	EtcdHost string `json:"etcd_host,omitempty"` | ||||
| 	DockerImage string `json:"docker_image,omitempty"` | ||||
| 	Workers int `json:"workers,omitempty"` | ||||
| 	MinInstances int32 `json:"min_instances,omitempty"` | ||||
| 	MaxInstances int32 `json:"max_instances,omitempty"` | ||||
| 	ResyncPeriod time.Duration `json:"resync_period,omitempty"` | ||||
| 	PostgresUsersConfiguration PostgresUsersConfiguration `json:"users"` | ||||
| 	Kubernetes KubernetesMetaConfiguration `json:"kubernetes"` | ||||
| 	PostgresPodResources PostgresPodResourcesDefaults `json:"postgres_pod_resources"` | ||||
| 	Timeouts OperatorTimeouts `json:"timeouts"` | ||||
| 	LoadBalancer LoadBalancerConfiguration `json:"load_balancer"` | ||||
| 	AWSGCP AWSGCPConfiguration `json:"aws_or_gcp"` | ||||
| 	OperatorDebug OperatorDebugConfiguration `json:"debug"` | ||||
| 	TeamsAPI TeamsAPIConfiguration `json:"teams_api"` | ||||
| 	LoggingRESTAPI LoggingRESTAPIConfiguration `json:"logging_rest_api"` | ||||
| 	Scalyr ScalyrConfiguration `json:"scalyr"` | ||||
| 	EtcdHost                   string                       `json:"etcd_host,omitempty"` | ||||
| 	DockerImage                string                       `json:"docker_image,omitempty"` | ||||
| 	Workers                    uint32                       `json:"workers,omitempty"` | ||||
| 	MinInstances               int32                        `json:"min_instances,omitempty"` | ||||
| 	MaxInstances               int32                        `json:"max_instances,omitempty"` | ||||
| 	ResyncPeriod               time.Duration                `json:"resync_period,omitempty"` | ||||
| 	PostgresUsersConfiguration PostgresUsersConfiguration   `json:"users"` | ||||
| 	Kubernetes                 KubernetesMetaConfiguration  `json:"kubernetes"` | ||||
| 	PostgresPodResources       PostgresPodResourcesDefaults `json:"postgres_pod_resources"` | ||||
| 	Timeouts                   OperatorTimeouts             `json:"timeouts"` | ||||
| 	LoadBalancer               LoadBalancerConfiguration    `json:"load_balancer"` | ||||
| 	AWSGCP                     AWSGCPConfiguration          `json:"aws_or_gcp"` | ||||
| 	OperatorDebug              OperatorDebugConfiguration   `json:"debug"` | ||||
| 	TeamsAPI                   TeamsAPIConfiguration        `json:"teams_api"` | ||||
| 	LoggingRESTAPI             LoggingRESTAPIConfiguration  `json:"logging_rest_api"` | ||||
| 	Scalyr                     ScalyrConfiguration          `json:"scalyr"` | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| type OperatorConfigurationUsers struct { | ||||
| 	SuperUserName string `json:"superuser_name,omitempty"` | ||||
| 	Replication string `json:"replication_user_name,omitempty"` | ||||
| 	ProtectedRoles []string `json:"protected_roles,omitempty"` | ||||
| 	SuperUserName            string            `json:"superuser_name,omitempty"` | ||||
| 	Replication              string            `json:"replication_user_name,omitempty"` | ||||
| 	ProtectedRoles           []string          `json:"protected_roles,omitempty"` | ||||
| 	TeamAPIRoleConfiguration map[string]string `json:"team_api_role_configuration,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type OperatorConfigurationCopy OperatorConfiguration | ||||
| type OperatorConfigurationListCopy OperatorConfigurationList | ||||
| 
 | ||||
| 
 | ||||
| func (opc *OperatorConfiguration) UnmarshalJSON(data []byte) error { | ||||
| 	var ref OperatorConfigurationCopy | ||||
| 	if err := json.Unmarshal(data, &ref); err != nil { | ||||
|  | @ -162,4 +157,3 @@ func (opcl *OperatorConfigurationList) UnmarshalJSON(data []byte) error { | |||
| 	*opcl = OperatorConfigurationList(ref) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,13 +2,12 @@ package constants | |||
| 
 | ||||
| // Different properties of the PostgreSQL Custom Resource Definition
 | ||||
| const ( | ||||
| 	PostgresCRDKind     = "postgresql" | ||||
| 	PostgresCRDResource = "postgresqls" | ||||
| 	PostgresCRDShort    = "pg" | ||||
| 	CRDGroup            = "acid.zalan.do" | ||||
| 	CRDApiVersion       = "v1" | ||||
| 	OperatorConfigCRDKind = "postgresql-operator-configuration" | ||||
| 	PostgresCRDKind           = "postgresql" | ||||
| 	PostgresCRDResource       = "postgresqls" | ||||
| 	PostgresCRDShort          = "pg" | ||||
| 	CRDGroup                  = "acid.zalan.do" | ||||
| 	CRDApiVersion             = "v1" | ||||
| 	OperatorConfigCRDKind     = "postgresql-operator-configuration" | ||||
| 	OperatorConfigCRDResource = "postgresql-operator-configurations" | ||||
| 	OperatorConfigCRDShort = "pgopconfig" | ||||
| 
 | ||||
| 	OperatorConfigCRDShort    = "pgopconfig" | ||||
| ) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue