From bdcc31a5f2fd74b4d7d988afa9abb0294d505fb9 Mon Sep 17 00:00:00 2001 From: Michal Pristas Date: Tue, 29 Sep 2020 11:08:18 +0200 Subject: [PATCH 1/2] optional source URI --- .../agent/application/upgrade/step_unpack.go | 4 ++-- .../pkg/agent/application/upgrade/upgrade.go | 19 +++++++++++++++++-- x-pack/elastic-agent/pkg/fleetapi/action.go | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/x-pack/elastic-agent/pkg/agent/application/upgrade/step_unpack.go b/x-pack/elastic-agent/pkg/agent/application/upgrade/step_unpack.go index ae3d05edd16..8efb2de2140 100644 --- a/x-pack/elastic-agent/pkg/agent/application/upgrade/step_unpack.go +++ b/x-pack/elastic-agent/pkg/agent/application/upgrade/step_unpack.go @@ -23,8 +23,8 @@ import ( "github.com/elastic/beats/v7/x-pack/elastic-agent/pkg/agent/errors" ) -// untar unpacks archive correctly, skips root (symlink, config...) unpacks data/* -func (u *Upgrader) unpack(ctx context.Context, version, sourceURI, archivePath string) (string, error) { +// unpack unpacks archive correctly, skips root (symlink, config...) unpacks data/* +func (u *Upgrader) unpack(ctx context.Context, version, archivePath string) (string, error) { // unpack must occur in directory that holds the installation directory // or the extraction will be double nested var hash string diff --git a/x-pack/elastic-agent/pkg/agent/application/upgrade/upgrade.go b/x-pack/elastic-agent/pkg/agent/application/upgrade/upgrade.go index 08c38aba8c5..647dd25e37c 100644 --- a/x-pack/elastic-agent/pkg/agent/application/upgrade/upgrade.go +++ b/x-pack/elastic-agent/pkg/agent/application/upgrade/upgrade.go @@ -61,12 +61,17 @@ func NewUpgrader(settings *artifact.Config, log *logger.Logger, closers []contex // Upgrade upgrades running agent func (u *Upgrader) Upgrade(ctx context.Context, a *fleetapi.ActionUpgrade) error { - archivePath, err := u.downloadArtifact(ctx, a.Version, a.SourceURI) + sourceURI, err := u.sourceURI(a.Version, a.SourceURI) if err != nil { return err } - newHash, err := u.unpack(ctx, a.Version, a.SourceURI, archivePath) + archivePath, err := u.downloadArtifact(ctx, a.Version, sourceURI) + if err != nil { + return err + } + + newHash, err := u.unpack(ctx, a.Version, archivePath) if err != nil { return err } @@ -133,6 +138,16 @@ func (u *Upgrader) Ack(ctx context.Context) error { return ioutil.WriteFile(markerFile, markerBytes, 0600) } +func (u *Upgrader) sourceURI(version, retrievedURI string) (string, error) { + if strings.HasSuffix(version, "-SNAPSHOT") && retrievedURI == "" { + return "", errors.New("snapshot upgrade requires source uri", errors.TypeConfig) + } + if retrievedURI != "" { + return retrievedURI, nil + } + + return u.settings.SourceURI, nil +} func isSubdir(base, target string) (bool, error) { relPath, err := filepath.Rel(base, target) diff --git a/x-pack/elastic-agent/pkg/fleetapi/action.go b/x-pack/elastic-agent/pkg/fleetapi/action.go index efb4e1672aa..eb7d3bad774 100644 --- a/x-pack/elastic-agent/pkg/fleetapi/action.go +++ b/x-pack/elastic-agent/pkg/fleetapi/action.go @@ -97,7 +97,7 @@ type ActionUpgrade struct { ActionID string `json:"id" yaml:"id"` ActionType string `json:"type" yaml:"type"` Version string `json:"version" yaml:"version"` - SourceURI string `json:"source_uri" yaml:"source_uri"` + SourceURI string `json:"source_uri,omitempty" yaml:"source_uri,omitempty"` } func (a *ActionUpgrade) String() string { From 3a9c6b66dbfd292759c4b9c97f82ab243b4e40ac Mon Sep 17 00:00:00 2001 From: Michal Pristas Date: Wed, 30 Sep 2020 09:02:08 +0200 Subject: [PATCH 2/2] conflicts --- .../elastic-agent/pkg/agent/application/upgrade/upgrade.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/x-pack/elastic-agent/pkg/agent/application/upgrade/upgrade.go b/x-pack/elastic-agent/pkg/agent/application/upgrade/upgrade.go index b842ed9f88d..de3a577281d 100644 --- a/x-pack/elastic-agent/pkg/agent/application/upgrade/upgrade.go +++ b/x-pack/elastic-agent/pkg/agent/application/upgrade/upgrade.go @@ -76,11 +76,6 @@ func (u *Upgrader) Upgrade(ctx context.Context, a *fleetapi.ActionUpgrade) error } sourceURI, err := u.sourceURI(a.Version, a.SourceURI) - archivePath, err := u.downloadArtifact(ctx, a.Version, a.SourceURI) - if err != nil { - return err - } - archivePath, err := u.downloadArtifact(ctx, a.Version, sourceURI) if err != nil { return err