Skip to content

Commit b4d1d78

Browse files
moving around ft. fixes
1 parent 4ac06a9 commit b4d1d78

File tree

6 files changed

+93
-84
lines changed

6 files changed

+93
-84
lines changed

internal/e2e/flags.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//go:build e2e
2+
3+
package e2e
4+
5+
import (
6+
"flag"
7+
"github.com/octago/sflags/gen/gpflag"
8+
"github.com/spf13/pflag"
9+
)
10+
11+
// Bridging for test execution => InitFlags parses struct tags into command-line flags and registers them with Go's flag package
12+
func InitFlags(config interface{}, metricDimensions *map[string]string) {
13+
flags, err := gpflag.Parse(config)
14+
if err != nil {
15+
panic(err)
16+
}
17+
18+
// Manually add flags for data types that gpflag cannot parse
19+
flags.StringToStringVar(metricDimensions, "metricDimensions", nil, "CloudWatch metric dimensions as comma-separated key=value pairs")
20+
21+
flags.VisitAll(func(pf *pflag.Flag) {
22+
flag.CommandLine.Var(pf.Value, pf.Name, pf.Usage)
23+
})
24+
}

test/cases/common/config.go

Lines changed: 0 additions & 24 deletions
This file was deleted.

test/cases/nvidia-training/main_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"context"
77
_ "embed"
88
"fmt"
9-
"github.com/aws/aws-k8s-tester/test/cases/common"
9+
"github.com/aws/aws-k8s-tester/test/common"
1010
"log"
1111
"os"
1212
"os/signal"
@@ -27,6 +27,7 @@ import (
2727
)
2828

