Skip to content

Commit

Permalink
Add the possibility to run tests with an Agent 6 artifact
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorentClarret committed Oct 16, 2024
1 parent 5c3ffa4 commit c1c425f
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 25 deletions.
10 changes: 10 additions & 0 deletions common/config/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ const (
DDAgentAPPKeyParamName = "appKey"
DDAgentFakeintake = "fakeintake"
DDAgentSite = "site"
DDAgentMajorVersion = "majorVersion"
DDAgentExtraEnvVars = "extraEnvVars" // extraEnvVars is expected in the format: <key1>=<value1>,<key2>=<value2>,...

// Updater Namespace
Expand Down Expand Up @@ -117,6 +118,7 @@ type Env interface {
DogstatsdDeploy() bool
DogstatsdFullImagePath() string
UpdaterDeploy() bool
MajorVersion() string

GetBoolWithDefault(config *sdkconfig.Config, paramName string, defaultValue bool) bool
GetStringListWithDefault(config *sdkconfig.Config, paramName string, defaultValue []string) []string
Expand Down Expand Up @@ -306,6 +308,14 @@ func (e *CommonEnvironment) Site() string {
return e.AgentConfig.Get(DDAgentSite)
}

func (e *CommonEnvironment) MajorVersion() string {
version := e.AgentConfig.Get(DDAgentMajorVersion)
if version == "" {
return "7"
}
return version
}

func (e *CommonEnvironment) AgentExtraEnvVars() map[string]string {
result := make(map[string]string)
envVars, err := e.AgentConfig.Try(DDAgentExtraEnvVars)
Expand Down
45 changes: 26 additions & 19 deletions components/datadog/agent/host_linuxos.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@ package agent

import (
"fmt"
"strings"

"github.com/DataDog/test-infra-definitions/components/command"
"github.com/DataDog/test-infra-definitions/components/datadog/agentparams"
"github.com/DataDog/test-infra-definitions/components/os"
remoteComp "github.com/DataDog/test-infra-definitions/components/remote"
"strings"

"github.com/pulumi/pulumi-command/sdk/go/command/remote"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

const DefaultMajorVersion = "7"

type agentLinuxManager struct {
targetOS os.OS
}
Expand All @@ -22,37 +23,43 @@ func newLinuxManager(host *remoteComp.Host) agentOSManager {
}

func (am *agentLinuxManager) getInstallCommand(version agentparams.PackageVersion, _ []string) (string, error) {
var commandLine string
var majorVersion string
testEnvVars := []string{}

if version.Major != "" {
majorVersion = version.Major
} else {
majorVersion = DefaultMajorVersion
}

if version.PipelineID != "" {
testEnvVars := []string{}
testEnvVars = append(testEnvVars, "TESTING_APT_URL=apttesting.datad0g.com")
// apt testing repo
// TESTING_APT_REPO_VERSION="pipeline-xxxxx-a7 7"
testEnvVars = append(testEnvVars, fmt.Sprintf(`TESTING_APT_REPO_VERSION="pipeline-%v-a7-%s 7"`, version.PipelineID, am.targetOS.Descriptor().Architecture))
testEnvVars = append(testEnvVars, fmt.Sprintf(`TESTING_APT_REPO_VERSION="pipeline-%v-a%v-%s %v"`, version.PipelineID, majorVersion, am.targetOS.Descriptor().Architecture, majorVersion))
testEnvVars = append(testEnvVars, "TESTING_YUM_URL=yumtesting.datad0g.com")
// yum testing repo
// TESTING_YUM_VERSION_PATH="testing/pipeline-xxxxx-a7/7"
testEnvVars = append(testEnvVars, fmt.Sprintf("TESTING_YUM_VERSION_PATH=testing/pipeline-%v-a7/7", version.PipelineID))
commandLine := strings.Join(testEnvVars, " ")
testEnvVars = append(testEnvVars, fmt.Sprintf("TESTING_YUM_VERSION_PATH=testing/pipeline-%v-a%v/%v", version.PipelineID, majorVersion, majorVersion))
} else {
testEnvVars = append(testEnvVars, fmt.Sprintf("DD_AGENT_MAJOR_VERSION=%v", majorVersion))

return fmt.Sprintf(
`for i in 1 2 3 4 5; do curl -fsSL https://s3.amazonaws.com/dd-agent/scripts/%v -o install-script.sh && break || sleep $((2**$i)); done && for i in 1 2 3; do DD_API_KEY=%%s %v DD_INSTALL_ONLY=true bash install-script.sh && exit 0 || sleep $((2**$i)); done; exit 1`,
"install_script_agent7.sh",
commandLine), nil
}
if version.Minor != "" {
testEnvVars = append(testEnvVars, fmt.Sprintf("DD_AGENT_MINOR_VERSION=%v", version.Minor))
}

commandLine := fmt.Sprintf("DD_AGENT_MAJOR_VERSION=%v ", version.Major)

if version.Minor != "" {
commandLine += fmt.Sprintf("DD_AGENT_MINOR_VERSION=%v ", version.Minor)
if version.Channel != "" && version.Channel != agentparams.StableChannel {
testEnvVars = append(testEnvVars, "REPO_URL=datad0g.com")
testEnvVars = append(testEnvVars, fmt.Sprintf("DD_AGENT_DIST_CHANNEL=%s", version.Channel))
}
}

if version.Channel != "" && version.Channel != agentparams.StableChannel {
commandLine += fmt.Sprintf("REPO_URL=datad0g.com DD_AGENT_DIST_CHANNEL=%s ", version.Channel)
}
commandLine = strings.Join(testEnvVars, " ")

return fmt.Sprintf(
`for i in 1 2 3 4 5; do curl -fsSL https://s3.amazonaws.com/dd-agent/scripts/%v -o install-script.sh && break || sleep $((2**$i)); done && for i in 1 2 3; do DD_API_KEY=%%s %v DD_INSTALL_ONLY=true bash install-script.sh && exit 0 || sleep $((2**$i)); done; exit 1`,
fmt.Sprintf("install_script_agent%s.sh", version.Major),
fmt.Sprintf("install_script_agent%s.sh", majorVersion),
commandLine), nil
}

Expand Down
6 changes: 3 additions & 3 deletions components/datadog/agent/host_windowsos.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ func getAgentURL(version agentparams.PackageVersion) (string, error) {
fullVersion := fmt.Sprintf("%v.%v", version.Major, minor)

if version.PipelineID != "" {
return getAgentURLFromPipelineID(version.PipelineID)
return getAgentURLFromPipelineID(version.PipelineID, version.Major)
}

if version.Channel == agentparams.BetaChannel {
Expand Down Expand Up @@ -150,7 +150,7 @@ func getAgentURL(version agentparams.PackageVersion) (string, error) {
return finder.findVersion(fullVersion)
}

func getAgentURLFromPipelineID(pipelineID string) (string, error) {
func getAgentURLFromPipelineID(pipelineID string, majorVersion string) (string, error) {
// TODO: Replace context.Background() with a Pulumi context.Context.
// dd-agent-mstesting is a public bucket so we can use anonymous credentials
config, err := awsConfig.LoadDefaultConfig(context.Background(), awsConfig.WithCredentialsProvider(aws.AnonymousCredentials{}))
Expand All @@ -162,7 +162,7 @@ func getAgentURLFromPipelineID(pipelineID string) (string, error) {

result, err := s3Client.ListObjectsV2(context.Background(), &s3.ListObjectsV2Input{
Bucket: aws.String("dd-agent-mstesting"),
Prefix: aws.String(fmt.Sprintf("pipelines/A7/%v", pipelineID)),
Prefix: aws.String(fmt.Sprintf("pipelines/A%v/%v", majorVersion, pipelineID)),
})
if err != nil {
return "", err
Expand Down
18 changes: 15 additions & 3 deletions components/datadog/agentparams/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,13 @@ func NewParams(env config.Env, options ...Option) (*Params, error) {
if env.AgentVersion() != "" {
defaultVersion = WithVersion(env.AgentVersion())
}

options = append([]Option{defaultVersion}, options...)

if env.MajorVersion() != "" {
options = append([]Option{WithMajorVersion(env.MajorVersion())}, options...)
}

return common.ApplyOption(p, options)
}

Expand Down Expand Up @@ -109,9 +115,15 @@ func WithVersion(version string) func(*Params) error {
// WithPipeline use a specific version of the Agent by pipeline id
func WithPipeline(pipelineID string) func(*Params) error {
return func(p *Params) error {
p.Version = PackageVersion{
PipelineID: pipelineID,
}
p.Version.PipelineID = pipelineID
return nil
}
}

// WithMajorVersion specify the major version of the Agent
func WithMajorVersion(majorVersion string) func(*Params) error {
return func(p *Params) error {
p.Version.Major = majorVersion
return nil
}
}
Expand Down

0 comments on commit c1c425f

Please sign in to comment.