Skip to content

Commit 1d0d4f7

Browse files
Resolve stable manifest url during agent update when using stable keyword
cr: https://code.amazon.com/reviews/CR-100238454
1 parent 915e20f commit 1d0d4f7

File tree

4 files changed

+27
-12
lines changed

4 files changed

+27
-12
lines changed

agent/update/processor/processor.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,11 +292,12 @@ func determineTarget(mgr *updateManager, logger log.T, updateDetail *UpdateDetai
292292
var stableVersionUrl string
293293
updateDetail.TargetResolver = updateconstants.TargetVersionStable
294294
logger.Info("TargetVersion is 'stable', attempting to get the stable version from s3")
295-
stableVersionUrl, err = getStableManifestURL(updateDetail.ManifestURL)
295+
stableVersionUrl, err = getStableManifestURL(updateDetail.ManifestURL, mgr.Context.Identity())
296296
if err != nil {
297297
// Should never happen because manifest has already been downloaded using the manifest url at this point
298298
return mgr.failed(updateDetail, logger, updateconstants.ErrorGetStableVersionS3, fmt.Sprintf("Failed to generate stable version from manifest url: %v", err), true)
299299
}
300+
300301
updateDetail.TargetVersion, err = mgr.S3util.GetStableVersion(stableVersionUrl)
301302
if err != nil {
302303
return mgr.failed(updateDetail, logger, updateconstants.ErrorGetStableVersionS3, fmt.Sprintf("Failed to get stable version form s3: %v", err), true)

agent/update/processor/processor_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import (
2626
"strings"
2727
"testing"
2828

29+
"github.com/aws/amazon-ssm-agent/common/identity"
30+
2931
"github.com/aws/amazon-ssm-agent/agent/appconfig"
3032
"github.com/aws/amazon-ssm-agent/agent/context"
3133
"github.com/aws/amazon-ssm-agent/agent/contracts"
@@ -578,7 +580,7 @@ func TestDetermineTarget_TargetVersionStable_FailedGetStableURL(t *testing.T) {
578580
finalizeCalled = true
579581
return nil
580582
}
581-
getStableManifestURL = func(manifestURL string) (string, error) {
583+
getStableManifestURL = func(manifestURL string, identity identity.IAgentIdentity) (string, error) {
582584
return "", fmt.Errorf("err1")
583585
}
584586
finalizeCalled = false
@@ -589,9 +591,6 @@ func TestDetermineTarget_TargetVersionStable_FailedGetStableURL(t *testing.T) {
589591
assert.True(t, finalizeCalled)
590592
assert.Contains(t, tempCode, string(updateconstants.ErrorGetStableVersionS3))
591593
assert.True(t, updateconstants.TargetVersionStable == updateDetail.TargetResolver)
592-
593-
getStableManifestURL = updateutil.GetManifestURLFromSourceUrl
594-
595594
}
596595

597596
func TestDetermineTarget_TargetVersionStable_FailedGetStableVersion(t *testing.T) {

agent/updateutil/updateutil.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,12 +740,19 @@ func GetManifestURLFromSourceUrl(sourceURL string) (string, error) {
740740
return u.String(), nil
741741
}
742742

743-
func GetStableURLFromManifestURL(manifestURL string) (string, error) {
743+
func GetStableURLFromManifestURL(manifestURL string, identity identity.IAgentIdentity) (string, error) {
744744
if !strings.HasSuffix(manifestURL, "/"+updateconstants.ManifestFile) {
745745
return "", fmt.Errorf("unexpected manifest url does not end with manifest file: %s", manifestURL)
746746
}
747+
stableVersionPath := "stable/VERSION"
748+
region, err := identity.Region()
749+
if err != nil {
750+
return "", err
751+
}
747752

748-
return strings.TrimRight(manifestURL, updateconstants.ManifestFile) + "stable/VERSION", nil
753+
stableVersionURL := strings.TrimRight(manifestURL, updateconstants.ManifestFile) + stableVersionPath
754+
stableVersionURL = strings.Replace(stableVersionURL, updateconstants.RegionHolder, region, -1)
755+
return stableVersionURL, nil
749756
}
750757

751758
// ResolveAgentReleaseBucketURL makes best effort to generate an url for the ssm agent bucket

agent/updateutil/updateutil_test.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -477,27 +477,35 @@ func TestCompareVersion(t *testing.T) {
477477

478478
func TestGetStableURLFromManifestURL(t *testing.T) {
479479
// Empty URL
480-
url, err := GetStableURLFromManifestURL("")
480+
agentIdentity := identityMocks.NewDefaultMockAgentIdentity()
481+
agentIdentity.On("Region").Return("us-east-1", nil)
482+
483+
url, err := GetStableURLFromManifestURL("", agentIdentity)
481484
assert.Error(t, err)
482485
assert.Equal(t, "", url)
483486

484487
// Invalid URL
485-
url, err = GetStableURLFromManifestURL("InvalidUrl")
488+
url, err = GetStableURLFromManifestURL("InvalidUrl", agentIdentity)
486489
assert.Error(t, err)
487490
assert.Equal(t, "", url)
488491

489492
// Invalid manifest url - artifact url
490-
url, err = GetStableURLFromManifestURL("https://bucket.s3.region.amazonaws.com/amazon-ssm-agent/version/amazon-ssm-agent.tar.gz")
493+
url, err = GetStableURLFromManifestURL("https://bucket.s3.region.amazonaws.com/amazon-ssm-agent/version/amazon-ssm-agent.tar.gz", agentIdentity)
491494
assert.Error(t, err)
492495
assert.Equal(t, "", url)
493496

497+
// Prod manifest url with region placeholder
498+
url, err = GetStableURLFromManifestURL("https://s3.{Region}.amazonaws.com/amazon-ssm-{Region}/ssm-agent-manifest.json", agentIdentity)
499+
assert.NoError(t, err)
500+
assert.Equal(t, "https://s3.us-east-1.amazonaws.com/amazon-ssm-us-east-1/stable/VERSION", url)
501+
494502
// Valid s3 manifest link bucket in Path
495-
url, err = GetStableURLFromManifestURL("https://s3.region.amazonaws.com/bucket/ssm-agent-manifest.json")
503+
url, err = GetStableURLFromManifestURL("https://s3.region.amazonaws.com/bucket/ssm-agent-manifest.json", agentIdentity)
496504
assert.NoError(t, err)
497505
assert.Equal(t, "https://s3.region.amazonaws.com/bucket/stable/VERSION", url)
498506

499507
// Valid s3 manifest link with bucket in url
500-
url, err = GetStableURLFromManifestURL("https://bucket.s3.region.amazonaws.com/ssm-agent-manifest.json")
508+
url, err = GetStableURLFromManifestURL("https://bucket.s3.region.amazonaws.com/ssm-agent-manifest.json", agentIdentity)
501509
assert.NoError(t, err)
502510
assert.Equal(t, "https://bucket.s3.region.amazonaws.com/stable/VERSION", url)
503511
}

0 commit comments

Comments
 (0)