2929
func TestMain(m *testing.M) {
30+
fwext.InitFlags(&testConfig, &testConfig.MetricDimensions)
3031
cfg, err := envconf.NewFromFlags()
3132
if err != nil {
3233
log.Fatalf("failed to initialize test environment: %v", err)
@@ -37,7 +38,7 @@ func TestMain(m *testing.M) {
3738
testenv = env.NewWithConfig(cfg).WithContext(ctx)
3839

3940
// Render CloudWatch Agent manifest with dynamic dimensions
40-
renderedCloudWatchAgentManifest, err := manifests.RenderCloudWatchAgentManifest(common.MetricDimensions)
41+
renderedCloudWatchAgentManifest, err := common.RenderCloudWatchAgentManifest(manifests.CloudWatchAgentManifest, testConfig.MetricDimensions)
4142
if err != nil {
4243
log.Printf("Warning: failed to render CloudWatch Agent manifest: %v", err)
4344
}
@@ -83,10 +84,10 @@ func TestMain(m *testing.M) {
8384
},
8485

8586
// Wait for DaemonSets using helper
86-
manifests.DeployDaemonSet("nvidia-device-plugin-daemonset", "kube-system"),
87-
manifests.DeployDaemonSet("aws-efa-k8s-device-plugin-daemonset", "kube-system"),
88-
manifests.DeployDaemonSet("dcgm-exporter", "kube-system"),
89-
manifests.DeployDaemonSet("cwagent", "amazon-cloudwatch"),
87+
common.DeployDaemonSet("nvidia-device-plugin-daemonset", "kube-system"),
88+
common.DeployDaemonSet("aws-efa-k8s-device-plugin-daemonset", "kube-system"),
89+
common.DeployDaemonSet("dcgm-exporter", "kube-system"),
90+
common.DeployDaemonSet("cwagent", "amazon-cloudwatch"),
9091
checkNodeTypes, // Dynamically check node types and capacities after device plugins are ready
9192
)
9293

test/cases/nvidia-training/vars.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,22 @@
33
package training
44

55
import (
6-
"github.com/aws/aws-k8s-tester/test/cases/common"
76
"sigs.k8s.io/e2e-framework/pkg/env"
87
)
98

109
type Config struct {
11-
BertTrainingImage string `flag:"bertTrainingImage" desc:"Docker image used for BERT training workload"`
12-
EfaEnabled bool `flag:"efaEnabled" desc:"Enable Elastic Fabric Adapter (EFA)"`
13-
NodeType string `flag:"nodeType" desc:"Instance type for cluster nodes"`
10+
MetricDimensions map[string]string `flag:"metricDimensions" desc:"CloudWatch metric dimensions as comma-separated key=value pairs"`
11+
BertTrainingImage string `flag:"bertTrainingImage" desc:"Docker image used for BERT training workload"`
12+
EfaEnabled bool `flag:"efaEnabled" desc:"Enable Elastic Fabric Adapter (EFA)"`
13+
NodeType string `flag:"nodeType" desc:"Instance type for cluster nodes"`
1414
}
1515

1616
// Shared global variables
1717
var (
1818
testenv env.Environment
19-
testConfig = &Config{}
19+
testConfig Config
2020

2121
nodeCount int
2222
gpuPerNode int
2323
efaPerNode int
2424
)
25-
26-
func init() {
27-
common.InitFlags(testConfig)
28-
}

test/common/helper.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
//go:build e2e
2+
3+
package common
4+
5+
import (
6+
"context"
7+
"fmt"
8+
"html/template"
9+
"log"
10+
"strings"
11+
"time"
12+
13+
fwext "github.com/aws/aws-k8s-tester/internal/e2e"
14+
appsv1 "k8s.io/api/apps/v1"
15+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16+
"sigs.k8s.io/e2e-framework/klient/wait"
17+
"sigs.k8s.io/e2e-framework/pkg/env"
18+
"sigs.k8s.io/e2e-framework/pkg/envconf"
19+
)
20+
21+
// RenderCloudWatchAgentManifest renders the CloudWatch Agent manifest with dynamic dimensions
22+
func RenderCloudWatchAgentManifest(cloudWatchAgentManifest []byte, metricDimensions map[string]string) ([]byte, error) {
23+
var keys []string
24+
for key := range metricDimensions {
25+
keys = append(keys, `"`+key+`"`)
26+
}
27+
dimensionsStr := strings.Join(keys, ", ")
28+
return fwext.RenderManifests(cloudWatchAgentManifest, map[string]interface{}{
29+
"MetricDimensions": metricDimensions,
30+
"DimensionKeys": template.HTML(dimensionsStr),
31+
})
32+
}
33+
34+
// DeployDaemonSet returns a function to deploy and wait for a DaemonSet to be ready
35+
func DeployDaemonSet(name, namespace string) env.Func {
36+
return func(ctx context.Context, config *envconf.Config) (context.Context, error) {
37+
log.Printf("Waiting for %s daemonset to be ready.", name)
38+
daemonset := appsv1.DaemonSet{
39+
ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace},
40+
}
41+
err := wait.For(
42+
fwext.NewConditionExtension(config.Client().Resources()).DaemonSetReady(&daemonset),
43+
wait.WithTimeout(5*time.Minute),
44+
wait.WithContext(ctx),
45+
)
46+
if err != nil {
47+
// Do not fail test for optional daemonset failures
48+
if name == "cwagent" || name == "dcgm-exporter" {
49+
log.Printf("Warning: %s daemonset is not ready: %v", name, err)
50+
return ctx, nil
51+
}
52+
return ctx, fmt.Errorf("%s daemonset is not ready: %w", name, err)
53+
}
54+
log.Printf("%s daemonset is ready.", name)
55+
return ctx, nil
56+
}
57+
}

test/manifests/raw.go

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,7 @@
11
package manifests
22

33
import (
4-
"context"
54
_ "embed"
6-
"fmt"
7-
"html/template"
8-
"log"
9-
"strings"
10-
"time"
11-
12-
fwext "github.com/aws/aws-k8s-tester/internal/e2e"
13-
appsv1 "k8s.io/api/apps/v1"
14-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15-
"sigs.k8s.io/e2e-framework/klient/wait"
16-
"sigs.k8s.io/e2e-framework/pkg/env"
17-
"sigs.k8s.io/e2e-framework/pkg/envconf"
185
)
196

207
var (
@@ -37,35 +24,3 @@ var (
3724
//go:embed assets/cloudwatch-agent.yaml
3825
CloudWatchAgentManifest []byte
3926
)
40-
41-
// RenderCloudWatchAgentManifest renders the CloudWatch Agent manifest with dynamic dimensions
42-
func RenderCloudWatchAgentManifest(metricDimensions map[string]string) ([]byte, error) {
43-
var keys []string
44-
for key := range metricDimensions {
45-
keys = append(keys, `"`+key+`"`)
46-
}
47-
dimensionsStr := strings.Join(keys, ", ")
48-
return fwext.RenderManifests(CloudWatchAgentManifest, map[string]interface{}{
49-
"MetricDimensions": metricDimensions,
50-
"DimensionKeys": template.HTML(dimensionsStr),
51-
})
52-
}
53-
54-
// DeployDaemonSet returns a function to deploy and wait for a DaemonSet to be ready
55-
func DeployDaemonSet(name, namespace string) env.Func {
56-
return func(ctx context.Context, config *envconf.Config) (context.Context, error) {
57-
log.Printf("Waiting for %s daemonset to be ready.", name)
58-
daemonset := appsv1.DaemonSet{
59-
ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace},
60-
}
61-
err := wait.For(
62-
fwext.NewConditionExtension(config.Client().Resources()).DaemonSetReady(&daemonset),
63-
wait.WithTimeout(5*time.Minute),
64-
)
65-
if err != nil {
66-
return ctx, fmt.Errorf("%s daemonset is not ready: %w", name, err)
67-
}
68-
log.Printf("%s daemonset is ready.", name)
69-
return ctx, nil
70-
}
71-
}

0 commit comments

Comments
 (0)