@@ -1179,6 +1179,18 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
11791179
11801180 scenario .agent = agentDeployed
11811181
1182+ if agentDeployed != nil {
1183+ // The Elastic Agent created in `r.setupAgent` needs to be retrieved just after starting it, to ensure
1184+ // it can be removed and unenrolled if the service fails to start.
1185+ // This function must also be called after setting the service (r.setupService), since there are other
1186+ // deployers like custom agents or kubernetes deployer that create new Elastic Agents too that needs to
1187+ // be retrieved too.
1188+ _ , err := r .checkEnrolledAgents (ctx , agentInfo , svcInfo )
1189+ if err != nil {
1190+ return nil , fmt .Errorf ("can't check enrolled agents: %w" , err )
1191+ }
1192+ }
1193+
11821194 service , svcInfo , err := r .setupService (ctx , config , serviceOptions , svcInfo , agentInfo , agentDeployed , policy , serviceStateData )
11831195 if errors .Is (err , os .ErrNotExist ) {
11841196 logger .Debugf ("No service deployer defined for this test" )
@@ -1238,33 +1250,16 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
12381250 return nil
12391251 }
12401252
1241- // FIXME: running per stages does not work when multiple agents are created
1242- var origPolicy kibana.Policy
12431253 // While there could be created Elastic Agents within `setupService()` (custom agents and k8s agents),
1244- // this "checkEnrolledAgents" call to must be located after creating the service.
1245- agents , err := checkEnrolledAgents (ctx , r .kibanaClient , agentInfo , svcInfo , r .runIndependentElasticAgent )
1254+ // this "checkEnrolledAgents" call must be duplicated here after creating the service too. This will
1255+ // ensure to get the right Enrolled Elastic Agent too.
1256+ agent , err := r .checkEnrolledAgents (ctx , agentInfo , svcInfo )
12461257 if err != nil {
12471258 return nil , fmt .Errorf ("can't check enrolled agents: %w" , err )
12481259 }
1249- agent := agents [0 ]
1250- logger .Debugf ("Selected enrolled agent %q" , agent .ID )
1251-
1252- r .removeAgentHandler = func (ctx context.Context ) error {
1253- if r .runTestsOnly {
1254- return nil
1255- }
1256- // When not using independent agents, service deployers like kubernetes or custom agents create new Elastic Agent
1257- if ! r .runIndependentElasticAgent && ! svcInfo .Agent .Independent {
1258- return nil
1259- }
1260- logger .Debug ("removing agent..." )
1261- err := r .kibanaClient .RemoveAgent (ctx , agent )
1262- if err != nil {
1263- return fmt .Errorf ("failed to remove agent %q: %w" , agent .ID , err )
1264- }
1265- return nil
1266- }
12671260
1261+ // FIXME: running per stages does not work when multiple agents are created
1262+ var origPolicy kibana.Policy
12681263 if r .runTearDown {
12691264 origPolicy = serviceStateData .OrigPolicy
12701265 logger .Debugf ("Got orig policy from file: %q - %q" , origPolicy .Name , origPolicy .ID )
@@ -1291,7 +1286,7 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
12911286 }
12921287
12931288 logger .Debug ("reassigning original policy back to agent..." )
1294- if err := r .kibanaClient .AssignPolicyToAgent (ctx , agent , origPolicy ); err != nil {
1289+ if err := r .kibanaClient .AssignPolicyToAgent (ctx , * agent , origPolicy ); err != nil {
12951290 return fmt .Errorf ("error reassigning original policy to agent: %w" , err )
12961291 }
12971292 return nil
@@ -1339,7 +1334,7 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
13391334 }
13401335
13411336 logger .Debug ("assigning package data stream to agent..." )
1342- if err := r .kibanaClient .AssignPolicyToAgent (ctx , agent , * policyWithDataStream ); err != nil {
1337+ if err := r .kibanaClient .AssignPolicyToAgent (ctx , * agent , * policyWithDataStream ); err != nil {
13431338 return nil , fmt .Errorf ("could not assign policy to agent: %w" , err )
13441339 }
13451340 }
@@ -1406,7 +1401,7 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
14061401 enrollPolicy : policyToEnroll ,
14071402 currentPolicy : policyToTest ,
14081403 config : config ,
1409- agent : origAgent ,
1404+ agent : * origAgent ,
14101405 agentInfo : agentInfo ,
14111406 svcInfo : svcInfo ,
14121407 }
@@ -1851,16 +1846,16 @@ func dumpScenarioDocs(docs any) error {
18511846 return nil
18521847}
18531848
1854- func checkEnrolledAgents (ctx context.Context , client * kibana. Client , agentInfo agentdeployer.AgentInfo , svcInfo servicedeployer.ServiceInfo , runIndependentElasticAgent bool ) ([] kibana.Agent , error ) {
1849+ func ( r * tester ) checkEnrolledAgents (ctx context.Context , agentInfo agentdeployer.AgentInfo , svcInfo servicedeployer.ServiceInfo ) (* kibana.Agent , error ) {
18551850 var agents []kibana.Agent
18561851
18571852 enrolled , err := wait .UntilTrue (ctx , func (ctx context.Context ) (bool , error ) {
1858- allAgents , err := client .ListAgents (ctx )
1853+ allAgents , err := r . kibanaClient .ListAgents (ctx )
18591854 if err != nil {
18601855 return false , fmt .Errorf ("could not list agents: %w" , err )
18611856 }
18621857
1863- if runIndependentElasticAgent {
1858+ if r . runIndependentElasticAgent {
18641859 agents = filterIndependentAgents (allAgents , agentInfo )
18651860 } else {
18661861 agents = filterAgents (allAgents , svcInfo )
@@ -1877,7 +1872,27 @@ func checkEnrolledAgents(ctx context.Context, client *kibana.Client, agentInfo a
18771872 if ! enrolled {
18781873 return nil , errors .New ("no agent enrolled in time" )
18791874 }
1880- return agents , nil
1875+
1876+ agent := agents [0 ]
1877+ logger .Debugf ("Selected enrolled agent %q" , agent .ID )
1878+
1879+ r .removeAgentHandler = func (ctx context.Context ) error {
1880+ if r .runTestsOnly {
1881+ return nil
1882+ }
1883+ // When not using independent agents, service deployers like kubernetes or custom agents create new Elastic Agent
1884+ if ! r .runIndependentElasticAgent && ! svcInfo .Agent .Independent {
1885+ return nil
1886+ }
1887+ logger .Debug ("removing agent..." )
1888+ err := r .kibanaClient .RemoveAgent (ctx , agent )
1889+ if err != nil {
1890+ return fmt .Errorf ("failed to remove agent %q: %w" , agent .ID , err )
1891+ }
1892+ return nil
1893+ }
1894+
1895+ return & agent , nil
18811896}
18821897
18831898func createPackageDatastream (
0 commit comments