internal/manifests/neuronmonitor/container.go (58 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package neuronmonitor
import (
"fmt"
"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"
)
const (
configmapMountPath = "/etc/neuron-monitor-config"
)
// Container builds a container for the given neuron monitor exporter.
func Container(cfg config.Config, logger logr.Logger, exporter v1alpha1.NeuronMonitor) corev1.Container {
image := exporter.Spec.Image
if len(image) == 0 {
image = cfg.NeuronMonitorImage()
}
ports := make([]corev1.ContainerPort, 0, len(exporter.Spec.Ports))
for _, p := range exporter.Spec.Ports {
ports = append(ports, corev1.ContainerPort{
Name: p.Name,
ContainerPort: p.Port,
Protocol: p.Protocol,
})
}
command := exporter.Spec.Command
argsMap := exporter.Spec.Args
if argsMap == nil {
argsMap = map[string]string{}
}
var args []string
for k, v := range argsMap {
args = append(args, "--"+k, v)
}
args = append(args, "--neuron-monitor-config", fmt.Sprintf("%s/%s", configmapMountPath, NeuronMonitorJson))
var volumeMounts []corev1.VolumeMount
volumeMounts = append(volumeMounts, corev1.VolumeMount{
Name: NeuronConfigMapVolumeName,
MountPath: configmapMountPath,
})
if len(exporter.Spec.VolumeMounts) > 0 {
volumeMounts = append(volumeMounts, exporter.Spec.VolumeMounts...)
}
var envVars = exporter.Spec.Env
if exporter.Spec.Env == nil {
envVars = []corev1.EnvVar{}
}
return corev1.Container{
Name: ComponentNeuronExporter,
Image: image,
Command: command,
Args: args,
SecurityContext: exporter.Spec.SecurityContext,
Resources: exporter.Spec.Resources,
Env: envVars,
Ports: ports,
VolumeMounts: volumeMounts,
}
}