Skip to content

Commit 9fff9ac

Browse files
committed
create cluster-capi-operator-ext command for origin e2e
1 parent a337ab2 commit 9fff9ac

File tree

7 files changed

+602
-5
lines changed

7 files changed

+602
-5
lines changed

Dockerfile.rhel

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
FROM registry.ci.openshift.org/ocp/builder:rhel-9-golang-1.24-openshift-4.21 AS builder
22
WORKDIR /go/src/github.com/openshift/cluster-capi-operator
33
COPY . .
4-
RUN make build
4+
RUN make build && \
5+
gzip bin/cluster-capi-operator-ext
56

67
FROM registry.ci.openshift.org/ocp/4.21:base-rhel9
78
COPY --from=builder /go/src/github.com/openshift/cluster-capi-operator/bin/cluster-capi-operator .
89
COPY --from=builder /go/src/github.com/openshift/cluster-capi-operator/bin/machine-api-migration .
910
COPY --from=builder /go/src/github.com/openshift/cluster-capi-operator/manifests /manifests
11+
COPY --from=builder /go/src/github.com/openshift/cluster-capi-operator/bin/cluster-capi-operator-ext.gz .
1012

11-
LABEL io.openshift.release.operator true
13+
LABEL io.k8s.display-name="OpenShift Cluster CAPI Operator" \
14+
io.openshift.release.operator=true \
15+
io.openshift.tags="openshift,tests,e2e,e2e-extension"

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ verify: fmt lint ## Run formatting and linting checks
2929

3030
test: verify unit ## Run verification and unit tests
3131

32-
build: operator migration manifests-gen ## Build all binaries
32+
build: operator migration manifests-gen tests-ext ## Build all binaries
3333

3434
# Ensure bin directory exists for build outputs
3535
bin/:
@@ -44,6 +44,9 @@ operator: | bin/ ## Build cluster-capi-operator binary
4444
migration: | bin/ ## Build machine-api-migration binary
4545
go build -o bin/machine-api-migration cmd/machine-api-migration/main.go
4646

47+
tests-ext: | bin/ ## Build tests extension binary
48+
cd openshift-tests-extension && go build -o ../bin/cluster-capi-operator-ext ./cmd
49+
4750
.PHONY: localtestenv
4851
localtestenv: .localtestenv
4952

go.work

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use (
55
./e2e
66
./hack/tools
77
./manifests-gen
8+
./openshift-tests-extension
89
)
910

1011
replace (

hack/vendor.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ echo "Updating dependencies for Cluster CAPI Operator workspace"
77
# Tidy all modules in the workspace
88
echo "Running go mod tidy for all modules..."
99
go work use -r .
10-
for module in . e2e manifests-gen hack/tools; do
10+
for module in . e2e manifests-gen hack/tools openshift-tests-extension; do
1111
if [ -f "$module/go.mod" ]; then
1212
echo "Tidying $module"
1313
(cd "$module" && go mod tidy)
@@ -16,7 +16,7 @@ done
1616

1717
# Verify all modules
1818
echo "Verifying all modules..."
19-
for module in . e2e manifests-gen hack/tools; do
19+
for module in . e2e manifests-gen hack/tools openshift-tests-extension; do
2020
if [ -f "$module/go.mod" ]; then
2121
echo "Verifying $module"
2222
(cd "$module" && go mod verify)
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"regexp"
7+
"strings"
8+
9+
"github.com/openshift-eng/openshift-tests-extension/pkg/cmd"
10+
e "github.com/openshift-eng/openshift-tests-extension/pkg/extension"
11+
"github.com/openshift-eng/openshift-tests-extension/pkg/extension/extensiontests"
12+
g "github.com/openshift-eng/openshift-tests-extension/pkg/ginkgo"
13+
"github.com/spf13/cobra"
14+
15+
// If using ginkgo, import your tests here.
16+
_ "github.com/openshift/cluster-capi-operator/e2e"
17+
)
18+
19+
func main() {
20+
extensionRegistry := e.NewRegistry()
21+
capiExtension := e.NewExtension("openshift", "payload", "cluster-capi-operator")
22+
23+
capiExtension.AddSuite(e.Suite{
24+
Name: "capio/conformance/parallel",
25+
Qualifiers: []string{`!labels.exists(l, l == "Serial") && labels.exists(l, l == "Conformance")`},
26+
})
27+
28+
capiExtension.AddSuite(e.Suite{
29+
Name: "capio/conformance/serial",
30+
Qualifiers: []string{`labels.exists(l, l == "Serial") && labels.exists(l, l == "Conformance")`},
31+
})
32+
33+
capiExtension.AddSuite(e.Suite{
34+
Name: "capio/e2e",
35+
Qualifiers: []string{`name.contains("[Feature:ClusterAPI]") || name.contains("[OCPFeatureGate:MachineAPIMigration]")`},
36+
})
37+
38+
specs, err := g.BuildExtensionTestSpecsFromOpenShiftGinkgoSuite()
39+
if err != nil {
40+
panic(fmt.Sprintf("couldn't build extension test specs from ginkgo: %+v", err.Error()))
41+
}
42+
43+
// Let's scan for tests with a platform label and create the rule for them such as [platform:vsphere]
44+
foundPlatforms := make(map[string]string)
45+
46+
for _, test := range specs.Select(extensiontests.NameContains("[platform:")).Names() {
47+
re := regexp.MustCompile(`\[platform:[a-z]*]`)
48+
49+
match := re.FindStringSubmatch(test)
50+
for _, platformDef := range match {
51+
if _, ok := foundPlatforms[platformDef]; !ok {
52+
platform := platformDef[strings.Index(platformDef, ":")+1 : len(platformDef)-1]
53+
foundPlatforms[platformDef] = platform
54+
specs.Select(extensiontests.NameContains(platformDef)).
55+
Include(extensiontests.PlatformEquals(platform))
56+
}
57+
}
58+
}
59+
60+
capiExtension.AddSpecs(specs)
61+
extensionRegistry.Register(capiExtension)
62+
63+
root := &cobra.Command{
64+
Long: "Cluster CAPI Operator tests extension for OpenShift",
65+
}
66+
67+
root.AddCommand(cmd.DefaultExtensionCommands(extensionRegistry)...)
68+
69+
if err := func() error {
70+
return root.Execute()
71+
}(); err != nil {
72+
os.Exit(1)
73+
}
74+
}

