internal/manifests/targetallocator/container.go (63 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package targetallocator import ( "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" "github.com/aws/amazon-cloudwatch-agent-operator/apis/v1alpha1" "github.com/aws/amazon-cloudwatch-agent-operator/internal/config" "github.com/aws/amazon-cloudwatch-agent-operator/internal/naming" ) // This has to be a constant so that TA container code can access it as well const TACertMountPath = "/etc/amazon-cloudwatch-target-allocator-cert" // Container builds a container for the given TargetAllocator. func Container(cfg config.Config, logger logr.Logger, otelcol v1alpha1.AmazonCloudWatchAgent) corev1.Container { image := otelcol.Spec.TargetAllocator.Image if len(image) == 0 { image = cfg.TargetAllocatorImage() } ports := make([]corev1.ContainerPort, 0) ports = append(ports, corev1.ContainerPort{ Name: "https", ContainerPort: naming.TargetAllocatorContainerPort, Protocol: corev1.ProtocolTCP, }) volumeMounts := []corev1.VolumeMount{{ Name: naming.TAConfigMapVolume(), MountPath: "/conf", }, { Name: naming.TASecretVolume(), MountPath: TACertMountPath, ReadOnly: true, }, } var envVars = otelcol.Spec.TargetAllocator.Env if otelcol.Spec.TargetAllocator.Env == nil { envVars = []corev1.EnvVar{} } idx := -1 for i := range envVars { if envVars[i].Name == "OTELCOL_NAMESPACE" { idx = i } } if idx == -1 { envVars = append(envVars, corev1.EnvVar{ Name: "OTELCOL_NAMESPACE", ValueFrom: &corev1.EnvVarSource{ FieldRef: &corev1.ObjectFieldSelector{ FieldPath: "metadata.namespace", }, }, }) } var args []string if otelcol.Spec.TargetAllocator.PrometheusCR.Enabled { args = append(args, "--enable-prometheus-cr-watcher") } return corev1.Container{ Name: naming.TAContainer(), Image: image, Ports: ports, Env: envVars, VolumeMounts: volumeMounts, Resources: otelcol.Spec.TargetAllocator.Resources, Args: args, } }