in internal/manifests/collector/ports.go [67:124]
func getContainerPorts(logger logr.Logger, cfg string, otelCfg string, specPorts []corev1.ServicePort) map[string]corev1.ContainerPort {
ports := map[string]corev1.ContainerPort{}
var servicePorts []corev1.ServicePort
config, err := adapters.ConfigStructFromJSONString(cfg)
if err != nil {
logger.Error(err, "error parsing cw agent config")
return ports
}
servicePorts = getServicePortsFromCWAgentConfig(logger, config)
if otelCfg != "" {
otelConfig, err := adapters.ConfigFromString(otelCfg)
if err != nil {
logger.Error(err, "error parsing cw agent otel config")
} else {
otelPorts, otelPortsErr := adapters.GetServicePortsFromCWAgentOtelConfig(logger, otelConfig)
if otelPortsErr != nil {
logger.Error(otelPortsErr, "error parsing ports from cw agent otel config")
}
servicePorts = append(servicePorts, otelPorts...)
}
}
for _, p := range servicePorts {
truncName := naming.Truncate(p.Name, maxPortLen)
if p.Name != truncName {
logger.Info("truncating container port name",
zap.String("port.name.prev", p.Name), zap.String("port.name.new", truncName))
}
nameErrs := validation.IsValidPortName(truncName)
numErrs := validation.IsValidPortNum(int(p.Port))
if len(nameErrs) > 0 || len(numErrs) > 0 {
logger.Info("dropping invalid container port", zap.String("port.name", truncName), zap.Int32("port.num", p.Port),
zap.Strings("port.name.errs", nameErrs), zap.Strings("num.errs", numErrs))
continue
}
// remove duplicate ports
if isDuplicatePort(ports, p) {
logger.Info("dropping duplicate container port", zap.String("port.name", truncName), zap.Int32("port.num", p.Port))
continue
}
ports[truncName] = corev1.ContainerPort{
Name: truncName,
ContainerPort: p.Port,
Protocol: p.Protocol,
}
}
for _, p := range specPorts {
ports[p.Name] = corev1.ContainerPort{
Name: p.Name,
ContainerPort: p.Port,
Protocol: p.Protocol,
}
}
return ports
}