openshift-tests-extension/go.mod

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
module github.com/openshift/cluster-capi-operator/openshift-tests-extension
2+
3+
go 1.24.0
4+
5+
require (
6+
github.com/openshift-eng/openshift-tests-extension v0.0.0-20251125140340-13f4631a80b0
7+
github.com/openshift/cluster-capi-operator/e2e v0.0.0-20251121101530-509ccfd2960c
8+
github.com/spf13/cobra v1.10.1
9+
)
10+
11+
require (
12+
cel.dev/expr v0.22.1 // indirect
13+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 // indirect
14+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect
15+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0 // indirect
16+
github.com/IBM/go-sdk-core/v5 v5.19.1 // indirect
17+
github.com/IBM/vpc-go-sdk v0.68.0 // indirect
18+
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
19+
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
20+
github.com/asaskevich/govalidator/v11 v11.0.2-0.20250122183457-e11347878e23 // indirect
21+
github.com/aws/aws-sdk-go v1.55.7 // indirect
22+
github.com/aws/aws-sdk-go-v2 v1.38.0 // indirect
23+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.233.0 // indirect
24+
github.com/aws/smithy-go v1.22.5 // indirect
25+
github.com/beorn7/perks v1.0.1 // indirect
26+
github.com/blang/semver/v4 v4.0.0 // indirect
27+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
28+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
29+
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
30+
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
31+
github.com/fsnotify/fsnotify v1.8.0 // indirect
32+
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
33+
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
34+
github.com/go-logr/logr v1.4.3 // indirect
35+
github.com/go-openapi/errors v0.22.1 // indirect
36+
github.com/go-openapi/jsonpointer v0.21.1 // indirect
37+
github.com/go-openapi/jsonreference v0.21.0 // indirect
38+
github.com/go-openapi/strfmt v0.23.0 // indirect
39+
github.com/go-openapi/swag v0.23.1 // indirect
40+
github.com/go-playground/locales v0.14.1 // indirect
41+
github.com/go-playground/universal-translator v0.18.1 // indirect
42+
github.com/go-playground/validator/v10 v10.26.0 // indirect
43+
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
44+
github.com/gobuffalo/flect v1.0.3 // indirect
45+
github.com/gogo/protobuf v1.3.2 // indirect
46+
github.com/google/btree v1.1.3 // indirect
47+
github.com/google/cel-go v0.23.2 // indirect
48+
github.com/google/gnostic-models v0.6.9 // indirect
49+
github.com/google/go-cmp v0.7.0 // indirect
50+
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect
51+
github.com/google/uuid v1.6.0 // indirect
52+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
53+
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
54+
github.com/inconshreveable/mousetrap v1.1.0 // indirect
55+
github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 // indirect
56+
github.com/josharian/intern v1.0.0 // indirect
57+
github.com/json-iterator/go v1.1.12 // indirect
58+
github.com/leodido/go-urn v1.4.0 // indirect
59+
github.com/mailru/easyjson v0.9.0 // indirect
60+
github.com/metal3-io/baremetal-operator/apis v0.5.1 // indirect
61+
github.com/metal3-io/baremetal-operator/pkg/hardwareutils v0.5.1 // indirect
62+
github.com/metal3-io/cluster-api-provider-metal3/api v1.10.1 // indirect
63+
github.com/metal3-io/ip-address-manager/api v1.10.1 // indirect
64+
github.com/mitchellh/mapstructure v1.5.0 // indirect
65+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
66+
github.com/modern-go/reflect2 v1.0.2 // indirect
67+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
68+
github.com/oklog/ulid v1.3.1 // indirect
69+
github.com/onsi/ginkgo/v2 v2.23.4 // indirect
70+
github.com/onsi/gomega v1.38.0 // indirect
71+
github.com/openshift/api v0.0.0-20250731015415-ed654edbd7c6 // indirect
72+
github.com/openshift/client-go v0.0.0-20250710075018-396b36f983ee // indirect
73+
github.com/openshift/cluster-api-actuator-pkg v0.0.0-20250729202911-167220318f40 // indirect
74+
github.com/openshift/cluster-api-actuator-pkg/testutils v0.0.0-20250821122144-fd0936342469 // indirect
75+
github.com/openshift/cluster-autoscaler-operator v0.0.1-0.20250702183526-4eb64d553940 // indirect
76+
github.com/openshift/library-go v0.0.0-20250729191057-91376e1b394e // indirect
77+
github.com/openshift/machine-api-operator v0.2.1-0.20250721183005-388c07321caf // indirect
78+
github.com/pkg/errors v0.9.1 // indirect
79+
github.com/prometheus/client_golang v1.22.0 // indirect
80+
github.com/prometheus/client_model v0.6.2 // indirect
81+
github.com/prometheus/common v0.64.0 // indirect
82+
github.com/prometheus/procfs v0.16.1 // indirect
83+
github.com/spf13/pflag v1.0.9 // indirect
84+
github.com/stoewer/go-strcase v1.3.0 // indirect
85+
github.com/tidwall/gjson v1.18.0 // indirect
86+
github.com/tidwall/match v1.1.1 // indirect
87+
github.com/tidwall/pretty v1.2.1 // indirect
88+
github.com/x448/float16 v0.8.4 // indirect
89+
go.mongodb.org/mongo-driver v1.17.2 // indirect
90+
go.opentelemetry.io/otel v1.36.0 // indirect
91+
go.opentelemetry.io/otel/trace v1.36.0 // indirect
92+
golang.org/x/crypto v0.39.0 // indirect
93+
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
94+
golang.org/x/mod v0.25.0 // indirect
95+
golang.org/x/net v0.41.0 // indirect
96+
golang.org/x/oauth2 v0.30.0 // indirect
97+
golang.org/x/sync v0.15.0 // indirect
98+
golang.org/x/sys v0.33.0 // indirect
99+
golang.org/x/term v0.32.0 // indirect
100+
golang.org/x/text v0.26.0 // indirect
101+
golang.org/x/time v0.11.0 // indirect
102+
golang.org/x/tools v0.33.0 // indirect
103+
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
104+
google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a // indirect
105+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
106+
google.golang.org/protobuf v1.36.6 // indirect
107+
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
108+
gopkg.in/inf.v0 v0.9.1 // indirect
109+
gopkg.in/yaml.v3 v3.0.1 // indirect
110+
k8s.io/api v0.33.3 // indirect
111+
k8s.io/apiextensions-apiserver v0.33.3 // indirect
112+
k8s.io/apimachinery v0.33.3 // indirect
113+
k8s.io/client-go v0.33.3 // indirect
114+
k8s.io/component-base v0.33.3 // indirect
115+
k8s.io/klog v1.0.0 // indirect
116+
k8s.io/klog/v2 v2.130.1 // indirect
117+
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
118+
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e // indirect
119+
sigs.k8s.io/cluster-api v1.10.4 // indirect
120+
sigs.k8s.io/cluster-api-provider-aws/v2 v2.9.0 // indirect
121+
sigs.k8s.io/cluster-api-provider-azure v1.20.2 // indirect
122+
sigs.k8s.io/cluster-api-provider-gcp v1.10.0 // indirect
123+
sigs.k8s.io/cluster-api-provider-ibmcloud v0.11.0 // indirect
124+
sigs.k8s.io/cluster-api-provider-vsphere v1.13.0 // indirect
125+
sigs.k8s.io/controller-runtime v0.20.4 // indirect
126+
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
127+
sigs.k8s.io/kube-storage-version-migrator v0.0.6-0.20230721195810-5c8923c5ff96 // indirect
128+
sigs.k8s.io/randfill v1.0.0 // indirect
129+
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
130+
sigs.k8s.io/yaml v1.4.0 // indirect
131+
)
132+
133+
replace (
134+
github.com/onsi/ginkgo/v2 => github.com/openshift/onsi-ginkgo/v2 v2.6.1-0.20241205171354-8006f302fd12
135+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc => go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0
136+
)

0 commit comments

Comments
 (0)