Skip to content

Commit

Permalink
Allow custom Postgres pod environment variables
Browse files Browse the repository at this point in the history
  • Loading branch information
geku committed Nov 6, 2017
1 parent 8680340 commit 257e0fc
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 0 deletions.
32 changes: 32 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,38 @@ spec:

Please be ware that the taint and toleration only ensures that no other pod gets scheduled to the "postgres" node but not that Postgres pods are placed on such a node. This can be achieved by setting a node affinity rule in the ConfigMap.

#### Custom Pod Environment Variables

It is possible to configure a config map which is used by the Postgres pods as an additional provider for environment variables.

One use case is to customize the Spilo image and configure it with environment variables. The config map with the additional settings is configured in the operator's main config map:

**postgres-operator ConfigMap**

```
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-operator
data:
# referencing config map with custom settings
pod_environment_configmap: postgres-pod-config
...
```

**referenced ConfigMap `postgres-pod-config`**

```
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-pod-config
namespace: default
data:
MY_CUSTOM_VAR: value
```

This ConfigMap is then added as a source of environment variables to the Postgres StatefulSet/pods.

# Setup development environment

Expand Down
8 changes: 8 additions & 0 deletions pkg/cluster/k8sres.go
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,13 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
if cloneDescription.ClusterName != "" {
envVars = append(envVars, c.generateCloneEnvironment(cloneDescription)...)
}

envFromSource := []v1.EnvFromSource{}
if c.OpConfig.PodEnvironmentConfigMap != "" {
configMapRef := v1.ConfigMapEnvSource{LocalObjectReference: v1.LocalObjectReference{Name: c.OpConfig.PodEnvironmentConfigMap}}
envFromSource = append(envFromSource, v1.EnvFromSource{ConfigMapRef: &configMapRef})
}

privilegedMode := true
container := v1.Container{
Name: c.containerName(),
Expand Down Expand Up @@ -388,6 +395,7 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
},
},
Env: envVars,
EnvFrom: envFromSource,
SecurityContext: &v1.SecurityContext{
Privileged: &privilegedMode,
},
Expand Down
1 change: 1 addition & 0 deletions pkg/util/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ type Resources struct {
DefaultCPULimit string `name:"default_cpu_limit" default:"3"`
DefaultMemoryLimit string `name:"default_memory_limit" default:"1Gi"`
EOLNodeLabel map[string]string `name:"eol_node_label" default:"eol:true"`
PodEnvironmentConfigMap string `name:"pod_environment_configmap" default:""`
}

// Auth describes authentication specific configuration parameters
Expand Down

0 comments on commit 257e0fc

Please sign in to comment.