diff --git a/go.mod b/go.mod index d68c2c49f5..7ce17aec17 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( ) require ( + github.com/Masterminds/sprig/v3 v3.3.0 github.com/blang/semver/v4 v4.0.0 github.com/go-logr/logr v1.4.2 github.com/google/gofuzz v1.2.0 @@ -45,6 +46,9 @@ require ( ) require ( + dario.cat/mergo v1.0.1 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver/v3 v3.3.0 // indirect github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect @@ -58,8 +62,13 @@ require ( github.com/google/gnostic-models v0.6.8 // indirect github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect + github.com/huandu/xstrings v1.5.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/shopspring/decimal v1.4.0 // indirect + github.com/spf13/cast v1.7.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/x448/float16 v0.8.4 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect @@ -72,6 +81,7 @@ require ( go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect + golang.org/x/crypto v0.32.0 // indirect golang.org/x/net v0.34.0 // indirect golang.org/x/oauth2 v0.24.0 // indirect golang.org/x/sync v0.10.0 // indirect diff --git a/go.sum b/go.sum index 945a89079e..dfce9afd52 100644 --- a/go.sum +++ b/go.sum @@ -59,6 +59,8 @@ github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0 github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= diff --git a/pkg/services/vimmachine.go b/pkg/services/vimmachine.go index 81236bcf4d..e3514645bf 100644 --- a/pkg/services/vimmachine.go +++ b/pkg/services/vimmachine.go @@ -24,6 +24,7 @@ import ( "strings" "text/template" + "github.com/Masterminds/sprig/v3" "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -426,21 +427,7 @@ const ( maxNameLength = 63 ) -// Note: Inlining these functions from sprig to avoid introducing a dependency. -var nameTemplateFuncs = map[string]any{ - "trimSuffix": func(a, b string) string { return strings.TrimSuffix(b, a) }, - "trunc": func(c int, s string) string { - if c < 0 && len(s)+c > 0 { - return s[len(s)+c:] - } - if c >= 0 && len(s) > c { - return s[:c] - } - return s - }, -} - -var nameTpl = template.New("name generator").Funcs(nameTemplateFuncs).Option("missingkey=error") +var nameTpl = template.New("name generator").Funcs(sprig.FuncMap()).Option("missingkey=error") // GenerateVSphereVMName generates the name of a VSphereVM based on the naming strategy. func GenerateVSphereVMName(machineName string, namingStrategy *infrav1.VSphereVMNamingStrategy) (string, error) { diff --git a/pkg/services/vmoperator/vmopmachine.go b/pkg/services/vmoperator/vmopmachine.go index de72429b9b..21fa8d43d6 100644 --- a/pkg/services/vmoperator/vmopmachine.go +++ b/pkg/services/vmoperator/vmopmachine.go @@ -21,9 +21,9 @@ import ( "context" "encoding/json" "fmt" - "strings" "text/template" + "github.com/Masterminds/sprig/v3" "github.com/pkg/errors" vmoprv1 "github.com/vmware-tanzu/vm-operator/api/v1alpha2" vmoprv1common "github.com/vmware-tanzu/vm-operator/api/v1alpha2/common" @@ -294,21 +294,7 @@ const ( maxNameLength = 63 ) -// Note: Inlining these functions from sprig to avoid introducing a dependency. -var nameTemplateFuncs = map[string]any{ - "trimSuffix": func(a, b string) string { return strings.TrimSuffix(b, a) }, - "trunc": func(c int, s string) string { - if c < 0 && len(s)+c > 0 { - return s[len(s)+c:] - } - if c >= 0 && len(s) > c { - return s[:c] - } - return s - }, -} - -var nameTpl = template.New("name generator").Funcs(nameTemplateFuncs).Option("missingkey=error") +var nameTpl = template.New("name generator").Funcs(sprig.FuncMap()).Option("missingkey=error") // virtualMachineObjectKey returns the object key of the VirtualMachine. // Part of this is generating the name of the VirtualMachine based on the naming strategy.