From 58fa4a9022cbefe1e705141825e4d439d65f0a40 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Sun, 2 Feb 2025 19:00:13 -0500 Subject: [PATCH 01/16] Add k8sattributesprocessor to k8s otlp pipeline with workload type detection --- cmd/config-translator/translator.go | 1 + translator/context/context.go | 9 ++ ...tlp_metrics_cloudwatchlogs_eks_config.yaml | 31 +++- .../sampleConfig/otlp_metrics_eks_config.yaml | 31 +++- translator/tocwconfig/tocwconfig_test.go | 2 + .../otel/pipeline/host/translator.go | 2 + .../otel/pipeline/host/translator_test.go | 4 +- .../otel/processor/awsentity/translator.go | 56 ++++--- .../processor/awsentity/translator_test.go | 35 +++++ .../k8sattributes_agent.yaml | 16 ++ .../k8sattributes_gateway.yaml | 14 ++ .../k8sattributesprocessor/translator.go | 57 ++++++++ .../k8sattributesprocessor/translator_test.go | 138 ++++++++++++++++++ translator/util/eksdetector/eksdetector.go | 40 ++++- .../util/eksdetector/eksdetector_test.go | 129 ++++++++++++++++ .../util/eksdetector/eksdetectortestutil.go | 5 + translator/util/sdkutil.go | 10 ++ translator/util/sdkutil_test.go | 16 ++ 18 files changed, 570 insertions(+), 26 deletions(-) create mode 100644 translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_agent.yaml create mode 100644 translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_gateway.yaml create mode 100644 translator/translate/otel/processor/k8sattributesprocessor/translator.go create mode 100644 translator/translate/otel/processor/k8sattributesprocessor/translator_test.go diff --git a/cmd/config-translator/translator.go b/cmd/config-translator/translator.go index ad213dfd27..0df0e6e058 100644 --- a/cmd/config-translator/translator.go +++ b/cmd/config-translator/translator.go @@ -66,6 +66,7 @@ func initFlags() { mode := translatorUtil.DetectAgentMode(*inputMode) ctx.SetMode(mode) ctx.SetKubernetesMode(translatorUtil.DetectKubernetesMode(mode)) + ctx.SetWorkloadType(translatorUtil.DetectWorkloadType()) } /** diff --git a/translator/context/context.go b/translator/context/context.go index 00b790b63b..dcddc2b88f 100644 --- a/translator/context/context.go +++ b/translator/context/context.go @@ -38,6 +38,7 @@ type Context struct { outputTomlFilePath string mode string kubernetesMode string + workloadType string shortMode string credentials map[string]string proxy map[string]string @@ -99,6 +100,10 @@ func (ctx *Context) KubernetesMode() string { return ctx.kubernetesMode } +func (ctx *Context) WorkloadType() string { + return ctx.workloadType +} + func (ctx *Context) ShortMode() string { return ctx.shortMode } @@ -150,6 +155,10 @@ func (ctx *Context) SetKubernetesMode(mode string) { } } +func (ctx *Context) SetWorkloadType(workloadType string) { + ctx.workloadType = workloadType +} + func (ctx *Context) SetCredentials(creds map[string]string) { ctx.credentials = creds } diff --git a/translator/tocwconfig/sampleConfig/otlp_metrics_cloudwatchlogs_eks_config.yaml b/translator/tocwconfig/sampleConfig/otlp_metrics_cloudwatchlogs_eks_config.yaml index 5534b3815e..203799295c 100644 --- a/translator/tocwconfig/sampleConfig/otlp_metrics_cloudwatchlogs_eks_config.yaml +++ b/translator/tocwconfig/sampleConfig/otlp_metrics_cloudwatchlogs_eks_config.yaml @@ -70,6 +70,34 @@ processors: match_type: "" initial_value: 2 max_staleness: 0s + k8sattributes/hostOtlpMetrics/cloudwatchlogs: + auth_type: serviceAccount + context: "" + exclude: + pods: + - name: jaeger-agent + - name: jaeger-collector + extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.deployment.name + - k8s.daemonset.name + - k8s.statefulset.name + - k8s.cronjob.name + - k8s.job.name + - k8s.node.name + filter: + namespace: "" + node: "" + node_from_env_var: K8S_NODE_NAME + kube_config_path: "" + passthrough: false + pod_association: + - sources: + - from: connection + name: "" receivers: otlp/metrics: protocols: @@ -121,8 +149,9 @@ service: exporters: - awsemf processors: - - awsentity/service/otlp - cumulativetodelta/hostOtlpMetrics/cloudwatchlogs + - k8sattributes/hostOtlpMetrics/cloudwatchlogs + - awsentity/service/otlp - batch/hostOtlpMetrics/cloudwatchlogs receivers: - otlp/metrics diff --git a/translator/tocwconfig/sampleConfig/otlp_metrics_eks_config.yaml b/translator/tocwconfig/sampleConfig/otlp_metrics_eks_config.yaml index a55f30cb6d..3fecc84b86 100644 --- a/translator/tocwconfig/sampleConfig/otlp_metrics_eks_config.yaml +++ b/translator/tocwconfig/sampleConfig/otlp_metrics_eks_config.yaml @@ -55,6 +55,34 @@ processors: imds_retries: 1 middleware: agenthealth/statuscode refresh_interval_seconds: 0s + k8sattributes/hostOtlpMetrics: + auth_type: serviceAccount + context: "" + exclude: + pods: + - name: jaeger-agent + - name: jaeger-collector + extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.deployment.name + - k8s.daemonset.name + - k8s.statefulset.name + - k8s.cronjob.name + - k8s.job.name + - k8s.node.name + filter: + namespace: "" + node: "" + node_from_env_var: K8S_NODE_NAME + kube_config_path: "" + passthrough: false + pod_association: + - sources: + - from: connection + name: "" receivers: otlp/metrics: protocols: @@ -106,9 +134,10 @@ service: exporters: - awscloudwatch processors: - - awsentity/service/otlp - cumulativetodelta/hostOtlpMetrics - ec2tagger + - k8sattributes/hostOtlpMetrics + - awsentity/service/otlp receivers: - otlp/metrics telemetry: diff --git a/translator/tocwconfig/tocwconfig_test.go b/translator/tocwconfig/tocwconfig_test.go index 7b45433150..3cc5ab85b7 100644 --- a/translator/tocwconfig/tocwconfig_test.go +++ b/translator/tocwconfig/tocwconfig_test.go @@ -297,6 +297,7 @@ func TestOtlpMetricsConfigKubernetes(t *testing.T) { resetContext(t) context.CurrentContext().SetMode(config.ModeEC2) context.CurrentContext().SetKubernetesMode(config.ModeK8sEC2) + context.CurrentContext().SetWorkloadType("DaemonSet") context.CurrentContext().SetRunInContainer(true) checkTranslation(t, "otlp_metrics_eks_config", "linux", nil, "") checkTranslation(t, "otlp_metrics_eks_config", "darwin", nil, "") @@ -315,6 +316,7 @@ func TestOtlpMetricsEmfConfigKubernetes(t *testing.T) { resetContext(t) context.CurrentContext().SetMode(config.ModeEC2) context.CurrentContext().SetKubernetesMode(config.ModeK8sEC2) + context.CurrentContext().SetWorkloadType("DaemonSet") context.CurrentContext().SetRunInContainer(true) t.Setenv(config.HOST_NAME, "host_name_from_env") checkTranslation(t, "otlp_metrics_cloudwatchlogs_eks_config", "linux", nil, "") diff --git a/translator/translate/otel/pipeline/host/translator.go b/translator/translate/otel/pipeline/host/translator.go index 2e8502b536..ff0aa6f6e3 100644 --- a/translator/translate/otel/pipeline/host/translator.go +++ b/translator/translate/otel/pipeline/host/translator.go @@ -24,6 +24,7 @@ import ( "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/processor/batchprocessor" "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/processor/cumulativetodeltaprocessor" "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/processor/ec2taggerprocessor" + "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/processor/k8sattributesprocessor" "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/processor/metricsdecorator" "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/processor/rollupprocessor" "github.com/aws/amazon-cloudwatch-agent/translator/util/ecsutil" @@ -106,6 +107,7 @@ func (t translator) Translate(conf *confmap.Conf) (*common.ComponentTranslators, case common.PipelineNameHostOtlpMetrics: // TODO: For OTLP, the entity processor is only on K8S for now. Eventually this should be added to EC2 if currentContext.KubernetesMode() != "" { + translators.Processors.Set(k8sattributesprocessor.NewTranslatorWithName(t.name)) entityProcessor = awsentity.NewTranslatorWithEntityType(awsentity.Service, common.OtlpKey, false) } case common.PipelineNameHostCustomMetrics: diff --git a/translator/translate/otel/pipeline/host/translator_test.go b/translator/translate/otel/pipeline/host/translator_test.go index 8a23380093..cba19971d8 100644 --- a/translator/translate/otel/pipeline/host/translator_test.go +++ b/translator/translate/otel/pipeline/host/translator_test.go @@ -132,7 +132,7 @@ func TestTranslator(t *testing.T) { want: &want{ pipelineID: "metrics/hostOtlpMetrics", receivers: []string{"nop", "other"}, - processors: []string{"cumulativetodelta/hostOtlpMetrics", "awsentity/service/otlp"}, + processors: []string{"cumulativetodelta/hostOtlpMetrics", "k8sattributes/hostOtlpMetrics", "awsentity/service/otlp"}, exporters: []string{"awscloudwatch"}, extensions: []string{"agenthealth/metrics", "agenthealth/statuscode"}, }, @@ -190,7 +190,7 @@ func TestTranslator(t *testing.T) { want: &want{ pipelineID: "metrics/hostOtlpMetrics/cloudwatchlogs", receivers: []string{"nop", "other"}, - processors: []string{"cumulativetodelta/hostOtlpMetrics/cloudwatchlogs", "awsentity/service/otlp", "batch/hostOtlpMetrics/cloudwatchlogs"}, + processors: []string{"cumulativetodelta/hostOtlpMetrics/cloudwatchlogs", "k8sattributes/hostOtlpMetrics/cloudwatchlogs", "awsentity/service/otlp", "batch/hostOtlpMetrics/cloudwatchlogs"}, exporters: []string{"awsemf"}, extensions: []string{"agenthealth/logs", "agenthealth/statuscode"}, }, diff --git a/translator/translate/otel/processor/awsentity/translator.go b/translator/translate/otel/processor/awsentity/translator.go index ed81c702d0..b9fe6d5881 100644 --- a/translator/translate/otel/processor/awsentity/translator.go +++ b/translator/translate/otel/processor/awsentity/translator.go @@ -4,6 +4,7 @@ package awsentity import ( + "os" "strings" "go.opentelemetry.io/collector/component" @@ -55,8 +56,10 @@ func (t *translator) ID() component.ID { } func (t *translator) Translate(conf *confmap.Conf) (component.Config, error) { + ctx := context.CurrentContext() + // Do not send entity for ECS - if context.CurrentContext().RunInContainer() && ecsutil.GetECSUtilSingleton().IsECS() { + if ctx.RunInContainer() && ecsutil.GetECSUtilSingleton().IsECS() { return nil, nil } @@ -70,32 +73,47 @@ func (t *translator) Translate(conf *confmap.Conf) (component.Config, error) { cfg.ScrapeDatapointAttribute = true } - hostedInConfigKey := common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.AppSignals, "hosted_in") - hostedIn, hostedInConfigured := common.GetString(conf, hostedInConfigKey) - if !hostedInConfigured { - hostedInConfigKey = common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.AppSignalsFallback, "hosted_in") - hostedIn, hostedInConfigured = common.GetString(conf, hostedInConfigKey) - } - if common.IsAppSignalsKubernetes() { - if !hostedInConfigured { - hostedIn = util.GetClusterNameFromEc2Tagger() - } - } + cfg.KubernetesMode = ctx.KubernetesMode() //TODO: This logic is more or less identical to what AppSignals does. This should be moved to a common place for reuse - ctx := context.CurrentContext() - mode := ctx.KubernetesMode() - cfg.KubernetesMode = mode - - mode = ctx.Mode() if cfg.KubernetesMode != "" { - cfg.ClusterName = hostedIn + searchKeys := []string{ + common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.AppSignals, "hosted_in"), + common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.AppSignalsFallback, "hosted_in"), + common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.KubernetesKey, "cluster_name"), + } + + var clusterName string + var found bool + + for _, path := range searchKeys { + val, ok := common.GetString(conf, path) + if ok && val != "" { + clusterName = val + found = true + break + } + } + + if !found { + envVarClusterName := os.Getenv("K8S_CLUSTER_NAME") + if envVarClusterName != "" { + clusterName = envVarClusterName + found = true + } + } + + if !found { + clusterName = util.GetClusterNameFromEc2Tagger() + } + + cfg.ClusterName = clusterName } // We want to keep platform config variable to be // anything that is non-Kubernetes related so the // processor can perform different logics for EKS // in EC2 or Non-EC2 - cfg.Platform = mode + cfg.Platform = ctx.Mode() return cfg, nil } diff --git a/translator/translate/otel/processor/awsentity/translator_test.go b/translator/translate/otel/processor/awsentity/translator_test.go index fb75ca8e1c..20bb59ee3c 100644 --- a/translator/translate/otel/processor/awsentity/translator_test.go +++ b/translator/translate/otel/processor/awsentity/translator_test.go @@ -20,6 +20,7 @@ func TestTranslate(t *testing.T) { input map[string]interface{} mode string kubernetesMode string + envClusterName string want *awsentity.Config }{ "OnlyProfile": { @@ -39,6 +40,35 @@ func TestTranslate(t *testing.T) { Platform: config.ModeEC2, }, }, + "KubernetesUnderLogs": { + input: map[string]interface{}{ + "logs": map[string]interface{}{ + "metrics_collected": map[string]interface{}{ + "kubernetes": map[string]interface{}{ + "cluster_name": "ci-logs", + }, + }, + }, + }, + mode: config.ModeEC2, + kubernetesMode: config.ModeEKS, + want: &awsentity.Config{ + ClusterName: "ci-logs", + KubernetesMode: config.ModeEKS, + Platform: config.ModeEC2, + }, + }, + "EnvVar": { + input: map[string]interface{}{}, + mode: config.ModeEC2, + kubernetesMode: config.ModeEKS, + envClusterName: "env-cluster", + want: &awsentity.Config{ + ClusterName: "env-cluster", + KubernetesMode: config.ModeEKS, + Platform: config.ModeEC2, + }, + }, "ECS": { input: map[string]interface{}{}, mode: config.ModeECS, @@ -56,6 +86,11 @@ func TestTranslate(t *testing.T) { context.CurrentContext().SetMode(testCase.mode) context.CurrentContext().SetKubernetesMode(testCase.kubernetesMode) } + if testCase.envClusterName != "" { + t.Setenv("K8S_CLUSTER_NAME", testCase.envClusterName) + } else { + t.Setenv("K8S_CLUSTER_NAME", "") + } tt := NewTranslator() assert.Equal(t, "awsentity", tt.ID().String()) conf := confmap.NewFromStringMap(testCase.input) diff --git a/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_agent.yaml b/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_agent.yaml new file mode 100644 index 0000000000..09469fb865 --- /dev/null +++ b/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_agent.yaml @@ -0,0 +1,16 @@ +pod_association: + - sources: + - from: connection +extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.deployment.name + - k8s.daemonset.name + - k8s.statefulset.name + - k8s.cronjob.name + - k8s.job.name + - k8s.node.name +filter: + node_from_env_var: K8S_NODE_NAME \ No newline at end of file diff --git a/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_gateway.yaml b/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_gateway.yaml new file mode 100644 index 0000000000..aa2ab8b119 --- /dev/null +++ b/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_gateway.yaml @@ -0,0 +1,14 @@ +pod_association: + - sources: + - from: connection +extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.deployment.name + - k8s.daemonset.name + - k8s.statefulset.name + - k8s.cronjob.name + - k8s.job.name + - k8s.node.name \ No newline at end of file diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator.go b/translator/translate/otel/processor/k8sattributesprocessor/translator.go new file mode 100644 index 0000000000..4893ef80c4 --- /dev/null +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator.go @@ -0,0 +1,57 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: MIT + +package k8sattributesprocessor + +import ( + _ "embed" + "fmt" + + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor" + + "github.com/aws/amazon-cloudwatch-agent/translator/context" + "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/common" + + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/confmap" + "go.opentelemetry.io/collector/processor" +) + +//go:embed k8sattributes_agent.yaml +var k8sAttributesAgentConfig string + +//go:embed k8sattributes_gateway.yaml +var k8sAttributesGatewayConfig string + +type translator struct { + name string + factory processor.Factory +} + +var _ common.Translator[component.Config] = (*translator)(nil) + +func NewTranslatorWithName(name string) common.Translator[component.Config] { + return &translator{name, k8sattributesprocessor.NewFactory()} +} + +func (t *translator) ID() component.ID { + return component.NewIDWithName(t.factory.Type(), t.name) +} + +func (t *translator) Translate(conf *confmap.Conf) (component.Config, error) { + cfg := t.factory.CreateDefaultConfig().(*k8sattributesprocessor.Config) + currentContext := context.CurrentContext() + + if currentContext.KubernetesMode() == "" { + return nil, fmt.Errorf("k8sattributesprocessor is not supported in this context") + } + + switch workloadType := currentContext.WorkloadType(); workloadType { + case "DaemonSet": + return common.GetYamlFileToYamlConfig(cfg, k8sAttributesAgentConfig) + case "Deployment", "StatefulSet": + return common.GetYamlFileToYamlConfig(cfg, k8sAttributesGatewayConfig) + default: + return nil, fmt.Errorf("k8sattributesprocessor is not supported for workload type: %s", workloadType) + } +} diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go new file mode 100644 index 0000000000..4f77f9e96d --- /dev/null +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go @@ -0,0 +1,138 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: MIT + +package k8sattributesprocessor + +import ( + "fmt" + "testing" + + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor" + "github.com/stretchr/testify/assert" + "go.opentelemetry.io/collector/confmap" + + "github.com/aws/amazon-cloudwatch-agent/translator/config" + "github.com/aws/amazon-cloudwatch-agent/translator/context" +) + +func TestTranslate(t *testing.T) { + testCases := map[string]struct { + input map[string]interface{} + mode string + kubernetesMode string + workloadType string + want *k8sattributesprocessor.Config + wantErr error + }{ + "DaemonSet": { + input: map[string]interface{}{}, + mode: config.ModeEC2, + kubernetesMode: config.ModeEKS, + workloadType: "DaemonSet", + want: &k8sattributesprocessor.Config{ + Association: []k8sattributesprocessor.PodAssociationConfig{ + { + Sources: []k8sattributesprocessor.PodAssociationSourceConfig{ + { + From: "connection", + }, + }, + }, + }, + Extract: k8sattributesprocessor.ExtractConfig{ + Metadata: []string{"k8s.namespace.name", "k8s.pod.name", "k8s.replicaset.name", "k8s.deployment.name", "k8s.daemonset.name", "k8s.statefulset.name", "k8s.cronjob.name", "k8s.job.name", "k8s.node.name"}, + }, + Filter: k8sattributesprocessor.FilterConfig{ + NodeFromEnvVar: "K8S_NODE_NAME", + }, + }, + }, + "Deployment": { + input: map[string]interface{}{}, + mode: config.ModeEC2, + kubernetesMode: config.ModeEKS, + workloadType: "Deployment", + want: &k8sattributesprocessor.Config{ + Association: []k8sattributesprocessor.PodAssociationConfig{ + { + Sources: []k8sattributesprocessor.PodAssociationSourceConfig{ + { + From: "connection", + }, + }, + }, + }, + Extract: k8sattributesprocessor.ExtractConfig{ + Metadata: []string{"k8s.namespace.name", "k8s.pod.name", "k8s.replicaset.name", "k8s.deployment.name", "k8s.daemonset.name", "k8s.statefulset.name", "k8s.cronjob.name", "k8s.job.name", "k8s.node.name"}, + }, + Filter: k8sattributesprocessor.FilterConfig{ + NodeFromEnvVar: "", + }, + }, + }, + "StatefulSet": { + input: map[string]interface{}{}, + mode: config.ModeEC2, + kubernetesMode: config.ModeEKS, + workloadType: "StatefulSet", + want: &k8sattributesprocessor.Config{ + Association: []k8sattributesprocessor.PodAssociationConfig{ + { + Sources: []k8sattributesprocessor.PodAssociationSourceConfig{ + { + From: "connection", + }, + }, + }, + }, + Extract: k8sattributesprocessor.ExtractConfig{ + Metadata: []string{"k8s.namespace.name", "k8s.pod.name", "k8s.replicaset.name", "k8s.deployment.name", "k8s.daemonset.name", "k8s.statefulset.name", "k8s.cronjob.name", "k8s.job.name", "k8s.node.name"}, + }, + Filter: k8sattributesprocessor.FilterConfig{ + NodeFromEnvVar: "", + }, + }, + }, + "NotKubernetes": { + input: map[string]interface{}{}, + mode: config.ModeEC2, + kubernetesMode: "", + workloadType: "Unknown", + wantErr: fmt.Errorf("k8sattributesprocessor is not supported in this context"), + }, + "Unknown": { + input: map[string]interface{}{}, + mode: config.ModeEC2, + kubernetesMode: config.ModeEKS, + workloadType: "Unknown", + wantErr: fmt.Errorf("k8sattributesprocessor is not supported for workload type: Unknown"), + }, + } + for name, testCase := range testCases { + t.Run(name, func(t *testing.T) { + context.CurrentContext().SetMode(testCase.mode) + context.CurrentContext().SetKubernetesMode(testCase.kubernetesMode) + context.CurrentContext().SetWorkloadType(testCase.workloadType) + tt := NewTranslatorWithName("") + assert.Equal(t, "k8sattributes", tt.ID().String()) + conf := confmap.NewFromStringMap(testCase.input) + got, err := tt.Translate(conf) + + if testCase.wantErr != nil { + assert.Error(t, err) + assert.Equal(t, testCase.wantErr.Error(), err.Error()) + return + } + + assert.NoError(t, err) + if testCase.want == nil { + assert.Nil(t, got) + } else { + expect := got.(*k8sattributesprocessor.Config) + assert.Equal(t, testCase.want.Association, expect.Association) + assert.Equal(t, testCase.want.Extract, expect.Extract) + assert.Equal(t, testCase.want.Filter, expect.Filter) + } + }) + } +} diff --git a/translator/util/eksdetector/eksdetector.go b/translator/util/eksdetector/eksdetector.go index 58830883d6..ab8d19a778 100644 --- a/translator/util/eksdetector/eksdetector.go +++ b/translator/util/eksdetector/eksdetector.go @@ -6,6 +6,7 @@ package eksdetector import ( "context" "fmt" + "os" "sync" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -15,6 +16,7 @@ import ( type Detector interface { getConfigMap(namespace string, name string) (map[string]string, error) + getWorkloadType() (string, error) } type EksDetector struct { @@ -22,8 +24,9 @@ type EksDetector struct { } type IsEKSCache struct { - Value bool - Err error + Value bool + Workload string + Err error } const ( @@ -60,6 +63,7 @@ var ( once.Do(func() { var errors error var value bool + var workloadType string // Create eks detector eksDetector, err := NewDetector() if err != nil { @@ -72,8 +76,11 @@ var ( if err == nil { value = awsAuth != nil } + + // Get workload type + workloadType, _ = eksDetector.getWorkloadType() } - isEKSCacheSingleton = IsEKSCache{Value: value, Err: errors} + isEKSCacheSingleton = IsEKSCache{Value: value, Workload: workloadType, Err: errors} }) return isEKSCacheSingleton @@ -90,6 +97,33 @@ func (d *EksDetector) getConfigMap(namespace string, name string) (map[string]st return configMap.Data, nil } +func (d *EksDetector) getWorkloadType() (string, error) { + podName := os.Getenv("K8S_POD_NAME") + namespace := os.Getenv("K8S_NAMESPACE") + + if podName == "" || namespace == "" { + return "", fmt.Errorf("K8S_POD_NAME/K8S_NAMESPACE environment variables not set") + } + + pod, err := d.Clientset.CoreV1().Pods(namespace).Get(context.TODO(), podName, metav1.GetOptions{}) + if err != nil { + return "", fmt.Errorf("failed to get pod: %v", err) + } + + for _, owner := range pod.OwnerReferences { + switch owner.Kind { + case "DaemonSet": + return "DaemonSet", nil + case "StatefulSet": + return "StatefulSet", nil + case "ReplicaSet": + return "Deployment", nil + } + } + + return "Unknown", nil +} + func getClient() (kubernetes.Interface, error) { //Get cluster config confs, err := getInClusterConfig() diff --git a/translator/util/eksdetector/eksdetector_test.go b/translator/util/eksdetector/eksdetector_test.go index a5dafaf446..6c74fb0085 100644 --- a/translator/util/eksdetector/eksdetector_test.go +++ b/translator/util/eksdetector/eksdetector_test.go @@ -5,6 +5,7 @@ package eksdetector import ( "fmt" + "os" "testing" "github.com/stretchr/testify/assert" @@ -82,6 +83,134 @@ func Test_getConfigMap(t *testing.T) { assert.NotNil(t, res) } +func Test_getWorkloadType_EnvNotSet(t *testing.T) { + client := fake.NewSimpleClientset() + testDetector := &EksDetector{Clientset: client} + + workloadType, err := testDetector.getWorkloadType() + assert.Error(t, err) + assert.Contains(t, err.Error(), "K8S_POD_NAME/K8S_NAMESPACE environment variables not set") + assert.Equal(t, "", workloadType) +} + +func Test_getWorkloadType_PodNotFound(t *testing.T) { + os.Setenv("K8S_POD_NAME", "nonexistent-pod") + os.Setenv("K8S_NAMESPACE", "default") + + client := fake.NewSimpleClientset() + testDetector := &EksDetector{Clientset: client} + + workloadType, err := testDetector.getWorkloadType() + assert.Error(t, err) + assert.Equal(t, "", workloadType) +} + +func Test_getWorkloadType_DaemonSet(t *testing.T) { + podName := "test-pod" + namespace := "default" + os.Setenv("K8S_POD_NAME", podName) + os.Setenv("K8S_NAMESPACE", namespace) + + // Create a pod with an OwnerReference of kind DaemonSet + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: podName, + Namespace: namespace, + OwnerReferences: []metav1.OwnerReference{ + { + Kind: "DaemonSet", + Name: "test-daemonset", + }, + }, + }, + } + + client := fake.NewSimpleClientset(pod) + testDetector := &EksDetector{Clientset: client} + + workloadType, err := testDetector.getWorkloadType() + assert.NoError(t, err) + assert.Equal(t, "DaemonSet", workloadType) +} + +func Test_getWorkloadType_StatefulSet(t *testing.T) { + podName := "test-pod" + namespace := "default" + os.Setenv("K8S_POD_NAME", podName) + os.Setenv("K8S_NAMESPACE", namespace) + + // Create a pod with an OwnerReference of kind StatefulSet + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: podName, + Namespace: namespace, + OwnerReferences: []metav1.OwnerReference{ + { + Kind: "StatefulSet", + Name: "test-statefulset", + }, + }, + }, + } + + client := fake.NewSimpleClientset(pod) + testDetector := &EksDetector{Clientset: client} + + workloadType, err := testDetector.getWorkloadType() + assert.NoError(t, err) + assert.Equal(t, "StatefulSet", workloadType) +} + +func Test_getWorkloadType_ReplicaSet(t *testing.T) { + podName := "test-pod" + namespace := "default" + os.Setenv("K8S_POD_NAME", podName) + os.Setenv("K8S_NAMESPACE", namespace) + + // Create a pod with an OwnerReference of kind ReplicaSet + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: podName, + Namespace: namespace, + OwnerReferences: []metav1.OwnerReference{ + { + Kind: "ReplicaSet", + Name: "test-replicaset", + }, + }, + }, + } + + client := fake.NewSimpleClientset(pod) + testDetector := &EksDetector{Clientset: client} + + workloadType, err := testDetector.getWorkloadType() + assert.NoError(t, err) + assert.Equal(t, "Deployment", workloadType) +} + +func Test_getWorkloadType_Unknown(t *testing.T) { + podName := "test-pod" + namespace := "default" + os.Setenv("K8S_POD_NAME", podName) + os.Setenv("K8S_NAMESPACE", namespace) + + // Create a pod with no OwnerReferences + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: podName, + Namespace: namespace, + }, + } + + client := fake.NewSimpleClientset(pod) + testDetector := &EksDetector{Clientset: client} + + workloadType, err := testDetector.getWorkloadType() + assert.NoError(t, err) + assert.Equal(t, "Unknown", workloadType) +} + func Test_getClientError(t *testing.T) { //InClusterConfig error getInClusterConfig = func() (*rest.Config, error) { diff --git a/translator/util/eksdetector/eksdetectortestutil.go b/translator/util/eksdetector/eksdetectortestutil.go index c3b14a48c5..da093a0a75 100644 --- a/translator/util/eksdetector/eksdetectortestutil.go +++ b/translator/util/eksdetector/eksdetectortestutil.go @@ -44,3 +44,8 @@ func (detector *MockDetector) getConfigMap(namespace string, name string) (map[s args := detector.Called(namespace, name) return args.Get(0).(map[string]string), args.Error(1) } + +func (detector *MockDetector) getWorkloadType() (string, error) { + args := detector.Called() + return args.Get(0).(string), args.Error(1) +} diff --git a/translator/util/sdkutil.go b/translator/util/sdkutil.go index d0bb20510b..4a7cb577fb 100644 --- a/translator/util/sdkutil.go +++ b/translator/util/sdkutil.go @@ -80,6 +80,16 @@ func DetectKubernetesMode(configuredMode string) string { } +func DetectWorkloadType() string { + isEKS := IsEKS() + + if isEKS.Err != nil { + return "" + } + + return isEKS.Workload +} + func SDKRegionWithCredsMap(mode string, credsConfig map[string]string) (region string) { credsMap := GetCredentials(mode, credsConfig) diff --git a/translator/util/sdkutil_test.go b/translator/util/sdkutil_test.go index 94d4d4f3c6..0db425a3a8 100644 --- a/translator/util/sdkutil_test.go +++ b/translator/util/sdkutil_test.go @@ -56,3 +56,19 @@ func TestDetectKubernetesMode(t *testing.T) { }) } } + +func TestDetectWorkloadType(t *testing.T) { + t.Run("IsEKS returns an error", func(t *testing.T) { + IsEKS = func() eksdetector.IsEKSCache { + return eksdetector.IsEKSCache{Err: fmt.Errorf("test error")} + } + require.Equal(t, "", DetectWorkloadType(), "Expected empty workload when IsEKS returns an error") + }) + + t.Run("IsEKS returns a valid workload", func(t *testing.T) { + IsEKS = func() eksdetector.IsEKSCache { + return eksdetector.IsEKSCache{Err: nil, Workload: "DaemonSet"} + } + require.Equal(t, "DaemonSet", DetectWorkloadType(), "Expected workload 'DaemonSet' when IsEKS returns no error") + }) +} From e16963e623929314ca1b805f35c7830b23ab3ac0 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Sun, 2 Feb 2025 19:09:24 -0500 Subject: [PATCH 02/16] fix imports --- .../otel/processor/k8sattributesprocessor/translator.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator.go b/translator/translate/otel/processor/k8sattributesprocessor/translator.go index 4893ef80c4..84a964ba1b 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator.go @@ -8,13 +8,12 @@ import ( "fmt" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor" - - "github.com/aws/amazon-cloudwatch-agent/translator/context" - "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/common" - "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/processor" + + "github.com/aws/amazon-cloudwatch-agent/translator/context" + "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/common" ) //go:embed k8sattributes_agent.yaml From 74b183d5b5aae86f43ee9c259c7c5b9002665262 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Sun, 2 Feb 2025 19:49:08 -0500 Subject: [PATCH 03/16] add debug exporter --- translator/translate/otel/pipeline/host/translator.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/translator/translate/otel/pipeline/host/translator.go b/translator/translate/otel/pipeline/host/translator.go index ff0aa6f6e3..f4883bbcd5 100644 --- a/translator/translate/otel/pipeline/host/translator.go +++ b/translator/translate/otel/pipeline/host/translator.go @@ -5,6 +5,7 @@ package host import ( "fmt" + "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/exporter/debug" "log" "slices" "strings" @@ -109,6 +110,9 @@ func (t translator) Translate(conf *confmap.Conf) (*common.ComponentTranslators, if currentContext.KubernetesMode() != "" { translators.Processors.Set(k8sattributesprocessor.NewTranslatorWithName(t.name)) entityProcessor = awsentity.NewTranslatorWithEntityType(awsentity.Service, common.OtlpKey, false) + if enabled, _ := common.GetBool(conf, common.AgentDebugConfigKey); enabled { + translators.Exporters.Set(debug.NewTranslator(common.WithName(t.name))) + } } case common.PipelineNameHostCustomMetrics: if !currentContext.RunInContainer() { From 4fd78fc12029c301f0ce98e9db1f8d424a4ba8b1 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Sun, 2 Feb 2025 21:01:00 -0500 Subject: [PATCH 04/16] Revert "add debug exporter" This reverts commit 74b183d5b5aae86f43ee9c259c7c5b9002665262. --- translator/translate/otel/pipeline/host/translator.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/translator/translate/otel/pipeline/host/translator.go b/translator/translate/otel/pipeline/host/translator.go index f4883bbcd5..ff0aa6f6e3 100644 --- a/translator/translate/otel/pipeline/host/translator.go +++ b/translator/translate/otel/pipeline/host/translator.go @@ -5,7 +5,6 @@ package host import ( "fmt" - "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/exporter/debug" "log" "slices" "strings" @@ -110,9 +109,6 @@ func (t translator) Translate(conf *confmap.Conf) (*common.ComponentTranslators, if currentContext.KubernetesMode() != "" { translators.Processors.Set(k8sattributesprocessor.NewTranslatorWithName(t.name)) entityProcessor = awsentity.NewTranslatorWithEntityType(awsentity.Service, common.OtlpKey, false) - if enabled, _ := common.GetBool(conf, common.AgentDebugConfigKey); enabled { - translators.Exporters.Set(debug.NewTranslator(common.WithName(t.name))) - } } case common.PipelineNameHostCustomMetrics: if !currentContext.RunInContainer() { From 206b162bb0048968e9b1d07a5b9b79d661c5bc5c Mon Sep 17 00:00:00 2001 From: musa-asad Date: Sun, 2 Feb 2025 21:24:10 -0500 Subject: [PATCH 05/16] use const --- translator/config/mode.go | 6 ++++++ translator/tocwconfig/tocwconfig_test.go | 4 ++-- .../otel/processor/k8sattributesprocessor/translator.go | 5 +++-- .../processor/k8sattributesprocessor/translator_test.go | 6 +++--- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/translator/config/mode.go b/translator/config/mode.go index 5f8c8f93ed..4838027424 100644 --- a/translator/config/mode.go +++ b/translator/config/mode.go @@ -28,3 +28,9 @@ const ( ShortModeK8sEC2 = "K8E" ShortModeK8sOnPrem = "K8OP" ) + +const ( + DaemonSet = "DaemonSet" + Deployment = "Deployment" + StatefulSet = "StatefulSet" +) diff --git a/translator/tocwconfig/tocwconfig_test.go b/translator/tocwconfig/tocwconfig_test.go index 3cc5ab85b7..238879d112 100644 --- a/translator/tocwconfig/tocwconfig_test.go +++ b/translator/tocwconfig/tocwconfig_test.go @@ -297,7 +297,7 @@ func TestOtlpMetricsConfigKubernetes(t *testing.T) { resetContext(t) context.CurrentContext().SetMode(config.ModeEC2) context.CurrentContext().SetKubernetesMode(config.ModeK8sEC2) - context.CurrentContext().SetWorkloadType("DaemonSet") + context.CurrentContext().SetWorkloadType(config.DaemonSet) context.CurrentContext().SetRunInContainer(true) checkTranslation(t, "otlp_metrics_eks_config", "linux", nil, "") checkTranslation(t, "otlp_metrics_eks_config", "darwin", nil, "") @@ -316,7 +316,7 @@ func TestOtlpMetricsEmfConfigKubernetes(t *testing.T) { resetContext(t) context.CurrentContext().SetMode(config.ModeEC2) context.CurrentContext().SetKubernetesMode(config.ModeK8sEC2) - context.CurrentContext().SetWorkloadType("DaemonSet") + context.CurrentContext().SetWorkloadType(config.DaemonSet) context.CurrentContext().SetRunInContainer(true) t.Setenv(config.HOST_NAME, "host_name_from_env") checkTranslation(t, "otlp_metrics_cloudwatchlogs_eks_config", "linux", nil, "") diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator.go b/translator/translate/otel/processor/k8sattributesprocessor/translator.go index 84a964ba1b..88237a2c0f 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator.go @@ -6,6 +6,7 @@ package k8sattributesprocessor import ( _ "embed" "fmt" + "github.com/aws/amazon-cloudwatch-agent/translator/config" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor" "go.opentelemetry.io/collector/component" @@ -46,9 +47,9 @@ func (t *translator) Translate(conf *confmap.Conf) (component.Config, error) { } switch workloadType := currentContext.WorkloadType(); workloadType { - case "DaemonSet": + case config.DaemonSet: return common.GetYamlFileToYamlConfig(cfg, k8sAttributesAgentConfig) - case "Deployment", "StatefulSet": + case config.Deployment, config.StatefulSet: return common.GetYamlFileToYamlConfig(cfg, k8sAttributesGatewayConfig) default: return nil, fmt.Errorf("k8sattributesprocessor is not supported for workload type: %s", workloadType) diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go index 4f77f9e96d..95def25ffb 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go @@ -28,7 +28,7 @@ func TestTranslate(t *testing.T) { input: map[string]interface{}{}, mode: config.ModeEC2, kubernetesMode: config.ModeEKS, - workloadType: "DaemonSet", + workloadType: config.DaemonSet, want: &k8sattributesprocessor.Config{ Association: []k8sattributesprocessor.PodAssociationConfig{ { @@ -51,7 +51,7 @@ func TestTranslate(t *testing.T) { input: map[string]interface{}{}, mode: config.ModeEC2, kubernetesMode: config.ModeEKS, - workloadType: "Deployment", + workloadType: config.Deployment, want: &k8sattributesprocessor.Config{ Association: []k8sattributesprocessor.PodAssociationConfig{ { @@ -74,7 +74,7 @@ func TestTranslate(t *testing.T) { input: map[string]interface{}{}, mode: config.ModeEC2, kubernetesMode: config.ModeEKS, - workloadType: "StatefulSet", + workloadType: config.StatefulSet, want: &k8sattributesprocessor.Config{ Association: []k8sattributesprocessor.PodAssociationConfig{ { From 6fa02f172da528b8d97ff867e9cda274eac6f3e4 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Sun, 2 Feb 2025 21:25:01 -0500 Subject: [PATCH 06/16] fix imports --- .../otel/processor/k8sattributesprocessor/translator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator.go b/translator/translate/otel/processor/k8sattributesprocessor/translator.go index 88237a2c0f..5e616da585 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator.go @@ -6,13 +6,13 @@ package k8sattributesprocessor import ( _ "embed" "fmt" - "github.com/aws/amazon-cloudwatch-agent/translator/config" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/processor" + "github.com/aws/amazon-cloudwatch-agent/translator/config" "github.com/aws/amazon-cloudwatch-agent/translator/context" "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/common" ) From c8516be30a53c55979f00cae80bb5613038f9287 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Sun, 2 Feb 2025 22:33:05 -0500 Subject: [PATCH 07/16] revert cluster changes --- internal/tls/testdata/server.crt | 44 +++++++-------- internal/tls/testdata/server.key | 52 ++++++++--------- internal/tls/testdata/tls-ca.crt | 50 ++++++++--------- .../otel/processor/awsentity/translator.go | 56 +++++++------------ .../processor/awsentity/translator_test.go | 35 ------------ 5 files changed, 92 insertions(+), 145 deletions(-) diff --git a/internal/tls/testdata/server.crt b/internal/tls/testdata/server.crt index 12424f7b27..1da4a72f7f 100644 --- a/internal/tls/testdata/server.crt +++ b/internal/tls/testdata/server.crt @@ -1,24 +1,24 @@ -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- diff --git a/internal/tls/testdata/server.key b/internal/tls/testdata/server.key index 0efcb40bb3..37359fe8bc 100644 --- a/internal/tls/testdata/server.key +++ b/internal/tls/testdata/server.key @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD9zHhy7+7K2oJM -w/Ijo++WAibzqMrOCMvhFcGYSwHbcfivPSDia+hCpJ6CNPxWaMIOcbs+LBN7CvLk -FQI7TdLuDLuqEJveLkgeUcRr5AVer5/tycVHQvn4/iok4NMfqRKA8VV0qy94Bdmb -b3zXQtOfhQpN/aXRD3ubW54fiD7XF0qlprVhAS4hz4UlNBzeSVrH0GdlZAfKxUrU -PAsBRtA1vYuhklbDdc5psy0HVTwMj+FM8vPOOP3HmbJpZCHurpNwYkUTU4VHCSpR -SSa6AgSfMuwCQPLN7Xi1rJES4pPtMYp7ZHnes3zGkEYMzkjw3NOtkEzgxwdiJEoV -WQHi4eznAgMBAAECggEAGv7z1O32jXc+ouG40NewNVmXQRW0NMQ0w4Vn6UYZNXlj -BWjQJaVquCQAhEMUkDBma9jnHM7dZ5obie0+Joa5p/6Mu6M2oSR1IVx7Myq284Jk -1Ys/w7u5ESYf33pWmqiGQlbpSxamXvLoWaM7OT5veilRlkgjqiAmerj9EceRP5mR -aheVE5ctY5oZmdnvA9OcN6B8Oxk59EWEOECs8qAF/ChYfC8pWKOp4U0RILQ/9jXD -lu4p0C2XyadrJReer3whudUADWa/WSxgVCrx85/g/RTKs38KTPy7W4g3bv8KBRhc -bjLzoYTl6esRAi8nMG5Fc/85t07hkVv+j5a1NccxgQKBgQD/y/tdH90C8CrAn9y5 -mgr+1QcqJeJWaBpNf+yBqtLbybl6uLY2OzbZtzllU+TDUVlKZB36t2GnG6EIRUcd -WTHUVq8zEIRtDBa12SZlJ08FrNFyKfBByehEOvMazTxb7rdGbiv5+XztCrcPUn1f -cu30v5nBRjqDxtiAbKccFcZPpwKBgQD+ABUQ0h3aX5qDqzhvSLNuqy+hOZPLsqva -VxsDsIlzzzGwmdf+m2Dn9JR/xJNMPf717LJs8IYIqW4KX/HW0pC3Y8fu/6h4fFM9 -ZpJkM2hjRu0uLxDWLc+AombMavFtkZ1tffKxv6mG7Ud163ulBIt24b701XfhR5UX -RWvWI50gwQKBgQCFa1i9luwJJ0m1VOyk5kML7gMhqcbneL8XYzzx2S7IMuyKpSNt -H++ZGWdXga2Vbq3bDmNQrSvDJLcWgEP6e9ZwwZH6WYgo9KA3036iTiF6fUx1doh5 -WB3M0M6SUTBFZzqzAq3vYYEWhns7A7Se/2w8N1+0HrRQnXu5aHK1RGo+iwKBgEST -hRx7fi/dK/xsl9oDyN4SPdPLlcmjPZ6/cb23RgUMZaAGiThmfu1hLU6pphMpkdKX -yzx6W9Wu2NTYPpT/WK8Ks4olYDjXaCnlrZR8BKz5E0Qq1OLej21ta0+5d+FbNSPA -o2u2EXEqUubVYxaUeYrpPAMiNzGNgAU+avTvvJaBAoGBAKely84irwZicpex79T/ -KYV3VOMYs6wETNSLdKkR9G2WEI4OsEw0qGm9pZXzS6lKOSXxW6fOzwI0/vhnmT4O -hBxeR+PriPFqD80ASXeVeVOEjMXQEjZ8Po+FfUvVu8zMNIPDwJ+hy94FE5kkDBte -vy6FnjMquTvekIsRwo/OOdz3 +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDeHnQuE2qHmav/ +TrPwYgOMaK94rgcBqGJCOQYM5Tvwmf629YptI53d4SjDe/Pd5QwbFBcPpjsflqqg +qqMCIQWWJaN3KvzZiFTg2VafnQZ9pI118xyJG3zHzx9CJoRg/VHlIvNkp7c1OlSt +9h0tQs4ZMmhYHhPnHK1uhkrAoQjxzwe6qWMg3SQqZMueEF3I9a/HcfgMGApx8PSe +Qfp/7yfNt29YpRBmixdNewGG2TLZ4XYuFHaOaUt5cKATe2LxNBNLOP5g/sIml81P +7tFeqeVAMi30WXw5VhvgWeC44W1bvC9YjCHhSl8dE9tv0UpXK8n4uqe1AfDjRXgK +qy9sT7rJAgMBAAECggEAYZlmGXzkmXLX1dZCUMTwpDi3qcJmR78ydcDSvMXZYa54 +8vHPgodc7crq+4KytHTZrehU/cZgQlAU54YzHFNgPgqJ2mokMn2qNiap3nbEDF9K +3WIWztQqLy3+oTWFg4yr+JAz/K2JXjUkUlBLn8C0CPRSTy3gNvQt7NvLavsXkBBD +Uj6qgltCXV9+CIAoyL6Y4tZnRRIsjO6/m8NU38t1V0lhiS18Pw5uzTIsFK69Rr3d +uT2qlRCoGnmBlSDipbv/bVwbipguHiamr1oASIwN/SjfrzYTNYbJpKa0q7QuOPdT +IXifc4y12JRvQfuz0Ndrk1YpE2RrRqoM5vNRrsK9gQKBgQD/8V+X5JtTy+/mhd96 +ZekcWKBHWYETF/qItoPLhUYa36S+nRhjW5jjLX50rOql+5kPwh6HfUo0CvvIRnWj +Ph0eG4fFjlIGAUrpSy1fs3oFxgmB1u/47gF7a+fnR3nejC3E2b+nilVnMl4E9FsV +Ap/4PsJJ9wHo/oKRiBEBVPLEOQKBgQDeKyW/dMfUk75SN4+45PqxYPmfUFXlaSuf +Su+dNjONeFa5xwjzqJwdrC3cCwXi6txSjVIYnIL52ph5DC4wylAit30DUVtp2YjW +D8FQXNH94yhfF8BhYhapy03zMt2x/IiuY33NwFOSAF0HrwXlbHv93dWDsmBxnpLG +Ww7zdlRLEQKBgQCmY9dPujE44wZNiY7l1cccxIk+mXOOZDJeGrnH4BbZdbd2rE6k +mXHljzf8xkWuLsktM3gBgXRyLQnPA++KduEbJ662wnWUrdZzoIoZA2c6xap8nK1Z +2fFguaAD/bW+9sbyiNVOKGKpOldhRTLJj/FLxBEvYMP/IybjUeAsS3ugEQKBgQCM +/gbzrPIQdz6mQLqGFVL/dNKWB06ry4WyjsToGXi4BDHNroGA2HVS420rIxe2PWRb +Q3JhShpY5CA1WcSKlCotDhNZIq2HzFTpvI/rJyzhGeMKDjG5250UXoB2ocZN6Tz4 +pw00oSSoGHDxqmJsid9aagjRjkdkc8Uj+q/PVD4EcQKBgE1ADSxfvcf0FnxnW8IJ +8/EEaWiaSNFV54WEiMOwVTzwxeif6Hj818imoKyweOMlMyBbJkX6DISC0CfyToAO ++KIpjz/LiL84eJ+/fmaptwoU/c0fdQHCzH0h2kEYBpJ42ZBmwZrFtKEuDjHXbhx2 +9YZXcIiNjjR2lC1/LnxDK14W -----END PRIVATE KEY----- diff --git a/internal/tls/testdata/tls-ca.crt b/internal/tls/testdata/tls-ca.crt index 4b861f4f40..bfef5b5e23 100644 --- a/internal/tls/testdata/tls-ca.crt +++ b/internal/tls/testdata/tls-ca.crt @@ -1,29 +1,29 @@ -----BEGIN CERTIFICATE----- MIIE9jCCAt6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQKEwdSb290 -IENBMB4XDTI0MTAyMjIyMzYzOFoXDTM0MTAyMjIyMzYzOFowEjEQMA4GA1UEChMH -Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJrhBEDtGS+b -WAVvkFJuQAkDbCCToy39eJ+51ZS/wA1yuVde8JvtX95dZC0STNm7GnxfIwH8tOut -gc82vz2Bim2K1N9uzBDu6flGWXpzXZSSuMAj1q8MRhEs1OpfbLuqxMs/TAbGYGqa -6FPlUWCwMZvpiRpV+hGxRIp9OsAYn/oVUvuACXnADEwBUYnGL3c9FYPn+kkjpsfH -vaH5kY8uTpKNIbmerYBCIt7X0QXcLOxk2CdnapKuIjaTML8og1/rMPbRsnGvIebh -FZsA60QnhuNiL6MowdJn17/Stl6Rs7cNV5zq3/WmaiipOoTcrKIMgA5ci23A69Pz -0WRfomoFsstRWHhimGrKrT5ewznEitvnWWxfiblmy21LTTJf6nrf7cD1B7Xlrfq+ -BORuHwSxyTapXw0HKSYPwjiSiijywWInS3QR3b5uvpyFy8rGfXI2PSTpnAsK/nws -38jUO7qPsj3AnwHpgLZe0XpGFqmemSmlPif0VT3Pn6CwsCpnEf7vFNYu+rmVjrqT -sBXv7qJMryXL4MDQcTsrX0+XDVWGlKrhVemPI94go86IuqASx7BldMounk9Pra70 -oRUZXsEbzBMGOyF/U3ZmCyJSryV4S+tkUckb/VInpmex1pkx15Q3EGmpRwTQ4/M/ -hGz0foplN1HGRQsVxuPt58Wj7/EW6BDrAgMBAAGjVzBVMA4GA1UdDwEB/wQEAwIC +IENBMB4XDTI1MDIwMzAyMjYxNloXDTM1MDIwMzAyMjYxNlowEjEQMA4GA1UEChMH +Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMsjFk1D7jfZ +6oyxTPK6VdZWjibw7S1NofsSbjVkPC1+Mq0ME7UL8zjonDNmJ2XpNq4ptJ0c+UAT +t8uxVvHQK+D5O6c+nrMjSR29BrJmqIhAuF+D027AUv3LAwhzvxkdNIyCmYzR5hsq +DoBy7ORvpBYJiuJw1flUjI8FANzXIMY3xpNiQwnnjXRx2kmAJhejISXIzWyKflj3 +ACTh9ooG/JJD1+6Ji6NByJveLQnQjF4h8im8FzQbK4jvlzNQKWcVCjKnVOVR9sl2 +bQdN1wIuvJuE88bWv2ylHdB+qOwR7DRZaxOknbZAeIbKACIPNb9B62AjCPkj7TiH +4U6hKRNP9cWXHnfs/mOx3GebUxLZBcJrBg8X71tiQCQTznlXskU/a4oXLYBimf06 +C/9rmOp4uXd6L66UWJ+G6S0ImCRuafLmdzmJQL/edw3dQpCcqw7SKuX3N2VISaYd +6SGvhPrBKp5CMeePEkHQMRTIoJigHbaw5Lt7GpZc4iAWMek2KW2sI1dOZFCfqXHB +FfX5PAHrjF6DdlC1ToDjWcfQcNUHm5a2gz8qn+G7dBRSe0Aco6dDiW5hyExEFP6T +KmLDhyZo3UIllWIgr6YGW2sERKhuEPBhgNuGs4phlo5E18Eiu4tY6BNLuORZwHPR +egYPa+KwmVSfGmfmYIRm64cR95Hk9h65AgMBAAGjVzBVMA4GA1UdDwEB/wQEAwIC hDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBSWf0MJGMR6k7iAcZMQBOIFr+DoGjANBgkqhkiG9w0BAQsFAAOCAgEAHQib14b2 -y1b9Xa+lvvpyho887AF5LJMvcAaFA2qrZTgsct9YAUyP4jwHSMa82F34GF5zWm96 -wKGa2V7rykKPLtL2o0ilfnz3bJndL2MUjgVqK7GzkOGIhhXreG6/4WZ+oNReMzjw -uZ6zWKhUrTKfvt5J70Nzk+aPrwEzOOcb078QfrFvxElrkoyBz5LGF6HVdIVYUO94 -1DW1egaduIZCcmavO/CJ5QvzXMyiHkpuT0SoltvVFskoP9aS0OxnaQIrmNx+vajT -9zd/WMroxBh+z4Y6sQmy6zZF+rAPItgZNHncMt8AJBGUlAhjgtiP37v/+w5zKpOD -nXPKVf9mOPNdIDUBpzWxRXwkE1GI8kFjQsuiBD0RGNj1Db/m9lnxOX2B1vKOHRtg -Q3LQURMd3oNj2L4dnJG4SbfXi6CdxRPPtvAb2TJh8qIsL7WxDRey1uhmQWknYXso -kiQ1VgEBVwOXR3NGqlDboWYma/wDOtbaMSd0dl2m2PP7FXJNakUmrATNdwrWjuto -onSHblkkDI5NvA+xUPXm4n7os3DHl6upvToVRTIDaWDBJLGyWEVw87y8+VPR0l5g -XpYDatVLlgC/Nz3Ggn3vepGPV25d7COORXI1EXfjn2PUx7lEK0MbaPfkqPC43Q1g -qubuxdWE+FRLgfs3Ywv1JckNAec7Jg0FA2w= +BBSB3iuQ8UuFVxXcUJ+bOKhnlHhtXTANBgkqhkiG9w0BAQsFAAOCAgEAY4wi0UOu +gVu/in3nJmqAYeiemWcjxCIqrRzkcSMAjHIDYFRIpy66zkGOd5iVM6xPvTu02ZMF +FdHEgglOzXkxAhG906gjPauxAy504nHT65J9kMjVa+nvVrN4S2X6+UqD0njQgfaJ +tydx9mvy3/o5lD/+oyTgBe1SnTGh1t31gEWzfmahyz7zabwCl5LNvpN0W2izlMLE +ouefuOIgxTsc6gTjFEbVfB5tNFPfI66WTZ6Jef5AjD5sxC/xWbYjkz4nFNiqykyv +flRnvzbvy4NTg6AWtac+yGoqVslvmdSq7bGDr2PcF4ShGLKjPnXVO9GXvk73KDz8 +qRosdOFOIl0eI5cJKCbCe44EpLAUN0ni0UncZEUVG7stAn1Sdh1V8LkihF3F371i +LtjhnemlE9goi+MlAY74JNgYc9V2zyRI9VU7Cwk1gamSmhMSJyPebKHmhF5fD9Wu +FDQAyG9RtABF120oxGdQwtAEZtAuJ9LkYwXtI/rYT7DkpTvlV1EIHSMWTGozi3Io +EXf8fm9o6HbI9IDZ+OVp7OD4wYibHP7yG6M55fhHsweUQsYgqvuWDE7+Iv26khTW +7LMdXH8oxKq219qOnua/welPobQ9aKgaMMgh2rf0QI00xhITfbFZvvZajS5MY9wi +VIexFFTpEfNjMdSgRjGmLYSk2ctC1b0Ejgw= -----END CERTIFICATE----- diff --git a/translator/translate/otel/processor/awsentity/translator.go b/translator/translate/otel/processor/awsentity/translator.go index b9fe6d5881..ed81c702d0 100644 --- a/translator/translate/otel/processor/awsentity/translator.go +++ b/translator/translate/otel/processor/awsentity/translator.go @@ -4,7 +4,6 @@ package awsentity import ( - "os" "strings" "go.opentelemetry.io/collector/component" @@ -56,10 +55,8 @@ func (t *translator) ID() component.ID { } func (t *translator) Translate(conf *confmap.Conf) (component.Config, error) { - ctx := context.CurrentContext() - // Do not send entity for ECS - if ctx.RunInContainer() && ecsutil.GetECSUtilSingleton().IsECS() { + if context.CurrentContext().RunInContainer() && ecsutil.GetECSUtilSingleton().IsECS() { return nil, nil } @@ -73,47 +70,32 @@ func (t *translator) Translate(conf *confmap.Conf) (component.Config, error) { cfg.ScrapeDatapointAttribute = true } - cfg.KubernetesMode = ctx.KubernetesMode() - - //TODO: This logic is more or less identical to what AppSignals does. This should be moved to a common place for reuse - if cfg.KubernetesMode != "" { - searchKeys := []string{ - common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.AppSignals, "hosted_in"), - common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.AppSignalsFallback, "hosted_in"), - common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.KubernetesKey, "cluster_name"), - } - - var clusterName string - var found bool - - for _, path := range searchKeys { - val, ok := common.GetString(conf, path) - if ok && val != "" { - clusterName = val - found = true - break - } - } - - if !found { - envVarClusterName := os.Getenv("K8S_CLUSTER_NAME") - if envVarClusterName != "" { - clusterName = envVarClusterName - found = true - } + hostedInConfigKey := common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.AppSignals, "hosted_in") + hostedIn, hostedInConfigured := common.GetString(conf, hostedInConfigKey) + if !hostedInConfigured { + hostedInConfigKey = common.ConfigKey(common.LogsKey, common.MetricsCollectedKey, common.AppSignalsFallback, "hosted_in") + hostedIn, hostedInConfigured = common.GetString(conf, hostedInConfigKey) + } + if common.IsAppSignalsKubernetes() { + if !hostedInConfigured { + hostedIn = util.GetClusterNameFromEc2Tagger() } + } - if !found { - clusterName = util.GetClusterNameFromEc2Tagger() - } + //TODO: This logic is more or less identical to what AppSignals does. This should be moved to a common place for reuse + ctx := context.CurrentContext() + mode := ctx.KubernetesMode() + cfg.KubernetesMode = mode - cfg.ClusterName = clusterName + mode = ctx.Mode() + if cfg.KubernetesMode != "" { + cfg.ClusterName = hostedIn } // We want to keep platform config variable to be // anything that is non-Kubernetes related so the // processor can perform different logics for EKS // in EC2 or Non-EC2 - cfg.Platform = ctx.Mode() + cfg.Platform = mode return cfg, nil } diff --git a/translator/translate/otel/processor/awsentity/translator_test.go b/translator/translate/otel/processor/awsentity/translator_test.go index 20bb59ee3c..fb75ca8e1c 100644 --- a/translator/translate/otel/processor/awsentity/translator_test.go +++ b/translator/translate/otel/processor/awsentity/translator_test.go @@ -20,7 +20,6 @@ func TestTranslate(t *testing.T) { input map[string]interface{} mode string kubernetesMode string - envClusterName string want *awsentity.Config }{ "OnlyProfile": { @@ -40,35 +39,6 @@ func TestTranslate(t *testing.T) { Platform: config.ModeEC2, }, }, - "KubernetesUnderLogs": { - input: map[string]interface{}{ - "logs": map[string]interface{}{ - "metrics_collected": map[string]interface{}{ - "kubernetes": map[string]interface{}{ - "cluster_name": "ci-logs", - }, - }, - }, - }, - mode: config.ModeEC2, - kubernetesMode: config.ModeEKS, - want: &awsentity.Config{ - ClusterName: "ci-logs", - KubernetesMode: config.ModeEKS, - Platform: config.ModeEC2, - }, - }, - "EnvVar": { - input: map[string]interface{}{}, - mode: config.ModeEC2, - kubernetesMode: config.ModeEKS, - envClusterName: "env-cluster", - want: &awsentity.Config{ - ClusterName: "env-cluster", - KubernetesMode: config.ModeEKS, - Platform: config.ModeEC2, - }, - }, "ECS": { input: map[string]interface{}{}, mode: config.ModeECS, @@ -86,11 +56,6 @@ func TestTranslate(t *testing.T) { context.CurrentContext().SetMode(testCase.mode) context.CurrentContext().SetKubernetesMode(testCase.kubernetesMode) } - if testCase.envClusterName != "" { - t.Setenv("K8S_CLUSTER_NAME", testCase.envClusterName) - } else { - t.Setenv("K8S_CLUSTER_NAME", "") - } tt := NewTranslator() assert.Equal(t, "awsentity", tt.ID().String()) conf := confmap.NewFromStringMap(testCase.input) From 18f1855f5f03c806d9bb5697ed0115485268685e Mon Sep 17 00:00:00 2001 From: musa-asad Date: Mon, 3 Feb 2025 00:22:11 -0500 Subject: [PATCH 08/16] revert tls --- internal/tls/testdata/server.crt | 44 +++++++++++++-------------- internal/tls/testdata/server.key | 52 ++++++++++++++++---------------- internal/tls/testdata/tls-ca.crt | 50 +++++++++++++++--------------- 3 files changed, 73 insertions(+), 73 deletions(-) diff --git a/internal/tls/testdata/server.crt b/internal/tls/testdata/server.crt index 1da4a72f7f..12424f7b27 100644 --- a/internal/tls/testdata/server.crt +++ b/internal/tls/testdata/server.crt @@ -1,24 +1,24 @@ -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- diff --git a/internal/tls/testdata/server.key b/internal/tls/testdata/server.key index 37359fe8bc..0efcb40bb3 100644 --- a/internal/tls/testdata/server.key +++ b/internal/tls/testdata/server.key @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDeHnQuE2qHmav/ -TrPwYgOMaK94rgcBqGJCOQYM5Tvwmf629YptI53d4SjDe/Pd5QwbFBcPpjsflqqg -qqMCIQWWJaN3KvzZiFTg2VafnQZ9pI118xyJG3zHzx9CJoRg/VHlIvNkp7c1OlSt -9h0tQs4ZMmhYHhPnHK1uhkrAoQjxzwe6qWMg3SQqZMueEF3I9a/HcfgMGApx8PSe -Qfp/7yfNt29YpRBmixdNewGG2TLZ4XYuFHaOaUt5cKATe2LxNBNLOP5g/sIml81P -7tFeqeVAMi30WXw5VhvgWeC44W1bvC9YjCHhSl8dE9tv0UpXK8n4uqe1AfDjRXgK -qy9sT7rJAgMBAAECggEAYZlmGXzkmXLX1dZCUMTwpDi3qcJmR78ydcDSvMXZYa54 -8vHPgodc7crq+4KytHTZrehU/cZgQlAU54YzHFNgPgqJ2mokMn2qNiap3nbEDF9K -3WIWztQqLy3+oTWFg4yr+JAz/K2JXjUkUlBLn8C0CPRSTy3gNvQt7NvLavsXkBBD -Uj6qgltCXV9+CIAoyL6Y4tZnRRIsjO6/m8NU38t1V0lhiS18Pw5uzTIsFK69Rr3d -uT2qlRCoGnmBlSDipbv/bVwbipguHiamr1oASIwN/SjfrzYTNYbJpKa0q7QuOPdT -IXifc4y12JRvQfuz0Ndrk1YpE2RrRqoM5vNRrsK9gQKBgQD/8V+X5JtTy+/mhd96 -ZekcWKBHWYETF/qItoPLhUYa36S+nRhjW5jjLX50rOql+5kPwh6HfUo0CvvIRnWj -Ph0eG4fFjlIGAUrpSy1fs3oFxgmB1u/47gF7a+fnR3nejC3E2b+nilVnMl4E9FsV -Ap/4PsJJ9wHo/oKRiBEBVPLEOQKBgQDeKyW/dMfUk75SN4+45PqxYPmfUFXlaSuf -Su+dNjONeFa5xwjzqJwdrC3cCwXi6txSjVIYnIL52ph5DC4wylAit30DUVtp2YjW -D8FQXNH94yhfF8BhYhapy03zMt2x/IiuY33NwFOSAF0HrwXlbHv93dWDsmBxnpLG -Ww7zdlRLEQKBgQCmY9dPujE44wZNiY7l1cccxIk+mXOOZDJeGrnH4BbZdbd2rE6k -mXHljzf8xkWuLsktM3gBgXRyLQnPA++KduEbJ662wnWUrdZzoIoZA2c6xap8nK1Z -2fFguaAD/bW+9sbyiNVOKGKpOldhRTLJj/FLxBEvYMP/IybjUeAsS3ugEQKBgQCM -/gbzrPIQdz6mQLqGFVL/dNKWB06ry4WyjsToGXi4BDHNroGA2HVS420rIxe2PWRb -Q3JhShpY5CA1WcSKlCotDhNZIq2HzFTpvI/rJyzhGeMKDjG5250UXoB2ocZN6Tz4 -pw00oSSoGHDxqmJsid9aagjRjkdkc8Uj+q/PVD4EcQKBgE1ADSxfvcf0FnxnW8IJ -8/EEaWiaSNFV54WEiMOwVTzwxeif6Hj818imoKyweOMlMyBbJkX6DISC0CfyToAO -+KIpjz/LiL84eJ+/fmaptwoU/c0fdQHCzH0h2kEYBpJ42ZBmwZrFtKEuDjHXbhx2 -9YZXcIiNjjR2lC1/LnxDK14W +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD9zHhy7+7K2oJM +w/Ijo++WAibzqMrOCMvhFcGYSwHbcfivPSDia+hCpJ6CNPxWaMIOcbs+LBN7CvLk +FQI7TdLuDLuqEJveLkgeUcRr5AVer5/tycVHQvn4/iok4NMfqRKA8VV0qy94Bdmb +b3zXQtOfhQpN/aXRD3ubW54fiD7XF0qlprVhAS4hz4UlNBzeSVrH0GdlZAfKxUrU +PAsBRtA1vYuhklbDdc5psy0HVTwMj+FM8vPOOP3HmbJpZCHurpNwYkUTU4VHCSpR +SSa6AgSfMuwCQPLN7Xi1rJES4pPtMYp7ZHnes3zGkEYMzkjw3NOtkEzgxwdiJEoV +WQHi4eznAgMBAAECggEAGv7z1O32jXc+ouG40NewNVmXQRW0NMQ0w4Vn6UYZNXlj +BWjQJaVquCQAhEMUkDBma9jnHM7dZ5obie0+Joa5p/6Mu6M2oSR1IVx7Myq284Jk +1Ys/w7u5ESYf33pWmqiGQlbpSxamXvLoWaM7OT5veilRlkgjqiAmerj9EceRP5mR +aheVE5ctY5oZmdnvA9OcN6B8Oxk59EWEOECs8qAF/ChYfC8pWKOp4U0RILQ/9jXD +lu4p0C2XyadrJReer3whudUADWa/WSxgVCrx85/g/RTKs38KTPy7W4g3bv8KBRhc +bjLzoYTl6esRAi8nMG5Fc/85t07hkVv+j5a1NccxgQKBgQD/y/tdH90C8CrAn9y5 +mgr+1QcqJeJWaBpNf+yBqtLbybl6uLY2OzbZtzllU+TDUVlKZB36t2GnG6EIRUcd +WTHUVq8zEIRtDBa12SZlJ08FrNFyKfBByehEOvMazTxb7rdGbiv5+XztCrcPUn1f +cu30v5nBRjqDxtiAbKccFcZPpwKBgQD+ABUQ0h3aX5qDqzhvSLNuqy+hOZPLsqva +VxsDsIlzzzGwmdf+m2Dn9JR/xJNMPf717LJs8IYIqW4KX/HW0pC3Y8fu/6h4fFM9 +ZpJkM2hjRu0uLxDWLc+AombMavFtkZ1tffKxv6mG7Ud163ulBIt24b701XfhR5UX +RWvWI50gwQKBgQCFa1i9luwJJ0m1VOyk5kML7gMhqcbneL8XYzzx2S7IMuyKpSNt +H++ZGWdXga2Vbq3bDmNQrSvDJLcWgEP6e9ZwwZH6WYgo9KA3036iTiF6fUx1doh5 +WB3M0M6SUTBFZzqzAq3vYYEWhns7A7Se/2w8N1+0HrRQnXu5aHK1RGo+iwKBgEST +hRx7fi/dK/xsl9oDyN4SPdPLlcmjPZ6/cb23RgUMZaAGiThmfu1hLU6pphMpkdKX +yzx6W9Wu2NTYPpT/WK8Ks4olYDjXaCnlrZR8BKz5E0Qq1OLej21ta0+5d+FbNSPA +o2u2EXEqUubVYxaUeYrpPAMiNzGNgAU+avTvvJaBAoGBAKely84irwZicpex79T/ +KYV3VOMYs6wETNSLdKkR9G2WEI4OsEw0qGm9pZXzS6lKOSXxW6fOzwI0/vhnmT4O +hBxeR+PriPFqD80ASXeVeVOEjMXQEjZ8Po+FfUvVu8zMNIPDwJ+hy94FE5kkDBte +vy6FnjMquTvekIsRwo/OOdz3 -----END PRIVATE KEY----- diff --git a/internal/tls/testdata/tls-ca.crt b/internal/tls/testdata/tls-ca.crt index bfef5b5e23..4b861f4f40 100644 --- a/internal/tls/testdata/tls-ca.crt +++ b/internal/tls/testdata/tls-ca.crt @@ -1,29 +1,29 @@ -----BEGIN CERTIFICATE----- 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 -VIexFFTpEfNjMdSgRjGmLYSk2ctC1b0Ejgw= +BBSWf0MJGMR6k7iAcZMQBOIFr+DoGjANBgkqhkiG9w0BAQsFAAOCAgEAHQib14b2 +y1b9Xa+lvvpyho887AF5LJMvcAaFA2qrZTgsct9YAUyP4jwHSMa82F34GF5zWm96 +wKGa2V7rykKPLtL2o0ilfnz3bJndL2MUjgVqK7GzkOGIhhXreG6/4WZ+oNReMzjw +uZ6zWKhUrTKfvt5J70Nzk+aPrwEzOOcb078QfrFvxElrkoyBz5LGF6HVdIVYUO94 +1DW1egaduIZCcmavO/CJ5QvzXMyiHkpuT0SoltvVFskoP9aS0OxnaQIrmNx+vajT +9zd/WMroxBh+z4Y6sQmy6zZF+rAPItgZNHncMt8AJBGUlAhjgtiP37v/+w5zKpOD +nXPKVf9mOPNdIDUBpzWxRXwkE1GI8kFjQsuiBD0RGNj1Db/m9lnxOX2B1vKOHRtg +Q3LQURMd3oNj2L4dnJG4SbfXi6CdxRPPtvAb2TJh8qIsL7WxDRey1uhmQWknYXso +kiQ1VgEBVwOXR3NGqlDboWYma/wDOtbaMSd0dl2m2PP7FXJNakUmrATNdwrWjuto +onSHblkkDI5NvA+xUPXm4n7os3DHl6upvToVRTIDaWDBJLGyWEVw87y8+VPR0l5g +XpYDatVLlgC/Nz3Ggn3vepGPV25d7COORXI1EXfjn2PUx7lEK0MbaPfkqPC43Q1g +qubuxdWE+FRLgfs3Ywv1JckNAec7Jg0FA2w= -----END CERTIFICATE----- From 0cbe47d8ab60ee419947fd80a4417a9b086fcfa0 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Mon, 3 Feb 2025 00:24:58 -0500 Subject: [PATCH 09/16] change pod name --- translator/util/eksdetector/eksdetector.go | 4 ++-- translator/util/eksdetector/eksdetector_test.go | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/translator/util/eksdetector/eksdetector.go b/translator/util/eksdetector/eksdetector.go index ab8d19a778..3847741990 100644 --- a/translator/util/eksdetector/eksdetector.go +++ b/translator/util/eksdetector/eksdetector.go @@ -98,11 +98,11 @@ func (d *EksDetector) getConfigMap(namespace string, name string) (map[string]st } func (d *EksDetector) getWorkloadType() (string, error) { - podName := os.Getenv("K8S_POD_NAME") + podName := os.Getenv("POD_NAME") namespace := os.Getenv("K8S_NAMESPACE") if podName == "" || namespace == "" { - return "", fmt.Errorf("K8S_POD_NAME/K8S_NAMESPACE environment variables not set") + return "", fmt.Errorf("POD_NAME/K8S_NAMESPACE environment variables not set") } pod, err := d.Clientset.CoreV1().Pods(namespace).Get(context.TODO(), podName, metav1.GetOptions{}) diff --git a/translator/util/eksdetector/eksdetector_test.go b/translator/util/eksdetector/eksdetector_test.go index 6c74fb0085..6d24982dab 100644 --- a/translator/util/eksdetector/eksdetector_test.go +++ b/translator/util/eksdetector/eksdetector_test.go @@ -89,12 +89,12 @@ func Test_getWorkloadType_EnvNotSet(t *testing.T) { workloadType, err := testDetector.getWorkloadType() assert.Error(t, err) - assert.Contains(t, err.Error(), "K8S_POD_NAME/K8S_NAMESPACE environment variables not set") + assert.Contains(t, err.Error(), "POD_NAME/K8S_NAMESPACE environment variables not set") assert.Equal(t, "", workloadType) } func Test_getWorkloadType_PodNotFound(t *testing.T) { - os.Setenv("K8S_POD_NAME", "nonexistent-pod") + os.Setenv("POD_NAME", "nonexistent-pod") os.Setenv("K8S_NAMESPACE", "default") client := fake.NewSimpleClientset() @@ -108,7 +108,7 @@ func Test_getWorkloadType_PodNotFound(t *testing.T) { func Test_getWorkloadType_DaemonSet(t *testing.T) { podName := "test-pod" namespace := "default" - os.Setenv("K8S_POD_NAME", podName) + os.Setenv("POD_NAME", podName) os.Setenv("K8S_NAMESPACE", namespace) // Create a pod with an OwnerReference of kind DaemonSet @@ -136,7 +136,7 @@ func Test_getWorkloadType_DaemonSet(t *testing.T) { func Test_getWorkloadType_StatefulSet(t *testing.T) { podName := "test-pod" namespace := "default" - os.Setenv("K8S_POD_NAME", podName) + os.Setenv("POD_NAME", podName) os.Setenv("K8S_NAMESPACE", namespace) // Create a pod with an OwnerReference of kind StatefulSet @@ -164,7 +164,7 @@ func Test_getWorkloadType_StatefulSet(t *testing.T) { func Test_getWorkloadType_ReplicaSet(t *testing.T) { podName := "test-pod" namespace := "default" - os.Setenv("K8S_POD_NAME", podName) + os.Setenv("POD_NAME", podName) os.Setenv("K8S_NAMESPACE", namespace) // Create a pod with an OwnerReference of kind ReplicaSet @@ -192,7 +192,7 @@ func Test_getWorkloadType_ReplicaSet(t *testing.T) { func Test_getWorkloadType_Unknown(t *testing.T) { podName := "test-pod" namespace := "default" - os.Setenv("K8S_POD_NAME", podName) + os.Setenv("POD_NAME", podName) os.Setenv("K8S_NAMESPACE", namespace) // Create a pod with no OwnerReferences From 7044cd920714fe11d0b08cbd2f201ce05c2f2f13 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Mon, 3 Feb 2025 01:59:29 -0500 Subject: [PATCH 10/16] fix lint --- .../otel/processor/k8sattributesprocessor/translator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator.go b/translator/translate/otel/processor/k8sattributesprocessor/translator.go index 5e616da585..32c42d85b7 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator.go @@ -38,7 +38,7 @@ func (t *translator) ID() component.ID { return component.NewIDWithName(t.factory.Type(), t.name) } -func (t *translator) Translate(conf *confmap.Conf) (component.Config, error) { +func (t *translator) Translate(_ *confmap.Conf) (component.Config, error) { cfg := t.factory.CreateDefaultConfig().(*k8sattributesprocessor.Config) currentContext := context.CurrentContext() From 9911f4c13fc500f93039fad4d6bd9a04be4a12f8 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Mon, 3 Feb 2025 21:06:14 -0500 Subject: [PATCH 11/16] address comments --- translator/context/context.go | 11 ++++++++++- .../k8sattributesprocessor/translator_test.go | 2 +- translator/util/eksdetector/eksdetector.go | 9 +++++---- translator/util/eksdetector/eksdetector_test.go | 4 ++-- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/translator/context/context.go b/translator/context/context.go index dcddc2b88f..844dfb105c 100644 --- a/translator/context/context.go +++ b/translator/context/context.go @@ -156,7 +156,16 @@ func (ctx *Context) SetKubernetesMode(mode string) { } func (ctx *Context) SetWorkloadType(workloadType string) { - ctx.workloadType = workloadType + switch workloadType { + case config.DaemonSet: + ctx.workloadType = config.DaemonSet + case config.Deployment: + ctx.workloadType = config.Deployment + case config.StatefulSet: + ctx.workloadType = config.StatefulSet + default: + ctx.workloadType = "" + } } func (ctx *Context) SetCredentials(creds map[string]string) { diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go index 95def25ffb..a084691598 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go @@ -105,7 +105,7 @@ func TestTranslate(t *testing.T) { mode: config.ModeEC2, kubernetesMode: config.ModeEKS, workloadType: "Unknown", - wantErr: fmt.Errorf("k8sattributesprocessor is not supported for workload type: Unknown"), + wantErr: fmt.Errorf("k8sattributesprocessor is not supported for workload type: "), }, } for name, testCase := range testCases { diff --git a/translator/util/eksdetector/eksdetector.go b/translator/util/eksdetector/eksdetector.go index 3847741990..8d6916be59 100644 --- a/translator/util/eksdetector/eksdetector.go +++ b/translator/util/eksdetector/eksdetector.go @@ -6,6 +6,7 @@ package eksdetector import ( "context" "fmt" + "github.com/aws/amazon-cloudwatch-agent/translator/config" "os" "sync" @@ -113,15 +114,15 @@ func (d *EksDetector) getWorkloadType() (string, error) { for _, owner := range pod.OwnerReferences { switch owner.Kind { case "DaemonSet": - return "DaemonSet", nil + return config.DaemonSet, nil case "StatefulSet": - return "StatefulSet", nil + return config.StatefulSet, nil case "ReplicaSet": - return "Deployment", nil + return config.Deployment, nil } } - return "Unknown", nil + return "", nil } func getClient() (kubernetes.Interface, error) { diff --git a/translator/util/eksdetector/eksdetector_test.go b/translator/util/eksdetector/eksdetector_test.go index 6d24982dab..66a2636031 100644 --- a/translator/util/eksdetector/eksdetector_test.go +++ b/translator/util/eksdetector/eksdetector_test.go @@ -189,7 +189,7 @@ func Test_getWorkloadType_ReplicaSet(t *testing.T) { assert.Equal(t, "Deployment", workloadType) } -func Test_getWorkloadType_Unknown(t *testing.T) { +func Test_getWorkloadType_Empty(t *testing.T) { podName := "test-pod" namespace := "default" os.Setenv("POD_NAME", podName) @@ -208,7 +208,7 @@ func Test_getWorkloadType_Unknown(t *testing.T) { workloadType, err := testDetector.getWorkloadType() assert.NoError(t, err) - assert.Equal(t, "Unknown", workloadType) + assert.Equal(t, "", workloadType) } func Test_getClientError(t *testing.T) { From 21d12116eed156e8c4c7bc45626fb9af45396088 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Mon, 3 Feb 2025 21:11:45 -0500 Subject: [PATCH 12/16] fix import --- translator/util/eksdetector/eksdetector.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/translator/util/eksdetector/eksdetector.go b/translator/util/eksdetector/eksdetector.go index 8d6916be59..c5c53e6b1c 100644 --- a/translator/util/eksdetector/eksdetector.go +++ b/translator/util/eksdetector/eksdetector.go @@ -6,13 +6,14 @@ package eksdetector import ( "context" "fmt" - "github.com/aws/amazon-cloudwatch-agent/translator/config" "os" "sync" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" + + "github.com/aws/amazon-cloudwatch-agent/translator/config" ) type Detector interface { From 84c829ffde45d67139446c0bb34ff6fe084444f9 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Wed, 5 Feb 2025 15:16:22 -0500 Subject: [PATCH 13/16] address comments --- cmd/config-translator/translator.go | 2 +- ...sattributes_gateway.yaml => k8sattributes.yaml} | 0 ...es_agent.yaml => k8sattributes_nodefilter.yaml} | 0 .../processor/k8sattributesprocessor/translator.go | 14 +++++++------- .../k8sattributesprocessor/translator_test.go | 2 +- translator/util/sdkutil.go | 2 +- translator/util/sdkutil_test.go | 6 +++--- 7 files changed, 13 insertions(+), 13 deletions(-) rename translator/translate/otel/processor/k8sattributesprocessor/{k8sattributes_gateway.yaml => k8sattributes.yaml} (100%) rename translator/translate/otel/processor/k8sattributesprocessor/{k8sattributes_agent.yaml => k8sattributes_nodefilter.yaml} (100%) diff --git a/cmd/config-translator/translator.go b/cmd/config-translator/translator.go index 0df0e6e058..ae39fa3022 100644 --- a/cmd/config-translator/translator.go +++ b/cmd/config-translator/translator.go @@ -66,7 +66,7 @@ func initFlags() { mode := translatorUtil.DetectAgentMode(*inputMode) ctx.SetMode(mode) ctx.SetKubernetesMode(translatorUtil.DetectKubernetesMode(mode)) - ctx.SetWorkloadType(translatorUtil.DetectWorkloadType()) + ctx.SetWorkloadType(translatorUtil.GetWorkloadType()) } /** diff --git a/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_gateway.yaml b/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes.yaml similarity index 100% rename from translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_gateway.yaml rename to translator/translate/otel/processor/k8sattributesprocessor/k8sattributes.yaml diff --git a/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_agent.yaml b/translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_nodefilter.yaml similarity index 100% rename from translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_agent.yaml rename to translator/translate/otel/processor/k8sattributesprocessor/k8sattributes_nodefilter.yaml diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator.go b/translator/translate/otel/processor/k8sattributesprocessor/translator.go index 32c42d85b7..8cb42b3e86 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator.go @@ -17,11 +17,11 @@ import ( "github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/common" ) -//go:embed k8sattributes_agent.yaml -var k8sAttributesAgentConfig string +//go:embed k8sattributes_nodefilter.yaml +var k8sAttributesNodeFilterConfig string -//go:embed k8sattributes_gateway.yaml -var k8sAttributesGatewayConfig string +//go:embed k8sattributes.yaml +var k8sAttributesConfig string type translator struct { name string @@ -43,14 +43,14 @@ func (t *translator) Translate(_ *confmap.Conf) (component.Config, error) { currentContext := context.CurrentContext() if currentContext.KubernetesMode() == "" { - return nil, fmt.Errorf("k8sattributesprocessor is not supported in this context") + return nil, fmt.Errorf("k8sattributesprocessor is only supported on kubernetes") } switch workloadType := currentContext.WorkloadType(); workloadType { case config.DaemonSet: - return common.GetYamlFileToYamlConfig(cfg, k8sAttributesAgentConfig) + return common.GetYamlFileToYamlConfig(cfg, k8sAttributesNodeFilterConfig) case config.Deployment, config.StatefulSet: - return common.GetYamlFileToYamlConfig(cfg, k8sAttributesGatewayConfig) + return common.GetYamlFileToYamlConfig(cfg, k8sAttributesConfig) default: return nil, fmt.Errorf("k8sattributesprocessor is not supported for workload type: %s", workloadType) } diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go index a084691598..4ea354670d 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go @@ -98,7 +98,7 @@ func TestTranslate(t *testing.T) { mode: config.ModeEC2, kubernetesMode: "", workloadType: "Unknown", - wantErr: fmt.Errorf("k8sattributesprocessor is not supported in this context"), + wantErr: fmt.Errorf("k8sattributesprocessor is only supported on kubernetes"), }, "Unknown": { input: map[string]interface{}{}, diff --git a/translator/util/sdkutil.go b/translator/util/sdkutil.go index 4a7cb577fb..523583ae71 100644 --- a/translator/util/sdkutil.go +++ b/translator/util/sdkutil.go @@ -80,7 +80,7 @@ func DetectKubernetesMode(configuredMode string) string { } -func DetectWorkloadType() string { +func GetWorkloadType() string { isEKS := IsEKS() if isEKS.Err != nil { diff --git a/translator/util/sdkutil_test.go b/translator/util/sdkutil_test.go index 0db425a3a8..cd831acd3c 100644 --- a/translator/util/sdkutil_test.go +++ b/translator/util/sdkutil_test.go @@ -57,18 +57,18 @@ func TestDetectKubernetesMode(t *testing.T) { } } -func TestDetectWorkloadType(t *testing.T) { +func TestGetWorkloadType(t *testing.T) { t.Run("IsEKS returns an error", func(t *testing.T) { IsEKS = func() eksdetector.IsEKSCache { return eksdetector.IsEKSCache{Err: fmt.Errorf("test error")} } - require.Equal(t, "", DetectWorkloadType(), "Expected empty workload when IsEKS returns an error") + require.Equal(t, "", GetWorkloadType(), "Expected empty workload when IsEKS returns an error") }) t.Run("IsEKS returns a valid workload", func(t *testing.T) { IsEKS = func() eksdetector.IsEKSCache { return eksdetector.IsEKSCache{Err: nil, Workload: "DaemonSet"} } - require.Equal(t, "DaemonSet", DetectWorkloadType(), "Expected workload 'DaemonSet' when IsEKS returns no error") + require.Equal(t, "DaemonSet", GetWorkloadType(), "Expected workload 'DaemonSet' when IsEKS returns no error") }) } From c848f91396489a51ba8157bd002693dccd867b72 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Wed, 5 Feb 2025 16:34:34 -0500 Subject: [PATCH 14/16] adjust logic for errors for workload type detection --- translator/util/eksdetector/eksdetector.go | 24 ++++++++++--------- .../util/eksdetector/eksdetector_test.go | 19 +++++---------- .../util/eksdetector/eksdetectortestutil.go | 4 ++-- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/translator/util/eksdetector/eksdetector.go b/translator/util/eksdetector/eksdetector.go index c5c53e6b1c..9c752314d5 100644 --- a/translator/util/eksdetector/eksdetector.go +++ b/translator/util/eksdetector/eksdetector.go @@ -18,7 +18,7 @@ import ( type Detector interface { getConfigMap(namespace string, name string) (map[string]string, error) - getWorkloadType() (string, error) + getWorkloadType() string } type EksDetector struct { @@ -77,10 +77,10 @@ var ( awsAuth, err := eksDetector.getConfigMap(authConfigNamespace, authConfigConfigMap) if err == nil { value = awsAuth != nil - } - // Get workload type - workloadType, _ = eksDetector.getWorkloadType() + // Get workload type + workloadType = eksDetector.getWorkloadType() + } } isEKSCacheSingleton = IsEKSCache{Value: value, Workload: workloadType, Err: errors} }) @@ -99,31 +99,33 @@ func (d *EksDetector) getConfigMap(namespace string, name string) (map[string]st return configMap.Data, nil } -func (d *EksDetector) getWorkloadType() (string, error) { +func (d *EksDetector) getWorkloadType() string { podName := os.Getenv("POD_NAME") namespace := os.Getenv("K8S_NAMESPACE") if podName == "" || namespace == "" { - return "", fmt.Errorf("POD_NAME/K8S_NAMESPACE environment variables not set") + fmt.Println(fmt.Errorf("POD_NAME/K8S_NAMESPACE environment variables not set").Error()) + return "" } pod, err := d.Clientset.CoreV1().Pods(namespace).Get(context.TODO(), podName, metav1.GetOptions{}) if err != nil { - return "", fmt.Errorf("failed to get pod: %v", err) + fmt.Println(fmt.Errorf("failed to get pod for workload type detection: %v", err).Error()) + return "" } for _, owner := range pod.OwnerReferences { switch owner.Kind { case "DaemonSet": - return config.DaemonSet, nil + return config.DaemonSet case "StatefulSet": - return config.StatefulSet, nil + return config.StatefulSet case "ReplicaSet": - return config.Deployment, nil + return config.Deployment } } - return "", nil + return "" } func getClient() (kubernetes.Interface, error) { diff --git a/translator/util/eksdetector/eksdetector_test.go b/translator/util/eksdetector/eksdetector_test.go index 66a2636031..f5911c1d4c 100644 --- a/translator/util/eksdetector/eksdetector_test.go +++ b/translator/util/eksdetector/eksdetector_test.go @@ -87,9 +87,7 @@ func Test_getWorkloadType_EnvNotSet(t *testing.T) { client := fake.NewSimpleClientset() testDetector := &EksDetector{Clientset: client} - workloadType, err := testDetector.getWorkloadType() - assert.Error(t, err) - assert.Contains(t, err.Error(), "POD_NAME/K8S_NAMESPACE environment variables not set") + workloadType := testDetector.getWorkloadType() assert.Equal(t, "", workloadType) } @@ -100,8 +98,7 @@ func Test_getWorkloadType_PodNotFound(t *testing.T) { client := fake.NewSimpleClientset() testDetector := &EksDetector{Clientset: client} - workloadType, err := testDetector.getWorkloadType() - assert.Error(t, err) + workloadType := testDetector.getWorkloadType() assert.Equal(t, "", workloadType) } @@ -128,8 +125,7 @@ func Test_getWorkloadType_DaemonSet(t *testing.T) { client := fake.NewSimpleClientset(pod) testDetector := &EksDetector{Clientset: client} - workloadType, err := testDetector.getWorkloadType() - assert.NoError(t, err) + workloadType := testDetector.getWorkloadType() assert.Equal(t, "DaemonSet", workloadType) } @@ -156,8 +152,7 @@ func Test_getWorkloadType_StatefulSet(t *testing.T) { client := fake.NewSimpleClientset(pod) testDetector := &EksDetector{Clientset: client} - workloadType, err := testDetector.getWorkloadType() - assert.NoError(t, err) + workloadType := testDetector.getWorkloadType() assert.Equal(t, "StatefulSet", workloadType) } @@ -184,8 +179,7 @@ func Test_getWorkloadType_ReplicaSet(t *testing.T) { client := fake.NewSimpleClientset(pod) testDetector := &EksDetector{Clientset: client} - workloadType, err := testDetector.getWorkloadType() - assert.NoError(t, err) + workloadType := testDetector.getWorkloadType() assert.Equal(t, "Deployment", workloadType) } @@ -206,8 +200,7 @@ func Test_getWorkloadType_Empty(t *testing.T) { client := fake.NewSimpleClientset(pod) testDetector := &EksDetector{Clientset: client} - workloadType, err := testDetector.getWorkloadType() - assert.NoError(t, err) + workloadType := testDetector.getWorkloadType() assert.Equal(t, "", workloadType) } diff --git a/translator/util/eksdetector/eksdetectortestutil.go b/translator/util/eksdetector/eksdetectortestutil.go index da093a0a75..cb358f02de 100644 --- a/translator/util/eksdetector/eksdetectortestutil.go +++ b/translator/util/eksdetector/eksdetectortestutil.go @@ -45,7 +45,7 @@ func (detector *MockDetector) getConfigMap(namespace string, name string) (map[s return args.Get(0).(map[string]string), args.Error(1) } -func (detector *MockDetector) getWorkloadType() (string, error) { +func (detector *MockDetector) getWorkloadType() string { args := detector.Called() - return args.Get(0).(string), args.Error(1) + return args.Get(0).(string) } From 6c7bda4f9496d604970a88ee897277cdde334310 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Wed, 5 Feb 2025 16:45:14 -0500 Subject: [PATCH 15/16] adjust log --- .../otel/processor/k8sattributesprocessor/translator.go | 2 +- .../processor/k8sattributesprocessor/translator_test.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator.go b/translator/translate/otel/processor/k8sattributesprocessor/translator.go index 8cb42b3e86..9cfac98318 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator.go @@ -52,6 +52,6 @@ func (t *translator) Translate(_ *confmap.Conf) (component.Config, error) { case config.Deployment, config.StatefulSet: return common.GetYamlFileToYamlConfig(cfg, k8sAttributesConfig) default: - return nil, fmt.Errorf("k8sattributesprocessor is not supported for workload type: %s", workloadType) + return nil, fmt.Errorf("k8sattributesprocessor is not supported for this workload type") } } diff --git a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go index 4ea354670d..08f767e897 100644 --- a/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go +++ b/translator/translate/otel/processor/k8sattributesprocessor/translator_test.go @@ -97,15 +97,15 @@ func TestTranslate(t *testing.T) { input: map[string]interface{}{}, mode: config.ModeEC2, kubernetesMode: "", - workloadType: "Unknown", + workloadType: "", wantErr: fmt.Errorf("k8sattributesprocessor is only supported on kubernetes"), }, "Unknown": { input: map[string]interface{}{}, mode: config.ModeEC2, kubernetesMode: config.ModeEKS, - workloadType: "Unknown", - wantErr: fmt.Errorf("k8sattributesprocessor is not supported for workload type: "), + workloadType: "", + wantErr: fmt.Errorf("k8sattributesprocessor is not supported for this workload type"), }, } for name, testCase := range testCases { From e817325c4ae2239d95fc13a65efc5498eb1b48c6 Mon Sep 17 00:00:00 2001 From: musa-asad Date: Wed, 5 Feb 2025 17:17:04 -0500 Subject: [PATCH 16/16] move get workload outside if --- translator/util/eksdetector/eksdetector.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translator/util/eksdetector/eksdetector.go b/translator/util/eksdetector/eksdetector.go index 9c752314d5..d26ed6302f 100644 --- a/translator/util/eksdetector/eksdetector.go +++ b/translator/util/eksdetector/eksdetector.go @@ -77,10 +77,10 @@ var ( awsAuth, err := eksDetector.getConfigMap(authConfigNamespace, authConfigConfigMap) if err == nil { value = awsAuth != nil - - // Get workload type - workloadType = eksDetector.getWorkloadType() } + + // Get workload type + workloadType = eksDetector.getWorkloadType() } isEKSCacheSingleton = IsEKSCache{Value: value, Workload: workloadType, Err: errors} })