diff --git a/apis/mattermost/v1beta1/mattermost_types.go b/apis/mattermost/v1beta1/mattermost_types.go index 9b473551..553b5379 100644 --- a/apis/mattermost/v1beta1/mattermost_types.go +++ b/apis/mattermost/v1beta1/mattermost_types.go @@ -286,11 +286,15 @@ type UpdateJob struct { // PodExtensions specify customized extensions for a pod. type PodExtensions struct { - // Additional InitContainers injected to pods. + // Additional InitContainers injected into pods. // The setting does not override InitContainers defined by the Operator. InitContainers []v1.Container `json:"initContainers,omitempty"` - // Additional Container Ports injected to pod's main container. + // Additional sidecar containers injected into pods. + // The setting does not override Sidecar containers defined by the Operator. + SidecarContainers []v1.Container `json:"sidecarContainers,omitempty"` + + // Additional Container Ports injected into pod's main container. // The setting does not override ContainerPorts defined by the Operator. ContainerPorts []v1.ContainerPort `json:"containerPorts,omitempty"` } diff --git a/pkg/mattermost/mattermost_v1beta.go b/pkg/mattermost/mattermost_v1beta.go index dc90ac64..2070ba39 100644 --- a/pkg/mattermost/mattermost_v1beta.go +++ b/pkg/mattermost/mattermost_v1beta.go @@ -366,6 +366,28 @@ func GenerateDeploymentV1Beta(mattermost *mmv1beta.Mattermost, db DatabaseConfig revisionHistoryLimit = mattermost.Spec.DeploymentTemplate.RevisionHistoryLimit } + containers := []corev1.Container{ + { + Name: mattermostv1alpha1.MattermostAppContainerName, + Image: containerImage, + ImagePullPolicy: mattermost.Spec.ImagePullPolicy, + TerminationMessagePolicy: corev1.TerminationMessageFallbackToLogsOnError, + Command: []string{"mattermost"}, + Env: envVars, + Ports: containerPorts, + ReadinessProbe: readiness, + LivenessProbe: liveness, + VolumeMounts: volumeMounts, + Resources: mattermost.Spec.Scheduling.Resources, + SecurityContext: containerSecurityContext, + }, + } + + // Final container extensions + if mattermost.Spec.PodExtensions.SidecarContainers != nil { + containers = append(containers, mattermost.Spec.PodExtensions.SidecarContainers...) + } + return &appsv1.Deployment{ ObjectMeta: metav1.ObjectMeta{ Name: deploymentName, @@ -394,30 +416,15 @@ func GenerateDeploymentV1Beta(mattermost *mmv1beta.Mattermost, db DatabaseConfig Spec: corev1.PodSpec{ ServiceAccountName: serviceAccountName, InitContainers: initContainers, - Containers: []corev1.Container{ - { - Name: mattermostv1alpha1.MattermostAppContainerName, - Image: containerImage, - ImagePullPolicy: mattermost.Spec.ImagePullPolicy, - TerminationMessagePolicy: corev1.TerminationMessageFallbackToLogsOnError, - Command: []string{"mattermost"}, - Env: envVars, - Ports: containerPorts, - ReadinessProbe: readiness, - LivenessProbe: liveness, - VolumeMounts: volumeMounts, - Resources: mattermost.Spec.Scheduling.Resources, - SecurityContext: containerSecurityContext, - }, - }, - ImagePullSecrets: mattermost.Spec.ImagePullSecrets, - Volumes: volumes, - DNSConfig: mattermost.Spec.DNSConfig, - DNSPolicy: mattermost.Spec.DNSPolicy, - Affinity: mattermost.Spec.Scheduling.Affinity, - NodeSelector: mattermost.Spec.Scheduling.NodeSelector, - Tolerations: mattermost.Spec.Scheduling.Tolerations, - SecurityContext: podSecurityContext, + Containers: containers, + ImagePullSecrets: mattermost.Spec.ImagePullSecrets, + Volumes: volumes, + DNSConfig: mattermost.Spec.DNSConfig, + DNSPolicy: mattermost.Spec.DNSPolicy, + Affinity: mattermost.Spec.Scheduling.Affinity, + NodeSelector: mattermost.Spec.Scheduling.NodeSelector, + Tolerations: mattermost.Spec.Scheduling.Tolerations, + SecurityContext: podSecurityContext, }, }, }, diff --git a/pkg/mattermost/mattermost_v1beta_test.go b/pkg/mattermost/mattermost_v1beta_test.go index ec192ee1..47338b56 100644 --- a/pkg/mattermost/mattermost_v1beta_test.go +++ b/pkg/mattermost/mattermost_v1beta_test.go @@ -804,7 +804,6 @@ func TestGenerateDeployment_V1Beta(t *testing.T) { description string mmSpec mmv1beta.MattermostSpec dbConfig DatabaseConfig - fileStoreConfig FileStoreConfig expectedInitContainers []corev1.Container }{ { @@ -887,6 +886,50 @@ func TestGenerateDeployment_V1Beta(t *testing.T) { } }) + t.Run("custom sidecar container pod extension", func(t *testing.T) { + dbConfig := &ExternalDBConfig{dbType: database.PostgreSQLDatabase, hasDBCheckURL: false} + customSideBarContainers := []corev1.Container{ + {Image: "my-log-exporter-image", Name: "log-exporter"}, + {Image: "my-audit-image", Name: "audit"}, + } + + for _, testCase := range []struct { + description string + mmSpec mmv1beta.MattermostSpec + expectedSidecarContainers []corev1.Container + }{ + { + description: "no custom sidebar containers", + mmSpec: mmv1beta.MattermostSpec{ + PodExtensions: mmv1beta.PodExtensions{ + SidecarContainers: nil, + }, + }, + expectedSidecarContainers: nil, + }, + { + description: "custom sidebar containers", + mmSpec: mmv1beta.MattermostSpec{ + PodExtensions: mmv1beta.PodExtensions{ + SidecarContainers: customSideBarContainers, + }, + }, + expectedSidecarContainers: customSideBarContainers, + }, + } { + t.Run(testCase.description, func(t *testing.T) { + mattermost := &mmv1beta.Mattermost{ + Spec: testCase.mmSpec, + } + deployment := GenerateDeploymentV1Beta(mattermost, dbConfig, &ExternalFileStore{}, "", "", "", "image") + require.Equal(t, len(testCase.expectedSidecarContainers), len(deployment.Spec.Template.Spec.Containers)-1) + if testCase.mmSpec.PodExtensions.SidecarContainers != nil { + assert.Equal(t, testCase.expectedSidecarContainers, deployment.Spec.Template.Spec.Containers[1:]) + } + }) + } + }) + t.Run("should set SiteURL env if ingress host provided", func(t *testing.T) { mattermost := &mmv1beta.Mattermost{ Spec: mmv1beta.MattermostSpec{},