Skip to content
This repository was archived by the owner on Sep 17, 2024. It is now read-only.
Closed
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
69 changes: 32 additions & 37 deletions e2e/_suites/fleet/fleet.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ package main
import (
"context"
"fmt"
"github.com/google/uuid"
"strings"
"time"

"github.com/google/uuid"

"github.com/cenkalti/backoff/v4"
"github.com/cucumber/godog"
"github.com/elastic/e2e-testing/internal/common"
Expand Down Expand Up @@ -41,12 +42,19 @@ type FleetTestSuite struct {
Installers map[string]installer.ElasticAgentInstaller
Integration kibana.IntegrationPackage // the installed integration
Policy kibana.Policy
FleetServerPolicy kibana.Policy
PolicyUpdatedAt string // the moment the policy was updated
FleetServerPolicy kibana.Policy
Version string // current elastic-agent version
kibanaClient *kibana.Client
<<<<<<< HEAD
// fleet server
FleetServerHostname string // hostname of the fleet server. If empty, it means the agent is the first one, bootstrapping fleet server
=======

// date controls for queries
AgentStoppedDate time.Time
RuntimeDependenciesStartDate time.Time
>>>>>>> 82380ced... chore: remove unused code (#1119)
}

// afterScenario destroys the state created by a scenario
Expand Down Expand Up @@ -98,14 +106,18 @@ func (fts *FleetTestSuite) afterScenario() {
}).Warn("The enrollment token could not be deleted")
}

fts.kibanaClient.DeleteAllPolicies(fts.FleetServerPolicy)
fts.kibanaClient.DeleteAllPolicies()

// clean up fields
fts.CurrentTokenID = ""
fts.CurrentToken = ""
fts.Image = ""
fts.Hostname = ""
<<<<<<< HEAD
fts.FleetServerHostname = ""
=======
fts.StandAlone = false
>>>>>>> 82380ced... chore: remove unused code (#1119)
}

// beforeScenario creates the state needed by a scenario
Expand All @@ -123,15 +135,6 @@ func (fts *FleetTestSuite) beforeScenario() {

}
fts.Policy = policy

fleetServerPolicy, err := fts.kibanaClient.GetDefaultPolicy(true)
if err != nil {
log.WithFields(log.Fields{
"err": err,
}).Warn("The default fleet server policy could not be obtained")
}
fts.FleetServerPolicy = fleetServerPolicy

}

