diff --git a/Makefile b/Makefile index a3e884807..4f1ca4ed9 100644 --- a/Makefile +++ b/Makefile @@ -167,8 +167,8 @@ ENVTEST ?= $(LOCALBIN)/setup-envtest YQUERY ?= $(LOCALBIN)/yq ## Tool Versions -KUSTOMIZE_VERSION ?= v4.5.5 -CONTROLLER_TOOLS_VERSION ?= v0.14.0 +KUSTOMIZE_VERSION ?= v5.5.0 +CONTROLLER_TOOLS_VERSION ?= v0.16.5 YQ_VERSION ?= v4 KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" diff --git a/api/v1alpha2/compatibility_mode.go b/api/v1alpha2/compatibility_mode.go index 46fbfc71d..1dbfb53ad 100644 --- a/api/v1alpha2/compatibility_mode.go +++ b/api/v1alpha2/compatibility_mode.go @@ -1,8 +1,8 @@ package v1alpha2 import ( - "istio.io/api/operator/v1alpha1" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" + v1 "k8s.io/api/core/v1" ) var pilotCompatibilityEnvVars = map[string]string{ @@ -19,21 +19,18 @@ func setCompatibilityMode(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioOperat } func setCompatibilityPilot(op iopv1alpha1.IstioOperator) iopv1alpha1.IstioOperator { - if op.Spec == nil { - op.Spec = &v1alpha1.IstioOperatorSpec{} - } if op.Spec.Components == nil { - op.Spec.Components = &v1alpha1.IstioComponentSetSpec{} + op.Spec.Components = &iopv1alpha1.IstioComponentSpec{} } if op.Spec.Components.Pilot == nil { - op.Spec.Components.Pilot = &v1alpha1.ComponentSpec{} + op.Spec.Components.Pilot = &iopv1alpha1.ComponentSpec{} } - if op.Spec.Components.Pilot.K8S == nil { - op.Spec.Components.Pilot.K8S = &v1alpha1.KubernetesResourcesSpec{} + if op.Spec.Components.Pilot.Kubernetes == nil { + op.Spec.Components.Pilot.Kubernetes = &iopv1alpha1.KubernetesResources{} } for k, v := range pilotCompatibilityEnvVars { - op.Spec.Components.Pilot.K8S.Env = append(op.Spec.Components.Pilot.K8S.Env, &v1alpha1.EnvVar{ + op.Spec.Components.Pilot.Kubernetes.Env = append(op.Spec.Components.Pilot.Kubernetes.Env, &v1.EnvVar{ Name: k, Value: v, }) @@ -48,26 +45,19 @@ var ProxyMetaDataCompatibility = map[string]string{ } func setCompatibilityProxyMetadata(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioOperator, error) { - if op.Spec == nil { - op.Spec = &v1alpha1.IstioOperatorSpec{} - } - mcb, err := newMeshConfigBuilder(op) if err != nil { return op, err } for k, v := range ProxyMetaDataCompatibility { - mcb.AddProxyMetadata(k, v) - } - newMeshConfig := mcb.Build() - - updatedConfig, err := marshalMeshConfig(newMeshConfig) - if err != nil { - return op, err + mcb, err = mcb.AddProxyMetadata(k, v) + if err != nil { + return iopv1alpha1.IstioOperator{}, err + } } - op.Spec.MeshConfig = updatedConfig + op.Spec.MeshConfig = mcb.Build() return op, nil } diff --git a/api/v1alpha2/compatibility_mode_test.go b/api/v1alpha2/compatibility_mode_test.go index 3ddf082ab..bda453a53 100644 --- a/api/v1alpha2/compatibility_mode_test.go +++ b/api/v1alpha2/compatibility_mode_test.go @@ -3,9 +3,8 @@ package v1alpha2 import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - "google.golang.org/protobuf/types/known/structpb" - operatorv1alpha1 "istio.io/api/operator/v1alpha1" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + operatorv1alpha1 "istio.io/istio/operator/pkg/apis" + "istio.io/istio/operator/pkg/values" "istio.io/istio/pkg/config/mesh" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -14,8 +13,8 @@ var _ = Describe("Compatibility Mode", func() { Context("Istio Pilot", func() { It("should set compatibility variables on Istio Pilot when compatibility mode is on", func() { //given - iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + iop := operatorv1alpha1.IstioOperator{ + Spec: operatorv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{ ObjectMeta: metav1.ObjectMeta{ @@ -33,7 +32,7 @@ var _ = Describe("Compatibility Mode", func() { Expect(err).ShouldNot(HaveOccurred()) existingEnvs := map[string]string{} - for _, v := range out.Spec.Components.Pilot.K8S.GetEnv() { + for _, v := range out.Spec.Components.Pilot.Kubernetes.Env { existingEnvs[v.Name] = v.Value } @@ -45,8 +44,8 @@ var _ = Describe("Compatibility Mode", func() { It("should not set compatibility variables on Istio Pilot when compatibility mode is off", func() { //given - iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + iop := operatorv1alpha1.IstioOperator{ + Spec: operatorv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{ ObjectMeta: metav1.ObjectMeta{ @@ -65,7 +64,7 @@ var _ = Describe("Compatibility Mode", func() { Expect(err).ShouldNot(HaveOccurred()) variableCounter := 0 - for _, value := range out.Spec.Components.Pilot.K8S.GetEnv() { + for _, value := range out.Spec.Components.Pilot.Kubernetes.Env { if v, ok := pilotCompatibilityEnvVars[value.Name]; ok && value.Value == v { variableCounter++ } @@ -76,8 +75,8 @@ var _ = Describe("Compatibility Mode", func() { It("should not set compatibility variables on Istio Pilot when compatibility mode is is not configured in IstioCR", func() { //given - iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + iop := operatorv1alpha1.IstioOperator{ + Spec: operatorv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{ ObjectMeta: metav1.ObjectMeta{ @@ -95,7 +94,7 @@ var _ = Describe("Compatibility Mode", func() { Expect(err).ShouldNot(HaveOccurred()) variableCounter := 0 - for _, value := range out.Spec.Components.Pilot.K8S.GetEnv() { + for _, value := range out.Spec.Components.Pilot.Kubernetes.Env { if v, ok := pilotCompatibilityEnvVars[value.Name]; ok && value.Value == v { variableCounter++ } @@ -107,8 +106,8 @@ var _ = Describe("Compatibility Mode", func() { Context("MeshConfig ProxyMetadata", func() { It("should set compatibility variables in proxyMetadata when no meshConfig is defined", func() { //given - iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + iop := operatorv1alpha1.IstioOperator{ + Spec: operatorv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{ ObjectMeta: metav1.ObjectMeta{ @@ -126,9 +125,9 @@ var _ = Describe("Compatibility Mode", func() { Expect(err).ShouldNot(HaveOccurred()) for fieldName, value := range ProxyMetaDataCompatibility { - field := getProxyMetadataField(out, fieldName) - Expect(field).ToNot(BeNil()) - Expect(field.GetStringValue()).To(Equal(value)) + field, exist := getProxyMetadataField(out, fieldName) + Expect(exist).To(BeTrue()) + Expect(field.(string)).To(Equal(value)) } }) @@ -141,8 +140,8 @@ var _ = Describe("Compatibility Mode", func() { meshConfig := convert(m) - iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ + iop := operatorv1alpha1.IstioOperator{ + Spec: operatorv1alpha1.IstioOperatorSpec{ MeshConfig: meshConfig, }, } @@ -163,9 +162,9 @@ var _ = Describe("Compatibility Mode", func() { Expect(err).ShouldNot(HaveOccurred()) for fieldName, value := range ProxyMetaDataCompatibility { - field := getProxyMetadataField(out, fieldName) - Expect(field).ToNot(BeNil()) - Expect(field.GetStringValue()).To(Equal(value)) + field, exist := getProxyMetadataField(out, fieldName) + Expect(exist).To(BeTrue()) + Expect(field.(string)).To(Equal(value)) } }) @@ -178,8 +177,8 @@ var _ = Describe("Compatibility Mode", func() { meshConfig := convert(m) - iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ + iop := operatorv1alpha1.IstioOperator{ + Spec: operatorv1alpha1.IstioOperatorSpec{ MeshConfig: meshConfig, }, } @@ -200,14 +199,15 @@ var _ = Describe("Compatibility Mode", func() { Expect(err).ShouldNot(HaveOccurred()) for fieldName, _ := range ProxyMetaDataCompatibility { - field := getProxyMetadataField(out, fieldName) - Expect(field).To(BeNil()) + _, exist := getProxyMetadataField(out, fieldName) + Expect(exist).To(BeFalse()) } }) }) }) -func getProxyMetadataField(iop iopv1alpha1.IstioOperator, fieldName string) *structpb.Value { - return iop.Spec.MeshConfig.Fields["defaultConfig"].GetStructValue(). - Fields["proxyMetadata"].GetStructValue().Fields[fieldName] +func getProxyMetadataField(iop operatorv1alpha1.IstioOperator, fieldName string) (any, bool) { + mapMeshConfig, err := values.MapFromObject(iop.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + return mapMeshConfig.GetPath("defaultConfig.proxyMetadata." + fieldName) } diff --git a/api/v1alpha2/istio_merge.go b/api/v1alpha2/istio_merge.go index 4ada42344..62d095008 100644 --- a/api/v1alpha2/istio_merge.go +++ b/api/v1alpha2/istio_merge.go @@ -2,31 +2,20 @@ package v1alpha2 import ( "encoding/json" - "google.golang.org/protobuf/types/known/wrapperspb" - "istio.io/api/operator/v1alpha1" + "istio.io/istio/operator/pkg/values" + "istio.io/istio/pkg/util/protomarshal" + appsv1 "k8s.io/api/apps/v1" + autoscalingv2 "k8s.io/api/autoscaling/v2" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/util/intstr" "google.golang.org/protobuf/types/known/structpb" meshv1alpha1 "istio.io/api/mesh/v1alpha1" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" - "istio.io/istio/pkg/util/protomarshal" -) - -const ( - cpu string = "cpu" - memory string = "memory" - globalField = "global" - proxyField = "proxy" - resourcesField = "resources" - limitsField = "limits" - requestsField = "requests" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" ) func (i *Istio) MergeInto(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioOperator, error) { - if op.Spec == nil { - op.Spec = &v1alpha1.IstioOperatorSpec{} - } - mergedConfigOp, err := i.mergeConfig(op) if err != nil { return op, err @@ -49,56 +38,45 @@ func (i *Istio) MergeInto(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioOperat } type meshConfigBuilder struct { - c *meshv1alpha1.MeshConfig + c values.Map } func newMeshConfigBuilder(op iopv1alpha1.IstioOperator) (*meshConfigBuilder, error) { if op.Spec.MeshConfig == nil { - op.Spec.MeshConfig = &structpb.Struct{} + return &meshConfigBuilder{c: make(values.Map)}, nil } - - c, err := unmarshalMeshConfig(op.Spec.MeshConfig) + c, err := values.MapFromObject(op.Spec.MeshConfig) if err != nil { return nil, err } - if c.DefaultConfig == nil { - c.DefaultConfig = &meshv1alpha1.ProxyConfig{} - } - return &meshConfigBuilder{c: c}, nil } -func (m *meshConfigBuilder) BuildNumTrustedProxies(numTrustedProxiesPtr *int) *meshConfigBuilder { - var numTrustedProxies uint32 - if numTrustedProxiesPtr == nil { +func (m *meshConfigBuilder) BuildNumTrustedProxies(numTrustedProxies *int) *meshConfigBuilder { + if numTrustedProxies == nil { return m } - numTrustedProxies = uint32(*numTrustedProxiesPtr) - - // Since the gateway topology is not part of the default configuration, and we do not explicitly set it in the - // chart, it could be nil. - if m.c.DefaultConfig.GatewayTopology != nil { - m.c.DefaultConfig.GatewayTopology.NumTrustedProxies = numTrustedProxies - } else { - m.c.DefaultConfig.GatewayTopology = &meshv1alpha1.Topology{NumTrustedProxies: numTrustedProxies} + + err := m.c.SetPath("defaultConfig.gatewayTopology.numTrustedProxies", numTrustedProxies) + if err != nil { + return nil } return m } -func (m *meshConfigBuilder) AddProxyMetadata(key, value string) *meshConfigBuilder { - - if m.c.DefaultConfig.ProxyMetadata == nil { - m.c.DefaultConfig.ProxyMetadata = make(map[string]string) +func (m *meshConfigBuilder) AddProxyMetadata(key, value string) (*meshConfigBuilder, error) { + err := m.c.SetPath("defaultConfig.proxyMetadata."+key, value) + if err != nil { + return nil, err } - m.c.DefaultConfig.ProxyMetadata[key] = value - return m + return m, nil } -func (m *meshConfigBuilder) Build() *meshv1alpha1.MeshConfig { - return m.c +func (m *meshConfigBuilder) Build() json.RawMessage { + return json.RawMessage(m.c.JSON()) } func (m *meshConfigBuilder) BuildExternalAuthorizerConfiguration(authorizers []*Authorizer) *meshConfigBuilder { @@ -150,7 +128,22 @@ func (m *meshConfigBuilder) BuildExternalAuthorizerConfiguration(authorizers []* } authorizationProvider.Provider = &envoyXAuthProvider - m.c.ExtensionProviders = append(m.c.ExtensionProviders, &authorizationProvider) + extensionProviders := values.TryGetPathAs[[]interface{}](m.c, "extensionProviders") + marshaledProvider, err := protomarshal.Marshal(&authorizationProvider) + if err != nil { + return nil + } + var providerMap map[string]interface{} + err = json.Unmarshal(marshaledProvider, &providerMap) + if err != nil { + return nil + } + + extensionProviders = append(extensionProviders, providerMap) + err = m.c.SetPath("extensionProviders", &extensionProviders) + if err != nil { + return nil + } } } @@ -169,11 +162,7 @@ func (i *Istio) mergeConfig(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioOper BuildExternalAuthorizerConfiguration(i.Spec.Config.Authorizers). Build() - if updatedConfig, err := marshalMeshConfig(newMeshConfig); err != nil { - return op, err - } else { - op.Spec.MeshConfig = updatedConfig - } + op.Spec.MeshConfig = newMeshConfig op = applyGatewayExternalTrafficPolicy(op, i) @@ -183,13 +172,13 @@ func (i *Istio) mergeConfig(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioOper func applyGatewayExternalTrafficPolicy(op iopv1alpha1.IstioOperator, i *Istio) iopv1alpha1.IstioOperator { if i.Spec.Config.GatewayExternalTrafficPolicy != nil { if op.Spec.Components == nil { - op.Spec.Components = &v1alpha1.IstioComponentSetSpec{} + op.Spec.Components = &iopv1alpha1.IstioComponentSpec{} } if len(op.Spec.Components.IngressGateways) == 0 { - op.Spec.Components.IngressGateways = append(op.Spec.Components.IngressGateways, &v1alpha1.GatewaySpec{}) + op.Spec.Components.IngressGateways = append(op.Spec.Components.IngressGateways, iopv1alpha1.GatewayComponentSpec{}) } - if op.Spec.Components.IngressGateways[0].K8S == nil { - op.Spec.Components.IngressGateways[0].K8S = &v1alpha1.KubernetesResourcesSpec{} + if op.Spec.Components.IngressGateways[0].Kubernetes == nil { + op.Spec.Components.IngressGateways[0].Kubernetes = &iopv1alpha1.KubernetesResources{} } const kind = "Service" @@ -197,11 +186,11 @@ func applyGatewayExternalTrafficPolicy(op iopv1alpha1.IstioOperator, i *Istio) i const istioIngressGateway = "istio-ingressgateway" const path = "spec.externalTrafficPolicy" - op.Spec.Components.IngressGateways[0].K8S.Overlays = append(op.Spec.Components.IngressGateways[0].K8S.Overlays, &v1alpha1.K8SObjectOverlay{ + op.Spec.Components.IngressGateways[0].Kubernetes.Overlays = append(op.Spec.Components.IngressGateways[0].Kubernetes.Overlays, iopv1alpha1.KubernetesOverlay{ ApiVersion: version, Kind: kind, Name: istioIngressGateway, - Patches: []*v1alpha1.K8SObjectOverlay_PathValue{ + Patches: []iopv1alpha1.Patch{ { Path: path, Value: structpb.NewStringValue(*i.Spec.Config.GatewayExternalTrafficPolicy), @@ -219,16 +208,16 @@ func (i *Istio) mergeResources(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioO if i.Spec.Components.IngressGateway != nil { if op.Spec.Components == nil { - op.Spec.Components = &v1alpha1.IstioComponentSetSpec{} + op.Spec.Components = &iopv1alpha1.IstioComponentSpec{} } if len(op.Spec.Components.IngressGateways) == 0 { - op.Spec.Components.IngressGateways = append(op.Spec.Components.IngressGateways, &v1alpha1.GatewaySpec{}) + op.Spec.Components.IngressGateways = append(op.Spec.Components.IngressGateways, iopv1alpha1.GatewayComponentSpec{}) } - if op.Spec.Components.IngressGateways[0].K8S == nil { - op.Spec.Components.IngressGateways[0].K8S = &v1alpha1.KubernetesResourcesSpec{} + if op.Spec.Components.IngressGateways[0].Kubernetes == nil { + op.Spec.Components.IngressGateways[0].Kubernetes = &iopv1alpha1.KubernetesResources{} } if i.Spec.Components.IngressGateway.K8s != nil { - err := mergeK8sConfig(op.Spec.Components.IngressGateways[0].K8S, *i.Spec.Components.IngressGateway.K8s) + err := mergeK8sConfig(op.Spec.Components.IngressGateways[0].Kubernetes, *i.Spec.Components.IngressGateway.K8s) if err != nil { return op, err } @@ -237,303 +226,199 @@ func (i *Istio) mergeResources(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioO if i.Spec.Components.EgressGateway != nil { if op.Spec.Components == nil { - op.Spec.Components = &v1alpha1.IstioComponentSetSpec{} + op.Spec.Components = &iopv1alpha1.IstioComponentSpec{} } if len(op.Spec.Components.EgressGateways) == 0 { - op.Spec.Components.EgressGateways = append(op.Spec.Components.EgressGateways, &v1alpha1.GatewaySpec{}) + op.Spec.Components.EgressGateways = append(op.Spec.Components.EgressGateways, iopv1alpha1.GatewayComponentSpec{}) } - if op.Spec.Components.EgressGateways[0].K8S == nil { - op.Spec.Components.EgressGateways[0].K8S = &v1alpha1.KubernetesResourcesSpec{} + if op.Spec.Components.EgressGateways[0].Kubernetes == nil { + op.Spec.Components.EgressGateways[0].Kubernetes = &iopv1alpha1.KubernetesResources{} } if i.Spec.Components.EgressGateway.K8s != nil { - err := mergeK8sConfig(op.Spec.Components.EgressGateways[0].K8S, *i.Spec.Components.EgressGateway.K8s) + err := mergeK8sConfig(op.Spec.Components.EgressGateways[0].Kubernetes, *i.Spec.Components.EgressGateway.K8s) if err != nil { return op, err } } if i.Spec.Components.EgressGateway.Enabled != nil { if op.Spec.Components.EgressGateways[0].Enabled == nil { - op.Spec.Components.EgressGateways[0].Enabled = &wrapperspb.BoolValue{} + op.Spec.Components.EgressGateways[0].Enabled = &iopv1alpha1.BoolValue{} + } + boolValue := iopv1alpha1.BoolValue{} + // This terrible if statement is necessary, because Istio decided to use a custom type for booleans, + //that stores bool as a private field, and does not have a constructor/setter, only an unmarshal method. + if *i.Spec.Components.EgressGateway.Enabled { + err := boolValue.UnmarshalJSON([]byte("true")) + if err != nil { + return op, err + } + op.Spec.Components.EgressGateways[0].Enabled = &boolValue + } else { + err := boolValue.UnmarshalJSON([]byte("false")) + if err != nil { + return op, err + } + op.Spec.Components.EgressGateways[0].Enabled = &boolValue } - op.Spec.Components.EgressGateways[0].Enabled.Value = *i.Spec.Components.EgressGateway.Enabled } } if i.Spec.Components.Pilot != nil { if op.Spec.Components == nil { - op.Spec.Components = &v1alpha1.IstioComponentSetSpec{} + op.Spec.Components = &iopv1alpha1.IstioComponentSpec{} } if op.Spec.Components.Pilot == nil { - op.Spec.Components.Pilot = &v1alpha1.ComponentSpec{} + op.Spec.Components.Pilot = &iopv1alpha1.ComponentSpec{} } - if op.Spec.Components.Pilot.K8S == nil { - op.Spec.Components.Pilot.K8S = &v1alpha1.KubernetesResourcesSpec{} + if op.Spec.Components.Pilot.Kubernetes == nil { + op.Spec.Components.Pilot.Kubernetes = &iopv1alpha1.KubernetesResources{} } if i.Spec.Components.Pilot.K8s != nil { - err := mergeK8sConfig(op.Spec.Components.Pilot.K8S, *i.Spec.Components.Pilot.K8s) + err := mergeK8sConfig(op.Spec.Components.Pilot.Kubernetes, *i.Spec.Components.Pilot.K8s) if err != nil { return op, err } } } - if i.Spec.Components.Proxy != nil && i.Spec.Components.Proxy.K8S != nil && i.Spec.Components.Proxy.K8S.Resources != nil { - if op.Spec.Values == nil { - op.Spec.Values = &structpb.Struct{} - op.Spec.Values.Fields = make(map[string]*structpb.Value) - } - global := op.Spec.Values.Fields[globalField].GetStructValue() - if global == nil { - global = &structpb.Struct{} - global.Fields = make(map[string]*structpb.Value) - } - - proxy := global.Fields[proxyField].GetStructValue() - if proxy == nil { - proxy = &structpb.Struct{} - proxy.Fields = make(map[string]*structpb.Value) - } + valuesMap, err := values.MapFromObject(op.Spec.Values) + if err != nil { + return op, err + } - resources := proxy.Fields[resourcesField].GetStructValue() - if resources == nil { - resources = &structpb.Struct{} - resources.Fields = make(map[string]*structpb.Value) - } + if valuesMap == nil { + valuesMap = make(values.Map) + } + if i.Spec.Components.Proxy != nil && i.Spec.Components.Proxy.K8S != nil && i.Spec.Components.Proxy.K8S.Resources != nil { if i.Spec.Components.Proxy.K8S.Resources.Limits != nil { - limits := resources.Fields[limitsField].GetStructValue() - if limits == nil { - limits = &structpb.Struct{} - limits.Fields = make(map[string]*structpb.Value) - } if i.Spec.Components.Proxy.K8S.Resources.Limits.Cpu != nil { - limits.Fields[cpu] = structpb.NewStringValue(*i.Spec.Components.Proxy.K8S.Resources.Limits.Cpu) + err = valuesMap.SetPath("global.proxy.resources.limits.cpu", *i.Spec.Components.Proxy.K8S.Resources.Limits.Cpu) + if err != nil { + return iopv1alpha1.IstioOperator{}, err + } } - if i.Spec.Components.Proxy.K8S.Resources.Limits.Memory != nil { - limits.Fields[memory] = structpb.NewStringValue(*i.Spec.Components.Proxy.K8S.Resources.Limits.Memory) - } - - l, err := structpb.NewValue(limits.AsMap()) - if err != nil { - return op, err + err = valuesMap.SetPath("global.proxy.resources.limits.memory", *i.Spec.Components.Proxy.K8S.Resources.Limits.Memory) + if err != nil { + return iopv1alpha1.IstioOperator{}, err + } } - resources.Fields[limitsField] = l } if i.Spec.Components.Proxy.K8S.Resources.Requests != nil { - requests := resources.Fields[requestsField].GetStructValue() - if requests == nil { - requests = &structpb.Struct{} - requests.Fields = make(map[string]*structpb.Value) - } - if i.Spec.Components.Proxy.K8S.Resources.Requests.Cpu != nil { - requests.Fields[cpu] = structpb.NewStringValue(*i.Spec.Components.Proxy.K8S.Resources.Requests.Cpu) - } - - if i.Spec.Components.Proxy.K8S.Resources.Requests.Memory != nil { - requests.Fields[memory] = structpb.NewStringValue(*i.Spec.Components.Proxy.K8S.Resources.Requests.Memory) - } + if i.Spec.Components.Proxy.K8S.Resources.Requests != nil { + if i.Spec.Components.Proxy.K8S.Resources.Requests.Cpu != nil { + err = valuesMap.SetPath("global.proxy.resources.requests.cpu", *i.Spec.Components.Proxy.K8S.Resources.Requests.Cpu) + if err != nil { + return iopv1alpha1.IstioOperator{}, err + } + } - r, err := structpb.NewValue(requests.AsMap()) - if err != nil { - return op, err + if i.Spec.Components.Proxy.K8S.Resources.Requests.Memory != nil { + err = valuesMap.SetPath("global.proxy.resources.requests.memory", *i.Spec.Components.Proxy.K8S.Resources.Requests.Memory) + if err != nil { + return iopv1alpha1.IstioOperator{}, err + } + } } - resources.Fields[requestsField] = r - } - - r, err := structpb.NewValue(resources.AsMap()) - if err != nil { - return op, err } - proxy.Fields[resourcesField] = r - - p, err := structpb.NewValue(proxy.AsMap()) - if err != nil { - return op, err - } - global.Fields[proxyField] = p - - g, err := structpb.NewValue(global.AsMap()) + op.Spec.Values, err = values.ConvertMap[json.RawMessage](valuesMap) if err != nil { return op, err } - op.Spec.Values.Fields[globalField] = g } if i.Spec.Components.Cni != nil { if op.Spec.Components == nil { - op.Spec.Components = &v1alpha1.IstioComponentSetSpec{} + op.Spec.Components = &iopv1alpha1.IstioComponentSpec{} } if op.Spec.Components.Cni == nil { - op.Spec.Components.Cni = &v1alpha1.ComponentSpec{} + op.Spec.Components.Cni = &iopv1alpha1.ComponentSpec{} } - if op.Spec.Components.Cni.K8S == nil { - op.Spec.Components.Cni.K8S = &v1alpha1.KubernetesResourcesSpec{} + if op.Spec.Components.Cni.Kubernetes == nil { + op.Spec.Components.Cni.Kubernetes = &iopv1alpha1.KubernetesResources{} } - if op.Spec.Components.Cni.K8S.Affinity == nil { - op.Spec.Components.Cni.K8S.Affinity = &v1alpha1.Affinity{} + if op.Spec.Components.Cni.Kubernetes.Affinity == nil { + op.Spec.Components.Cni.Kubernetes.Affinity = &corev1.Affinity{} } if i.Spec.Components.Cni.K8S != nil && i.Spec.Components.Cni.K8S.Affinity != nil { - if op.Spec.Components.Cni.K8S.Affinity == nil { - op.Spec.Components.Cni.K8S.Affinity = &v1alpha1.Affinity{} + if op.Spec.Components.Cni.Kubernetes.Affinity == nil { + op.Spec.Components.Cni.Kubernetes.Affinity = &corev1.Affinity{} } if i.Spec.Components.Cni.K8S.Affinity.PodAffinity != nil { - if op.Spec.Components.Cni.K8S.Affinity.PodAffinity == nil { - op.Spec.Components.Cni.K8S.Affinity.PodAffinity = &v1alpha1.PodAffinity{} - } - op.Spec.Components.Cni.K8S.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution = []*v1alpha1.WeightedPodAffinityTerm{} - for _, term := range i.Spec.Components.Cni.K8S.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - var w v1alpha1.WeightedPodAffinityTerm - w.Weight = term.Weight - - var v v1alpha1.PodAffinityTerm - v.TopologyKey = term.PodAffinityTerm.TopologyKey - v.Namespaces = term.PodAffinityTerm.Namespaces - v.LabelSelector = term.PodAffinityTerm.LabelSelector - - w.PodAffinityTerm = &v - - op.Spec.Components.Cni.K8S.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution = append(op.Spec.Components.Cni.K8S.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution, &w) - } - - op.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution = []*v1alpha1.PodAffinityTerm{} - for _, term := range i.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution { - var v v1alpha1.PodAffinityTerm - v.TopologyKey = term.TopologyKey - v.Namespaces = term.Namespaces - v.LabelSelector = term.LabelSelector - - op.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution = append(op.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution, &v) + if op.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity == nil { + op.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity = &corev1.PodAffinity{} } + op.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution = i.Spec.Components.Cni.K8S.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution + op.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution = i.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution } if i.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity != nil { - if op.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity == nil { - op.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity = &v1alpha1.PodAntiAffinity{} - } - op.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution = []*v1alpha1.WeightedPodAffinityTerm{} - for _, term := range i.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - var w v1alpha1.WeightedPodAffinityTerm - w.Weight = term.Weight - - var v v1alpha1.PodAffinityTerm - v.TopologyKey = term.PodAffinityTerm.TopologyKey - v.Namespaces = term.PodAffinityTerm.Namespaces - v.LabelSelector = term.PodAffinityTerm.LabelSelector - - w.PodAffinityTerm = &v - - op.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution = append(op.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution, &w) - } - - op.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution = []*v1alpha1.PodAffinityTerm{} - for _, term := range i.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution { - var v v1alpha1.PodAffinityTerm - v.TopologyKey = term.TopologyKey - v.Namespaces = term.Namespaces - v.LabelSelector = term.LabelSelector - - op.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution = append(op.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution, &v) + if op.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity == nil { + op.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity = &corev1.PodAntiAffinity{} } + op.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution = i.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution + op.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution = i.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution } if i.Spec.Components.Cni.K8S.Affinity.NodeAffinity != nil { - if op.Spec.Components.Cni.K8S.Affinity.NodeAffinity == nil { - op.Spec.Components.Cni.K8S.Affinity.NodeAffinity = &v1alpha1.NodeAffinity{} - } - op.Spec.Components.Cni.K8S.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution = []*v1alpha1.PreferredSchedulingTerm{} - for _, term := range i.Spec.Components.Cni.K8S.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - var w v1alpha1.PreferredSchedulingTerm - w.Weight = term.Weight - - var v v1alpha1.NodeSelectorTerm - v.MatchExpressions = []*v1alpha1.NodeSelectorRequirement{} - for _, expression := range term.Preference.MatchExpressions { - n := v1alpha1.NodeSelectorRequirement{ - Key: expression.Key, - Operator: string(expression.Operator), - Values: expression.Values, - } - v.MatchExpressions = append(v.MatchExpressions, &n) - } - - v.MatchFields = []*v1alpha1.NodeSelectorRequirement{} - for _, expression := range term.Preference.MatchFields { - n := v1alpha1.NodeSelectorRequirement{ - Key: expression.Key, - Operator: string(expression.Operator), - Values: expression.Values, - } - v.MatchFields = append(v.MatchFields, &n) - } - - w.Preference = &v - - op.Spec.Components.Cni.K8S.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution = append(op.Spec.Components.Cni.K8S.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution, &w) - } - - op.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution = &v1alpha1.NodeSelector{} - if i.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution != nil { - for _, term := range i.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms { - var t v1alpha1.NodeSelectorTerm - t.MatchExpressions = []*v1alpha1.NodeSelectorRequirement{} - for _, expression := range term.MatchExpressions { - n := v1alpha1.NodeSelectorRequirement{ - Key: expression.Key, - Operator: string(expression.Operator), - Values: expression.Values, - } - t.MatchExpressions = append(t.MatchExpressions, &n) - } - - t.MatchFields = []*v1alpha1.NodeSelectorRequirement{} - for _, expression := range term.MatchFields { - n := v1alpha1.NodeSelectorRequirement{ - Key: expression.Key, - Operator: string(expression.Operator), - Values: expression.Values, - } - t.MatchFields = append(t.MatchFields, &n) - } - - op.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms = - append(op.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms, &t) - } + if op.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity == nil { + op.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity = &corev1.NodeAffinity{} } + op.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution = i.Spec.Components.Cni.K8S.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution + op.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution = i.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution } } if i.Spec.Components.Cni.K8S.Resources != nil { - if op.Spec.Components.Cni.K8S.Resources == nil { - op.Spec.Components.Cni.K8S.Resources = &v1alpha1.Resources{} + if op.Spec.Components.Cni.Kubernetes.Resources == nil { + op.Spec.Components.Cni.Kubernetes.Resources = &corev1.ResourceRequirements{} } if i.Spec.Components.Cni.K8S.Resources.Limits != nil { - if op.Spec.Components.Cni.K8S.Resources.Limits == nil { - op.Spec.Components.Cni.K8S.Resources.Limits = map[string]string{} + if op.Spec.Components.Cni.Kubernetes.Resources.Limits == nil { + op.Spec.Components.Cni.Kubernetes.Resources.Limits = make(corev1.ResourceList) } + if i.Spec.Components.Cni.K8S.Resources.Limits.Cpu != nil { - op.Spec.Components.Cni.K8S.Resources.Limits[cpu] = *i.Spec.Components.Cni.K8S.Resources.Limits.Cpu + quantity, err := resource.ParseQuantity(*i.Spec.Components.Cni.K8S.Resources.Limits.Cpu) + if err != nil { + return op, err + } + op.Spec.Components.Cni.Kubernetes.Resources.Limits[corev1.ResourceCPU] = quantity } if i.Spec.Components.Cni.K8S.Resources.Limits.Memory != nil { - op.Spec.Components.Cni.K8S.Resources.Limits[memory] = *i.Spec.Components.Cni.K8S.Resources.Limits.Memory + quantity, err := resource.ParseQuantity(*i.Spec.Components.Cni.K8S.Resources.Limits.Memory) + if err != nil { + return op, err + } + op.Spec.Components.Cni.Kubernetes.Resources.Limits[corev1.ResourceMemory] = quantity } } if i.Spec.Components.Cni.K8S.Resources.Requests != nil { - if op.Spec.Components.Cni.K8S.Resources.Requests == nil { - op.Spec.Components.Cni.K8S.Resources.Requests = map[string]string{} + if op.Spec.Components.Cni.Kubernetes.Resources.Requests == nil { + op.Spec.Components.Cni.Kubernetes.Resources.Requests = make(corev1.ResourceList) } + if i.Spec.Components.Cni.K8S.Resources.Requests.Cpu != nil { - op.Spec.Components.Cni.K8S.Resources.Requests[cpu] = *i.Spec.Components.Cni.K8S.Resources.Requests.Cpu + quantity, err := resource.ParseQuantity(*i.Spec.Components.Cni.K8S.Resources.Requests.Cpu) + if err != nil { + return op, err + } + op.Spec.Components.Cni.Kubernetes.Resources.Requests[corev1.ResourceCPU] = quantity } if i.Spec.Components.Cni.K8S.Resources.Requests.Memory != nil { - op.Spec.Components.Cni.K8S.Resources.Requests[memory] = *i.Spec.Components.Cni.K8S.Resources.Requests.Memory + quantity, err := resource.ParseQuantity(*i.Spec.Components.Cni.K8S.Resources.Requests.Memory) + if err != nil { + return op, err + } + op.Spec.Components.Cni.Kubernetes.Resources.Requests[corev1.ResourceMemory] = quantity } } } @@ -542,69 +427,87 @@ func (i *Istio) mergeResources(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioO return op, nil } -func mergeK8sConfig(base *v1alpha1.KubernetesResourcesSpec, newConfig KubernetesResourcesConfig) error { +func mergeK8sConfig(base *iopv1alpha1.KubernetesResources, newConfig KubernetesResourcesConfig) error { if newConfig.Resources != nil { if base.Resources == nil { - base.Resources = &v1alpha1.Resources{} + base.Resources = &corev1.ResourceRequirements{} } if newConfig.Resources.Limits != nil { if base.Resources.Limits == nil { - base.Resources.Limits = map[string]string{} + base.Resources.Limits = make(corev1.ResourceList) } + if newConfig.Resources.Limits.Cpu != nil { - base.Resources.Limits[cpu] = *newConfig.Resources.Limits.Cpu + quantity, err := resource.ParseQuantity(*newConfig.Resources.Limits.Cpu) + if err != nil { + return err + } + base.Resources.Limits[corev1.ResourceCPU] = quantity } if newConfig.Resources.Limits.Memory != nil { - base.Resources.Limits[memory] = *newConfig.Resources.Limits.Memory + quantity, err := resource.ParseQuantity(*newConfig.Resources.Limits.Memory) + if err != nil { + return err + } + base.Resources.Limits[corev1.ResourceMemory] = quantity } } if newConfig.Resources.Requests != nil { if base.Resources.Requests == nil { - base.Resources.Requests = map[string]string{} + base.Resources.Requests = make(corev1.ResourceList) } + if newConfig.Resources.Requests.Cpu != nil { - base.Resources.Requests[cpu] = *newConfig.Resources.Requests.Cpu + quantity, err := resource.ParseQuantity(*newConfig.Resources.Requests.Cpu) + if err != nil { + return err + } + base.Resources.Requests[corev1.ResourceCPU] = quantity } if newConfig.Resources.Requests.Memory != nil { - base.Resources.Requests[memory] = *newConfig.Resources.Requests.Memory + quantity, err := resource.ParseQuantity(*newConfig.Resources.Requests.Memory) + if err != nil { + return err + } + base.Resources.Requests[corev1.ResourceMemory] = quantity } } } if newConfig.HPASpec != nil { if base.HpaSpec == nil { - base.HpaSpec = &v1alpha1.HorizontalPodAutoscalerSpec{} + base.HpaSpec = &autoscalingv2.HorizontalPodAutoscalerSpec{} } if newConfig.HPASpec.MaxReplicas != nil { base.HpaSpec.MaxReplicas = *newConfig.HPASpec.MaxReplicas } if newConfig.HPASpec.MinReplicas != nil { - base.HpaSpec.MinReplicas = *newConfig.HPASpec.MinReplicas + base.HpaSpec.MinReplicas = newConfig.HPASpec.MinReplicas } } if newConfig.Strategy != nil { if base.Strategy == nil { - base.Strategy = &v1alpha1.DeploymentStrategy{ - RollingUpdate: &v1alpha1.RollingUpdateDeployment{}, + base.Strategy = &appsv1.DeploymentStrategy{ + RollingUpdate: &appsv1.RollingUpdateDeployment{}, } } if newConfig.Strategy.RollingUpdate.MaxSurge != nil { switch newConfig.Strategy.RollingUpdate.MaxSurge.Type { case intstr.Int: - base.Strategy.RollingUpdate.MaxSurge = &v1alpha1.IntOrString{ + base.Strategy.RollingUpdate.MaxSurge = &intstr.IntOrString{ Type: 0, - IntVal: wrapperspb.Int32(int32(newConfig.Strategy.RollingUpdate.MaxSurge.IntVal)), - StrVal: nil, + IntVal: newConfig.Strategy.RollingUpdate.MaxSurge.IntVal, + StrVal: "", } case intstr.String: - base.Strategy.RollingUpdate.MaxSurge = &v1alpha1.IntOrString{ + base.Strategy.RollingUpdate.MaxSurge = &intstr.IntOrString{ Type: 1, - IntVal: nil, - StrVal: wrapperspb.String(newConfig.Strategy.RollingUpdate.MaxSurge.StrVal), + IntVal: 0, + StrVal: newConfig.Strategy.RollingUpdate.MaxSurge.StrVal, } } } @@ -612,43 +515,19 @@ func mergeK8sConfig(base *v1alpha1.KubernetesResourcesSpec, newConfig Kubernetes if newConfig.Strategy.RollingUpdate.MaxUnavailable != nil { switch newConfig.Strategy.RollingUpdate.MaxUnavailable.Type { case intstr.Int: - base.Strategy.RollingUpdate.MaxUnavailable = &v1alpha1.IntOrString{ - Type: int64(intstr.Int), - IntVal: wrapperspb.Int32(int32(newConfig.Strategy.RollingUpdate.MaxUnavailable.IntVal)), - StrVal: nil, + base.Strategy.RollingUpdate.MaxUnavailable = &intstr.IntOrString{ + Type: intstr.Int, + IntVal: newConfig.Strategy.RollingUpdate.MaxUnavailable.IntVal, + StrVal: "", } case intstr.String: - base.Strategy.RollingUpdate.MaxUnavailable = &v1alpha1.IntOrString{ - Type: int64(intstr.String), - IntVal: nil, - StrVal: wrapperspb.String(newConfig.Strategy.RollingUpdate.MaxUnavailable.StrVal), + base.Strategy.RollingUpdate.MaxUnavailable = &intstr.IntOrString{ + Type: intstr.String, + IntVal: 0, + StrVal: newConfig.Strategy.RollingUpdate.MaxUnavailable.StrVal, } } } } return nil } - -func unmarshalMeshConfig(s *structpb.Struct) (*meshv1alpha1.MeshConfig, error) { - var c meshv1alpha1.MeshConfig - - jsonStr, err := json.Marshal(s.Fields) - if err != nil { - return &c, err - } - - if err := protomarshal.Unmarshal(jsonStr, &c); err != nil { - return &c, err - } - - return &c, nil -} - -func marshalMeshConfig(m *meshv1alpha1.MeshConfig) (*structpb.Struct, error) { - mMap, err := protomarshal.ToJSONMap(m) - if err != nil { - return nil, err - } - - return structpb.NewStruct(mMap) -} diff --git a/api/v1alpha2/istio_structs.go b/api/v1alpha2/istio_structs.go index 397eb59dd..1ca84f702 100644 --- a/api/v1alpha2/istio_structs.go +++ b/api/v1alpha2/istio_structs.go @@ -2,7 +2,7 @@ package v1alpha2 import ( - v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/intstr" ) @@ -62,8 +62,8 @@ type CniComponent struct { // CniK8sConfig is a subset of https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/#KubernetesResourcesSpec type CniK8sConfig struct { - Affinity *v1.Affinity `json:"affinity,omitempty"` - Resources *Resources `json:"resources,omitempty"` + Affinity *corev1.Affinity `json:"affinity,omitempty"` + Resources *Resources `json:"resources,omitempty"` } // HPASpec defines configuration for HorizontalPodAutoscaler diff --git a/api/v1alpha2/merge_test.go b/api/v1alpha2/merge_test.go index 3355a2365..47c005489 100644 --- a/api/v1alpha2/merge_test.go +++ b/api/v1alpha2/merge_test.go @@ -4,23 +4,20 @@ import ( "encoding/json" "github.com/kyma-project/istio/operator/internal/tests" "github.com/onsi/ginkgo/v2/types" + "google.golang.org/protobuf/types/known/structpb" meshv1alpha1 "istio.io/api/mesh/v1alpha1" - operatorv1alpha1 "istio.io/api/operator/v1alpha1" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" + "istio.io/istio/operator/pkg/values" "istio.io/istio/pkg/config/mesh" - v1 "k8s.io/api/core/v1" + "istio.io/istio/pkg/util/protomarshal" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/utils/ptr" - "regexp" - "strings" "testing" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - - "google.golang.org/protobuf/types/known/structpb" - "istio.io/istio/pkg/util/protomarshal" ) func TestAPIs(t *testing.T) { @@ -33,34 +30,24 @@ var _ = ReportAfterSuite("custom reporter", func(report types.Report) { tests.GenerateGinkgoJunitReport("merge-api-suite", report) }) -func toSnakeCase(str string) string { - matchFirstCap := regexp.MustCompile("(.)([A-Z][a-z]+)") - matchAllCap := regexp.MustCompile("([a-z0-9])([A-Z])") - - snake := matchFirstCap.ReplaceAllString(str, "${1}_${2}") - snake = matchAllCap.ReplaceAllString(snake, "${1}_${2}") - return strings.ToLower(snake) -} - -// Struct_pb uses different conventions for json tags (snake case) and unmarshalling (camel case). -// Because of this difference, json tags need to be translated to snake_case before unmarshalling; -// otherwise those fields would become nil. -func jsonTagsToSnakeCase(camelCaseMarshaledJson []byte) string { - jsonString := string(camelCaseMarshaledJson) - tagMatch := regexp.MustCompile(`"[^ ]*" *:`) - return tagMatch.ReplaceAllStringFunc(jsonString, toSnakeCase) -} +const ( + HeadersToUpstreamOnAllow = "headersToUpstreamOnAllow" + HeadersToDownstreamOnAllow = "headersToDownstreamOnAllow" + HeadersToDownstreamOnDeny = "headersToDownstreamOnDeny" + IncludeAdditionalHeadersInCheck = "includeAdditionalHeadersInCheck" + IncludeRequestHeadersInCheck = "includeRequestHeadersInCheck" +) var _ = Describe("Merge", func() { Context("Authorizations", func() { It("should set authorizer with no headers setup", func() { // given m := mesh.DefaultMeshConfig() - meshConfig := convert(m) + meshConfigRaw := convert(m) iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ - MeshConfig: meshConfig, + Spec: iopv1alpha1.IstioOperatorSpec{ + MeshConfig: meshConfigRaw, }, } @@ -81,20 +68,29 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - extensionProviders := out.Spec.MeshConfig.Fields["extensionProviders"].GetListValue().GetValues() + meshConfig, err := values.MapFromObject(out.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + extensionProvidersInt, exists := meshConfig.GetPath("extensionProviders") + Expect(exists).To(BeTrue()) + + extensionProviders := extensionProvidersInt.([]interface{}) + var foundAuthorizer bool - for _, extensionProvider := range extensionProviders { - if extensionProvider.GetStructValue().Fields["name"].GetStringValue() == provName { - jsonAuthProvider, err := extensionProvider.GetStructValue().Fields["envoyExtAuthzHttp"].MarshalJSON() - jsonAuthProvider = []byte(jsonTagsToSnakeCase(jsonAuthProvider)) - Expect(err).ToNot(HaveOccurred()) + for _, extensionProviderInt := range extensionProviders { + extensionProvider, ok := extensionProviderInt.(map[string]interface{}) + Expect(ok).To(BeTrue()) - var authProvider meshv1alpha1.MeshConfig_ExtensionProvider_EnvoyExternalAuthorizationHttpProvider - err = json.Unmarshal(jsonAuthProvider, &authProvider) - Expect(err).ToNot(HaveOccurred()) + if extensionProvider["name"] == provName { + extensionProviderMap, err := values.MapFromObject(extensionProvider) + Expect(err).ShouldNot(HaveOccurred()) - Expect(authProvider.Port).To(BeEquivalentTo(1337)) - Expect(authProvider.Service).To(Equal("xauth")) + authProvider, ok := extensionProviderMap.GetPathMap("envoyExtAuthzHttp") + Expect(ok).To(BeTrue()) + + Expect(authProvider).ShouldNot(BeNil()) + Expect(authProvider["port"]).To(BeEquivalentTo(1337)) + Expect(authProvider["service"]).To(Equal("xauth")) foundAuthorizer = true break @@ -107,11 +103,11 @@ var _ = Describe("Merge", func() { It("should set headers for authorizer", func() { // given m := mesh.DefaultMeshConfig() - meshConfig := convert(m) + meshConfigRaw := convert(m) iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ - MeshConfig: meshConfig, + Spec: iopv1alpha1.IstioOperatorSpec{ + MeshConfig: meshConfigRaw, }, } @@ -171,28 +167,37 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - extensionProviders := out.Spec.MeshConfig.Fields["extensionProviders"].GetListValue().GetValues() + meshConfig, err := values.MapFromObject(out.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + extensionProvidersInt, exists := meshConfig.GetPath("extensionProviders") + Expect(exists).To(BeTrue()) + + extensionProviders := extensionProvidersInt.([]interface{}) + var foundAuthorizer bool - for _, extensionProvider := range extensionProviders { - if extensionProvider.GetStructValue().Fields["name"].GetStringValue() == provName { - jsonAuthProvider, err := extensionProvider.GetStructValue().Fields["envoyExtAuthzHttp"].MarshalJSON() - jsonAuthProvider = []byte(jsonTagsToSnakeCase(jsonAuthProvider)) - Expect(err).ToNot(HaveOccurred()) + for _, extensionProviderInt := range extensionProviders { + extensionProvider, ok := extensionProviderInt.(map[string]interface{}) + Expect(ok).To(BeTrue()) + + if extensionProvider["name"] == provName { + extensionProviderMap, err := values.MapFromObject(extensionProvider) + Expect(err).ShouldNot(HaveOccurred()) - var authProvider meshv1alpha1.MeshConfig_ExtensionProvider_EnvoyExternalAuthorizationHttpProvider - err = json.Unmarshal(jsonAuthProvider, &authProvider) - Expect(err).ToNot(HaveOccurred()) + authProvider, ok := extensionProviderMap.GetPathMap("envoyExtAuthzHttp") + Expect(ok).To(BeTrue()) - Expect(authProvider.Port).To(BeEquivalentTo(1337)) - Expect(authProvider.Service).To(Equal("xauth")) + Expect(authProvider).ShouldNot(BeNil()) + Expect(authProvider["port"]).To(BeEquivalentTo(1337)) + Expect(authProvider["service"]).To(Equal("xauth")) - Expect(authProvider.HeadersToUpstreamOnAllow).To(ConsistOf(toUpstreamOnAllow)) - Expect(authProvider.HeadersToDownstreamOnAllow).To(ConsistOf(toDownstreamOnAllow)) - Expect(authProvider.HeadersToDownstreamOnDeny).To(ConsistOf(toDownstreamOnDeny)) + Expect(authProvider[HeadersToUpstreamOnAllow]).To(ConsistOf(toUpstreamOnAllow)) + Expect(authProvider[HeadersToDownstreamOnAllow]).To(ConsistOf(toDownstreamOnAllow)) + Expect(authProvider[HeadersToDownstreamOnDeny]).To(ConsistOf(toDownstreamOnDeny)) - Expect(authProvider.IncludeAdditionalHeadersInCheck).To(HaveKeyWithValue("a", "a")) - Expect(authProvider.IncludeAdditionalHeadersInCheck).To(HaveKeyWithValue("b", "b")) - Expect(authProvider.IncludeRequestHeadersInCheck).To(ConsistOf(inCheckInclude)) + Expect(authProvider[IncludeAdditionalHeadersInCheck]).To(HaveKeyWithValue("a", "a")) + Expect(authProvider[IncludeAdditionalHeadersInCheck]).To(HaveKeyWithValue("b", "b")) + Expect(authProvider[IncludeRequestHeadersInCheck]).To(ConsistOf(inCheckInclude)) foundAuthorizer = true break @@ -207,11 +212,11 @@ var _ = Describe("Merge", func() { // given m := mesh.DefaultMeshConfig() m.DefaultConfig.GatewayTopology = &meshv1alpha1.Topology{NumTrustedProxies: 1} - meshConfig := convert(m) + meshConfigRaw := convert(m) iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ - MeshConfig: meshConfig, + Spec: iopv1alpha1.IstioOperatorSpec{ + MeshConfig: meshConfigRaw, }, } @@ -224,19 +229,22 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - numTrustedProxies := out.Spec.MeshConfig.Fields["defaultConfig"]. - GetStructValue().Fields["gatewayTopology"].GetStructValue().Fields["numTrustedProxies"].GetNumberValue() + meshConfig, err := values.MapFromObject(out.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + numTrustedProxies, exists := meshConfig.GetPath("defaultConfig.gatewayTopology.numTrustedProxies") + Expect(exists).To(BeTrue()) Expect(numTrustedProxies).To(Equal(float64(5))) }) It("should set numTrustedProxies on IstioOperator to 5 when no GatewayTopology is configured", func() { // given m := mesh.DefaultMeshConfig() - meshConfig := convert(m) + meshConfigRaw := convert(m) iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ - MeshConfig: meshConfig, + Spec: iopv1alpha1.IstioOperatorSpec{ + MeshConfig: meshConfigRaw, }, } @@ -250,15 +258,18 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - numTrustedProxies := out.Spec.MeshConfig.Fields["defaultConfig"]. - GetStructValue().Fields["gatewayTopology"].GetStructValue().Fields["numTrustedProxies"].GetNumberValue() + meshConfig, err := values.MapFromObject(out.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + numTrustedProxies, exists := meshConfig.GetPath("defaultConfig.gatewayTopology.numTrustedProxies") + Expect(exists).To(BeTrue()) Expect(numTrustedProxies).To(Equal(float64(numProxies))) }) It("should set numTrustedProxies on IstioOperator to 5 when IstioOperator has nil spec", func() { // given iop := iopv1alpha1.IstioOperator{ - Spec: nil, + Spec: iopv1alpha1.IstioOperatorSpec{}, } numProxies := 5 @@ -271,15 +282,18 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - numTrustedProxies := out.Spec.MeshConfig.Fields["defaultConfig"]. - GetStructValue().Fields["gatewayTopology"].GetStructValue().Fields["numTrustedProxies"].GetNumberValue() + meshConfig, err := values.MapFromObject(out.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + numTrustedProxies, exists := meshConfig.GetPath("defaultConfig.gatewayTopology.numTrustedProxies") + Expect(exists).To(BeTrue()) Expect(numTrustedProxies).To(Equal(float64(numProxies))) }) It("should set numTrustedProxies on IstioOperator to 5 when IstioOperator has nil mesh config", func() { // given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ + Spec: iopv1alpha1.IstioOperatorSpec{ MeshConfig: nil, }, } @@ -294,8 +308,11 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - numTrustedProxies := out.Spec.MeshConfig.Fields["defaultConfig"]. - GetStructValue().Fields["gatewayTopology"].GetStructValue().Fields["numTrustedProxies"].GetNumberValue() + meshConfig, err := values.MapFromObject(out.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + numTrustedProxies, exists := meshConfig.GetPath("defaultConfig.gatewayTopology.numTrustedProxies") + Expect(exists).To(BeTrue()) Expect(numTrustedProxies).To(Equal(float64(numProxies))) }) @@ -303,11 +320,11 @@ var _ = Describe("Merge", func() { // given m := mesh.DefaultMeshConfig() m.DefaultConfig.GatewayTopology = &meshv1alpha1.Topology{NumTrustedProxies: 1} - meshConfig := convert(m) + meshConfigRaw := convert(m) iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ - MeshConfig: meshConfig, + Spec: iopv1alpha1.IstioOperatorSpec{ + MeshConfig: meshConfigRaw, }, } @@ -319,8 +336,11 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - numTrustedProxies := out.Spec.MeshConfig.Fields["defaultConfig"]. - GetStructValue().Fields["gatewayTopology"].GetStructValue().Fields["numTrustedProxies"].GetNumberValue() + meshConfig, err := values.MapFromObject(out.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + numTrustedProxies, exists := meshConfig.GetPath("defaultConfig.gatewayTopology.numTrustedProxies") + Expect(exists).To(BeTrue()) Expect(numTrustedProxies).To(Equal(float64(1))) }) It("should set numTrustedProxies on IstioOperator to 5 when there is no defaultConfig in meshConfig", func() { @@ -328,11 +348,11 @@ var _ = Describe("Merge", func() { m := &meshv1alpha1.MeshConfig{ EnableTracing: true, } - meshConfig := convert(m) + meshConfigRaw := convert(m) iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ - MeshConfig: meshConfig, + Spec: iopv1alpha1.IstioOperatorSpec{ + MeshConfig: meshConfigRaw, }, } numProxies := 5 @@ -345,8 +365,11 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - numTrustedProxies := out.Spec.MeshConfig.Fields["defaultConfig"]. - GetStructValue().Fields["gatewayTopology"].GetStructValue().Fields["numTrustedProxies"].GetNumberValue() + meshConfig, err := values.MapFromObject(out.Spec.MeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + numTrustedProxies, exists := meshConfig.GetPath("defaultConfig.gatewayTopology.numTrustedProxies") + Expect(exists).To(BeTrue()) Expect(numTrustedProxies).To(Equal(float64(5))) }) @@ -354,7 +377,7 @@ var _ = Describe("Merge", func() { // given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{Spec: IstioSpec{ Config: Config{ @@ -368,7 +391,7 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - externalTrafficPolicy := out.Spec.Components.IngressGateways[0].K8S.Overlays[0].Patches[0].Value.GetStringValue() + externalTrafficPolicy := out.Spec.Components.IngressGateways[0].Kubernetes.Overlays[0].Patches[0].Value.(*structpb.Value).GetStringValue() Expect(externalTrafficPolicy).To(Equal("Local")) }) @@ -376,7 +399,7 @@ var _ = Describe("Merge", func() { // given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{Spec: IstioSpec{ Config: Config{ @@ -390,7 +413,7 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - externalTrafficPolicy := out.Spec.Components.IngressGateways[0].K8S.Overlays[0].Patches[0].Value.GetStringValue() + externalTrafficPolicy := out.Spec.Components.IngressGateways[0].Kubernetes.Overlays[0].Patches[0].Value.(*structpb.Value).GetStringValue() Expect(externalTrafficPolicy).To(Equal("Cluster")) }) @@ -400,7 +423,7 @@ var _ = Describe("Merge", func() { It("should set CPU limits to 500m in IOP", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuLimit := "500m" @@ -420,8 +443,8 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - iopCpuLimit := out.Spec.Components.Pilot.K8S.Resources.Limits["cpu"] - Expect(iopCpuLimit).To(Equal(cpuLimit)) + iopCpuLimit := out.Spec.Components.Pilot.Kubernetes.Resources.Limits["cpu"] + Expect(iopCpuLimit.String()).To(Equal(cpuLimit)) }) }) @@ -429,7 +452,7 @@ var _ = Describe("Merge", func() { It("should set CPU requests to 500m in IOP", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuLimit := "500m" @@ -449,8 +472,8 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - iopCpuLimit := out.Spec.Components.Pilot.K8S.Resources.Requests["cpu"] - Expect(iopCpuLimit).To(Equal(cpuLimit)) + iopCpuLimit := out.Spec.Components.Pilot.Kubernetes.Resources.Requests["cpu"] + Expect(iopCpuLimit.String()).To(Equal(cpuLimit)) }) }) }) @@ -460,7 +483,7 @@ var _ = Describe("Merge", func() { It("should set CPU limits to 500m and 500Mi for memory in IOP", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuLimit := "500m" memoryLimit := "500Mi" @@ -483,11 +506,11 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - iopCpuLimit := out.Spec.Components.IngressGateways[0].K8S.Resources.Limits["cpu"] - Expect(iopCpuLimit).To(Equal(cpuLimit)) + iopCpuLimit := out.Spec.Components.IngressGateways[0].Kubernetes.Resources.Limits["cpu"] + Expect(iopCpuLimit.String()).To(Equal(cpuLimit)) - iopMemoryLimit := out.Spec.Components.IngressGateways[0].K8S.Resources.Limits["memory"] - Expect(iopMemoryLimit).To(Equal(iopMemoryLimit)) + iopMemoryLimit := out.Spec.Components.IngressGateways[0].Kubernetes.Resources.Limits["memory"] + Expect(iopMemoryLimit.String()).To(Equal(memoryLimit)) }) }) @@ -495,7 +518,7 @@ var _ = Describe("Merge", func() { It("should set CPU requests to 500m and 500Mi for memory in IOP", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuRequests := "500m" memoryRequests := "500Mi" @@ -517,11 +540,11 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - iopCpuRequests := out.Spec.Components.IngressGateways[0].K8S.Resources.Requests["cpu"] - Expect(iopCpuRequests).To(Equal(cpuRequests)) + iopCpuRequests := out.Spec.Components.IngressGateways[0].Kubernetes.Resources.Requests["cpu"] + Expect(iopCpuRequests.String()).To(Equal(cpuRequests)) - iopMemoryRequests := out.Spec.Components.IngressGateways[0].K8S.Resources.Requests["memory"] - Expect(iopMemoryRequests).To(Equal(memoryRequests)) + iopMemoryRequests := out.Spec.Components.IngressGateways[0].Kubernetes.Resources.Requests["memory"] + Expect(iopMemoryRequests.String()).To(Equal(memoryRequests)) }) }) }) @@ -531,7 +554,7 @@ var _ = Describe("Merge", func() { It("should set CPU limits to 500m and 500Mi for memory in IOP", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuLimit := "500m" memoryLimit := "500Mi" @@ -556,13 +579,13 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - iopCpuLimit := out.Spec.Components.EgressGateways[0].K8S.Resources.Limits["cpu"] - Expect(iopCpuLimit).To(Equal(cpuLimit)) + iopCpuLimit := ptr.To(out.Spec.Components.EgressGateways[0].Kubernetes.Resources.Limits["cpu"]) + Expect(iopCpuLimit.String()).To(Equal(cpuLimit)) - iopMemoryLimit := out.Spec.Components.EgressGateways[0].K8S.Resources.Limits["memory"] - Expect(iopMemoryLimit).To(Equal(memoryLimit)) + iopMemoryLimit := ptr.To(out.Spec.Components.EgressGateways[0].Kubernetes.Resources.Limits["memory"]) + Expect(iopMemoryLimit.String()).To(Equal(memoryLimit)) - iopEnabled := out.Spec.Components.EgressGateways[0].Enabled.GetValue() + iopEnabled := out.Spec.Components.EgressGateways[0].Enabled.GetValueOrFalse() Expect(iopEnabled).To(Equal(enabled)) }) }) @@ -571,7 +594,7 @@ var _ = Describe("Merge", func() { It("should set CPU requests to 500m and 500Mi for memory in IOP", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuRequests := "500m" memoryRequests := "500Mi" @@ -596,13 +619,13 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - iopCpuRequests := out.Spec.Components.EgressGateways[0].K8S.Resources.Requests["cpu"] - Expect(iopCpuRequests).To(Equal(cpuRequests)) + iopCpuRequests := ptr.To(out.Spec.Components.EgressGateways[0].Kubernetes.Resources.Requests["cpu"]) + Expect(iopCpuRequests.String()).To(Equal(cpuRequests)) - iopMemoryRequests := out.Spec.Components.EgressGateways[0].K8S.Resources.Requests["memory"] - Expect(iopMemoryRequests).To(Equal(memoryRequests)) + iopMemoryRequests := ptr.To(out.Spec.Components.EgressGateways[0].Kubernetes.Resources.Requests["memory"]) + Expect(iopMemoryRequests.String()).To(Equal(memoryRequests)) - iopEnabled := out.Spec.Components.EgressGateways[0].Enabled.GetValue() + iopEnabled := out.Spec.Components.EgressGateways[0].Enabled.GetValueOrFalse() Expect(iopEnabled).To(Equal(enabled)) }) }) @@ -612,7 +635,7 @@ var _ = Describe("Merge", func() { It("should update RollingUpdate when it is present in Istio CR", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } maxUnavailable := intstr.IntOrString{ @@ -642,11 +665,11 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - unavailable := out.Spec.Components.IngressGateways[0].K8S.Strategy.RollingUpdate.MaxUnavailable - Expect(unavailable.StrVal.GetValue()).To(Equal(maxUnavailable.StrVal)) + unavailable := out.Spec.Components.IngressGateways[0].Kubernetes.Strategy.RollingUpdate.MaxUnavailable + Expect(unavailable.StrVal).To(Equal(maxUnavailable.StrVal)) - surge := out.Spec.Components.IngressGateways[0].K8S.Strategy.RollingUpdate.MaxSurge - Expect(surge.IntVal.GetValue()).To(Equal(maxSurge.IntVal)) + surge := out.Spec.Components.IngressGateways[0].Kubernetes.Strategy.RollingUpdate.MaxSurge + Expect(surge.IntVal).To(Equal(maxSurge.IntVal)) }) }) @@ -654,7 +677,7 @@ var _ = Describe("Merge", func() { It("should update HPASpec when it is present in Istio CR", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } maxReplicas := int32(5) minReplicas := int32(4) @@ -674,10 +697,10 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - replicas := out.Spec.Components.IngressGateways[0].K8S.HpaSpec.MaxReplicas + replicas := out.Spec.Components.IngressGateways[0].Kubernetes.HpaSpec.MaxReplicas Expect(replicas).To(Equal(maxReplicas)) - replicas = out.Spec.Components.IngressGateways[0].K8S.HpaSpec.MinReplicas + replicas = *out.Spec.Components.IngressGateways[0].Kubernetes.HpaSpec.MinReplicas Expect(replicas).To(Equal(minReplicas)) }) }) @@ -688,14 +711,14 @@ var _ = Describe("Merge", func() { It("should update CNI affinity when it is present in Istio CR", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{Spec: IstioSpec{Components: &Components{ Cni: &CniComponent{K8S: &CniK8sConfig{ - Affinity: &v1.Affinity{ - PodAffinity: &v1.PodAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []v1.PodAffinityTerm{ + Affinity: &corev1.Affinity{ + PodAffinity: &corev1.PodAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ { LabelSelector: &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -719,12 +742,12 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Key).To(Equal("app-new")) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Operator).To(BeEquivalentTo("In")) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Values).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Values[0]).To(BeEquivalentTo("istio-cni-node1")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Key).To(Equal("app-new")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Operator).To(BeEquivalentTo("In")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Values).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Values[0]).To(BeEquivalentTo("istio-cni-node1")) }) }) @@ -732,14 +755,14 @@ var _ = Describe("Merge", func() { It("should update CNI PodAntiAffinity when it is present in Istio CR", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{Spec: IstioSpec{Components: &Components{ Cni: &CniComponent{K8S: &CniK8sConfig{ - Affinity: &v1.Affinity{ - PodAntiAffinity: &v1.PodAntiAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []v1.PodAffinityTerm{ + Affinity: &corev1.Affinity{ + PodAntiAffinity: &corev1.PodAntiAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ { LabelSelector: &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -763,12 +786,12 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Key).To(Equal("app-new")) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Operator).To(BeEquivalentTo("In")) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Values).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Values[0]).To(BeEquivalentTo("istio-cni-node1")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Key).To(Equal("app-new")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Operator).To(BeEquivalentTo("In")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Values).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution[0].LabelSelector.MatchExpressions[0].Values[0]).To(BeEquivalentTo("istio-cni-node1")) }) }) @@ -776,17 +799,17 @@ var _ = Describe("Merge", func() { It("should update CNI NodeAffinity when it is present in Istio CR", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } istioCR := Istio{Spec: IstioSpec{Components: &Components{ Cni: &CniComponent{K8S: &CniK8sConfig{ - Affinity: &v1.Affinity{ - NodeAffinity: &v1.NodeAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{ - NodeSelectorTerms: []v1.NodeSelectorTerm{ + Affinity: &corev1.Affinity{ + NodeAffinity: &corev1.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ + NodeSelectorTerms: []corev1.NodeSelectorTerm{ { - MatchExpressions: []v1.NodeSelectorRequirement{ + MatchExpressions: []corev1.NodeSelectorRequirement{ { Key: "app-new", Operator: "In", @@ -807,12 +830,12 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - Expect(out.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Key).To(Equal("app-new")) - Expect(out.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Operator).To(BeEquivalentTo("In")) - Expect(out.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Values).To(HaveLen(1)) - Expect(out.Spec.Components.Cni.K8S.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Values[0]).To(BeEquivalentTo("istio-cni-node1")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Key).To(Equal("app-new")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Operator).To(BeEquivalentTo("In")) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Values).To(HaveLen(1)) + Expect(out.Spec.Components.Cni.Kubernetes.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Values[0]).To(BeEquivalentTo("istio-cni-node1")) }) }) }) @@ -821,7 +844,7 @@ var _ = Describe("Merge", func() { It("should update CNI resources when those are present in Istio CR", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuRequests := "500m" memoryRequests := "500Mi" @@ -843,11 +866,11 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - iopCpuRequests := out.Spec.Components.Cni.K8S.Resources.Requests["cpu"] - Expect(iopCpuRequests).To(Equal(cpuRequests)) + iopCpuRequests := out.Spec.Components.Cni.Kubernetes.Resources.Requests["cpu"] + Expect(iopCpuRequests.String()).To(Equal(cpuRequests)) - iopMemoryRequests := out.Spec.Components.Cni.K8S.Resources.Requests["memory"] - Expect(iopMemoryRequests).To(Equal(memoryRequests)) + iopMemoryRequests := out.Spec.Components.Cni.Kubernetes.Resources.Requests["memory"] + Expect(iopMemoryRequests.String()).To(Equal(memoryRequests)) }) }) }) @@ -856,7 +879,7 @@ var _ = Describe("Merge", func() { It("should update Proxy resources configuration if they are present in Istio CR", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuRequests := "500m" @@ -885,24 +908,21 @@ var _ = Describe("Merge", func() { // then Expect(err).ShouldNot(HaveOccurred()) - resources := out.Spec.Values.Fields["global"].GetStructValue().Fields["proxy"].GetStructValue().Fields["resources"].GetStructValue() - Expect(resources.Fields["requests"].GetStructValue().Fields["cpu"].GetStringValue()).To(Equal(cpuRequests)) - Expect(resources.Fields["requests"].GetStructValue().Fields["memory"].GetStringValue()).To(Equal(memoryRequests)) + valuesMap, err := values.MapFromObject(out.Spec.Values) + Expect(err).ShouldNot(HaveOccurred()) - Expect(resources.Fields["limits"].GetStructValue().Fields["cpu"].GetStringValue()).To(Equal(cpuLimits)) - Expect(resources.Fields["limits"].GetStructValue().Fields["memory"].GetStringValue()).To(Equal(memoryLimits)) + Expect(values.TryGetPathAs[string](valuesMap, "global.proxy.resources.requests.cpu")).To(Equal(cpuRequests)) + Expect(values.TryGetPathAs[string](valuesMap, "global.proxy.resources.requests.memory")).To(Equal(memoryRequests)) + Expect(values.TryGetPathAs[string](valuesMap, "global.proxy.resources.limits.cpu")).To(Equal(cpuLimits)) + Expect(values.TryGetPathAs[string](valuesMap, "global.proxy.resources.limits.memory")).To(Equal(memoryLimits)) }) }) }) -func convert(a *meshv1alpha1.MeshConfig) *structpb.Struct { - - mMap, err := protomarshal.ToJSONMap(a) - Expect(err).ShouldNot(HaveOccurred()) - - mStruct, err := structpb.NewStruct(mMap) +func convert(a *meshv1alpha1.MeshConfig) json.RawMessage { + jsonConfig, err := protomarshal.Marshal(a) Expect(err).ShouldNot(HaveOccurred()) - return mStruct + return jsonConfig } diff --git a/api/v1alpha2/resources.go b/api/v1alpha2/resources.go index 61a2402a1..1fb472afe 100644 --- a/api/v1alpha2/resources.go +++ b/api/v1alpha2/resources.go @@ -2,8 +2,8 @@ package v1alpha2 import ( "github.com/pkg/errors" - "google.golang.org/protobuf/types/known/structpb" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" + "istio.io/istio/operator/pkg/values" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" ) @@ -19,15 +19,20 @@ func (i *Istio) GetProxyResources(op iopv1alpha1.IstioOperator) (v1.ResourceRequ return v1.ResourceRequirements{}, errors.New("proxy resources missing in merged IstioOperator") } - resources := mergedOp.Spec.Values. - Fields[globalField].GetStructValue(). - Fields[proxyField].GetStructValue(). - Fields[resourcesField].GetStructValue() + valuesMap, err := values.MapFromObject(mergedOp.Spec.Values) + if err != nil { + return v1.ResourceRequirements{}, err + } + + resources, exists := valuesMap.GetPathMap("global.proxy.resources") + if !exists { + return v1.ResourceRequirements{}, err + } - cpuRequest := resources.Fields[requestsField].GetStructValue().Fields[cpu].GetStringValue() - memoryRequest := resources.Fields[requestsField].GetStructValue().Fields[memory].GetStringValue() - cpuLimit := resources.Fields[limitsField].GetStructValue().Fields[cpu].GetStringValue() - memoryLimit := resources.Fields[limitsField].GetStructValue().Fields[memory].GetStringValue() + cpuRequest := resources.GetPathString("requests.cpu") + memoryRequest := resources.GetPathString("requests.memory") + cpuLimit := resources.GetPathString("limits.cpu") + memoryLimit := resources.GetPathString("limits.memory") return v1.ResourceRequirements{ Requests: v1.ResourceList{ @@ -42,30 +47,33 @@ func (i *Istio) GetProxyResources(op iopv1alpha1.IstioOperator) (v1.ResourceRequ } func hasResources(op iopv1alpha1.IstioOperator) bool { - if op.Spec.Values.Fields[globalField] == nil { + valuesMap, err := values.MapFromObject(op.Spec.Values) + if err != nil { return false } - - if op.Spec.Values.Fields[globalField].GetStructValue().Fields[proxyField] == nil { + resourcesMap, exists := valuesMap.GetPathMap("global.proxy.resources") + if !exists { return false } - if op.Spec.Values.Fields[globalField].GetStructValue().Fields[proxyField].GetStructValue().Fields[resourcesField] == nil { + requests, exists := resourcesMap.GetPathMap("requests") + if !exists { return false } - - resources := op.Spec.Values.Fields[globalField].GetStructValue().Fields[proxyField].GetStructValue().Fields[resourcesField].GetStructValue() - if resources.Fields[requestsField] == nil || hasNoCpuAndMemory(resources.Fields[requestsField]) { + limits, exists := resourcesMap.GetPathMap("limits") + if !exists { + return false + } + if hasNoCpuAndMemory(requests) { return false } - if resources.Fields[limitsField] == nil || hasNoCpuAndMemory(resources.Fields[limitsField]) { + if hasNoCpuAndMemory(limits) { return false } return true } -func hasNoCpuAndMemory(v *structpb.Value) bool { - return v.GetStructValue().Fields[cpu] == nil || - v.GetStructValue().Fields[memory] == nil +func hasNoCpuAndMemory(m values.Map) bool { + return m.GetPathString("cpu") == "" || m.GetPathString("memory") == "" } diff --git a/api/v1alpha2/resources_test.go b/api/v1alpha2/resources_test.go index 762c22f98..4c5c4476d 100644 --- a/api/v1alpha2/resources_test.go +++ b/api/v1alpha2/resources_test.go @@ -6,8 +6,7 @@ import ( "github.com/kyma-project/istio/operator/api/v1alpha2" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - operatorv1alpha1 "istio.io/api/operator/v1alpha1" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" "k8s.io/utils/ptr" "sigs.k8s.io/yaml" ) @@ -16,7 +15,7 @@ var _ = Describe("GetProxyResources", func() { It("should get resources from merged Istio CR and istio operator", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } cpuRequests := "500m" @@ -53,7 +52,7 @@ var _ = Describe("GetProxyResources", func() { It("should validate that resources can be returned", func() { //given iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{}, + Spec: iopv1alpha1.IstioOperatorSpec{}, } istioCR := v1alpha2.Istio{Spec: v1alpha2.IstioSpec{Components: &v1alpha2.Components{ diff --git a/config/crd/bases/operator.kyma-project.io_istios.yaml b/config/crd/bases/operator.kyma-project.io_istios.yaml index b0de3706e..7208c5e5d 100644 --- a/config/crd/bases/operator.kyma-project.io_istios.yaml +++ b/config/crd/bases/operator.kyma-project.io_istios.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.16.5 name: istios.operator.kyma-project.io spec: group: operator.kyma-project.io @@ -347,7 +347,7 @@ spec: pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. - This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). items: type: string type: array @@ -362,7 +362,7 @@ spec: pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. - This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). items: type: string type: array @@ -531,7 +531,7 @@ spec: pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. - This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). items: type: string type: array @@ -546,7 +546,7 @@ spec: pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. - This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). items: type: string type: array @@ -713,7 +713,7 @@ spec: pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. - This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). items: type: string type: array @@ -728,7 +728,7 @@ spec: pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. - This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). items: type: string type: array @@ -897,7 +897,7 @@ spec: pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. - This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). items: type: string type: array @@ -912,7 +912,7 @@ spec: pod labels will be ignored. The default value is empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. - This is an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). items: type: string type: array @@ -1423,16 +1423,8 @@ spec: conditions: description: ' Conditions associated with IstioStatus.' items: - description: "Condition contains details for one aspect of the current - state of this API Resource.\n---\nThis struct is intended for - direct use as an array at the field path .status.conditions. For - example,\n\n\n\ttype FooStatus struct{\n\t // Represents the - observations of a foo's current state.\n\t // Known .status.conditions.type - are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // - +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t - \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" - patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t - \ // other fields\n\t}" + description: Condition contains details for one aspect of the current + state of this API Resource. properties: lastTransitionTime: description: |- @@ -1473,12 +1465,7 @@ spec: - Unknown type: string type: - description: |- - type of condition in CamelCase or in foo.example.com/CamelCase. - --- - Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be - useful (see .node.status.conditions), the ability to deconflict is important. - The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index d857d91f0..b6ca0e290 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -189,6 +189,19 @@ rules: - patch - update - watch +- apiGroups: + - k8s.cni.cncf.io + resources: + - networkattachmentdefinitions + verbs: + - create + - deletecollection + - delete + - get + - list + - patch + - update + - watch - apiGroups: - autoscaling resources: diff --git a/controllers/istio_controller.go b/controllers/istio_controller.go index 0d1250a78..9036913a4 100644 --- a/controllers/istio_controller.go +++ b/controllers/istio_controller.go @@ -46,7 +46,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" - "sigs.k8s.io/controller-runtime/pkg/ratelimiter" ) const ( @@ -237,13 +236,14 @@ func (r *IstioReconciler) SetupWithManager(mgr ctrl.Manager, rateLimiter RateLim return ctrl.NewControllerManagedBy(mgr). For(&operatorv1alpha2.Istio{}). - WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{})). + WithEventFilter(predicate.Or[client.Object](predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{})). WithOptions(controller.Options{ - RateLimiter: TemplateRateLimiter( - rateLimiter.BaseDelay, - rateLimiter.FailureMaxDelay, - rateLimiter.Frequency, - rateLimiter.Burst, + RateLimiter: workqueue.NewTypedMaxOfRateLimiter[ctrl.Request]( + workqueue.NewTypedItemExponentialFailureRateLimiter[ctrl.Request](rateLimiter.BaseDelay, + rateLimiter.FailureMaxDelay), + &workqueue.TypedBucketRateLimiter[ctrl.Request]{ + Limiter: rate.NewLimiter(rate.Limit(rateLimiter.Frequency), rateLimiter.Burst), + }, ), }). Complete(r) @@ -253,10 +253,10 @@ func (r *IstioReconciler) SetupWithManager(mgr ctrl.Manager, rateLimiter RateLim // both an overall (token bucket) and per-item (exponential) rate limiting. func TemplateRateLimiter(failureBaseDelay time.Duration, failureMaxDelay time.Duration, frequency int, burst int, -) ratelimiter.RateLimiter { - return workqueue.NewMaxOfRateLimiter( - workqueue.NewItemExponentialFailureRateLimiter(failureBaseDelay, failureMaxDelay), - &workqueue.BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(frequency), burst)}) +) workqueue.TypedRateLimiter[client.Object] { + return workqueue.NewTypedMaxOfRateLimiter[client.Object]( + workqueue.NewTypedItemExponentialFailureRateLimiter[client.Object](failureBaseDelay, failureMaxDelay), + &workqueue.TypedBucketRateLimiter[client.Object]{Limiter: rate.NewLimiter(rate.Limit(frequency), burst)}) } func (r *IstioReconciler) getOldestCR(istioCRs *operatorv1alpha2.IstioList) *operatorv1alpha2.Istio { diff --git a/go.mod b/go.mod index 1980a66e8..78ae3a930 100644 --- a/go.mod +++ b/go.mod @@ -24,59 +24,60 @@ require ( golang.org/x/time v0.8.0 google.golang.org/protobuf v1.36.0 gopkg.in/yaml.v3 v3.0.1 - istio.io/api v1.23.2 - istio.io/client-go v1.23.2 - istio.io/istio v0.0.0-20240917190016-da0b3f29e9f9 - k8s.io/api v0.30.3 - k8s.io/apiextensions-apiserver v0.30.3 - k8s.io/apimachinery v0.30.3 - k8s.io/client-go v0.30.3 - k8s.io/kubectl v0.30.3 - k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 - sigs.k8s.io/controller-runtime v0.18.3 // Since we are using the Istio library directly, we should also use the controller-runtime version that is used by Istio. + istio.io/api v1.24.0-rc.0.0.20241101200753-9397ebf09c3a + istio.io/client-go v1.24.0 + istio.io/istio v0.0.0-20241105211601-8825a6b7f8c9 + k8s.io/api v0.31.1 + k8s.io/apiextensions-apiserver v0.31.1 + k8s.io/apimachinery v0.31.1 + k8s.io/client-go v0.31.1 + k8s.io/kubectl v0.31.1 + k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 + sigs.k8s.io/controller-runtime v0.19.3 // Since we are using the Istio library directly, we should also use the controller-runtime version that is used by Istio. sigs.k8s.io/yaml v1.4.0 ) require gopkg.in/inf.v0 v0.9.1 require ( - cel.dev/expr v0.15.0 // indirect - cloud.google.com/go/compute/metadata v0.3.0 // indirect + cel.dev/expr v0.16.0 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect + dario.cat/mergo v1.0.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect - github.com/Masterminds/semver/v3 v3.2.1 // indirect - github.com/Masterminds/sprig/v3 v3.2.3 // indirect + github.com/Masterminds/semver/v3 v3.3.0 // indirect + github.com/Masterminds/sprig/v3 v3.3.0 // indirect github.com/VividCortex/ewma v1.2.0 // indirect - github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect + github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/cheggaaa/pb/v3 v3.1.5 // indirect - github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b // indirect + github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect github.com/cucumber/gherkin/go/v26 v26.2.0 // indirect github.com/cucumber/messages/go/v21 v21.0.1 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/cyphar/filepath-securejoin v0.3.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/docker/cli v26.1.4+incompatible // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect + github.com/docker/cli v27.3.1+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v26.1.4+incompatible // indirect - github.com/docker/docker-credential-helpers v0.8.1 // indirect + github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/emicklei/go-restful/v3 v3.12.0 // indirect - github.com/envoyproxy/go-control-plane v0.12.1-0.20240719165848-f888b4f71207 // indirect - github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect - github.com/evanphx/json-patch v5.9.0+incompatible // indirect + github.com/envoyproxy/go-control-plane v0.13.1-0.20241009135036-bec043f2e850 // indirect + github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/camelcase v1.0.0 // indirect github.com/fatih/color v1.17.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-errors/errors v1.5.1 // indirect github.com/go-jose/go-jose/v3 v3.0.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -86,22 +87,22 @@ require ( github.com/go-openapi/swag v0.23.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gobwas/glob v0.2.3 // indirect - github.com/goccy/go-json v0.10.2 // indirect + github.com/goccy/go-json v0.10.3 // indirect github.com/gofrs/uuid v4.3.1+incompatible // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/cel-go v0.17.8 // indirect + github.com/google/cel-go v0.21.0 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect - github.com/google/go-containerregistry v0.19.1 // indirect + github.com/google/go-containerregistry v0.20.2 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/websocket v1.5.1 // indirect - github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -112,17 +113,16 @@ require ( github.com/hashicorp/golang-lru v0.6.0 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/huandu/xstrings v1.4.0 // indirect + github.com/huandu/xstrings v1.5.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.8 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect github.com/lestrrat-go/blackmagic v1.0.2 // indirect github.com/lestrrat-go/httpcc v1.0.1 // indirect github.com/lestrrat-go/iter v1.0.2 // indirect - github.com/lestrrat-go/jwx v1.2.29 // indirect + github.com/lestrrat-go/jwx v1.2.30 // indirect github.com/lestrrat-go/option v1.0.1 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -130,12 +130,12 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/miekg/dns v1.1.59 // indirect + github.com/miekg/dns v1.1.62 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/moby/spdystream v0.2.0 // indirect + github.com/moby/spdystream v0.4.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -143,27 +143,27 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc5 // indirect - github.com/openshift/api v0.0.0-20240530053948-b01900f1982a // indirect + github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/openshift/api v0.0.0-20241003161011-3f43768f3915 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect - github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect - github.com/prometheus/client_golang v1.19.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240409071808-615f978279ca // indirect + github.com/prometheus/client_golang v1.20.4 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.54.0 // indirect + github.com/prometheus/common v0.60.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/prometheus/prometheus v0.52.1 // indirect + github.com/prometheus/prometheus v0.54.1 // indirect github.com/rivo/uniseg v0.4.6 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/shopspring/decimal v1.3.1 // indirect + github.com/shopspring/decimal v1.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect - github.com/spf13/cobra v1.8.0 // indirect + github.com/spf13/cast v1.7.0 // indirect + github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect github.com/stoewer/go-strcase v1.3.0 // indirect @@ -171,18 +171,19 @@ require ( github.com/tdewolff/minify/v2 v2.10.0 // indirect github.com/tdewolff/parse/v2 v2.5.27 // indirect github.com/vbatts/tar-split v0.11.5 // indirect + github.com/x448/float16 v0.8.4 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.2.0 // indirect github.com/yl2chen/cidranger v1.0.2 // indirect - go.opentelemetry.io/otel v1.27.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.49.0 // indirect - go.opentelemetry.io/otel/metric v1.27.0 // indirect - go.opentelemetry.io/otel/sdk v1.27.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.27.0 // indirect - go.opentelemetry.io/otel/trace v1.27.0 // indirect - go.opentelemetry.io/proto/otlp v1.2.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.52.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/sdk v1.30.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect + go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.starlark.net v0.0.0-20231121155337-90ade8b19d09 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect @@ -190,29 +191,29 @@ require ( golang.org/x/crypto v0.28.0 // indirect golang.org/x/mod v0.21.0 // indirect golang.org/x/net v0.30.0 // indirect - golang.org/x/oauth2 v0.21.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.26.0 // indirect golang.org/x/term v0.25.0 // indirect golang.org/x/text v0.19.0 // indirect golang.org/x/tools v0.26.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/grpc v1.65.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240930140551-af27646dc61f // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f // indirect + google.golang.org/grpc v1.67.1 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - helm.sh/helm/v3 v3.15.1 // indirect - k8s.io/apiserver v0.30.3 // indirect - k8s.io/cli-runtime v0.30.3 // indirect - k8s.io/component-base v0.30.3 // indirect - k8s.io/klog/v2 v2.120.1 // indirect + helm.sh/helm/v3 v3.16.1 // indirect + k8s.io/apiserver v0.31.1 // indirect + k8s.io/cli-runtime v0.31.1 // indirect + k8s.io/component-base v0.31.1 // indirect + k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 // indirect - sigs.k8s.io/gateway-api v1.1.0 // indirect + sigs.k8s.io/gateway-api v1.2.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect - sigs.k8s.io/kustomize/kyaml v0.16.0 // indirect - sigs.k8s.io/mcs-api v0.1.0 // indirect + sigs.k8s.io/kustomize/api v0.17.2 // indirect + sigs.k8s.io/kustomize/kyaml v0.17.1 // indirect + sigs.k8s.io/mcs-api v0.1.1-0.20240624222831-d7001fe1d21c // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) diff --git a/go.sum b/go.sum index 1eefb22a1..6c08cfcfe 100644 --- a/go.sum +++ b/go.sum @@ -1,22 +1,14 @@ -cel.dev/expr v0.15.0 h1:O1jzfJCQBfL5BFoYktaxwIhuttaQPsVWerH9/EEKx0w= -cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= +cel.dev/expr v0.16.0 h1:yloc84fytn4zmJX2GU3TkXGsaieaV7dQ057Qs4sIG2Y= +cel.dev/expr v0.16.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -26,48 +18,27 @@ github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJ github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= -github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= -github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0= +github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs= +github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/alecholmes/xfccparser v0.3.0 h1:SI/zhgFw+CsoHnR2VXcbVg/9gij6T/ENT+1yqBOeLNA= github.com/alecholmes/xfccparser v0.3.0/go.mod h1:J9fzzUOtjw74IwNdGVbjnOVj1UDlwGQj1zZzgQRlRDY= github.com/alecthomas/participle/v2 v2.1.0 h1:z7dElHRrOEEq45F2TG5cbQihMtNTv8vwldytDj7Wrz4= github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alessio/shellescape v1.2.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0= github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= @@ -75,7 +46,6 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= @@ -85,32 +55,17 @@ github.com/cheggaaa/pb/v3 v3.1.5 h1:QuuUzeM2WsAqG2gMqtzaWithDJv0i+i6UlnwSCI4QLk= github.com/cheggaaa/pb/v3 v3.1.5/go.mod h1:CrxkeghYTXi1lQBEI7jSn+3svI3cuc19haAj6jM60XI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw= -github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= -github.com/coreos/go-oidc/v3 v3.10.0 h1:tDnXHnLyiTVyT/2zLDGj09pFPkhND8Gl8lnTRhoEaJU= -github.com/coreos/go-oidc/v3 v3.10.0/go.mod h1:5j11xcw0D3+SGxn6Z/WFADsgcWVMyNAlSQupk0KK3ac= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/OtI= +github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -121,239 +76,131 @@ github.com/cucumber/godog v0.15.0/go.mod h1:FX3rzIDybWABU4kuIXLZ/qtqEe1Ac5RdXmqv github.com/cucumber/messages/go/v21 v21.0.1 h1:wzA0LxwjlWQYZd32VTlAVDTkW6inOFmSM+RuOwHZiMI= github.com/cucumber/messages/go/v21 v21.0.1/go.mod h1:zheH/2HS9JLVFukdrsPWoPdmUtmYQAQPLk7w5vWsk5s= github.com/cucumber/messages/go/v22 v22.0.0/go.mod h1:aZipXTKc0JnjCsXrJnuZpWhtay93k7Rn3Dee7iyPJjs= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.3.1 h1:1V7cHiaW+C+39wEfpH6XlLBQo3j/PciWFrgfCLS8XrE= +github.com/cyphar/filepath-securejoin v0.3.1/go.mod h1:F7i41x/9cBF7lzCrVsYs9fuzwRZm4NQsGTBdpp6mETc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= -github.com/docker/cli v26.1.4+incompatible h1:I8PHdc0MtxEADqYJZvhBrW9bo8gawKwwenxRM7/rLu8= -github.com/docker/cli v26.1.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v27.3.1+incompatible h1:qEGdFBF3Xu6SCvCYhc7CzaQTlBmqDuzxPDpigSyeKQQ= +github.com/docker/cli v27.3.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU= -github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo= -github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= +github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapwQtU84iWk= github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.12.1-0.20240719165848-f888b4f71207 h1:FbJJN+0S7i3yf0VTAvSlVPRke1EbOQYG0FCtnFIfZns= -github.com/envoyproxy/go-control-plane v0.12.1-0.20240719165848-f888b4f71207/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= +github.com/envoyproxy/go-control-plane v0.13.1-0.20241009135036-bec043f2e850 h1:wXrFiquLgpbofJ80z0RUZxsKKIaRU1JZ6j4HSaibx4E= +github.com/envoyproxy/go-control-plane v0.13.1-0.20241009135036-bec043f2e850/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.0.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= 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.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= -github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= -github.com/go-jose/go-jose/v4 v4.0.1/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-jose/go-jose/v4 v4.0.2 h1:R3l3kkBds16bO7ZFAEEcofK0MkrAJt3jlJznWZG0nvk= +github.com/go-jose/go-jose/v4 v4.0.2/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= +github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.3.1+incompatible h1:0/KbAdpx3UXAx1kEOWHJeOkpbgRFGHVgv+CFIY7dBJI= github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/cel-go v0.17.8 h1:j9m730pMZt1Fc4oKhCLUHfjj6527LuhYcYw0Rl8gqto= -github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI= +github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.19.1 h1:yMQ62Al6/V0Z7CqIrrS1iYoA5/oQCm88DeNujc7C1KY= -github.com/google/go-containerregistry v0.19.1/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= +github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo= +github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= -github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww= -github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= +github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -370,7 +217,6 @@ github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= @@ -378,41 +224,26 @@ github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= -github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= +github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -426,150 +257,96 @@ github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZ github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= -github.com/lestrrat-go/jwx v1.2.29 h1:QT0utmUJ4/12rmsVQrJ3u55bycPkKqGYuGT4tyRhxSQ= -github.com/lestrrat-go/jwx v1.2.29/go.mod h1:hU8k2l6WF0ncx20uQdOmik/Gjg6E3/wIRtXSNFeZuB8= +github.com/lestrrat-go/jwx v1.2.30 h1:VKIFrmjYn0z2J51iLPadqoHIVLzvWNa1kCsTqNDHYPA= +github.com/lestrrat-go/jwx v1.2.30/go.mod h1:vMxrwFhunGZ3qddmfmEm2+uced8MSI6QFWGTKygjSzQ= github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/masterminds/semver v1.5.0 h1:hTxJTTY7tjvnWMrl08O6u3G6BLlKVwxSz01lVac9P8U= github.com/masterminds/semver v1.5.0/go.mod h1:s7KNT9fnd7edGzwwP7RBX4H0v/CYd5qdOLfkL1V75yg= github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs= -github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= +github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= +github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw= github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= -github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= -github.com/openshift/api v0.0.0-20240530053948-b01900f1982a h1:EyLN5c8dxine8V9XaBzG76p1UEY8W0aP97EOvv36eOY= -github.com/openshift/api v0.0.0-20240530053948-b01900f1982a/go.mod h1:OOh6Qopf21pSzqNVCB5gomomBXb8o5sGKZxG2KNpaXM= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/openshift/api v0.0.0-20241003161011-3f43768f3915 h1:+fTuA1mBFrepQU7GsQ0idp2cay2/FBOUl0jGxXIW/RA= +github.com/openshift/api v0.0.0-20241003161011-3f43768f3915/go.mod h1:Shkl4HanLwDiiBzakv+con/aMGnVE2MAGvoKp5oyYUo= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/planetscale/vtprotobuf v0.6.1-0.20240409071808-615f978279ca h1:ujRGEVWJEoaxQ+8+HMl8YEpGaDAgohgZxJ5S+d2TTFQ= +github.com/planetscale/vtprotobuf v0.6.1-0.20240409071808-615f978279ca/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_golang v1.20.4 h1:Tgh3Yr67PaOv/uTqloMsCEdeuFTatm5zIq5+qNN23vI= +github.com/prometheus/client_golang v1.20.4/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.54.0 h1:ZlZy0BgJhTwVZUn7dLOkwCZHUkrAqd3WYtcFCWnM1D8= -github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/common v0.60.0 h1:+V9PAREWNvJMAuJ1x1BaWl9dewMW4YrHZQbx0sJNllA= +github.com/prometheus/common v0.60.0/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/prometheus/prometheus v0.52.1 h1:BrQ29YG+mzdGh8DgHPirHbeMGNqtL+INe0rqg7ttBJ4= -github.com/prometheus/prometheus v0.52.1/go.mod h1:3z74cVsmVH0iXOR5QBjB7Pa6A0KJeEAK5A6UsmAFb1g= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/prometheus v0.54.1 h1:vKuwQNjnYN2/mDoWfHXDhAsz/68q/dQDb+YbcEqU7MQ= +github.com/prometheus/prometheus v0.54.1/go.mod h1:xlLByHhk2g3ycakQGrMaU8K7OySZx98BzeCR99991NY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.6 h1:Sovz9sDSwbOz9tgUy8JpT+KgCkPYJEN/oYzlJiYTNLg= github.com/rivo/uniseg v0.4.6/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= @@ -578,50 +355,30 @@ github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6ke github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= -github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= @@ -629,7 +386,6 @@ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -649,17 +405,12 @@ github.com/tdewolff/test v1.0.6 h1:76mzYJQ83Op284kMT+63iCNCI7NEERsIN8dLM+RiKr4= github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/thoas/go-funk v0.9.3 h1:7+nAEx3kn5ZJcnDm2Bh23N2yOtweO14bi//dvRtgLpw= github.com/thoas/go-funk v0.9.3/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vrischmann/envconfig v1.3.0 h1:4XIvQTXznxmWMnjouj0ST5lFo/WAYf5Exgl3x82crEk= github.com/vrischmann/envconfig v1.3.0/go.mod h1:bbvxFYJdRSpXrhS63mBFtKJzkDiNkyArOLXtY6q0kuI= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -667,10 +418,8 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+SevawU= github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -678,65 +427,45 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= gitlab.com/rodrigoodhin/gocure v0.0.0-20220718065339-f14dfe79276a h1:Eo8RB3FGtXJey5Fx3409qRZdgo7ctshMClY9ZNIdO34= gitlab.com/rodrigoodhin/gocure v0.0.0-20220718065339-f14dfe79276a/go.mod h1:kEjcAEB8y0Z432+xhM7lfHZvpUS0EQfqHhleB0ukQSI= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 h1:cEPbyTSEHlQR89XVlyo78gqluF8Y3oMeBkXGWzQsfXY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0/go.mod h1:DKdbWcT4GH1D0Y3Sqt/PFXt2naRKDWtU+eE6oLdFNA8= -go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= -go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= -go.opentelemetry.io/otel/exporters/prometheus v0.49.0 h1:Er5I1g/YhfYv9Affk9nJLfH/+qCCVVg1f2R9AbJfqDQ= -go.opentelemetry.io/otel/exporters/prometheus v0.49.0/go.mod h1:KfQ1wpjf3zsHjzP149P4LyAwWRupc6c7t1ZJ9eXpKQM= -go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= -go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= -go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= -go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= -go.opentelemetry.io/otel/sdk/metric v1.27.0 h1:5uGNOlpXi+Hbo/DRoI31BSb1v+OGcpv2NemcCrOL8gI= -go.opentelemetry.io/otel/sdk/metric v1.27.0/go.mod h1:we7jJVrYN2kh3mVBlswtPU22K0SA+769l93J6bsyvqw= -go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= -go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= -go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94= -go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 h1:lsInsfvhVIfOI6qHVyysXMNDnjO9Npvl7tlDPJFBVd4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0/go.mod h1:KQsVNh4OjgjTG0G6EiNi1jVpnaeeKsKMRwbLN+f1+8M= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.30.0 h1:m0yTiGDLUvVYaTFbAvCkVYIYcvwKt3G7OLoN77NUs/8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.30.0/go.mod h1:wBQbT4UekBfegL2nx0Xk1vBcnzyBPsIVm9hRG4fYcr4= +go.opentelemetry.io/otel/exporters/prometheus v0.52.0 h1:kmU3H0b9ufFSi8IQCcxack+sWUblKkFbqWYs6YiACGQ= +go.opentelemetry.io/otel/exporters/prometheus v0.52.0/go.mod h1:+wsAp2+JhuGXX7YRkjlkx6hyWY3ogFPfNA4x3nyiAh0= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE= +go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg= +go.opentelemetry.io/otel/sdk/metric v1.30.0 h1:QJLT8Pe11jyHBHfSAgYH7kEmT24eX792jZO1bo4BXkM= +go.opentelemetry.io/otel/sdk/metric v1.30.0/go.mod h1:waS6P3YqFNzeP01kuo/MBBYqaoBJl7efRQHOaydhy1Y= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.starlark.net v0.0.0-20231121155337-90ade8b19d09 h1:hzy3LFnSN8kuQK8h9tHl4ndF6UruMj47OqwqsS+/Ai4= go.starlark.net v0.0.0-20231121155337-90ade8b19d09/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -744,7 +473,6 @@ golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -753,44 +481,25 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -798,29 +507,10 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -831,53 +521,34 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -890,158 +561,95 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= -google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto/googleapis/api v0.0.0-20240930140551-af27646dc61f h1:jTm13A2itBi3La6yTGqn8bVSrc3ZZ1r8ENHlIXBfnRA= +google.golang.org/genproto/googleapis/api v0.0.0-20240930140551-af27646dc61f/go.mod h1:CLGoBuH1VHxAUXVPP8FfPwPEVJB6lz3URE5mY2SuayE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f h1:cUMEy+8oS78BWIH9OWazBkzbr090Od9tWBNtZHkOhf0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= -gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -helm.sh/helm/v3 v3.15.1 h1:22ztacHz4gMqhXNqCQ9NAg6BFWoRUryNLvnkz6OVyw0= -helm.sh/helm/v3 v3.15.1/go.mod h1:fvfoRcB8UKRUV5jrIfOTaN/pG1TPhuqSb56fjYdTKXg= +helm.sh/helm/v3 v3.16.1 h1:cER6tI/8PgUAsaJaQCVBUg3VI9KN4oVaZJgY60RIc0c= +helm.sh/helm/v3 v3.16.1/go.mod h1:r+xBHHP20qJeEqtvBXMf7W35QDJnzY/eiEBzt+TfHps= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -istio.io/api v1.23.2 h1:FvWi7GC+rWD60/ZFPuulX/h3k+f2Q9qot3dP8CIL8Ss= -istio.io/api v1.23.2/go.mod h1:QPSTGXuIQdnZFEm3myf9NZ5uBMwCdJWUvfj9ZZ+2oBM= -istio.io/client-go v1.23.2 h1:BIt6A+KaUOFin3SzXiDq2Fr/TMBev1+c836R0BfUfhU= -istio.io/client-go v1.23.2/go.mod h1:E08wpMtUulJk2tlWOCUVakjy1bKFxUNm22tM1R1QY0Y= -istio.io/istio v0.0.0-20240917190016-da0b3f29e9f9 h1:UhxL8VMX4CoumR2Sozrn3Tmzm0TEp9LW0ByerCkak08= -istio.io/istio v0.0.0-20240917190016-da0b3f29e9f9/go.mod h1:DfsZp7uvOAflGAd2mkJ1c9HN9eNfAhwv9enhMwfVPMM= -k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= -k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4= -k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= -k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= -k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= -k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio= -k8s.io/apiextensions-apiserver v0.30.3 h1:oChu5li2vsZHx2IvnGP3ah8Nj3KyqG3kRSaKmijhB9U= -k8s.io/apiextensions-apiserver v0.30.3/go.mod h1:uhXxYDkMAvl6CJw4lrDN4CPbONkF3+XL9cacCT44kV4= -k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= -k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= -k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= -k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= -k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= -k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8= -k8s.io/apiserver v0.30.3 h1:QZJndA9k2MjFqpnyYv/PH+9PE0SHhx3hBho4X0vE65g= -k8s.io/apiserver v0.30.3/go.mod h1:6Oa88y1CZqnzetd2JdepO0UXzQX4ZnOekx2/PtEjrOg= -k8s.io/cli-runtime v0.30.3 h1:aG69oRzJuP2Q4o8dm+f5WJIX4ZBEwrvdID0+MXyUY6k= -k8s.io/cli-runtime v0.30.3/go.mod h1:hwrrRdd9P84CXSKzhHxrOivAR9BRnkMt0OeP5mj7X30= -k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= -k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g= -k8s.io/client-go v0.30.3 h1:bHrJu3xQZNXIi8/MoxYtZBBWQQXwy16zqJwloXXfD3k= -k8s.io/client-go v0.30.3/go.mod h1:8d4pf8vYu665/kUbsxWAQ/JDBNWqfFeZnvFiVdmx89U= -k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= -k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= -k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= -k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vXfPk= -k8s.io/component-base v0.30.3 h1:Ci0UqKWf4oiwy8hr1+E3dsnliKnkMLZMVbWzeorlk7s= -k8s.io/component-base v0.30.3/go.mod h1:C1SshT3rGPCuNtBs14RmVD2xW0EhRSeLvBh7AGk1quA= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= -k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +istio.io/api v1.24.0-rc.0.0.20241101200753-9397ebf09c3a h1:mg5/FHlPjNxwIdw0LKyLWH3kGpPtLPvbwUII1YdJCoU= +istio.io/api v1.24.0-rc.0.0.20241101200753-9397ebf09c3a/go.mod h1:MQnRok7RZ20/PE56v0LxmoWH0xVxnCQPNuf9O7PAN1I= +istio.io/client-go v1.24.0 h1:30Qmx12lJCB5xeJuyodPSWh848b2PvgCubdPTazG1eU= +istio.io/client-go v1.24.0/go.mod h1:sCDBDJWQGJQz/1t3CHwUTDE5V7Nk6pFFkqBwhIg+LrI= +istio.io/istio v0.0.0-20241105211601-8825a6b7f8c9 h1:TL8KZXIOBxGUFJYvyqVkBK8B9D1tx2uCrxKNz3BfPtk= +istio.io/istio v0.0.0-20241105211601-8825a6b7f8c9/go.mod h1:WPuuRxVLJBE4gdDc/ZfEn+Rar1azZ2Am6qWBxUfh6r0= +k8s.io/api v0.31.1 h1:Xe1hX/fPW3PXYYv8BlozYqw63ytA92snr96zMW9gWTU= +k8s.io/api v0.31.1/go.mod h1:sbN1g6eY6XVLeqNsZGLnI5FwVseTrZX7Fv3O26rhAaI= +k8s.io/apiextensions-apiserver v0.31.1 h1:L+hwULvXx+nvTYX/MKM3kKMZyei+UiSXQWciX/N6E40= +k8s.io/apiextensions-apiserver v0.31.1/go.mod h1:tWMPR3sgW+jsl2xm9v7lAyRF1rYEK71i9G5dRtkknoQ= +k8s.io/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U= +k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/apiserver v0.31.1 h1:Sars5ejQDCRBY5f7R3QFHdqN3s61nhkpaX8/k1iEw1c= +k8s.io/apiserver v0.31.1/go.mod h1:lzDhpeToamVZJmmFlaLwdYZwd7zB+WYRYIboqA1kGxM= +k8s.io/cli-runtime v0.31.1 h1:/ZmKhmZ6hNqDM+yf9s3Y4KEYakNXUn5sod2LWGGwCuk= +k8s.io/cli-runtime v0.31.1/go.mod h1:pKv1cDIaq7ehWGuXQ+A//1OIF+7DI+xudXtExMCbe9U= +k8s.io/client-go v0.31.1 h1:f0ugtWSbWpxHR7sjVpQwuvw9a3ZKLXX0u0itkFXufb0= +k8s.io/client-go v0.31.1/go.mod h1:sKI8871MJN2OyeqRlmA4W4KM9KBdBUpDLu/43eGemCg= +k8s.io/component-base v0.31.1 h1:UpOepcrX3rQ3ab5NB6g5iP0tvsgJWzxTyAo20sgYSy8= +k8s.io/component-base v0.31.1/go.mod h1:WGeaw7t/kTsqpVTaCoVEtillbqAhF2/JgvO0LDOMa0w= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 h1:Q8Z7VlGhcJgBHJHYugJ/K/7iB8a2eSxCyxdVjJp+lLY= k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/kubectl v0.30.3 h1:YIBBvMdTW0xcDpmrOBzcpUVsn+zOgjMYIu7kAq+yqiI= -k8s.io/kubectl v0.30.3/go.mod h1:IcR0I9RN2+zzTRUa1BzZCm4oM0NLOawE6RzlDvd1Fpo= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 h1:/U5vjBbQn3RChhv7P11uhYvCSm5G2GaIi5AIGBS6r4c= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0/go.mod h1:z7+wmGM2dfIiLRfrC6jb5kV2Mq/sK1ZP303cxzkV5Y4= -sigs.k8s.io/controller-runtime v0.6.1/go.mod h1:XRYBPdbf5XJu9kpS84VJiZ7h/u1hF3gEORz0efEja7A= -sigs.k8s.io/controller-runtime v0.18.3 h1:B5Wmmo8WMWK7izei+2LlXLVDGzMwAHBNLX68lwtlSR4= -sigs.k8s.io/controller-runtime v0.18.3/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= -sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI= -sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM= -sigs.k8s.io/gateway-api v1.1.0/go.mod h1:ZH4lHrL2sDi0FHZ9jjneb8kKnGzFWyrTya35sWUTrRs= +k8s.io/kubectl v0.31.1 h1:ih4JQJHxsEggFqDJEHSOdJ69ZxZftgeZvYo7M/cpp24= +k8s.io/kubectl v0.31.1/go.mod h1:aNuQoR43W6MLAtXQ/Bu4GDmoHlbhHKuyD49lmTC8eJM= +k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 h1:MDF6h2H/h4tbzmtIKTuctcwZmY0tY9mD9fNT47QO6HI= +k8s.io/utils v0.0.0-20240921022957-49e7df575cb6/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 h1:2770sDpzrjjsAtVhSeUFseziht227YAWYHLGNM8QPwY= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= +sigs.k8s.io/controller-runtime v0.19.3 h1:XO2GvC9OPftRst6xWCpTgBZO04S2cbp0Qqkj8bX1sPw= +sigs.k8s.io/controller-runtime v0.19.3/go.mod h1:j4j87DqtsThvwTv5/Tc5NFRyyF/RF0ip4+62tbTSIUM= +sigs.k8s.io/gateway-api v1.2.0 h1:LrToiFwtqKTKZcZtoQPTuo3FxhrrhTgzQG0Te+YGSo8= +sigs.k8s.io/gateway-api v1.2.0/go.mod h1:EpNfEXNjiYfUJypf0eZ0P5iXA9ekSGWaS1WgPaM42X0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kind v0.8.1/go.mod h1:oNKTxUVPYkV9lWzY6CVMNluVq8cBsyq+UgPJdvA3uu4= -sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKUdc5jW3t5jwY7Bo7dcRm+tFxT+NfgY0= -sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY= -sigs.k8s.io/kustomize/kyaml v0.16.0 h1:6J33uKSoATlKZH16unr2XOhDI+otoe2sR3M8PDzW3K0= -sigs.k8s.io/kustomize/kyaml v0.16.0/go.mod h1:xOK/7i+vmE14N2FdFyugIshB8eF6ALpy7jI87Q2nRh4= -sigs.k8s.io/mcs-api v0.1.0 h1:edDbg0oRGfXw8TmZjKYep06LcJLv/qcYLidejnUp0PM= -sigs.k8s.io/mcs-api v0.1.0/go.mod h1:gGiAryeFNB4GBsq2LBmVqSgKoobLxt+p7ii/WG5QYYw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/kustomize/api v0.17.2 h1:E7/Fjk7V5fboiuijoZHgs4aHuexi5Y2loXlVOAVAG5g= +sigs.k8s.io/kustomize/api v0.17.2/go.mod h1:UWTz9Ct+MvoeQsHcJ5e+vziRRkwimm3HytpZgIYqye0= +sigs.k8s.io/kustomize/kyaml v0.17.1 h1:TnxYQxFXzbmNG6gOINgGWQt09GghzgTP6mIurOgrLCQ= +sigs.k8s.io/kustomize/kyaml v0.17.1/go.mod h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U= +sigs.k8s.io/mcs-api v0.1.1-0.20240624222831-d7001fe1d21c h1:F7hIEutAxtXDOQX9NXFdvhWmWETu2zmUPHuPPcAez7g= +sigs.k8s.io/mcs-api v0.1.1-0.20240624222831-d7001fe1d21c/go.mod h1:DPFniRsBzCeLB4ANjlPEvQQt9QGIX489d1faK+GPvI4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/internal/clusterconfig/clusterconfig.go b/internal/clusterconfig/clusterconfig.go index 4bf4ddc77..cec10d40d 100644 --- a/internal/clusterconfig/clusterconfig.go +++ b/internal/clusterconfig/clusterconfig.go @@ -146,9 +146,9 @@ func DiscoverClusterFlavour(ctx context.Context, k8sClient client.Client) (Clust } for _, node := range nodeList.Items { - if matcherGKE.MatchString(node.Status.NodeInfo.KubeProxyVersion) { + if matcherGKE.MatchString(node.Status.NodeInfo.KubeletVersion) { return GKE, nil - } else if matcherk3d.MatchString(node.Status.NodeInfo.KubeProxyVersion) { + } else if matcherk3d.MatchString(node.Status.NodeInfo.KubeletVersion) { return k3d, nil } else if matcherGardener.MatchString(node.Status.NodeInfo.OSImage) { return Gardener, nil diff --git a/internal/clusterconfig/clusterconfig_test.go b/internal/clusterconfig/clusterconfig_test.go index 266324319..6db20b0e9 100644 --- a/internal/clusterconfig/clusterconfig_test.go +++ b/internal/clusterconfig/clusterconfig_test.go @@ -18,8 +18,8 @@ import ( ) const ( - k3sMockKubeProxyVersion string = "v1.25.6+k3s1" - gkeMockKubeProxyVersion string = "v1.24.9-gke.3200" + k3sMockKubeletVersion string = "v1.26.6+k3s1" + gkeMockKubeletVersion string = "v1.30.6-gke.1125000" ) var _ = Describe("GetClusterProvider", func() { @@ -32,7 +32,7 @@ var _ = Describe("GetClusterProvider", func() { Spec: corev1.NodeSpec{ProviderID: "kubernetes://asdadsads"}, Status: corev1.NodeStatus{ NodeInfo: corev1.NodeSystemInfo{ - KubeProxyVersion: k3sMockKubeProxyVersion, + KubeletVersion: k3sMockKubeletVersion, }, }, } @@ -73,7 +73,7 @@ var _ = Describe("EvaluateClusterConfiguration", func() { }, Status: corev1.NodeStatus{ NodeInfo: corev1.NodeSystemInfo{ - KubeProxyVersion: k3sMockKubeProxyVersion, + KubeletVersion: k3sMockKubeletVersion, }, }, } @@ -107,7 +107,7 @@ var _ = Describe("EvaluateClusterConfiguration", func() { }, Status: corev1.NodeStatus{ NodeInfo: corev1.NodeSystemInfo{ - KubeProxyVersion: gkeMockKubeProxyVersion, + KubeletVersion: gkeMockKubeletVersion, }, }, } diff --git a/internal/istiooperator/istio-operator-light.yaml b/internal/istiooperator/istio-operator-light.yaml index d30712f61..62031235a 100644 --- a/internal/istiooperator/istio-operator-light.yaml +++ b/internal/istiooperator/istio-operator-light.yaml @@ -37,6 +37,13 @@ spec: egressGateways: - enabled: false k8s: + hpaSpec: + maxReplicas: 10 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: istio-egressgateway + minReplicas: 1 resources: limits: cpu: 2000m @@ -61,6 +68,10 @@ spec: topologyKey: kubernetes.io/hostname weight: 100 hpaSpec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: istio-ingressgateway maxReplicas: 1 minReplicas: 1 resources: @@ -71,9 +82,9 @@ spec: cpu: 10m memory: 32Mi securityContext: - runAsGroup: "65534" + runAsGroup: 65534 runAsNonRoot: true - runAsUser: "65534" + runAsUser: 65534 seccompProfile: type: RuntimeDefault strategy: @@ -106,6 +117,10 @@ spec: - name: METRIC_GRACEFUL_DELETION_INTERVAL value: "5m0s" hpaSpec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: istiod maxReplicas: 1 minReplicas: 1 podAnnotations: @@ -120,9 +135,9 @@ spec: cpu: 50m memory: 128Mi securityContext: - runAsGroup: "65534" + runAsGroup: 65534 runAsNonRoot: true - runAsUser: "65534" + runAsUser: 65534 seccompProfile: type: RuntimeDefault serviceAnnotations: diff --git a/internal/istiooperator/istio-operator.yaml b/internal/istiooperator/istio-operator.yaml index a8edf5ae0..ea1039606 100644 --- a/internal/istiooperator/istio-operator.yaml +++ b/internal/istiooperator/istio-operator.yaml @@ -44,6 +44,20 @@ spec: requests: cpu: 10m memory: 120Mi + hpaSpec: + maxReplicas: 10 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: istio-egressgateway + metrics: + - resource: + name: cpu + target: + type: Utilization + averageUtilization: 80 + type: Resource + minReplicas: 3 name: istio-egressgateway ingressGateways: - enabled: true @@ -71,6 +85,10 @@ spec: weight: 100 hpaSpec: maxReplicas: 10 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: istio-ingressgateway metrics: - resource: name: cpu @@ -87,9 +105,9 @@ spec: cpu: 100m memory: 128Mi securityContext: - runAsGroup: "65534" + runAsGroup: 65534 runAsNonRoot: true - runAsUser: "65534" + runAsUser: 65534 seccompProfile: type: RuntimeDefault strategy: @@ -131,6 +149,10 @@ spec: - name: METRIC_GRACEFUL_DELETION_INTERVAL value: "5m0s" hpaSpec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: istiod maxReplicas: 5 minReplicas: 2 podAnnotations: @@ -145,9 +167,9 @@ spec: cpu: 100m memory: 512Mi securityContext: - runAsGroup: "65534" + runAsGroup: 65534 runAsNonRoot: true - runAsUser: "65534" + runAsUser: 65534 seccompProfile: type: RuntimeDefault serviceAnnotations: diff --git a/internal/istiooperator/istiooperator.go b/internal/istiooperator/istiooperator.go index cce09ed67..e66a586a6 100644 --- a/internal/istiooperator/istiooperator.go +++ b/internal/istiooperator/istiooperator.go @@ -8,7 +8,7 @@ import ( "github.com/coreos/go-semver/semver" operatorv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" "github.com/kyma-project/istio/operator/internal/clusterconfig" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" "sigs.k8s.io/yaml" ) @@ -74,7 +74,12 @@ func (m *IstioMerger) GetIstioImageVersion() (IstioImageVersion, error) { return IstioImageVersion{}, err } - return NewIstioImageVersionFromTag(iop.Spec.Tag.GetStringValue()) + istioTag, success := iop.Spec.Tag.(string) + if !success { + return IstioImageVersion{}, errors.New("failed to get tag from IstioOperator") + } + + return NewIstioImageVersionFromTag(istioTag) } func (m *IstioMerger) GetIstioOperator(clusterSize clusterconfig.ClusterSize) (iopv1alpha1.IstioOperator, error) { @@ -96,12 +101,12 @@ func (m *IstioMerger) GetIstioOperator(clusterSize clusterconfig.ClusterSize) (i } func applyIstioCR(istioCR *operatorv1alpha2.Istio, toBeInstalledIop iopv1alpha1.IstioOperator) ([]byte, error) { - _, err := istioCR.MergeInto(toBeInstalledIop) + mergedIOP, err := istioCR.MergeInto(toBeInstalledIop) if err != nil { return nil, err } - outputManifest, err := yaml.Marshal(toBeInstalledIop) + outputManifest, err := yaml.Marshal(mergedIOP) if err != nil { return nil, err } diff --git a/internal/istiooperator/istiooperator_test.go b/internal/istiooperator/istiooperator_test.go index 76e2eab0e..9bd9c48a3 100644 --- a/internal/istiooperator/istiooperator_test.go +++ b/internal/istiooperator/istiooperator_test.go @@ -1,6 +1,9 @@ package istiooperator_test import ( + meshv1alpha1 "istio.io/api/mesh/v1alpha1" + "istio.io/istio/operator/pkg/values" + "istio.io/istio/pkg/util/protomarshal" "os" "path" "testing" @@ -14,7 +17,7 @@ import ( "github.com/kyma-project/istio/operator/api/v1alpha2" "github.com/kyma-project/istio/operator/internal/clusterconfig" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/yaml" ) @@ -42,7 +45,7 @@ var _ = Describe("Merge", func() { }, } - DescribeTable("Merge for differnt cluster sizes", func(clusterSize clusterconfig.ClusterSize, shouldError bool, igwMinReplicas int) { + DescribeTable("Merge for different cluster sizes", func(clusterSize clusterconfig.ClusterSize, shouldError bool, igwMinReplicas int) { // given sut := istiooperator.NewDefaultIstioMerger() @@ -60,11 +63,15 @@ var _ = Describe("Merge", func() { iop := readIOP(mergedIstioOperatorPath) - numTrustedProxies := iop.Spec.MeshConfig.Fields["defaultConfig"]. - GetStructValue().Fields["gatewayTopology"].GetStructValue().Fields["numTrustedProxies"].GetNumberValue() - Expect(numTrustedProxies).To(Equal(float64(numTrustedProxies))) + var meshConfigTyped meshv1alpha1.MeshConfig - Expect(iop.Spec.Components.IngressGateways[0].K8S.HpaSpec.MinReplicas).To(Equal(int32(igwMinReplicas))) + err = protomarshal.Unmarshal(iop.Spec.MeshConfig, &meshConfigTyped) + Expect(err).ShouldNot(HaveOccurred()) + + numTrustedProxies := meshConfigTyped.DefaultConfig.GetGatewayTopology().GetNumTrustedProxies() + Expect(numTrustedProxies).To(Equal(numTrustedProxies)) + + Expect(*iop.Spec.Components.IngressGateways[0].Kubernetes.HpaSpec.MinReplicas).To(Equal(int32(igwMinReplicas))) err = os.Remove(mergedIstioOperatorPath) Expect(err).ShouldNot(HaveOccurred()) @@ -105,18 +112,23 @@ var _ = Describe("Merge", func() { iop := readIOP(mergedIstioOperatorPath) - numTrustedProxies := iop.Spec.MeshConfig.Fields["defaultConfig"]. - GetStructValue().Fields["gatewayTopology"].GetStructValue().Fields["numTrustedProxies"].GetNumberValue() + var typedMeshConfig meshv1alpha1.MeshConfig + + err = protomarshal.Unmarshal(iop.Spec.MeshConfig, &typedMeshConfig) + Expect(err).ShouldNot(HaveOccurred()) + + numTrustedProxies := typedMeshConfig.DefaultConfig.GetGatewayTopology().GetNumTrustedProxies() - Expect(numTrustedProxies).To(Equal(float64(4))) + Expect(numTrustedProxies).To(Equal(uint32(4))) - baseEnabled := iop.Spec.Components.Base.Enabled.Value + baseEnabled := iop.Spec.Components.Base.Enabled.GetValueOrTrue() Expect(baseEnabled).To(BeFalse()) - Expect(iop.Spec.Values.Fields["cni"]).NotTo(BeNil()) - Expect(iop.Spec.Values.Fields["cni"].GetStructValue().Fields["cniBinDir"]).NotTo(BeNil()) - cniBinDir := iop.Spec.Values.Fields["cni"].GetStructValue().Fields["cniBinDir"].GetStringValue() - Expect(cniBinDir).To(Equal(newCniBinDirPath)) + valuesMap, err := values.MapFromObject(iop.Spec.Values) + Expect(err).ShouldNot(HaveOccurred()) + + Expect(valuesMap["cni"]).NotTo(BeNil()) + Expect(valuesMap["cni"].(map[string]interface{})["cniBinDir"]).To(Equal(newCniBinDirPath)) err = os.Remove(mergedIstioOperatorPath) Expect(err).ShouldNot(HaveOccurred()) @@ -162,9 +174,9 @@ var _ = Describe("GetIstioImageVersion", func() { Expect(err).Should(Not(HaveOccurred())) // then - Expect(imageVersion.Tag()).To(Equal(ioProduction.Spec.Tag.GetStringValue())) + Expect(imageVersion.Tag()).To(Equal(ioProduction.Spec.Tag.(string))) Expect(ioProduction.Spec.Hub).To(Equal(ioEvaluation.Spec.Hub)) - Expect(ioProduction.Spec.Tag.GetStringValue()).To(Equal(ioEvaluation.Spec.Tag.GetStringValue())) + Expect(ioProduction.Spec.Tag.(string)).To(Equal(ioEvaluation.Spec.Tag.(string))) }) }) diff --git a/internal/istiooperator/merge_experimental.go b/internal/istiooperator/merge_experimental.go index 69c65ebb7..e0c7c5a14 100644 --- a/internal/istiooperator/merge_experimental.go +++ b/internal/istiooperator/merge_experimental.go @@ -6,8 +6,8 @@ import ( "github.com/imdario/mergo" operatorv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" "github.com/kyma-project/istio/operator/internal/clusterconfig" - "istio.io/api/operator/v1alpha1" - istiov1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/errors" "os" "path" @@ -42,7 +42,7 @@ func (m *IstioMerger) Merge(clusterSize clusterconfig.ClusterSize, istioCR *oper // and sets the required features in the output operator CR. // Handles changes in ExperimentalFeaturesApplied condition which is only managed // in experimental flavour of image -func ParseExperimentalFeatures(istioCR *operatorv1alpha2.Istio, op *istiov1alpha1.IstioOperator) error { +func ParseExperimentalFeatures(istioCR *operatorv1alpha2.Istio, op *iopv1alpha1.IstioOperator) error { if istioCR.Spec.Experimental == nil { return nil } @@ -66,32 +66,32 @@ func ParseExperimentalFeatures(istioCR *operatorv1alpha2.Istio, op *istiov1alpha } return nil } -func enableGatewayAlphaAPI(op *istiov1alpha1.IstioOperator) error { - env := v1alpha1.EnvVar{ +func enableGatewayAlphaAPI(op *iopv1alpha1.IstioOperator) error { + env := v1.EnvVar{ Name: "PILOT_ENABLE_ALPHA_GATEWAY_API", Value: "true", } - toMerge := istiov1alpha1.IstioOperator{Spec: &v1alpha1.IstioOperatorSpec{ - Components: &v1alpha1.IstioComponentSetSpec{ - Pilot: &v1alpha1.ComponentSpec{ - K8S: &v1alpha1.KubernetesResourcesSpec{ - Env: []*v1alpha1.EnvVar{&env}}}, + toMerge := iopv1alpha1.IstioOperator{Spec: iopv1alpha1.IstioOperatorSpec{ + Components: &iopv1alpha1.IstioComponentSpec{ + Pilot: &iopv1alpha1.ComponentSpec{ + Kubernetes: &iopv1alpha1.KubernetesResources{ + Env: []*v1.EnvVar{&env}}}, }}} return mergo.Merge(op, toMerge, mergo.WithAppendSlice) } -func enableMultiNetworkDiscoverGatewayAPI(op *istiov1alpha1.IstioOperator) error { - env := v1alpha1.EnvVar{ +func enableMultiNetworkDiscoverGatewayAPI(op *iopv1alpha1.IstioOperator) error { + env := v1.EnvVar{ Name: "PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_API", Value: "true", } - toMerge := istiov1alpha1.IstioOperator{Spec: &v1alpha1.IstioOperatorSpec{ - Components: &v1alpha1.IstioComponentSetSpec{ - Pilot: &v1alpha1.ComponentSpec{ - K8S: &v1alpha1.KubernetesResourcesSpec{ - Env: []*v1alpha1.EnvVar{&env}}}, + toMerge := iopv1alpha1.IstioOperator{Spec: iopv1alpha1.IstioOperatorSpec{ + Components: &iopv1alpha1.IstioComponentSpec{ + Pilot: &iopv1alpha1.ComponentSpec{ + Kubernetes: &iopv1alpha1.KubernetesResources{ + Env: []*v1.EnvVar{&env}}}, }}} return mergo.Merge(op, toMerge, mergo.WithAppendSlice) diff --git a/internal/istiooperator/merge_experimental_test.go b/internal/istiooperator/merge_experimental_test.go index a7c0a3acc..86adbdb48 100644 --- a/internal/istiooperator/merge_experimental_test.go +++ b/internal/istiooperator/merge_experimental_test.go @@ -8,8 +8,8 @@ import ( "github.com/kyma-project/istio/operator/internal/istiooperator" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - "istio.io/api/operator/v1alpha1" - istiov1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + istiov1alpha1 "istio.io/istio/operator/pkg/apis" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "reflect" ) @@ -37,7 +37,7 @@ var _ = Describe("Merge", func() { // populates the state object which invalidates strict reflect // validation. If loaded CR from file (Evaluation) changes, this // size needs to be updated... - Expect(len(iop.Spec.Components.Pilot.K8S.Env)).To(Equal(5)) + Expect(len(iop.Spec.Components.Pilot.Kubernetes.Env)).To(Equal(5)) }) Context("ParseExperimentalFeatures", func() { It("should update IstioOperator with managed environment variables when all experimental options are set to true and source struct is populated", func() { @@ -56,9 +56,9 @@ var _ = Describe("Merge", func() { iop := readIOP("../../internal/istiooperator/istio-operator-light.yaml") Expect(istiooperator.ParseExperimentalFeatures(&istioCR, &iop)).To(Succeed()) Expect(iop.Spec.Components.Pilot).ToNot(BeNil()) - Expect(iop.Spec.Components.Pilot.K8S.Env).To(ContainElements( - &v1alpha1.EnvVar{Name: "PILOT_ENABLE_ALPHA_GATEWAY_API", Value: "true"}, - &v1alpha1.EnvVar{Name: "PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_API", Value: "true"})) + Expect(iop.Spec.Components.Pilot.Kubernetes.Env).To(ContainElements( + &v1.EnvVar{Name: "PILOT_ENABLE_ALPHA_GATEWAY_API", Value: "true"}, + &v1.EnvVar{Name: "PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_API", Value: "true"})) }) It("should update IstioOperator with managed environment variables when all experimental options are set to true and source struct is empty", func() { istioCR := v1alpha2.Istio{ObjectMeta: metav1.ObjectMeta{ @@ -75,9 +75,9 @@ var _ = Describe("Merge", func() { iop := istiov1alpha1.IstioOperator{} Expect(istiooperator.ParseExperimentalFeatures(&istioCR, &iop)).To(Succeed()) Expect(iop.Spec.Components.Pilot).ToNot(BeNil()) - Expect(iop.Spec.Components.Pilot.K8S.Env).To(ContainElements( - &v1alpha1.EnvVar{Name: "PILOT_ENABLE_ALPHA_GATEWAY_API", Value: "true"}, - &v1alpha1.EnvVar{Name: "PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_API", Value: "true"})) + Expect(iop.Spec.Components.Pilot.Kubernetes.Env).To(ContainElements( + &v1.EnvVar{Name: "PILOT_ENABLE_ALPHA_GATEWAY_API", Value: "true"}, + &v1.EnvVar{Name: "PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_API", Value: "true"})) }) It("should update IstioOperator with managed environment variables when all experimental options are set to true source struct already contains those variables set to non-managed ones", func() { istioCR := v1alpha2.Istio{ObjectMeta: metav1.ObjectMeta{ @@ -92,16 +92,16 @@ var _ = Describe("Merge", func() { }, } iop := istiov1alpha1.IstioOperator{ - Spec: &v1alpha1.IstioOperatorSpec{Components: &v1alpha1.IstioComponentSetSpec{Pilot: &v1alpha1.ComponentSpec{K8S: &v1alpha1.KubernetesResourcesSpec{Env: []*v1alpha1.EnvVar{ + Spec: istiov1alpha1.IstioOperatorSpec{Components: &istiov1alpha1.IstioComponentSpec{Pilot: &istiov1alpha1.ComponentSpec{Kubernetes: &istiov1alpha1.KubernetesResources{Env: []*v1.EnvVar{ {Name: "PILOT_ENABLE_ALPHA_GATEWAY_API", Value: "asdasd"}, {Name: "PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_API", Value: "asdasd"}, }}}}}, } Expect(istiooperator.ParseExperimentalFeatures(&istioCR, &iop)).To(Succeed()) Expect(iop.Spec.Components.Pilot).ToNot(BeNil()) - Expect(iop.Spec.Components.Pilot.K8S.Env).To(ContainElements( - &v1alpha1.EnvVar{Name: "PILOT_ENABLE_ALPHA_GATEWAY_API", Value: "true"}, - &v1alpha1.EnvVar{Name: "PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_API", Value: "true"})) + Expect(iop.Spec.Components.Pilot.Kubernetes.Env).To(ContainElements( + &v1.EnvVar{Name: "PILOT_ENABLE_ALPHA_GATEWAY_API", Value: "true"}, + &v1.EnvVar{Name: "PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_API", Value: "true"})) }) It("should succeed if experimental fields are not defined", func() { istioCR := v1alpha2.Istio{ObjectMeta: metav1.ObjectMeta{ diff --git a/internal/reconciliations/istio/client.go b/internal/reconciliations/istio/client.go index 27952f778..882efecd2 100644 --- a/internal/reconciliations/istio/client.go +++ b/internal/reconciliations/istio/client.go @@ -3,28 +3,22 @@ package istio import ( "context" "fmt" - "os" - "os/exec" - "time" - - "github.com/pkg/errors" - "istio.io/api/operator/v1alpha1" "istio.io/istio/istioctl/pkg/install/k8sversion" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" - "istio.io/istio/operator/pkg/cache" - "istio.io/istio/operator/pkg/helmreconciler" - "istio.io/istio/operator/pkg/translate" + "istio.io/istio/operator/pkg/uninstall" "istio.io/istio/operator/pkg/util/progress" "istio.io/istio/pkg/config/constants" "istio.io/istio/pkg/kube" - v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" apiErrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/rest" + "os" + "os/exec" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - ctrlclient "sigs.k8s.io/controller-runtime/pkg/client" + "time" + "github.com/pkg/errors" istio "istio.io/istio/operator/cmd/mesh" "istio.io/istio/operator/pkg/util/clog" istiolog "istio.io/istio/pkg/log" @@ -40,7 +34,9 @@ type IstioClient struct { printer istio.Printer } -const logScope = "istio-library" +const ( + logScope = "istio-library" +) func CreateIstioLibraryLogger() *clog.ConsoleLogger { registeredScope := istiolog.RegisterScope(logScope, logScope) @@ -64,6 +60,7 @@ func installIstioInExternalProcess(mergedIstioOperatorPath string) error { defer cancel() cmd := exec.CommandContext(ctx, istioInstallPath, mergedIstioOperatorPath) + cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err := cmd.Run() @@ -88,9 +85,6 @@ func (c *IstioClient) Install(mergedIstioOperatorPath string) error { } func (c *IstioClient) Uninstall(ctx context.Context) error { - // We don't use any revision capabilities yet - defaultRevision := "" - rc, err := kube.DefaultRestConfig("", "", func(config *rest.Config) { config.QPS = 50 config.Burst = 100 @@ -99,7 +93,7 @@ func (c *IstioClient) Uninstall(ctx context.Context) error { return fmt.Errorf("failed to create default REST config: %v", err) } - kubeClient, err := kube.NewClient(kube.NewClientConfigForRestConfig(rc), "") + kubeClient, err := kube.NewCLIClient(kube.NewClientConfigForRestConfig(rc)) if err != nil { return fmt.Errorf("failed to create Istio kube client: %v", err) } @@ -113,39 +107,33 @@ func (c *IstioClient) Uninstall(ctx context.Context) error { return fmt.Errorf("failed to create Kubernetes ctrl client: %v", err) } - cache.FlushObjectCaches() + pl := progress.NewLog() - emptyiops := &v1alpha1.IstioOperatorSpec{Profile: "empty", Revision: defaultRevision} - iop, err := translate.IOPStoIOP(emptyiops, "empty", iopv1alpha1.Namespace(emptyiops)) + objectsList, err := uninstall.GetPrunedResources(kubeClient, "", "", "default", true) if err != nil { return err } - opts := &helmreconciler.Options{DryRun: false, Log: c.consoleLogger, ProgressLog: progress.NewLog()} - h, err := helmreconciler.NewHelmReconciler(ctrlClient, kubeClient, iop, opts) - if err != nil { - return fmt.Errorf("failed to create reconciler: %v", err) - } + ctrl.Log.Info(istio.AllResourcesRemovedWarning) - objectsList, err := h.GetPrunedResources(defaultRevision, true, "") - if err != nil { + consoleLogger := CreateIstioLibraryLogger() + if err := ConfigureIstioLogScopes(); err != nil { + consoleLogger.LogAndError("Failed to configure Istio log: ", err) return err } - ctrl.Log.Info(istio.AllResourcesRemovedWarning) - - if err := h.DeleteObjectsList(objectsList, ""); err != nil { + if err := uninstall.DeleteObjectsList(kubeClient, false, consoleLogger, objectsList); err != nil { return fmt.Errorf("failed to delete control plane resources by revision: %v", err) } ctrl.Log.Info("Deletion of istio resources completed") deletePolicy := metav1.DeletePropagationForeground // We need to manually delete the control plane namespace from Istio because the namespace is not removed by default. - err = ctrlClient.Delete(ctx, &v1.Namespace{ + err = ctrlClient.Delete(ctx, &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: constants.IstioSystemNamespace, }, - }, &ctrlclient.DeleteOptions{ + }, &client.DeleteOptions{ PropagationPolicy: &deletePolicy, }) if err != nil && !apiErrors.IsNotFound(err) { @@ -153,7 +141,7 @@ func (c *IstioClient) Uninstall(ctx context.Context) error { } ctrl.Log.Info("Deleted istio control plane namespace", "namespace", constants.IstioSystemNamespace) - opts.ProgressLog.SetState(progress.StateUninstallComplete) + pl.SetState(progress.StateUninstallComplete) return nil } diff --git a/internal/reconciliations/istio/reconciliation_test.go b/internal/reconciliations/istio/reconciliation_test.go index 24311157a..b59be0adc 100644 --- a/internal/reconciliations/istio/reconciliation_test.go +++ b/internal/reconciliations/istio/reconciliation_test.go @@ -19,8 +19,7 @@ import ( "github.com/kyma-project/istio/operator/internal/clusterconfig" "github.com/kyma-project/istio/operator/internal/reconciliations/istio" "github.com/kyma-project/istio/operator/pkg/lib/gatherer" - operatorv1alpha1 "istio.io/api/operator/v1alpha1" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -974,7 +973,7 @@ func (m MergerMock) Merge(_ clusterconfig.ClusterSize, _ *operatorv1alpha2.Istio func (m MergerMock) GetIstioOperator(_ clusterconfig.ClusterSize) (iopv1alpha1.IstioOperator, error) { iop := iopv1alpha1.IstioOperator{ - Spec: &operatorv1alpha1.IstioOperatorSpec{ + Spec: iopv1alpha1.IstioOperatorSpec{ Tag: structpb.NewStringValue(m.tag), }, } diff --git a/internal/restarter/sidecars.go b/internal/restarter/sidecars.go index 909a79fb3..c7fe48563 100644 --- a/internal/restarter/sidecars.go +++ b/internal/restarter/sidecars.go @@ -67,7 +67,14 @@ func (s *SidecarsRestarter) Restart(ctx context.Context, istioCR *v1alpha2.Istio return described_errors.NewDescribedError(err, "Could not get Istio version from istio operator file"), false } - expectedImage := pods.NewSidecarImage(iop.Spec.Hub, iop.Spec.Tag.GetStringValue()) + tag, ok := iop.Spec.Tag.(string) + if !ok { + ctrl.Log.Error(err, "Error getting Istio tag from istio operator file") + s.StatusHandler.SetCondition(istioCR, v1alpha2.NewReasonWithMessage(v1alpha2.ConditionReasonProxySidecarRestartFailed)) + return described_errors.NewDescribedError(err, "Could not get Istio tag from istio operator file"), false + } + + expectedImage := pods.NewSidecarImage(iop.Spec.Hub, tag) s.Log.Info("Running proxy sidecar reset", "expected image", expectedImage) err = gatherer.VerifyIstioPodsVersion(ctx, s.Client, istioImageVersion.Version()) diff --git a/internal/restarter/sidecars_test.go b/internal/restarter/sidecars_test.go index 88db8d815..c9f364a7b 100644 --- a/internal/restarter/sidecars_test.go +++ b/internal/restarter/sidecars_test.go @@ -18,9 +18,8 @@ import ( "github.com/kyma-project/istio/operator/pkg/lib/sidecars/restart" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - "google.golang.org/protobuf/types/known/structpb" networkingv1 "istio.io/client-go/pkg/apis/networking/v1" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" + iopv1alpha1 "istio.io/istio/operator/pkg/apis" corev1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -290,7 +289,7 @@ func (m MergerMock) GetIstioOperator(_ clusterconfig.ClusterSize) (iopv1alpha1.I if err == nil { err = yaml.Unmarshal(istioOperator, &iop) } - iop.Spec.Tag = structpb.NewStringValue(m.tag) + iop.Spec.Tag = m.tag return iop, err } diff --git a/internal/webhooks/webhooks_test.go b/internal/webhooks/webhooks_test.go index c3535989f..ce77cee7e 100644 --- a/internal/webhooks/webhooks_test.go +++ b/internal/webhooks/webhooks_test.go @@ -22,6 +22,7 @@ import ( const ( revLabelKey = "istio.io/rev" + tagLabelKey = "istio.io/tag" defaultWhName = "istio-sidecar-injector" taggedWhName = "istio-revision-tag-default" ) @@ -84,7 +85,7 @@ var _ = Describe("DeleteConflictedDefaultTag", func() { It("should not delete tagged webhook when old webhook is deactivated", func() { // given defaultMwcObj := createMutatingWebhookWithSelector(defaultWhName, map[string]string{revLabelKey: tag.DefaultRevisionName}, deactivatedSelector) - taggedMwcObj := createMutatingWebhookWithSelector(taggedWhName, map[string]string{tag.IstioTagLabel: tag.DefaultRevisionName, revLabelKey: tag.DefaultRevisionName}, validSelector) + taggedMwcObj := createMutatingWebhookWithSelector(taggedWhName, map[string]string{tagLabelKey: tag.DefaultRevisionName, revLabelKey: tag.DefaultRevisionName}, validSelector) kubeclient := createFakeClient(defaultMwcObj, taggedMwcObj) // when err := DeleteConflictedDefaultTag(ctx, kubeclient) @@ -105,7 +106,7 @@ var _ = Describe("DeleteConflictedDefaultTag", func() { It("should delete conflicted tagged webhook if old one is not deactivated", func() { // given defaultMwcObj := createMutatingWebhookWithSelector(defaultWhName, map[string]string{revLabelKey: tag.DefaultRevisionName}, validSelector) - taggedMwcObj := createMutatingWebhookWithSelector(taggedWhName, map[string]string{tag.IstioTagLabel: tag.DefaultRevisionName, revLabelKey: tag.DefaultRevisionName}, validSelector) + taggedMwcObj := createMutatingWebhookWithSelector(taggedWhName, map[string]string{tagLabelKey: tag.DefaultRevisionName, revLabelKey: tag.DefaultRevisionName}, validSelector) kubeclient := createFakeClient(defaultMwcObj, taggedMwcObj) // when err := DeleteConflictedDefaultTag(ctx, kubeclient) @@ -124,7 +125,7 @@ var _ = Describe("DeleteConflictedDefaultTag", func() { }) It("should not delete tagged webhook if there is no old default webhook", func() { // given - taggedMwcObj := createMutatingWebhookWithSelector(taggedWhName, map[string]string{tag.IstioTagLabel: tag.DefaultRevisionName, revLabelKey: tag.DefaultRevisionName}, validSelector) + taggedMwcObj := createMutatingWebhookWithSelector(taggedWhName, map[string]string{tagLabelKey: tag.DefaultRevisionName, revLabelKey: tag.DefaultRevisionName}, validSelector) kubeclient := createFakeClient(taggedMwcObj) // when diff --git a/tests/integration/main_test.go b/tests/integration/main_test.go index 6b71d9e6c..cc61087bf 100644 --- a/tests/integration/main_test.go +++ b/tests/integration/main_test.go @@ -9,11 +9,10 @@ import ( "github.com/cucumber/godog" "github.com/cucumber/godog/colors" - iopv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" + istiov1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" networkingv1 "istio.io/client-go/pkg/apis/networking/v1" securityv1 "istio.io/client-go/pkg/apis/security/v1" telemetryv1 "istio.io/client-go/pkg/apis/telemetry/v1" - iopapis "istio.io/istio/operator/pkg/apis" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/config" @@ -107,12 +106,7 @@ func createK8sClient() client.Client { panic(err) } - err = iopapis.AddToScheme(c.Scheme()) - if err != nil { - panic(err) - } - - err = iopv1alpha2.AddToScheme(c.Scheme()) + err = istiov1alpha2.AddToScheme(c.Scheme()) if err != nil { panic(err) } diff --git a/tests/integration/steps/resource.go b/tests/integration/steps/resource.go index 3ba261d99..9724ee06a 100644 --- a/tests/integration/steps/resource.go +++ b/tests/integration/steps/resource.go @@ -15,7 +15,6 @@ import ( networkingv1 "istio.io/client-go/pkg/apis/networking/v1" networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" securityv1 "istio.io/client-go/pkg/apis/security/v1" - iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" v1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -129,8 +128,6 @@ func ResourceIsPresent(ctx context.Context, kind, name, namespace, present strin object = &networkingv1.VirtualService{} case ConfigMap.String(): object = &corev1.ConfigMap{} - case IstioOperator.String(): - object = &iopv1alpha1.IstioOperator{} default: return godog.ErrUndefined } @@ -337,16 +334,6 @@ func ResourceInNamespaceIsDeleted(ctx context.Context, kind, name, namespace str return err } - return k8sClient.Delete(context.TODO(), &r) - }) - case IstioOperator.String(): - return retry.Do(func() error { - var r iopv1alpha1.IstioOperator - err := k8sClient.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: namespace}, &r) - if err != nil { - return err - } - return k8sClient.Delete(context.TODO(), &r) }) default: