|
6 | 6 | package ssi |
7 | 7 |
|
8 | 8 | import ( |
| 9 | + "strings" |
| 10 | + |
9 | 11 | "github.com/DataDog/datadog-agent/test/e2e-framework/components/datadog/kubernetesagentparams" |
10 | 12 | kubeComp "github.com/DataDog/datadog-agent/test/e2e-framework/components/kubernetes" |
| 13 | + scenarioeks "github.com/DataDog/datadog-agent/test/e2e-framework/scenarios/aws/eks" |
11 | 14 | "github.com/DataDog/datadog-agent/test/e2e-framework/scenarios/aws/kindvm" |
12 | 15 | "github.com/DataDog/datadog-agent/test/e2e-framework/testing/environments" |
13 | 16 | "github.com/DataDog/datadog-agent/test/e2e-framework/testing/provisioners" |
| 17 | + proveks "github.com/DataDog/datadog-agent/test/e2e-framework/testing/provisioners/aws/kubernetes/eks" |
14 | 18 | provkindvm "github.com/DataDog/datadog-agent/test/e2e-framework/testing/provisioners/aws/kubernetes/kindvm" |
15 | 19 | localkind "github.com/DataDog/datadog-agent/test/e2e-framework/testing/provisioners/local/kubernetes" |
16 | 20 | "github.com/DataDog/datadog-agent/test/e2e-framework/testing/runner" |
17 | 21 | "github.com/DataDog/datadog-agent/test/e2e-framework/testing/runner/parameters" |
18 | 22 | ) |
19 | 23 |
|
| 24 | +// ProvisionerType represents the type of Kubernetes provisioner to use. |
| 25 | +type ProvisionerType string |
| 26 | + |
| 27 | +const ( |
| 28 | + // ProvisionerKindAWS uses Kind running on an AWS VM (default). |
| 29 | + ProvisionerKindAWS ProvisionerType = "kind" |
| 30 | + // ProvisionerKindLocal uses Kind running locally. |
| 31 | + ProvisionerKindLocal ProvisionerType = "kind-local" |
| 32 | + // ProvisionerEKS uses Amazon EKS. |
| 33 | + ProvisionerEKS ProvisionerType = "eks" |
| 34 | +) |
| 35 | + |
20 | 36 | // ProvisionerOptions contains the common options for Kubernetes provisioners. |
21 | 37 | type ProvisionerOptions struct { |
22 | 38 | AgentOptions []kubernetesagentparams.Option |
23 | 39 | WorkloadAppFunc kubeComp.WorkloadAppFunc |
24 | 40 | AgentDependentWorkloadAppFunc kubeComp.AgentDependentWorkloadAppFunc |
25 | 41 | } |
26 | 42 |
|
27 | | -// Provisioner returns a Kubernetes provisioner based on E2E_DEV_LOCAL parameter. |
28 | | -// If E2E_DEV_LOCAL=true, returns a local Kind provisioner for faster development. |
29 | | -// Otherwise, returns an AWS Kind VM provisioner. |
| 43 | +// Provisioner returns a Kubernetes provisioner based on E2E_PROVISIONER and E2E_DEV_LOCAL parameters. |
| 44 | +// Supported provisioners: "kind" (default), "kind-local", "eks". |
| 45 | +// E2E_DEV_LOCAL=true is a shortcut for E2E_PROVISIONER=kind-local. |
30 | 46 | func Provisioner(opts ProvisionerOptions) provisioners.TypedProvisioner[environments.Kubernetes] { |
31 | | - if isLocalMode() { |
| 47 | + provisionerType := getProvisionerType() |
| 48 | + switch provisionerType { |
| 49 | + case ProvisionerKindLocal: |
32 | 50 | return localKindProvisioner(opts) |
| 51 | + case ProvisionerEKS: |
| 52 | + return eksProvisioner(opts) |
| 53 | + default: |
| 54 | + return awsKindProvisioner(opts) |
| 55 | + } |
| 56 | +} |
| 57 | + |
| 58 | +// getProvisionerType returns the provisioner type from E2E_PROVISIONER parameter or E2E_DEV_LOCAL. |
| 59 | +func getProvisionerType() ProvisionerType { |
| 60 | + // Check E2E_PROVISIONER first (via env var or config file). |
| 61 | + provisioner, err := runner.GetProfile().ParamStore().GetWithDefault(parameters.Provisioner, "") |
| 62 | + if err == nil && provisioner != "" { |
| 63 | + return ProvisionerType(strings.ToLower(provisioner)) |
| 64 | + } |
| 65 | + // Fall back to E2E_DEV_LOCAL for backward compatibility. |
| 66 | + if isLocalMode() { |
| 67 | + return ProvisionerKindLocal |
33 | 68 | } |
34 | | - return awsKindProvisioner(opts) |
| 69 | + return ProvisionerKindAWS |
35 | 70 | } |
36 | 71 |
|
37 | 72 | // isLocalMode returns true if E2E_DEV_LOCAL is set to "true" (via env var or config file) |
@@ -72,3 +107,22 @@ func awsKindProvisioner(opts ProvisionerOptions) provisioners.TypedProvisioner[e |
72 | 107 | } |
73 | 108 | return provkindvm.Provisioner(provkindvm.WithRunOptions(runOpts...)) |
74 | 109 | } |
| 110 | + |
| 111 | +// eksProvisioner returns an Amazon EKS provisioner. |
| 112 | +func eksProvisioner(opts ProvisionerOptions) provisioners.TypedProvisioner[environments.Kubernetes] { |
| 113 | + var runOpts []scenarioeks.RunOption |
| 114 | + |
| 115 | + // Add a Linux node group by default. |
| 116 | + runOpts = append(runOpts, scenarioeks.WithEKSOptions(scenarioeks.WithLinuxNodeGroup())) |
| 117 | + |
| 118 | + if len(opts.AgentOptions) > 0 { |
| 119 | + runOpts = append(runOpts, scenarioeks.WithAgentOptions(opts.AgentOptions...)) |
| 120 | + } |
| 121 | + if opts.WorkloadAppFunc != nil { |
| 122 | + runOpts = append(runOpts, scenarioeks.WithWorkloadApp(opts.WorkloadAppFunc)) |
| 123 | + } |
| 124 | + if opts.AgentDependentWorkloadAppFunc != nil { |
| 125 | + runOpts = append(runOpts, scenarioeks.WithAgentDependentWorkloadApp(opts.AgentDependentWorkloadAppFunc)) |
| 126 | + } |
| 127 | + return proveks.Provisioner(proveks.WithRunOptions(runOpts...)) |
| 128 | +} |
0 commit comments