func (fts *FleetTestSuite) contributeSteps(s *godog.ScenarioContext) {
Expand Down Expand Up @@ -196,7 +199,7 @@ func (fts *FleetTestSuite) anStaleAgentIsDeployedToFleetWithInstaller(image, ver

// prepare installer for stale version
if fts.Version != agentVersionBackup {
i := installer.GetElasticAgentInstaller(image, installerType, fts.Version, "")
i := installer.GetElasticAgentInstaller(image, installerType, fts.Version)
fts.Installers[fmt.Sprintf("%s-%s-%s", image, installerType, version)] = i
}

Expand Down Expand Up @@ -277,15 +280,14 @@ func (fts *FleetTestSuite) agentInVersion(version string) error {

// supported installers: tar, systemd
func (fts *FleetTestSuite) anAgentIsDeployedToFleetWithInstaller(image string, installerType string) error {
return fts.anAgentIsDeployedToFleetWithInstallerAndFleetServer(image, installerType, false)
return fts.anAgentIsDeployedToFleetWithInstallerAndFleetServer(image, installerType)
}

func (fts *FleetTestSuite) anAgentIsDeployedToFleetWithInstallerAndFleetServer(image string, installerType string, bootstrapFleetServer bool) error {
func (fts *FleetTestSuite) anAgentIsDeployedToFleetWithInstallerAndFleetServer(image string, installerType string) error {
log.WithFields(log.Fields{
"bootstrapFleetServer": bootstrapFleetServer,
"image": image,
"installer": installerType,
}).Trace("Deploying an agent to Fleet with base image and fleet server")
"image": image,
"installer": installerType,
}).Trace("Deploying an agent to Fleet with base image using an already bootstrapped Fleet Server")

fts.Image = image
fts.InstallerType = installerType
Expand All @@ -295,20 +297,15 @@ func (fts *FleetTestSuite) anAgentIsDeployedToFleetWithInstallerAndFleetServer(i
containerName := fts.getContainerName(agentInstaller, 1) // name of the container

// enroll the agent with a new token
policy := fts.Policy
if bootstrapFleetServer {
policy = fts.FleetServerPolicy
}

enrollmentKey, err := fts.kibanaClient.CreateEnrollmentAPIKey(policy)
enrollmentKey, err := fts.kibanaClient.CreateEnrollmentAPIKey(fts.Policy)
if err != nil {
return err
}
fts.CurrentToken = enrollmentKey.APIKey
fts.CurrentTokenID = enrollmentKey.ID

var fleetConfig *kibana.FleetConfig
fleetConfig, err = deployAgentToFleet(agentInstaller, containerName, fts.CurrentToken, fts.FleetServerHostname)
fleetConfig, err = deployAgentToFleet(agentInstaller, containerName, fts.CurrentToken)

fts.Cleanup = true
if err != nil {
Expand Down Expand Up @@ -346,15 +343,13 @@ func (fts *FleetTestSuite) getServiceName(i installer.ElasticAgentInstaller) str
}

func (fts *FleetTestSuite) getInstaller() installer.ElasticAgentInstaller {
bootstrappedAgent := fts.FleetServerHostname == ""

key := fmt.Sprintf("%s-%s-%s-%t", fts.Image, fts.InstallerType, fts.Version, bootstrappedAgent)
key := fmt.Sprintf("%s-%s-%s", fts.Image, fts.InstallerType, fts.Version)
// check if the agent is already cached
if i, exists := fts.Installers[key]; exists {
return i
}

agentInstaller := installer.GetElasticAgentInstaller(fts.Image, fts.InstallerType, fts.Version, fts.FleetServerHostname)
agentInstaller := installer.GetElasticAgentInstaller(fts.Image, fts.InstallerType, fts.Version)

// cache the new installer
fts.Installers[key] = agentInstaller
Expand Down Expand Up @@ -633,7 +628,7 @@ func (fts *FleetTestSuite) theAgentIsReenrolledOnTheHost() error {
// during an unenroll the fleet server exits as there is no longer
// and agent id associated with the enrollment. When fleet server
// restarts it needs a new agent to associate with the boostrap
cfg, err := kibana.NewFleetConfig(fts.CurrentToken, fts.FleetServerHostname)
cfg, err := kibana.NewFleetConfig(fts.CurrentToken)
if err != nil {
return err
}
Expand Down Expand Up @@ -706,7 +701,7 @@ func thePolicyShowsTheDatasourceAdded(client *kibana.Client, policy kibana.Polic
}

func (fts *FleetTestSuite) theIntegrationIsOperatedInThePolicy(packageName string, action string) error {
return theIntegrationIsOperatedInThePolicy(fts.kibanaClient, fts.FleetServerPolicy, packageName, action)
return theIntegrationIsOperatedInThePolicy(fts.kibanaClient, fts.Policy, packageName, action)
}

func theIntegrationIsOperatedInThePolicy(client *kibana.Client, policy kibana.Policy, packageName string, action string) error {
Expand Down Expand Up @@ -903,7 +898,7 @@ func (fts *FleetTestSuite) thePolicyIsUpdatedToHaveMode(name string, mode string
return godog.ErrPending
}

packageDS, err := fts.kibanaClient.GetIntegrationFromAgentPolicy("endpoint", fts.FleetServerPolicy)
packageDS, err := fts.kibanaClient.GetIntegrationFromAgentPolicy("endpoint", fts.Policy)

if err != nil {
return err
Expand Down Expand Up @@ -937,7 +932,7 @@ func (fts *FleetTestSuite) thePolicyWillReflectTheChangeInTheSecurityApp() error
return err
}

pkgPolicy, err := fts.kibanaClient.GetIntegrationFromAgentPolicy("endpoint", fts.FleetServerPolicy)
pkgPolicy, err := fts.kibanaClient.GetIntegrationFromAgentPolicy("endpoint", fts.Policy)
if err != nil {
return err
}
Expand Down Expand Up @@ -1003,7 +998,7 @@ func (fts *FleetTestSuite) anAttemptToEnrollANewAgentFails() error {

containerName := fts.getContainerName(agentInstaller, 2) // name of the new container

fleetConfig, err := deployAgentToFleet(agentInstaller, containerName, fts.CurrentToken, fts.FleetServerHostname)
fleetConfig, err := deployAgentToFleet(agentInstaller, containerName, fts.CurrentToken)
// the installation process for TAR includes the enrollment
if agentInstaller.InstallerType != "tar" {
if err != nil {
Expand Down Expand Up @@ -1141,7 +1136,7 @@ func (fts *FleetTestSuite) checkDataStream() error {
return err
}

func deployAgentToFleet(agentInstaller installer.ElasticAgentInstaller, containerName string, token string, fleetServerHost string) (*kibana.FleetConfig, error) {
func deployAgentToFleet(agentInstaller installer.ElasticAgentInstaller, containerName string, token string) (*kibana.FleetConfig, error) {
profile := agentInstaller.Profile // name of the runtime dependencies compose file
service := agentInstaller.Service // name of the service
serviceTag := agentInstaller.Tag // docker tag of the service
Expand Down Expand Up @@ -1172,7 +1167,7 @@ func deployAgentToFleet(agentInstaller installer.ElasticAgentInstaller, containe
return nil, err
}

cfg, cfgError := kibana.NewFleetConfig(token, fleetServerHost)
cfg, cfgError := kibana.NewFleetConfig(token)
if cfgError != nil {
return nil, cfgError
}
Expand Down
49 changes: 0 additions & 49 deletions e2e/_suites/fleet/fleet_server.go

This file was deleted.

35 changes: 34 additions & 1 deletion e2e/_suites/fleet/stand-alone.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ func (sats *StandAloneTestSuite) afterScenario() {
if log.IsLevelEnabled(log.DebugLevel) {
_ = sats.getContainerLogs()
}
<<<<<<< HEAD
=======

fts.FleetServerPolicy = fleetPolicy
return fts.startStandAloneAgent(image, "", map[string]string{"fleetServerMode": "1"})
}
>>>>>>> 82380ced... chore: remove unused code (#1119)

developerMode := shell.GetEnvBool("DEVELOPER_MODE")
if !developerMode {
Expand Down Expand Up @@ -138,7 +145,7 @@ func (sats *StandAloneTestSuite) startAgent(image string, composeFilename string
// load the docker images that were already:
// a. downloaded from the GCP bucket
// b. fetched from the local beats binaries
dockerInstaller := installer.GetElasticAgentInstaller("docker", image, common.AgentVersion, "")
dockerInstaller := installer.GetElasticAgentInstaller("docker", image, common.AgentVersion)

dockerInstaller.PreInstallFn()

Expand Down Expand Up @@ -189,11 +196,37 @@ func (sats *StandAloneTestSuite) startAgent(image string, composeFilename string
return nil
}

<<<<<<< HEAD
func (sats *StandAloneTestSuite) getContainerLogs() error {
serviceManager := compose.NewServiceManager()

profile := common.FleetProfileName
serviceName := common.ElasticAgentServiceName
=======
func (fts *FleetTestSuite) thePolicyShowsTheDatasourceAdded(packageName string) error {
log.WithFields(log.Fields{
"policyID": fts.Policy.ID,
"package": packageName,
}).Trace("Checking if the policy shows the package added")

maxTimeout := time.Minute
retryCount := 1

exp := common.GetExponentialBackOff(maxTimeout)

configurationIsPresentFn := func() error {
packagePolicy, err := fts.kibanaClient.GetIntegrationFromAgentPolicy(packageName, fts.Policy)
if err != nil {
log.WithFields(log.Fields{
"packagePolicy": packagePolicy,
"policy": fts.Policy,
"retry": retryCount,
"error": err,
}).Warn("The integration was not found in the policy")
retryCount++
return err
}
>>>>>>> 82380ced... chore: remove unused code (#1119)

composes := []string{
profile, // profile name
Expand Down
13 changes: 6 additions & 7 deletions internal/installer/elasticagent.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,22 +106,21 @@ func downloadAgentBinary(artifactName string, artifact string, version string) (
}

// GetElasticAgentInstaller returns an installer from a docker image
func GetElasticAgentInstaller(image string, installerType string, version string, fleetServerHost string) ElasticAgentInstaller {
func GetElasticAgentInstaller(image string, installerType string, version string) ElasticAgentInstaller {
log.WithFields(log.Fields{
"fleetServerHost": fleetServerHost,
"image": image,
"installer": installerType,
"version": version,
"image": image,
"installer": installerType,
"version": version,
}).Debug("Configuring installer for the agent")

var installer ElasticAgentInstaller
var err error
if "centos" == image && "tar" == installerType {
installer, err = newTarInstaller("centos", "latest", version, fleetServerHost)
installer, err = newTarInstaller("centos", "latest", version)
} else if "centos" == image && "systemd" == installerType {
installer, err = newCentosInstaller("centos", "latest", version)
} else if "debian" == image && "tar" == installerType {
installer, err = newTarInstaller("debian", "stretch", version, fleetServerHost)
installer, err = newTarInstaller("debian", "stretch", version)
} else if "debian" == image && "systemd" == installerType {
installer, err = newDebianInstaller("debian", "stretch", version)
} else if "docker" == image && "default" == installerType {
Expand Down
5 changes: 1 addition & 4 deletions internal/installer/tar.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,8 @@ func (i *TARPackage) WithVersion(version string) *TARPackage {
}

// newTarInstaller returns an instance of the Debian installer for a specific version
func newTarInstaller(image string, tag string, version string, fleetServerHost string) (ElasticAgentInstaller, error) {
func newTarInstaller(image string, tag string, version string) (ElasticAgentInstaller, error) {
dockerImage := image + "-systemd" // we want to consume systemd boxes
if fleetServerHost == "" {
dockerImage = "fleet-server-" + image
}

service := dockerImage
profile := common.FleetProfileName
Expand Down
Loading