Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions api/v1beta2/redis_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,12 @@ type RedisSpec struct {
// +kubebuilder:default:={initialDelaySeconds: 1, timeoutSeconds: 1, periodSeconds: 10, successThreshold: 1, failureThreshold:3}
ReadinessProbe *Probe `json:"readinessProbe,omitempty" protobuf:"bytes,11,opt,name=readinessProbe"`
// +kubebuilder:default:={initialDelaySeconds: 1, timeoutSeconds: 1, periodSeconds: 10, successThreshold: 1, failureThreshold:3}
LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,11,opt,name=livenessProbe"`
InitContainer *InitContainer `json:"initContainer,omitempty"`
Sidecars *[]Sidecar `json:"sidecars,omitempty"`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty" protobuf:"varint,4,opt,name=terminationGracePeriodSeconds"`
LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,11,opt,name=livenessProbe"`
InitContainer *InitContainer `json:"initContainer,omitempty"`
Sidecars *[]Sidecar `json:"sidecars,omitempty"`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty" protobuf:"varint,4,opt,name=terminationGracePeriodSeconds"`
EnvVars *[]corev1.EnvVar `json:"env,omitempty"`
}

// RedisStatus defines the observed state of Redis
Expand All @@ -54,7 +55,7 @@ type RedisStatus struct {

// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
//+kubebuilder:storageversion
// +kubebuilder:storageversion

// Redis is the Schema for the redis API
type Redis struct {
Expand Down
1 change: 1 addition & 0 deletions api/v1beta2/rediscluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ type RedisClusterSpec struct {
Sidecars *[]Sidecar `json:"sidecars,omitempty"`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
PersistenceEnabled *bool `json:"persistenceEnabled,omitempty"`
EnvVars *[]corev1.EnvVar `json:"env,omitempty"`
}

func (cr *RedisClusterSpec) GetReplicaCounts(t string) int32 {
Expand Down
13 changes: 7 additions & 6 deletions api/v1beta2/redisreplication_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ type RedisReplicationSpec struct {
// +kubebuilder:default:={initialDelaySeconds: 1, timeoutSeconds: 1, periodSeconds: 10, successThreshold: 1, failureThreshold:3}
ReadinessProbe *Probe `json:"readinessProbe,omitempty" protobuf:"bytes,11,opt,name=readinessProbe"`
// +kubebuilder:default:={initialDelaySeconds: 1, timeoutSeconds: 1, periodSeconds: 10, successThreshold: 1, failureThreshold:3}
LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,11,opt,name=livenessProbe"`
InitContainer *InitContainer `json:"initContainer,omitempty"`
Sidecars *[]Sidecar `json:"sidecars,omitempty"`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty" protobuf:"varint,4,opt,name=terminationGracePeriodSeconds"`
LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,11,opt,name=livenessProbe"`
InitContainer *InitContainer `json:"initContainer,omitempty"`
Sidecars *[]Sidecar `json:"sidecars,omitempty"`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty" protobuf:"varint,4,opt,name=terminationGracePeriodSeconds"`
EnvVars *[]corev1.EnvVar `json:"env,omitempty"`
}

func (cr *RedisReplicationSpec) GetReplicationCounts(t string) int32 {
Expand All @@ -40,7 +41,7 @@ type RedisReplicationStatus struct {

// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
//+kubebuilder:storageversion
// +kubebuilder:storageversion

// Redis is the Schema for the redis API
type RedisReplication struct {
Expand Down
11 changes: 6 additions & 5 deletions api/v1beta2/redissentinel_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@ type RedisSentinelSpec struct {
// +kubebuilder:default:={initialDelaySeconds: 1, timeoutSeconds: 1, periodSeconds: 10, successThreshold: 1, failureThreshold:3}
ReadinessProbe *Probe `json:"readinessProbe,omitempty" protobuf:"bytes,11,opt,name=readinessProbe"`
// +kubebuilder:default:={initialDelaySeconds: 1, timeoutSeconds: 1, periodSeconds: 10, successThreshold: 1, failureThreshold:3}
LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,11,opt,name=livenessProbe"`
InitContainer *InitContainer `json:"initContainer,omitempty"`
Sidecars *[]Sidecar `json:"sidecars,omitempty"`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty" protobuf:"varint,4,opt,name=terminationGracePeriodSeconds"`
LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,11,opt,name=livenessProbe"`
InitContainer *InitContainer `json:"initContainer,omitempty"`
Sidecars *[]Sidecar `json:"sidecars,omitempty"`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty" protobuf:"varint,4,opt,name=terminationGracePeriodSeconds"`
EnvVars *[]corev1.EnvVar `json:"env,omitempty"`
}

func (cr *RedisSentinelSpec) GetSentinelCounts(t string) int32 {
Expand Down
48 changes: 48 additions & 0 deletions example/v1beta2/env_vars/redis-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
apiVersion: redis.redis.opstreelabs.in/v1beta2
kind: RedisCluster
metadata:
name: redis-cluster
spec:
clusterSize: 3
clusterVersion: v7
persistenceEnabled: true
podSecurityContext:
runAsUser: 1000
fsGroup: 1000
kubernetesConfig:
image: quay.io/opstree/redis:v7.0.11
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 101m
memory: 128Mi
limits:
cpu: 101m
memory: 128Mi
env:
- name: CUSTOM_ENV_VAR_1
value: "custom_value_1"
- name: CUSTOM_ENV_VAR_2
value: "custom_value_2"
# redisSecret:
# name: redis-secret
# key: password
# imagePullSecrets:
# - name: regcred
storage:
volumeClaimTemplate:
spec:
# storageClassName: standard
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
nodeConfVolume: true
nodeConfVolumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi

40 changes: 40 additions & 0 deletions example/v1beta2/env_vars/redis-replication.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
apiVersion: redis.redis.opstreelabs.in/v1beta2
kind: RedisReplication
metadata:
name: redis-replication
spec:
clusterSize: 3
podSecurityContext:
runAsUser: 1000
fsGroup: 1000
# redisConfig:
# additionalRedisConfig: redis-external-config
kubernetesConfig:
image: quay.io/opstree/redis:v7.0.11
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 101m
memory: 128Mi
limits:
cpu: 101m
memory: 128Mi
redisSecret:
name: redis-secret
key: password
# imagePullSecrets:
# - name: regcred
env:
- name: CUSTOM_ENV_VAR_1
value: "custom_value_1"
- name: CUSTOM_ENV_VAR_2
value: "custom_value_2"
storage:
volumeClaimTemplate:
spec:
# storageClassName: standard
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
30 changes: 30 additions & 0 deletions example/v1beta2/env_vars/redis-sentinel.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
apiVersion: redis.redis.opstreelabs.in/v1beta2
kind: RedisSentinel
metadata:
name: redis-sentinel
spec:
clusterSize: 3
podSecurityContext:
runAsUser: 1000
fsGroup: 1000
pdb:
enabled: false
minAvailable: 1
redisSentinelConfig:
redisReplicationName : redis-replication
kubernetesConfig:
image: quay.io/opstree/redis-sentinel:v7.0.7
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 101m
memory: 128Mi
limits:
cpu: 101m
memory: 128Mi
env:
- name: CUSTOM_ENV_VAR_1
value: "custom_value_1"
- name: CUSTOM_ENV_VAR_2
value: "custom_value_2"
56 changes: 56 additions & 0 deletions example/v1beta2/env_vars/redis-standalone.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
apiVersion: redis.redis.opstreelabs.in/v1beta2
kind: Redis
metadata:
name: redis-standalone
spec:
# redisConfig:
# additionalRedisConfig: redis-external-config
podSecurityContext:
runAsUser: 1000
fsGroup: 1000
kubernetesConfig:
image: quay.io/opstree/redis:v7.0.11
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 101m
memory: 128Mi
limits:
cpu: 101m
memory: 128Mi
# redisSecret:
# name: redis-secret
# key: password
# imagePullSecrets:
# - name: regcred
redisExporter:
enabled: false
image: quay.io/opstree/redis-exporter:v1.44.0
imagePullPolicy: Always
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 100m
memory: 128Mi
env:
- name: CUSTOM_ENV_VAR_1
value: "custom_value_1"
- name: CUSTOM_ENV_VAR_2
value: "custom_value_2"
storage:
volumeClaimTemplate:
spec:
# storageClassName: standard
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
# nodeSelector:
# kubernetes.io/hostname: minikube
# podSecurityContext: {}
# priorityClassName:
# affinity:
# Tolerations: []
5 changes: 5 additions & 0 deletions example/v1beta2/redis-cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ spec:
limits:
cpu: 101m
memory: 128Mi
env:
- name: CUSTOM_ENV_VAR_1
value: "custom_value_1"
- name: CUSTOM_ENV_VAR_2
value: "custom_value_2"
# redisSecret:
# name: redis-secret
# key: password
Expand Down
3 changes: 3 additions & 0 deletions k8sutils/redis-cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ func generateRedisClusterContainerParams(cr *redisv1beta2.RedisCluster, security
Resources: cr.Spec.KubernetesConfig.Resources,
SecurityContext: securityContext,
}
if cr.Spec.EnvVars != nil {
containerProp.EnvVars = cr.Spec.EnvVars
}
if cr.Spec.Storage != nil {
containerProp.AdditionalVolume = cr.Spec.Storage.VolumeMount.Volume
containerProp.AdditionalMountPath = cr.Spec.Storage.VolumeMount.MountPath
Expand Down
4 changes: 3 additions & 1 deletion k8sutils/redis-replication.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,9 @@ func generateRedisReplicationContainerParams(cr *redisv1beta2.RedisReplication)
Resources: cr.Spec.KubernetesConfig.Resources,
SecurityContext: cr.Spec.SecurityContext,
}

if cr.Spec.EnvVars != nil {
containerProp.EnvVars = cr.Spec.EnvVars
}
if cr.Spec.Storage != nil {
containerProp.AdditionalVolume = cr.Spec.Storage.VolumeMount.Volume
containerProp.AdditionalMountPath = cr.Spec.Storage.VolumeMount.MountPath
Expand Down
3 changes: 3 additions & 0 deletions k8sutils/redis-sentinel.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,9 @@ func generateRedisSentinelContainerParams(cr *redisv1beta2.RedisSentinel, readin
SecurityContext: cr.Spec.SecurityContext,
AdditionalEnvVariable: getSentinelEnvVariable(cr),
}
if cr.Spec.EnvVars != nil {
containerProp.EnvVars = cr.Spec.EnvVars
}
if cr.Spec.KubernetesConfig.ExistingPasswordSecret != nil {
containerProp.EnabledPassword = &trueProperty
containerProp.SecretName = cr.Spec.KubernetesConfig.ExistingPasswordSecret.Name
Expand Down
3 changes: 3 additions & 0 deletions k8sutils/redis-standalone.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ func generateRedisStandaloneContainerParams(cr *redisv1beta2.Redis) containerPar
SecurityContext: cr.Spec.SecurityContext,
}

if cr.Spec.EnvVars != nil {
containerProp.EnvVars = cr.Spec.EnvVars
}
if cr.Spec.Storage != nil {
containerProp.AdditionalVolume = cr.Spec.Storage.VolumeMount.Volume
containerProp.AdditionalMountPath = cr.Spec.Storage.VolumeMount.MountPath
Expand Down
12 changes: 11 additions & 1 deletion k8sutils/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ type containerParameters struct {
AdditionalEnvVariable *[]corev1.EnvVar
AdditionalVolume []corev1.Volume
AdditionalMountPath []corev1.VolumeMount
EnvVars *[]corev1.EnvVar
}

type initContainerParameters struct {
Expand Down Expand Up @@ -351,6 +352,7 @@ func generateContainerDef(name string, containerParams containerParameters, clus
containerParams.RedisExporterEnv,
containerParams.TLSConfig,
containerParams.ACLConfig,
containerParams.EnvVars,
),
ReadinessProbe: getProbeInfo(containerParams.ReadinessProbe),
LivenessProbe: getProbeInfo(containerParams.LivenessProbe),
Expand Down Expand Up @@ -472,6 +474,7 @@ func enableRedisMonitoring(params containerParameters) corev1.Container {
params.RedisExporterEnv,
params.TLSConfig,
params.ACLConfig,
params.EnvVars,
),
VolumeMounts: getVolumeMount("", nil, false, false, nil, params.AdditionalMountPath, params.TLSConfig, params.ACLConfig), // We need/want the tls-certs but we DON'T need the PVC (if one is available)
Ports: []corev1.ContainerPort{
Expand Down Expand Up @@ -554,7 +557,9 @@ func getProbeInfo(probe *commonapi.Probe) *corev1.Probe {
}

// getEnvironmentVariables returns all the required Environment Variables
func getEnvironmentVariables(role string, enabledMetric bool, enabledPassword *bool, secretName *string, secretKey *string, persistenceEnabled *bool, exporterEnvVar *[]corev1.EnvVar, tlsConfig *redisv1beta2.TLSConfig, aclConfig *redisv1beta2.ACLConfig) []corev1.EnvVar {
func getEnvironmentVariables(role string, enabledMetric bool, enabledPassword *bool, secretName *string,
secretKey *string, persistenceEnabled *bool, exporterEnvVar *[]corev1.EnvVar, tlsConfig *redisv1beta2.TLSConfig,
aclConfig *redisv1beta2.ACLConfig, envVar *[]corev1.EnvVar) []corev1.EnvVar {
envVars := []corev1.EnvVar{
{Name: "SERVER_MODE", Value: role},
{Name: "SETUP_MODE", Value: role},
Expand Down Expand Up @@ -621,6 +626,11 @@ func getEnvironmentVariables(role string, enabledMetric bool, enabledPassword *b
if exporterEnvVar != nil {
envVars = append(envVars, *exporterEnvVar...)
}

if envVar != nil {
envVars = append(envVars, *envVar...)
}

sort.SliceStable(envVars, func(i, j int) bool {
return envVars[i].Name < envVars[j].Name
})
Expand Down