in internal/agentdeployer/agent.go [236:322]
func (d *DockerComposeAgentDeployer) installDockerCompose(ctx context.Context, agentInfo AgentInfo) (string, error) {
customAgentDir, err := CreateDeployerDir(d.profile, fmt.Sprintf("docker-agent-%s-%s", d.agentName(), d.agentRunID))
if err != nil {
return "", fmt.Errorf("failed to create directory for custom agent files: %w", err)
}
hashDockerfile := []byte{}
if agentInfo.Agent.ProvisioningScript.Contents != "" || agentInfo.Agent.PreStartScript.Contents != "" {
err = d.installDockerfileResources(agentInfo.Agent.AgentSettings, customAgentDir)
if err != nil {
return "", fmt.Errorf("failed to create dockerfile resources: %w", err)
}
hashDockerfile, err = hashFile(filepath.Join(customAgentDir, dockerTestAgentDockerfile))
if err != nil {
return "", fmt.Errorf("failed to obtain has for Elastic Agent Dockerfile: %w", err)
}
}
config, err := stack.LoadConfig(d.profile)
if err != nil {
return "", fmt.Errorf("failed to load config from profile: %w", err)
}
enrollmentToken := ""
if config.ElasticsearchAPIKey != "" {
// TODO: Review if this is the correct place to get the enrollment token.
kibanaClient, err := stack.NewKibanaClientFromProfile(d.profile)
if err != nil {
return "", fmt.Errorf("failed to create kibana client: %w", err)
}
enrollmentToken, err = kibanaClient.GetEnrollmentTokenForPolicyID(ctx, agentInfo.Policy.ID)
if err != nil {
return "", fmt.Errorf("failed to get enrollment token for policy %q: %w", agentInfo.Policy.Name, err)
}
}
// TODO: Include these settings more explicitly in `config`.
fleetURL := "https://fleet-server:8220"
kibanaHost := "https://kibana:5601"
stackVersion := d.stackVersion
if config.Provider != stack.ProviderCompose {
kibanaHost = config.KibanaHost
}
if url, ok := config.Parameters[stack.ParamServerlessFleetURL]; ok {
fleetURL = url
}
if version, ok := config.Parameters[stack.ParamServerlessLocalStackVersion]; ok {
stackVersion = version
}
agentImage, err := selectElasticAgentImage(stackVersion, agentInfo.Agent.BaseImage)
if err != nil {
return "", nil
}
resourceManager := resource.NewManager()
resourceManager.AddFacter(resource.StaticFacter{
"agent_image": agentImage,
"user": agentInfo.Agent.User,
"capabilities": strings.Join(agentInfo.Agent.LinuxCapabilities, ","),
"runtime": agentInfo.Agent.Runtime,
"pid_mode": agentInfo.Agent.PidMode,
"ports": strings.Join(agentInfo.Agent.Ports, ","),
"dockerfile_hash": hex.EncodeToString(hashDockerfile),
"stack_version": stackVersion,
"fleet_url": fleetURL,
"kibana_host": stack.DockerInternalHost(kibanaHost),
"elasticsearch_username": config.ElasticsearchUsername,
"elasticsearch_password": config.ElasticsearchPassword,
"enrollment_token": enrollmentToken,
})
resourceManager.RegisterProvider("file", &resource.FileProvider{
Prefix: customAgentDir,
})
agentResources := []resource.Resource{
&resource.File{
Path: dockerTestAgentDockerCompose,
Content: staticSource.Template("_static/docker-agent-base.yml.tmpl"),
},
}
results, err := resourceManager.Apply(agentResources)
if err != nil {
return "", fmt.Errorf("%w: %s", err, common.ProcessResourceApplyResults(results))
}
return customAgentDir, nil
}