Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion cmd/amazon-cloudwatch-agent/amazon-cloudwatch-agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -434,12 +434,19 @@ func mergeConfigs(configPaths []string) (*confmap.Conf, error) {
for _, configPath := range configPaths {
loaders = append(loaders, confmap.NewFileLoader(configPath))
}
result := confmap.New()
var result *confmap.Conf
for _, loader := range loaders {
conf, err := loader.Load()
if err != nil {
if errors.Is(err, os.ErrNotExist) {
log.Printf("D! Skipping non-existent OTEL config: %s", loader.ID())
continue
}
return nil, fmt.Errorf("failed to load OTEL configs: %w", err)
}
if result == nil {
result = confmap.New()
}
if err = result.Merge(conf); err != nil {
return nil, fmt.Errorf("failed to merge OTEL configs: %w", err)
}
Expand Down
10 changes: 9 additions & 1 deletion cmd/amazon-cloudwatch-agent/amazon-cloudwatch-agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,17 @@ service:
wantErr bool
}{
"WithInvalidFile": {
input: []string{filepath.Join("not", "a", "file"), filepath.Join("testdata", "base.yaml")},
input: []string{filepath.Join("testdata", "invalid.yaml"), filepath.Join("testdata", "base.yaml")},
wantErr: true,
},
"WithAllMissingFiles": {
input: []string{filepath.Join("not", "a", "file"), filepath.Join("also", "not", "a", "file")},
want: nil,
},
"WithMissingFile": {
input: []string{filepath.Join("not", "a", "file"), filepath.Join("testdata", "base.yaml")},
want: mustLoadFromFile(t, filepath.Join("testdata", "base.yaml")),
},
"WithNoMerge": {
input: []string{filepath.Join("testdata", "base.yaml")},
wantErr: false,
Expand Down
1 change: 1 addition & 0 deletions cmd/amazon-cloudwatch-agent/testdata/invalid.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
invalid: yaml: content: [
11 changes: 10 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,12 @@ require (
k8s.io/klog/v2 v2.130.1
)

require (
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.124.0
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.124.0
go.opentelemetry.io/collector/exporter/otlphttpexporter v0.124.0
)

require (
cloud.google.com/go/auth v0.15.0 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect
Expand Down Expand Up @@ -339,7 +345,7 @@ require (
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-openapi/analysis v0.23.0 // indirect
github.com/go-openapi/errors v0.22.0 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
Expand Down Expand Up @@ -453,6 +459,7 @@ require (
github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/metrics v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/xray v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/internal/collectd v0.124.0 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics v0.124.0 // indirect
Expand All @@ -464,6 +471,7 @@ require (
github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.124.0 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.124.1 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.124.1 // indirect
Expand Down Expand Up @@ -511,6 +519,7 @@ require (
github.com/tidwall/pretty v1.2.0 // indirect
github.com/tidwall/tinylru v1.1.0 // indirect
github.com/tidwall/wal v1.1.8 // indirect
github.com/tilinna/clock v1.1.0 // indirect
github.com/tinylib/msgp v1.1.6 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
Expand Down
17 changes: 16 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -592,8 +592,9 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU=
github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo=
github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w=
Expand Down Expand Up @@ -1236,6 +1237,8 @@ github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/file
github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.124.1/go.mod h1:BTHYA2guZgstbEQiIjx72OCVWzzI5WBFzuakZxcwjeY=
github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.124.1 h1:IXiiog4CkQWu/wSfiyYHpKGVgOa9BPlt9lD5YeYJTJg=
github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.124.1/go.mod h1:Hj+DbabX9lrGYwcdp6eXFCe/s7neivgPOr4PrWWUUow=
github.com/open-telemetry/opentelemetry-collector-contrib/internal/collectd v0.124.0 h1:yR7W59mRJTg6hX0iauHMaixaMD7bp4M09wAuHRI9Tvg=
github.com/open-telemetry/opentelemetry-collector-contrib/internal/collectd v0.124.0/go.mod h1:cYJVZNWz7IR9Pqv1MSEjvXWK4XVKKb8OrJBXp7igc4o=
github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.124.1 h1:cFu3VtuWdwvD1ftvTXH3v4Rm+be3BBhCz1OwiKoUQN0=
github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.124.1/go.mod h1:LtzoVivtOUNmNS+4xQjvuh7m6gbLJdmsyL/C+3/wtV4=
github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics v0.124.0 h1:gJ2gWuy+1kybCTQMLAxKTbcsIKKr3R8UDZhIagAey0k=
Expand All @@ -1250,6 +1253,8 @@ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.124.1/go.mod h1:NghU9p1ScHVYdzmSixmZjmPr9nWLk073kZugpQ1kdxw=
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.124.1 h1:E1e96GTHmiAfIfeYfA5ZVnOxud3+vbisGp0gE1tfd4s=
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.124.1/go.mod h1:MOhFATtYSLad9nKunjh6uGf8nQUcWje2LPlhD2uu3do=
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.124.0 h1:hktkBxO2es9FFCZm7aJtzTZrXILNPjDwO/mg7TxYOxk=
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.124.0/go.mod h1:+6G1ZQbG6JaKplqIWRHvL3XC2x2sR5xUW+LWjnolBLc=
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.124.1 h1:QX88VjAiUaG7SQe4A14b3JPgvzZK6OXpWoBd32Zlp1o=
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.124.1/go.mod h1:jRsmTRbn1HkrOpoeXS0KGfXobrh7E3W/p9fLwLdpcB8=
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.124.1 h1:oiLa2lg+Ix+wHi4bPsnQ5+DJc6u+OHZt6YhP/rjgbNc=
Expand Down Expand Up @@ -1300,8 +1305,12 @@ github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformpro
github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.124.1/go.mod h1:1RwbGuCq0T5Tr+irJVm5PSJZCMS1n1J1Qs8DD4kJkS8=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.124.1 h1:wlBB3waaBvWG+Vd2O/QBTheyjBVq4reaUmG1CbIX7WY=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.124.1/go.mod h1:OScCy+A3O9xcfDfVbjyp/13ICDAv3vHzRao+2Cq+hI0=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.124.0 h1:/QcEE4wZnT0Z9wl0/j0JztqdYpBPQ1Vq3DVwAb7zdmY=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.124.0/go.mod h1:qfGTuo96xRDYG4Wx8ieAcWIQsD/H+6N6BG2LCUa+Q8A=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.124.1 h1:LPKySGw0KuHLsPH6N1fp1zx6Lkt4+wTY4sL7F1toBqU=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.124.1/go.mod h1:ztXVcqH5q0+o8RoCag+kZnCyUFvyeeHdaiMHegxaDc0=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.124.0 h1:PGs9UuqGtSg3NTyLNcUKhfJH9anHjFmS/LHpSz9KjAQ=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.124.0/go.mod h1:4Mfjv/dbsTQbxnLgi2PbxVLnn+OqEPIK4pLhOdakZ0A=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.124.1 h1:r20zOMMBcxzI2Sni2HyTR7TVxuNXLn1Ov6qtnlVWoJc=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.124.1/go.mod h1:1UsKa4xSNodA2i6ic5mmyd31khXyTGxsVKJoKmq/jtU=
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.124.1 h1:Pdlf5D5gB/5Khi3t5PiojQrCulcEejecsxoSpOd0ekA=
Expand Down Expand Up @@ -1532,6 +1541,8 @@ github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I
github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8=
github.com/tidwall/wal v1.1.8 h1:2qDSGdAdjaY3PEvHRva+9UFqgk+ef7cOiW1Qn5JH1y0=
github.com/tidwall/wal v1.1.8/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E=
github.com/tilinna/clock v1.1.0 h1:6IQQQCo6KoBxVudv6gwtY8o4eDfhHo8ojA5dP0MfhSs=
github.com/tilinna/clock v1.1.0/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRUGfOao=
github.com/tinylib/msgp v1.1.6 h1:i+SbKraHhnrf9M5MYmvQhFnbLhAXSDWF8WWsuyRdocw=
github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw=
github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
Expand Down Expand Up @@ -1698,6 +1709,8 @@ go.opentelemetry.io/collector/exporter/exportertest v0.124.0 h1:IOxA/4CiVWGPlmA0
go.opentelemetry.io/collector/exporter/exportertest v0.124.0/go.mod h1:2EmU8IwVJV79MmFBFFW1LCN0Ob2UZsEkX/mSUB06lbI=
go.opentelemetry.io/collector/exporter/nopexporter v0.124.0 h1:oGXHe7lqa1FebpbLL9S4njO86CUTLFDjDhLo18IkYQo=
go.opentelemetry.io/collector/exporter/nopexporter v0.124.0/go.mod h1:Ceru8F6fsFoSieHJ3g9TLJMSICMK/KCmCqmAx15Hu/A=
go.opentelemetry.io/collector/exporter/otlphttpexporter v0.124.0 h1:047D4wLOb5ug4O99y3AjR/SNFTxlq3RAr2zr/8G1JWI=
go.opentelemetry.io/collector/exporter/otlphttpexporter v0.124.0/go.mod h1:Jk/1hiZvwy4dzFEfX37h18n3U9pNIfHSApcLjZmSFmU=
go.opentelemetry.io/collector/exporter/xexporter v0.124.0 h1:Itfn2+F4ki8hObOtPCecWBwGpuxakUYSsTwwkB5iUns=
go.opentelemetry.io/collector/exporter/xexporter v0.124.0/go.mod h1:dNK/PPY02gA9BawIKHyVk8kIFdYvqVZ2A+LlMZucIPY=
go.opentelemetry.io/collector/extension v1.30.0 h1:AJqntAp1p40Q1az2Vze3OHiMURq56KWnUxaLzs1ghaA=
Expand Down Expand Up @@ -1772,6 +1785,8 @@ go.opentelemetry.io/collector/scraper v0.124.0 h1:l+nJdtcTDQX59oMqeV8mD9hjOe62/N
go.opentelemetry.io/collector/scraper v0.124.0/go.mod h1:NNIt4NUIS3LftpIng8h27APi7NYqw0EkfMoQ9rqlFZg=
go.opentelemetry.io/collector/scraper/scraperhelper v0.124.0 h1:sDvdoL8CXzzNG3TUeg3940dwhEuqpaF9JoU+55Gsr84=
go.opentelemetry.io/collector/scraper/scraperhelper v0.124.0/go.mod h1:WCDLFM7iIbk7e0s1pCum31yXBSFN+U9uY+0N6ODMLXI=
go.opentelemetry.io/collector/scraper/scrapertest v0.124.0 h1:ZaA7vDnFQOboNJPBtUF716izHACHJX25zfnHvyLhphY=
go.opentelemetry.io/collector/scraper/scrapertest v0.124.0/go.mod h1:cii9PveCCRao5+hsObc8F60e4A22qEwsjZd4Umy6siQ=
go.opentelemetry.io/collector/semconv v0.124.0 h1:YTdo3UFwNyDQCh9DiSm2rbzAgBuwn/9dNZ0rv454goA=
go.opentelemetry.io/collector/semconv v0.124.0/go.mod h1:te6VQ4zZJO5Lp8dM2XIhDxDiL45mwX0YAQQWRQ0Qr9U=
go.opentelemetry.io/collector/service v0.124.0 h1:lUpizko/Y2P+XXbZ9wiKM8acLSt6ZIvC3/6/j6rcq4w=
Expand Down
9 changes: 9 additions & 0 deletions internal/merge/confmap/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

type Loader interface {
Load() (*Conf, error)
ID() string
}

type FileLoader struct {
Expand All @@ -23,6 +24,10 @@ func NewFileLoader(path string) *FileLoader {
return &FileLoader{path: path}
}

func (f *FileLoader) ID() string {
return f.path
}

func (f *FileLoader) Load() (*Conf, error) {
// Clean the path before using it.
content, err := os.ReadFile(filepath.Clean(f.path))
Expand All @@ -41,6 +46,10 @@ func NewByteLoader(id string, content []byte) *ByteLoader {
return &ByteLoader{id: id, content: content}
}

func (b *ByteLoader) ID() string {
return b.id
}

func (b *ByteLoader) Load() (*Conf, error) {
var rawConf map[string]any
if err := yaml.Unmarshal(b.content, &rawConf); err != nil {
Expand Down
2 changes: 2 additions & 0 deletions internal/merge/confmap/load_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

func TestFileLoader(t *testing.T) {
loader := NewFileLoader(filepath.Join("not", "a", "file"))
assert.Equal(t, filepath.Join("not", "a", "file"), loader.ID())
got, err := loader.Load()
assert.Error(t, err)
assert.Nil(t, got)
Expand All @@ -26,6 +27,7 @@ func TestByteLoader(t *testing.T) {
nop/1:
`
loader := NewByteLoader("invalid-yaml", []byte("string"))
assert.Equal(t, "invalid-yaml", loader.ID())
got, err := loader.Load()
assert.Error(t, err)
assert.Nil(t, got)
Expand Down
6 changes: 6 additions & 0 deletions service/defaultcomponents/components.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightskueuereceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver"
Expand All @@ -47,6 +49,7 @@ import (
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/debugexporter"
"go.opentelemetry.io/collector/exporter/nopexporter"
"go.opentelemetry.io/collector/exporter/otlphttpexporter"
"go.opentelemetry.io/collector/extension"
"go.opentelemetry.io/collector/extension/zpagesextension"
"go.opentelemetry.io/collector/otelcol"
Expand Down Expand Up @@ -81,7 +84,9 @@ func Factories() (otelcol.Factories, error) {
awsecscontainermetricsreceiver.NewFactory(),
awsnvmereceiver.NewFactory(),
awsxrayreceiver.NewFactory(),
collectdreceiver.NewFactory(),
filelogreceiver.NewFactory(),
hostmetricsreceiver.NewFactory(),
jaegerreceiver.NewFactory(),
jmxreceiver.NewFactory(),
kafkareceiver.NewFactory(),
Expand Down Expand Up @@ -133,6 +138,7 @@ func Factories() (otelcol.Factories, error) {
cloudwatch.NewFactory(),
debugexporter.NewFactory(),
nopexporter.NewFactory(),
otlphttpexporter.NewFactory(),
prometheusremotewriteexporter.NewFactory(),
); err != nil {
return otelcol.Factories{}, err
Expand Down
3 changes: 3 additions & 0 deletions service/defaultcomponents/components_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ func TestComponents(t *testing.T) {
"awsecscontainermetrics",
"awsnvmereceiver",
"awsxray",
"collectd",
"filelog",
"hostmetrics",
"jaeger",
"jmx",
"kafka",
Expand Down Expand Up @@ -80,6 +82,7 @@ func TestComponents(t *testing.T) {
"awsxray",
"debug",
"nop",
"otlphttp",
"prometheusremotewrite",
}
gotExporters := collections.MapSlice(maps.Keys(factories.Exporters), component.Type.String)
Expand Down
40 changes: 29 additions & 11 deletions tool/translator/translator.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
const (
exitErrorMessage = "configuration validation first phase failed. Agent version: %v. Verify the JSON input is only using features supported by this version"
exitSuccessMessage = "Configuration validation first phase succeeded"
exitSkipMessage = "Configuration validation first phase skipped. No JSON files found"
version = "1.0"
envConfigFileName = "env-config.json"
yamlConfigFileName = "amazon-cloudwatch-agent.yaml"
Expand Down Expand Up @@ -98,12 +99,23 @@ func (ct *ConfigTranslator) Translate() (err error) {
}
}()

tomlConfigPath := cmdutil.GetTomlConfigPath(ct.ctx.OutputTomlFilePath())
tomlConfigDir := filepath.Dir(tomlConfigPath)
yamlConfigPath := filepath.Join(tomlConfigDir, yamlConfigFileName)

mergedJSONConfigMap, err := cmdutil.GenerateMergedJsonConfigMap(ct.ctx)
if err != nil {
onlyYAML := errors.Is(err, cmdutil.ErrOnlyYAML)
if err != nil && !onlyYAML {
return fmt.Errorf("failed to generate merged json config: %v", err)
}
if onlyYAML {
log.Println(exitSkipMessage)
// YAML-only configs still require a generated TOML for agent and logging configuration.
// TOML translation requires a non-nil map.
mergedJSONConfigMap = map[string]any{}
}

if !ct.ctx.RunInContainer() {
if !onlyYAML && !ct.ctx.RunInContainer() {
current, err := user.Current()
if err == nil && current.Name == "****" {
runAsUser, err := userutil.DetectRunAsUser(mergedJSONConfigMap)
Expand All @@ -114,24 +126,30 @@ func (ct *ConfigTranslator) Translate() (err error) {
}
}

tomlConfigPath := cmdutil.GetTomlConfigPath(ct.ctx.OutputTomlFilePath())
tomlConfigDir := filepath.Dir(tomlConfigPath)
yamlConfigPath := filepath.Join(tomlConfigDir, yamlConfigFileName)
tomlConfig, err := cmdutil.TranslateJsonMapToTomlConfig(mergedJSONConfigMap)
if err != nil {
return fmt.Errorf("failed to generate TOML configuration validation content: %v", err)
}
yamlConfig, err := cmdutil.TranslateJsonMapToYamlConfig(mergedJSONConfigMap)
if err != nil && !errors.Is(err, pipeline.ErrNoPipelines) {
return fmt.Errorf("failed to generate YAML configuration validation content: %v", err)
var yamlConfig any
if !onlyYAML {
yamlConfig, err = cmdutil.TranslateJsonMapToYamlConfig(mergedJSONConfigMap)
if err != nil && !errors.Is(err, pipeline.ErrNoPipelines) {
return fmt.Errorf("failed to generate YAML configuration validation content: %v", err)
}
}
if err = cmdutil.ConfigToTomlFile(tomlConfig, tomlConfigPath); err != nil {
return fmt.Errorf("failed to create the configuration TOML validation file: %v", err)
}
if err = cmdutil.ConfigToYamlFile(yamlConfig, yamlConfigPath); err != nil {
return fmt.Errorf("failed to create the configuration YAML validation file: %v", err)
if yamlConfig != nil {
if err = cmdutil.ConfigToYamlFile(yamlConfig, yamlConfigPath); err != nil {
return fmt.Errorf("failed to create the configuration YAML validation file: %v", err)
}
} else {
_ = os.Remove(yamlConfigPath)
}
if !onlyYAML {
log.Println(exitSuccessMessage)
}
log.Println(exitSuccessMessage)

envConfigPath := filepath.Join(tomlConfigDir, envConfigFileName)
cmdutil.TranslateJsonMapToEnvConfigFile(mergedJSONConfigMap, envConfigPath)
Expand Down
43 changes: 43 additions & 0 deletions tool/translator/translator_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT

package translator

import (
"os"
"path/filepath"
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/aws/amazon-cloudwatch-agent/translator"
translatorcontext "github.com/aws/amazon-cloudwatch-agent/translator/context"
translatorutil "github.com/aws/amazon-cloudwatch-agent/translator/util"
)

func TestTranslate_OnlyYAML(t *testing.T) {
orig := translatorutil.DetectRegion
translatorutil.DetectRegion = func(string, map[string]string) (string, string) {
return "us-east-1", "mock"
}
defer func() { translatorutil.DetectRegion = orig }()

translator.ResetMessages()
translatorcontext.ResetContext()

tmpDir := t.TempDir()
require.NoError(t, os.WriteFile(filepath.Join(tmpDir, "config.yaml"), nil, 0600))

tomlPath := filepath.Join(tmpDir, "output.toml")
// Pre-create the YAML output file to verify it gets removed.
yamlPath := filepath.Join(tmpDir, yamlConfigFileName)
require.NoError(t, os.WriteFile(yamlPath, nil, 0600))

ct, err := NewConfigTranslator("linux", "", tmpDir, tomlPath, "ec2", "", "default")
require.NoError(t, err)

assert.NoError(t, ct.Translate())
assert.FileExists(t, tomlPath)
assert.NoFileExists(t, yamlPath)
}
Loading
Loading