Skip to content

Commit f90a1d1

Browse files
committed
Sets mappings as arrays of maps to allow precedence
1 parent c1d0f7d commit f90a1d1

File tree

4 files changed

+41
-12
lines changed

4 files changed

+41
-12
lines changed

dev-tools/mage/settings.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,9 @@ func PackageManifest() (string, error) {
314314
return "", fmt.Errorf("retrieving agent commit hash: %w", err)
315315
}
316316
m.Package.VersionedHome = fmt.Sprintf("%s-%s", BeatName, commitHashShort)
317-
m.Package.PathMappings = map[string]string{}
318-
m.Package.PathMappings["data/"+m.Package.VersionedHome] = fmt.Sprintf("data/elastic-agent-%s%s-%s", m.Package.Version, SnapshotSuffix(), commitHashShort)
319-
m.Package.PathMappings["manifest.yaml"] = fmt.Sprintf("data/elastic-agent-%s%s-%s/manifest.yaml", m.Package.Version, SnapshotSuffix(), commitHashShort)
317+
m.Package.PathMappings = []map[string]string{{}}
318+
m.Package.PathMappings[0]["data/"+m.Package.VersionedHome] = fmt.Sprintf("data/elastic-agent-%s%s-%s", m.Package.Version, SnapshotSuffix(), commitHashShort)
319+
m.Package.PathMappings[0]["manifest.yaml"] = fmt.Sprintf("data/elastic-agent-%s%s-%s/manifest.yaml", m.Package.Version, SnapshotSuffix(), commitHashShort)
320320
yamlBytes, err := yaml.Marshal(m)
321321
if err != nil {
322322
return "", fmt.Errorf("marshaling manifest: %w", err)

dev-tools/packaging/package_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,12 @@ func checkManifestFileContents(t *testing.T, pkgFS fs.FS) {
229229
commitHashShort, err := mage.CommitHashShort()
230230
if assert.NoError(t, err, "error getting commit hash for agent") {
231231
pathInPackage := "data/elastic-agent-" + commitHashShort
232-
assert.Contains(t, m.Package.PathMappings, pathInPackage, "path mappings in manifest do not contain the extraction path for versionedHome")
233-
mappedPath := m.Package.PathMappings[pathInPackage]
234-
assert.Contains(t, mappedPath, packageVersion, "mapped path for versionedHome does not contain the package version")
232+
if assert.NotEmpty(t, m.Package.PathMappings, "path mappings in manifest are empty") {
233+
assert.Contains(t, m.Package.PathMappings[0], pathInPackage, "path mappings in manifest do not contain the extraction path for versionedHome")
234+
// the first map should have the mapping for the data/elastic-agent-****** path)
235+
mappedPath := m.Package.PathMappings[0][pathInPackage]
236+
assert.Contains(t, mappedPath, packageVersion, "mapped path for versionedHome does not contain the package version")
237+
}
235238
}
236239
}
237240

pkg/api/v1/manifest.go

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,35 @@ import (
1313

1414
const ManifestKind = "PackageManifest"
1515

16+
type PathMapping struct {
17+
Source string
18+
Destination string
19+
}
20+
21+
func (pm *PathMapping) UnmarshalYAML(unmarshal func(interface{}) error) error {
22+
value := map[string]string{}
23+
err := unmarshal(&value)
24+
if err != nil {
25+
return fmt.Errorf("accessing yaml: %w", err)
26+
}
27+
28+
if len(value) != 1 {
29+
return fmt.Errorf("value %q is not a single <src>:<dst> mapping", value)
30+
}
31+
32+
for k, v := range value {
33+
pm.Source = k
34+
pm.Destination = v
35+
}
36+
37+
return nil
38+
}
39+
1640
type PackageDesc struct {
17-
Version string `yaml:"version,omitempty" json:"version,omitempty"`
18-
Snapshot bool `yaml:"snapshot,omitempty" json:"snapshot,omitempty"`
19-
VersionedHome string `yaml:"versioned-home,omitempty" json:"versionedHome,omitempty"`
20-
PathMappings map[string]string `yaml:"path-mappings,omitempty" json:"pathMappings,omitempty"`
41+
Version string `yaml:"version,omitempty" json:"version,omitempty"`
42+
Snapshot bool `yaml:"snapshot,omitempty" json:"snapshot,omitempty"`
43+
VersionedHome string `yaml:"versioned-home,omitempty" json:"versionedHome,omitempty"`
44+
PathMappings []map[string]string `yaml:"path-mappings,omitempty" json:"pathMappings,omitempty"`
2145
}
2246

2347
type PackageManifest struct {

pkg/api/v1/manifest_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ package:
3333
# - key is a prefix representing a path relative to the top of the archive
3434
# - value is the substitution to be applied when extracting the files
3535
path-mappings:
36-
data/elastic-agent-4f2d39/ : data/elastic-agent-8.12.0/
36+
- data/elastic-agent-4f2d39/ : data/elastic-agent-8.12.0/
37+
foo: bar
38+
- manifest.yaml : data/elastic-agent-8.12.0/manifest.yaml
3739
`
3840
m, err := ParseManifest(strings.NewReader(manifest))
3941
assert.NoError(t, err)
@@ -43,5 +45,5 @@ package:
4345
assert.Equal(t, m.Package.Version, "8.12.0")
4446
assert.Equal(t, m.Package.Snapshot, false)
4547
assert.Equal(t, m.Package.VersionedHome, "data/elastic-agent-4f2d39/")
46-
assert.Equal(t, m.Package.PathMappings, map[string]string{"data/elastic-agent-4f2d39/": "data/elastic-agent-8.12.0/"})
48+
assert.Equal(t, m.Package.PathMappings, []map[string]string{{"data/elastic-agent-4f2d39/": "data/elastic-agent-8.12.0/", "foo": "bar"}, {"manifest.yaml": "data/elastic-agent-8.12.0/manifest.yaml"}})
4749
}

0 commit comments

Comments
 (0)