kubebuilder's generic scaffold defensively wires up webhook TLS-cert machinery and an unconditional cert-manager install in the e2e suite, in case a project grows admission webhooks later. This one never will -- the spec's non-goals explicitly rule out admission webhooks and cert-manager wiring -- so none of it does anything. Verified before removing: no config/webhook/, no +kubebuilder:webhook markers anywhere, and config/*/kustomization.yaml's [CERTMANAGER] blocks are all inert (never uncommented). cmd/main.go: drops the webhook import, the three webhook-cert-* flags, and the WebhookServer wiring on ctrl.Options -- the manager now runs with no webhook server, correctly, since nothing registers one. Left the metrics-cert flags alone; those are unrelated to webhooks. test/e2e/e2e_suite_test.go: drops the unconditional cert-manager install/uninstall around the suite. test/utils/utils.go: drops the now-dead InstallCertManager/ UninstallCertManager/IsCertManagerCRDsInstalled and their warnError helper, plus UncommentCode -- unrelated to cert-manager, but found to have zero callers even before this cleanup. Left the inert commented-out [WEBHOOK]/[CERTMANAGER] kustomize blocks and kubebuilder's scaffold marker comments alone: pure comments, no runtime behavior, unlike the cert-manager install this actually removed. Verified clean with both build tags (go build/vet, and -tags=e2e for test/e2e). make test unchanged and green. Co-Authored-By: Claude <noreply@anthropic.com>
92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
/*
|
|
Copyright 2026.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
. "github.com/onsi/ginkgo/v2" // nolint:revive,staticcheck
|
|
)
|
|
|
|
const (
|
|
defaultKindBinary = "kind"
|
|
defaultKindCluster = "kind"
|
|
)
|
|
|
|
// Run executes the provided command within this context
|
|
func Run(cmd *exec.Cmd) (string, error) {
|
|
dir, _ := GetProjectDir()
|
|
cmd.Dir = dir
|
|
|
|
if err := os.Chdir(cmd.Dir); err != nil {
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "chdir dir: %q\n", err)
|
|
}
|
|
|
|
cmd.Env = append(os.Environ(), "GO111MODULE=on")
|
|
command := strings.Join(cmd.Args, " ")
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "running: %q\n", command)
|
|
output, err := cmd.CombinedOutput()
|
|
if err != nil {
|
|
return string(output), fmt.Errorf("%q failed with error %q: %w", command, string(output), err)
|
|
}
|
|
|
|
return string(output), nil
|
|
}
|
|
|
|
// LoadImageToKindClusterWithName loads a local docker image to the kind cluster
|
|
func LoadImageToKindClusterWithName(name string) error {
|
|
cluster := defaultKindCluster
|
|
if v, ok := os.LookupEnv("KIND_CLUSTER"); ok {
|
|
cluster = v
|
|
}
|
|
kindOptions := []string{"load", "docker-image", name, "--name", cluster}
|
|
kindBinary := defaultKindBinary
|
|
if v, ok := os.LookupEnv("KIND"); ok {
|
|
kindBinary = v
|
|
}
|
|
cmd := exec.Command(kindBinary, kindOptions...)
|
|
_, err := Run(cmd)
|
|
return err
|
|
}
|
|
|
|
// GetNonEmptyLines converts given command output string into individual objects
|
|
// according to line breakers, and ignores the empty elements in it.
|
|
func GetNonEmptyLines(output string) []string {
|
|
var res []string
|
|
elements := strings.SplitSeq(output, "\n")
|
|
for element := range elements {
|
|
if element != "" {
|
|
res = append(res, element)
|
|
}
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
// GetProjectDir will return the directory where the project is
|
|
func GetProjectDir() (string, error) {
|
|
wd, err := os.Getwd()
|
|
if err != nil {
|
|
return wd, fmt.Errorf("failed to get current working directory: %w", err)
|
|
}
|
|
wd = strings.ReplaceAll(wd, "/test/e2e", "")
|
|
return wd, nil
|
|
}
|