func Main()

in systemtest/cmd/runapm/main.go [89:170]


func Main() error {
	flag.Parse()

	log.Println("Initialising Fleet")
	if err := systemtest.Fleet.Setup(); err != nil {
		log.Fatal(err)
	}
	if force {
		agentPolicies, err := systemtest.Fleet.AgentPolicies("ingest-agent-policies.name:" + policyName)
		if err != nil {
			return err
		}
		if len(agentPolicies) > 0 {
			log.Printf("Deleting existing agent policy")
			agentPolicyIDs := make([]string, len(agentPolicies))
			for i, agentPolicy := range agentPolicies {
				agentPolicyIDs[i] = agentPolicy.ID
			}
			if err := systemtest.DestroyAgentPolicy(agentPolicyIDs...); err != nil {
				return err
			}
		}
	}
	if err := systemtest.InitFleetPackage(); err != nil {
		return err
	}
	if initOnly {
		return nil
	}

	log.Println("Creating Elastic Agent policy")
	agentPolicy, key, err := systemtest.Fleet.CreateAgentPolicy(policyName, namespace, policyDescription)
	if err != nil {
		return err
	}
	packagePolicy := systemtest.NewPackagePolicy(agentPolicy, vars, nil)
	if err := systemtest.Fleet.CreatePackagePolicy(packagePolicy); err != nil {
		return err
	}
	reap := !keep || !background
	if reap {
		defer func() {
			log.Println("Destroying agent policy")
			if err := systemtest.DestroyAgentPolicy(agentPolicy.ID); err != nil {
				log.Fatal(err)
			}
		}()
	}

	log.Println("Creating Elastic Agent container")
	agent, err := systemtest.NewUnstartedElasticAgentContainer(systemtest.ContainerConfig{
		Name: containerName, Arch: arch,
	})
	if err != nil {
		return err
	}
	agent.Reap = !keep
	agent.FleetEnrollmentToken = key.APIKey
	if reap {
		defer func() {
			log.Println("Terminating agent")
			agent.Close()
		}()
	}

	agent.ExposedPorts = []string{"8200"}
	agent.WaitingFor = wait.ForHTTP("/").WithPort("8200/tcp").WithStartupTimeout(5 * time.Minute)
	agent.Stdout = os.Stdout
	agent.Stderr = os.Stderr
	if err := agent.Start(); err != nil {
		return err
	}

	serverURL := &url.URL{Scheme: "http", Host: agent.Addrs["8200"]}
	log.Printf("Elastic Agent container started")
	log.Printf(" - APM Server listening on %s", serverURL)
	if background {
		return nil
	}
	_, err = agent.Wait(context.Background())
	return err
}