diff --git a/internal/deploy/base.go b/internal/deploy/base.go index f5dd5b250e..67dda9d7c6 100644 --- a/internal/deploy/base.go +++ b/internal/deploy/base.go @@ -71,6 +71,7 @@ type ServiceManifest struct { // ServiceInstallerMetadata information about the installer type ServiceInstallerMetadata struct { + AgentPath string Arch string Docker bool FileExtension string diff --git a/internal/installer/base.go b/internal/installer/base.go index 429f1f0e7a..b102433b79 100644 --- a/internal/installer/base.go +++ b/internal/installer/base.go @@ -12,6 +12,7 @@ import ( "github.com/elastic/e2e-testing/internal/common" "github.com/elastic/e2e-testing/internal/deploy" + "github.com/elastic/e2e-testing/internal/io" "github.com/elastic/e2e-testing/internal/systemd" "github.com/elastic/e2e-testing/pkg/downloads" log "github.com/sirupsen/logrus" @@ -114,6 +115,28 @@ func doUpgrade(ctx context.Context, so deploy.ServiceOperator) error { return nil } +// createAgentDirectories makes sure the agent directories belong to the root user +func createAgentDirectories(ctx context.Context, i deploy.ServiceOperator, osArgs []string) error { + agentPath := i.PkgMetadata().AgentPath + + err := io.MkdirAll(agentPath) + if err != nil { + return err + } + + output, err := i.Exec(ctx, osArgs) + if err != nil { + return err + } + + log.WithFields(log.Fields{ + "args": osArgs, + "output": output, + "path": agentPath, + }).Debug("Agent directories will belong to root") + return nil +} + func systemCtlLog(ctx context.Context, OS string, execFn func(ctx context.Context, args []string) (string, error)) error { cmds := systemd.LogCmds(common.ElasticAgentServiceName) span, _ := apm.StartSpanOptions(ctx, "Retrieving logs for the Elastic Agent service", "elastic-agent."+OS+".log", apm.SpanOptions{ diff --git a/internal/installer/elasticagent_deb.go b/internal/installer/elasticagent_deb.go index df3124eace..3e213fa656 100644 --- a/internal/installer/elasticagent_deb.go +++ b/internal/installer/elasticagent_deb.go @@ -30,6 +30,7 @@ func AttachElasticAgentDEBPackage(d deploy.Deployment, service deploy.ServiceReq service: service, deploy: d, metadata: deploy.ServiceInstallerMetadata{ + AgentPath: "/var/lib/elastic-agent", PackageType: "deb", Os: "linux", Arch: utils.GetArchitecture(), @@ -55,7 +56,7 @@ func (i *elasticAgentDEBPackage) AddFiles(ctx context.Context, files []string) e // Inspect returns info on package func (i *elasticAgentDEBPackage) Inspect() (deploy.ServiceOperatorManifest, error) { return deploy.ServiceOperatorManifest{ - WorkDir: "/var/lib/elastic-agent", + WorkDir: i.metadata.AgentPath, CommitFile: "/etc/elastic-agent/.elastic-agent.active.commit", }, nil } @@ -141,6 +142,11 @@ func (i *elasticAgentDEBPackage) Postinstall(ctx context.Context) error { // Preinstall executes operations before installing a DEB package func (i *elasticAgentDEBPackage) Preinstall(ctx context.Context) error { + err := createAgentDirectories(ctx, i, []string{"sudo", "chown", "-R", "root:root", i.metadata.AgentPath}) + if err != nil { + return err + } + installArtifactFn := func(ctx context.Context, artifact string, version string, useCISnapshots bool) error { span, _ := apm.StartSpanOptions(ctx, "Pre-install "+artifact, artifact+".debian.pre-install", apm.SpanOptions{ Parent: apm.SpanFromContext(ctx).TraceContext(), diff --git a/internal/installer/elasticagent_docker.go b/internal/installer/elasticagent_docker.go index 521baffd8f..15ca2a5fef 100644 --- a/internal/installer/elasticagent_docker.go +++ b/internal/installer/elasticagent_docker.go @@ -28,6 +28,7 @@ func AttachElasticAgentDockerPackage(d deploy.Deployment, service deploy.Service service: service, deploy: d, metadata: deploy.ServiceInstallerMetadata{ + AgentPath: "/usr/share/elastic-agent", PackageType: "docker", Os: "linux", Arch: utils.GetArchitecture(), @@ -53,7 +54,7 @@ func (i *elasticAgentDockerPackage) AddFiles(ctx context.Context, files []string // Inspect returns info on package func (i *elasticAgentDockerPackage) Inspect() (deploy.ServiceOperatorManifest, error) { return deploy.ServiceOperatorManifest{ - WorkDir: "/usr/share/elastic-agent", + WorkDir: i.metadata.AgentPath, CommitFile: "/usr/share/elastic-agent/.elastic-agent.active.commit", }, nil } diff --git a/internal/installer/elasticagent_rpm.go b/internal/installer/elasticagent_rpm.go index 43d6e0cfb6..d04653abd9 100644 --- a/internal/installer/elasticagent_rpm.go +++ b/internal/installer/elasticagent_rpm.go @@ -35,6 +35,7 @@ func AttachElasticAgentRPMPackage(d deploy.Deployment, service deploy.ServiceReq service: service, deploy: d, metadata: deploy.ServiceInstallerMetadata{ + AgentPath: "/var/lib/elastic-agent", PackageType: "rpm", Os: "linux", Arch: arch, @@ -60,7 +61,7 @@ func (i *elasticAgentRPMPackage) AddFiles(ctx context.Context, files []string) e // Inspect returns info on package func (i *elasticAgentRPMPackage) Inspect() (deploy.ServiceOperatorManifest, error) { return deploy.ServiceOperatorManifest{ - WorkDir: "/var/lib/elastic-agent", + WorkDir: i.metadata.AgentPath, CommitFile: "/etc/elastic-agent/.elastic-agent.active.commit", }, nil } @@ -147,6 +148,11 @@ func (i *elasticAgentRPMPackage) Postinstall(ctx context.Context) error { // Preinstall executes operations before installing a RPM package func (i *elasticAgentRPMPackage) Preinstall(ctx context.Context) error { + err := createAgentDirectories(ctx, i, []string{"sudo", "chown", "-R", "root:root", i.metadata.AgentPath}) + if err != nil { + return err + } + installArtifactFn := func(ctx context.Context, artifact string, version string, useCISnapshots bool) error { span, _ := apm.StartSpanOptions(ctx, "Pre-install "+artifact, artifact+".rpm.pre-install", apm.SpanOptions{ Parent: apm.SpanFromContext(ctx).TraceContext(), diff --git a/internal/installer/elasticagent_tar.go b/internal/installer/elasticagent_tar.go index 83f9009069..61eb7d8fa8 100644 --- a/internal/installer/elasticagent_tar.go +++ b/internal/installer/elasticagent_tar.go @@ -37,6 +37,7 @@ func AttachElasticAgentTARPackage(d deploy.Deployment, service deploy.ServiceReq service: service, deploy: d, metadata: deploy.ServiceInstallerMetadata{ + AgentPath: "/opt/Elastic/Agent", PackageType: "tar", Os: "linux", Arch: arch, @@ -62,7 +63,7 @@ func (i *elasticAgentTARPackage) AddFiles(ctx context.Context, files []string) e // Inspect returns info on package func (i *elasticAgentTARPackage) Inspect() (deploy.ServiceOperatorManifest, error) { return deploy.ServiceOperatorManifest{ - WorkDir: "/opt/Elastic/Agent", + WorkDir: i.metadata.AgentPath, CommitFile: "elastic-agent/.elastic-agent.active.commit", }, nil } @@ -122,6 +123,11 @@ func (i *elasticAgentTARPackage) Postinstall(ctx context.Context) error { // Preinstall executes operations before installing a TAR package func (i *elasticAgentTARPackage) Preinstall(ctx context.Context) error { + err := createAgentDirectories(ctx, i, []string{"sudo", "chown", "-R", "root:root", i.metadata.AgentPath}) + if err != nil { + return err + } + installArtifactFn := func(ctx context.Context, artifact string, version string, useCISnapshots bool) error { span, _ := apm.StartSpanOptions(ctx, "Pre-install "+artifact, artifact+".tar.pre-install", apm.SpanOptions{ Parent: apm.SpanFromContext(ctx).TraceContext(), diff --git a/internal/installer/elasticagent_tar_macos.go b/internal/installer/elasticagent_tar_macos.go index d32ca97cfa..7b0865cc47 100644 --- a/internal/installer/elasticagent_tar_macos.go +++ b/internal/installer/elasticagent_tar_macos.go @@ -35,6 +35,7 @@ func AttachElasticAgentTARDarwinPackage(d deploy.Deployment, service deploy.Serv service: service, deploy: d, metadata: deploy.ServiceInstallerMetadata{ + AgentPath: "/opt/Elastic/Agent", PackageType: "tar", Os: "darwin", Arch: arch, @@ -54,7 +55,7 @@ func (i *elasticAgentTARDarwinPackage) AddFiles(ctx context.Context, files []str // Inspect returns info on package func (i *elasticAgentTARDarwinPackage) Inspect() (deploy.ServiceOperatorManifest, error) { return deploy.ServiceOperatorManifest{ - WorkDir: "/opt/Elastic/Agent", + WorkDir: i.metadata.AgentPath, CommitFile: "/elastic-agent/.elastic-agent.active.commit", }, nil } @@ -123,6 +124,11 @@ func (i *elasticAgentTARDarwinPackage) Preinstall(ctx context.Context) error { span.Context.SetLabel("runtime", runtime.GOOS) defer span.End() + err := createAgentDirectories(ctx, i, []string{"sudo", "chown", "-R", "root:root", i.metadata.AgentPath}) + if err != nil { + return err + } + artifact := "elastic-agent" metadata := i.metadata diff --git a/internal/installer/elasticagent_zip.go b/internal/installer/elasticagent_zip.go index 9c4ebd3387..a5d226f192 100644 --- a/internal/installer/elasticagent_zip.go +++ b/internal/installer/elasticagent_zip.go @@ -29,6 +29,7 @@ func AttachElasticAgentZIPPackage(d deploy.Deployment, service deploy.ServiceReq service: service, deploy: d, metadata: deploy.ServiceInstallerMetadata{ + AgentPath: "C:\\Program Files\\Elastic\\Agent", PackageType: "zip", Os: "windows", Arch: "x86_64", @@ -48,7 +49,7 @@ func (i *elasticAgentZIPPackage) AddFiles(ctx context.Context, files []string) e // Inspect returns info on package func (i *elasticAgentZIPPackage) Inspect() (deploy.ServiceOperatorManifest, error) { return deploy.ServiceOperatorManifest{ - WorkDir: "C:\\Program Files\\Elastic\\Agent", + WorkDir: i.metadata.AgentPath, CommitFile: "C:\\elastic-agent\\.elastic-agent.active.commit", }, nil }