diff --git a/README.md b/README.md index a861dcb1f..5b74c2229 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,9 @@ Kyma Istio Operator is a component of the Kyma runtime that handles the manageme The latest release includes the following versions of Istio and Envoy: -**Istio version:** 1.21.3 +**Istio version:** 1.22.1 -**Envoy version:** 1.29.5 +**Envoy version:** 1.30.2 > [!NOTE] > If you want to enable compatibility with the previous minor version of Istio, see [Compatibility Mode](https://kyma-project.io/#/istio/user/00-10-overview-istio-controller?id=compatibility-mode). diff --git a/api/v1alpha2/compatibility_mode.go b/api/v1alpha2/compatibility_mode.go index 2460f5264..05a533f53 100644 --- a/api/v1alpha2/compatibility_mode.go +++ b/api/v1alpha2/compatibility_mode.go @@ -5,18 +5,14 @@ import ( iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" ) -// the following map contains Istio compatibility environment variables, that are not included in the compatibilityVersion of istioctl install -// should be updated with every Istio bump according to the release notes -// current env comes from: Istio 1.21, compatibilityVersion 1.20 var pilotCompatibilityEnvVars = map[string]string{ - "PERSIST_OLDEST_FIRST_HEURISTIC_FOR_VIRTUAL_SERVICE_HOST_MATCHING": "true", - "VERIFY_CERTIFICATE_AT_CLIENT": "false", - "ENABLE_AUTO_SNI": "false", + "ENABLE_ENHANCED_RESOURCE_SCOPING": "false", + "ENABLE_RESOLUTION_NONE_TARGET_PORT": "false", } -func setCompatibilityMode(op iopv1alpha1.IstioOperator) iopv1alpha1.IstioOperator { +func setCompatibilityMode(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioOperator, error) { pilotIop := setCompatibilityPilot(op) - return pilotIop + return setCompatibilityProxyMetadata(pilotIop) } func setCompatibilityPilot(op iopv1alpha1.IstioOperator) iopv1alpha1.IstioOperator { @@ -42,3 +38,32 @@ func setCompatibilityPilot(op iopv1alpha1.IstioOperator) iopv1alpha1.IstioOperat return op } + +var ProxyMetaDataCompatibility = map[string]string{ + "ISTIO_DELTA_XDS": "false", +} + +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 + } + + op.Spec.MeshConfig = updatedConfig + + return op, nil +} diff --git a/api/v1alpha2/compatibility_mode_test.go b/api/v1alpha2/compatibility_mode_test.go index c960ed44a..ab2af1ef7 100644 --- a/api/v1alpha2/compatibility_mode_test.go +++ b/api/v1alpha2/compatibility_mode_test.go @@ -3,8 +3,10 @@ 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" + "istio.io/istio/pkg/config/mesh" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -131,4 +133,107 @@ var _ = Describe("Compatibility Mode", func() { Expect(variableCounter).To(Equal(0)) }) }) + Context("MeshConfig ProxyMetadata", func() { + It("should set compatibility variables in proxyMetadata when no meshConfig is defined", func() { + //given + iop := iopv1alpha1.IstioOperator{ + Spec: &operatorv1alpha1.IstioOperatorSpec{}, + } + istioCR := Istio{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{}, + }, + Spec: IstioSpec{ + CompatibilityMode: true, + }, + } + + // when + out, err := istioCR.MergeInto(iop) + + //then + Expect(err).ShouldNot(HaveOccurred()) + field := getProxyMetadataField(out, "ISTIO_DELTA_XDS") + Expect(field).ToNot(BeNil()) + Expect(field.GetStringValue()).To(Equal("false")) + }) + + It("should set compatibility variables in proxyMetadata without overwriting existing variables", func() { + //given + m := mesh.DefaultMeshConfig() + m.DefaultConfig.ProxyMetadata = map[string]string{ + "BOOTSTRAP_XDS_AGENT": "true", + } + + meshConfig := convert(m) + + iop := iopv1alpha1.IstioOperator{ + Spec: &operatorv1alpha1.IstioOperatorSpec{ + MeshConfig: meshConfig, + }, + } + + istioCR := Istio{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{}, + }, + Spec: IstioSpec{ + CompatibilityMode: true, + }, + } + + // when + out, err := istioCR.MergeInto(iop) + + //then + Expect(err).ShouldNot(HaveOccurred()) + + xdsAgent := getProxyMetadataField(out, "BOOTSTRAP_XDS_AGENT") + Expect(xdsAgent).ToNot(BeNil()) + Expect(xdsAgent.GetStringValue()).To(Equal("true")) + + deltaXds := getProxyMetadataField(out, "ISTIO_DELTA_XDS") + Expect(deltaXds).ToNot(BeNil()) + Expect(deltaXds.GetStringValue()).To(Equal("false")) + }) + + It("should not set compatibility variables when compatibility mode is off", func() { + //given + m := mesh.DefaultMeshConfig() + m.DefaultConfig.ProxyMetadata = map[string]string{ + "BOOTSTRAP_XDS_AGENT": "true", + } + + meshConfig := convert(m) + + iop := iopv1alpha1.IstioOperator{ + Spec: &operatorv1alpha1.IstioOperatorSpec{ + MeshConfig: meshConfig, + }, + } + + istioCR := Istio{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{}, + }, + Spec: IstioSpec{ + CompatibilityMode: false, + }, + } + + // when + out, err := istioCR.MergeInto(iop) + + //then + Expect(err).ShouldNot(HaveOccurred()) + + field := getProxyMetadataField(out, "ISTIO_DELTA_XDS") + Expect(field).To(BeNil()) + }) + }) }) + +func getProxyMetadataField(iop iopv1alpha1.IstioOperator, fieldName string) *structpb.Value { + return iop.Spec.MeshConfig.Fields["defaultConfig"].GetStructValue(). + Fields["proxyMetadata"].GetStructValue().Fields[fieldName] +} diff --git a/api/v1alpha2/istio_merge.go b/api/v1alpha2/istio_merge.go index be1867c26..0f39ed62d 100644 --- a/api/v1alpha2/istio_merge.go +++ b/api/v1alpha2/istio_merge.go @@ -41,7 +41,10 @@ func (i *Istio) MergeInto(op iopv1alpha1.IstioOperator) (iopv1alpha1.IstioOperat externalNameAliasAnnotationFixOp := manageExternalNameAlias(i, mergedResourcesOp) if i.Spec.CompatibilityMode { - compatibleIop := setCompatibilityMode(externalNameAliasAnnotationFixOp) + compatibleIop, err := setCompatibilityMode(externalNameAliasAnnotationFixOp) + if err != nil { + return op, err + } return compatibleIop, nil } @@ -132,6 +135,16 @@ func (m *meshConfigBuilder) BuildNumTrustedProxies(numTrustedProxiesPtr *int) *m return m } +func (m *meshConfigBuilder) AddProxyMetadata(key, value string) *meshConfigBuilder { + + if m.c.DefaultConfig.ProxyMetadata == nil { + m.c.DefaultConfig.ProxyMetadata = make(map[string]string) + } + m.c.DefaultConfig.ProxyMetadata[key] = value + + return m +} + func (m *meshConfigBuilder) Build() *meshv1alpha1.MeshConfig { return m.c } diff --git a/cmd/istio-install/main.go b/cmd/istio-install/main.go index dcf0e0ea3..1b432bb33 100644 --- a/cmd/istio-install/main.go +++ b/cmd/istio-install/main.go @@ -4,38 +4,26 @@ package main import ( + istioclient "github.com/kyma-project/istio/operator/internal/reconciliations/istio" "os" "time" "istio.io/istio/istioctl/pkg/install/k8sversion" istio "istio.io/istio/operator/cmd/mesh" - "istio.io/istio/operator/pkg/util/clog" "istio.io/istio/pkg/kube" - istiolog "istio.io/istio/pkg/log" "k8s.io/client-go/rest" ) -func initializeLog() *istiolog.Options { - logoptions := istiolog.DefaultOptions() - logoptions.SetOutputLevel("validation", istiolog.ErrorLevel) - logoptions.SetOutputLevel("processing", istiolog.ErrorLevel) - logoptions.SetOutputLevel("analysis", istiolog.WarnLevel) - logoptions.SetOutputLevel("installation", istiolog.WarnLevel) - logoptions.SetOutputLevel("translator", istiolog.WarnLevel) - logoptions.SetOutputLevel("adsc", istiolog.WarnLevel) - logoptions.SetOutputLevel("default", istiolog.WarnLevel) - logoptions.SetOutputLevel("klog", istiolog.WarnLevel) - logoptions.SetOutputLevel("kube", istiolog.ErrorLevel) - - return logoptions -} - func main() { iopFileNames := []string{os.Args[1]} - istioLogOptions := initializeLog() - registeredScope := istiolog.RegisterScope("installation", "installation") - consoleLogger := clog.NewConsoleLogger(os.Stdout, os.Stderr, registeredScope) + consoleLogger := istioclient.CreateIstioLibraryLogger() + + if err := istioclient.ConfigureIstioLogScopes(); err != nil { + consoleLogger.LogAndError("Failed to configure Istio log: ", err) + os.Exit(1) + } + printer := istio.NewPrinterForWriter(os.Stdout) rc, err := kube.DefaultRestConfig("", "", func(config *rest.Config) { @@ -47,7 +35,7 @@ func main() { os.Exit(1) } - cliClient, err := kube.NewCLIClient(kube.NewClientConfigForRestConfig(rc), "") + cliClient, err := kube.NewCLIClient(kube.NewClientConfigForRestConfig(rc)) if err != nil { consoleLogger.LogAndError("Failed to create Istio CLI client: ", err) os.Exit(1) @@ -61,7 +49,7 @@ func main() { // We don't want to verify after installation, because it is unreliable installArgs := &istio.InstallArgs{ReadinessTimeout: 150 * time.Second, SkipConfirmation: true, Verify: false, InFilenames: iopFileNames} - if err := istio.Install(cliClient, &istio.RootArgs{}, installArgs, istioLogOptions, os.Stdout, consoleLogger, printer); err != nil { + if err := istio.Install(cliClient, &istio.RootArgs{}, installArgs, os.Stdout, consoleLogger, printer); err != nil { consoleLogger.LogAndError("Istio install error: ", err) os.Exit(1) } diff --git a/config/crd/bases/operator.kyma-project.io_istios.yaml b/config/crd/bases/operator.kyma-project.io_istios.yaml index 0dd18ba2e..5bfc7bd9b 100644 --- a/config/crd/bases/operator.kyma-project.io_istios.yaml +++ b/config/crd/bases/operator.kyma-project.io_istios.yaml @@ -108,11 +108,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. @@ -140,11 +142,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic type: object x-kubernetes-map-type: atomic weight: @@ -158,6 +162,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -202,11 +207,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. @@ -234,14 +241,17 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic type: object x-kubernetes-map-type: atomic type: array + x-kubernetes-list-type: atomic required: - nodeSelectorTerms type: object @@ -305,11 +315,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -324,12 +336,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -339,12 +351,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -386,11 +398,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -410,6 +424,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -432,6 +447,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -483,11 +499,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -502,12 +520,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -517,12 +535,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -564,11 +582,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -588,6 +608,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -600,6 +621,7 @@ spec: - topologyKey type: object type: array + x-kubernetes-list-type: atomic type: object podAntiAffinity: description: Describes pod anti-affinity scheduling @@ -659,11 +681,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -678,12 +702,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -693,12 +717,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -740,11 +764,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -764,6 +790,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -786,6 +813,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the anti-affinity requirements specified by this field are not met at @@ -837,11 +865,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -856,12 +886,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -871,12 +901,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -918,11 +948,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -942,6 +974,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -954,6 +987,7 @@ spec: - topologyKey type: object type: array + x-kubernetes-list-type: atomic type: object type: object resources: @@ -1479,11 +1513,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. @@ -1511,11 +1547,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic type: object x-kubernetes-map-type: atomic weight: @@ -1529,6 +1567,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -1573,11 +1612,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchFields: description: A list of node selector requirements by node's fields. @@ -1605,14 +1646,17 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic type: object x-kubernetes-map-type: atomic type: array + x-kubernetes-list-type: atomic required: - nodeSelectorTerms type: object @@ -1676,11 +1720,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -1695,12 +1741,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -1710,12 +1756,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -1757,11 +1803,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -1781,6 +1829,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1803,6 +1852,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -1854,11 +1904,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -1873,12 +1925,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -1888,12 +1940,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -1935,11 +1987,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -1959,6 +2013,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -1971,6 +2026,7 @@ spec: - topologyKey type: object type: array + x-kubernetes-list-type: atomic type: object podAntiAffinity: description: Describes pod anti-affinity scheduling @@ -2030,11 +2086,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -2049,12 +2107,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -2064,12 +2122,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -2111,11 +2169,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -2135,6 +2195,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -2157,6 +2218,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the anti-affinity requirements specified by this field are not met at @@ -2208,11 +2270,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -2227,12 +2291,12 @@ spec: description: |- MatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -2242,12 +2306,12 @@ spec: description: |- MismatchLabelKeys is a set of pod label keys to select which pods will be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)` + incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` to select the group of existing pods which pods will be taken into consideration for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming 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. + 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. items: type: string @@ -2289,11 +2353,13 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string @@ -2313,6 +2379,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic topologyKey: description: |- This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching @@ -2325,6 +2392,7 @@ spec: - topologyKey type: object type: array + x-kubernetes-list-type: atomic type: object type: object resources: diff --git a/controllers/istio_controller.go b/controllers/istio_controller.go index e9417e5c5..1ed97d0b8 100644 --- a/controllers/istio_controller.go +++ b/controllers/istio_controller.go @@ -53,13 +53,13 @@ const ( namespace = "kyma-system" ) -func NewReconciler(mgr manager.Manager, reconciliationInterval time.Duration) *IstioReconciler { +func NewController(mgr manager.Manager, reconciliationInterval time.Duration) *IstioReconciler { merger := istiooperator.NewDefaultIstioMerger() statusHandler := status.NewStatusHandler(mgr.GetClient()) restarters := []restarter.Restarter{ restarter.NewIngressGatewayRestarter(mgr.GetClient(), []filter.IngressGatewayPredicate{}, statusHandler), - restarter.NewSidecarsRestarter(mgr.GetLogger(), mgr.GetClient(), &merger, sidecars.NewProxyResetter(), []filter.SidecarProxyPredicate{}, statusHandler), + restarter.NewSidecarsRestarter(mgr.GetLogger(), mgr.GetClient(), &merger, sidecars.NewProxyResetter(), statusHandler), } return &IstioReconciler{ diff --git a/controllers/suite_test.go b/controllers/suite_test.go index d7159da17..7a5229a9a 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -4,8 +4,8 @@ import ( operatorv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" "github.com/kyma-project/istio/operator/internal/tests" "github.com/onsi/ginkgo/v2/types" - "istio.io/client-go/pkg/apis/networking/v1alpha3" - securityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" + securityv1 "istio.io/client-go/pkg/apis/security/v1" "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -33,8 +33,8 @@ func createFakeClient(objects ...client.Object) client.Client { func getTestScheme() *runtime.Scheme { scheme := runtime.NewScheme() Expect(operatorv1alpha2.AddToScheme(scheme)).Should(Succeed()) - Expect(v1alpha3.AddToScheme(scheme)).Should(Succeed()) - Expect(securityv1beta1.AddToScheme(scheme)).Should(Succeed()) + Expect(networkingv1.AddToScheme(scheme)).Should(Succeed()) + Expect(securityv1.AddToScheme(scheme)).Should(Succeed()) return scheme } diff --git a/docs/release-notes/1.8.0.md b/docs/release-notes/1.8.0.md new file mode 100644 index 000000000..8f0b141b5 --- /dev/null +++ b/docs/release-notes/1.8.0.md @@ -0,0 +1,3 @@ +## New Features + +- Update the Istio version to 1.22.1 [#887](https://github.com/kyma-project/istio/pull/887). Read [Istio 1.22.0 Release Announcement](https://istio.io/latest/news/releases/1.22.x/announcing-1.22/), [1.22.0 Change Notes](https://istio.io/latest/news/releases/1.22.x/announcing-1.22/change-notes/), [1.22.0 Upgrade Notes](https://istio.io/latest/news/releases/1.22.x/announcing-1.22/upgrade-notes/), and [Istio 1.22.1 Release Announcement](https://istio.io/latest/news/releases/1.22.x/announcing-1.22.1/). diff --git a/docs/user/00-10-overview-istio-controller.md b/docs/user/00-10-overview-istio-controller.md index 14e6d8323..29e036ee4 100644 --- a/docs/user/00-10-overview-istio-controller.md +++ b/docs/user/00-10-overview-istio-controller.md @@ -103,11 +103,17 @@ To enable compatibility mode in the Istio module, you can set the **spec.compati The following Istio Pilot environment variables are applied when you set `spec.compatibilityMode: true` in Istio CR: -Name | Value - ---------- | --------------- -**PERSIST_OLDEST_FIRST_HEURISTIC_FOR_VIRTUAL_SERVICE_HOST_MATCHING** | `true` -**VERIFY_CERTIFICATE_AT_CLIENT** | `false` -**ENABLE_AUTO_SNI** | `false` + Name | Value + ----------------------------------------|--------- + **ENABLE_ENHANCED_RESOURCE_SCOPING** | `false` + **ENABLE_RESOLUTION_NONE_TARGET_PORT** | `false` + +The following Istio Proxy environment variables are applied when you set `spec.compatibilityMode: true` in Istio CR: + + Name | Value + ---------------------|--------- + **ISTIO_DELTA_XDS** | `false` + > [!WARNING] > You can use the compatibility mode to retain the behavior of the current Istio version when a new version of the Istio module with a higher version of Istio is released. Then, the compatibility will be first set to a minor version lower than the one you are currently using. If this lower version’s behavior is not compatible with your current mesh setup, some configurations may be broken until the new release of the Istio module is rolled out. diff --git a/docs/user/README.md b/docs/user/README.md index 2acb9282e..91498d469 100644 --- a/docs/user/README.md +++ b/docs/user/README.md @@ -10,9 +10,9 @@ Kyma Istio Operator is an essential part of the Istio module that handles the ma The latest release includes the following versions of Istio and Envoy: -**Istio version:** 1.21.3 +**Istio version:** 1.22.1 -**Envoy version:** 1.29.5 +**Envoy version:** 1.30.2 > [!NOTE] > If you want to enable compatibility with the previous minor version of Istio, see [Compatibility Mode](https://kyma-project.io/#/istio/user/00-10-overview-istio-controller?id=compatibility-mode). diff --git a/docs/user/tutorials/01-10-external-authorization-provider.md b/docs/user/tutorials/01-10-external-authorization-provider.md index 06111a368..d5bab6823 100644 --- a/docs/user/tutorials/01-10-external-authorization-provider.md +++ b/docs/user/tutorials/01-10-external-authorization-provider.md @@ -173,7 +173,7 @@ To learn more about oauth2-proxy, [see the documentation](https://github.com/oau 3. Create a DestinationRule with a traffic policy for the external authorization provider: ``` cat < github.com/imdario/mergo v0.3.5 @@ -20,26 +20,29 @@ require ( github.com/thoas/go-funk v0.9.3 github.com/vrischmann/envconfig v1.3.0 gitlab.com/rodrigoodhin/gocure v0.0.0-20220718065339-f14dfe79276a - golang.org/x/exp v0.0.0-20240110193028-0dcbfd608b1e + golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f golang.org/x/time v0.5.0 google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v3 v3.0.1 - istio.io/api v1.21.3-0.20240422111456-ce2c1feea604 - istio.io/client-go v1.21.3-0.20240422111956-6caf45ef5297 - istio.io/istio v0.0.0-20240601203759-7f26a100ece0 - k8s.io/api v0.29.3 - k8s.io/apiextensions-apiserver v0.29.3 - k8s.io/apimachinery v0.29.3 - k8s.io/client-go v0.29.3 - k8s.io/kubectl v0.29.3 - k8s.io/utils v0.0.0-20240102154912-e7106e64919e - sigs.k8s.io/controller-runtime v0.16.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.22.1-0.20240524024004-b6815be0740d + istio.io/client-go v1.22.1-0.20240524024404-e48447329f77 + istio.io/istio v0.0.0-20240601204907-a1a76b8e75f8 + k8s.io/api v0.30.0 + k8s.io/apiextensions-apiserver v0.30.0 + k8s.io/apimachinery v0.30.0 + k8s.io/client-go v0.30.0 + k8s.io/kubectl v0.30.0 + k8s.io/utils v0.0.0-20240423183400-0849a56e8f22 + sigs.k8s.io/controller-runtime v0.18.0 // 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 v1.25.1 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // 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 @@ -50,22 +53,27 @@ require ( github.com/VividCortex/ewma v1.2.0 // indirect github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 // 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.2.0 // 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.4 // indirect - github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa // indirect + github.com/cheggaaa/pb/v3 v3.1.5 // indirect + github.com/cncf/xds/go v0.0.0-20240329184929-0c46c01016dc // 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/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/emicklei/go-restful/v3 v3.11.2 // indirect - github.com/envoyproxy/go-control-plane v0.12.1-0.20240326194405-485b2263e153 // indirect + github.com/docker/cli v26.0.0+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker v25.0.5+incompatible // indirect + github.com/docker/docker-credential-helpers v0.8.1 // indirect + github.com/emicklei/go-restful/v3 v3.12.0 // indirect + github.com/envoyproxy/go-control-plane v0.12.1-0.20240415211714-57c85e1829e6 // indirect github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect - github.com/evanphx/json-patch v5.7.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.7.0 // indirect + github.com/evanphx/json-patch v5.9.0+incompatible // 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.16.0 // indirect @@ -73,10 +81,10 @@ require ( 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 - github.com/go-logr/zapr v1.2.4 // indirect - github.com/go-openapi/jsonpointer v0.20.2 // indirect - github.com/go-openapi/jsonreference v0.20.4 // indirect - github.com/go-openapi/swag v0.22.7 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + 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 @@ -85,9 +93,10 @@ require ( 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.7 // indirect + github.com/google/cel-go v0.17.8 // 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/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -108,6 +117,7 @@ require ( 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.7 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect github.com/lestrrat-go/blackmagic v1.0.2 // indirect @@ -121,8 +131,7 @@ 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/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect - github.com/miekg/dns v1.1.57 // indirect + github.com/miekg/dns v1.1.58 // 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 @@ -135,21 +144,23 @@ 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/openshift/api v0.0.0-20240111155829-b6df9ba0be95 // indirect + github.com/opencontainers/image-spec v1.1.0-rc5 // indirect + github.com/openshift/api v0.0.0-20240404200104-96ed2d49b255 // indirect github.com/pelletier/go-toml/v2 v2.1.1 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect - github.com/planetscale/vtprotobuf v0.5.1-0.20231212170721-e7d721933795 // indirect - github.com/prometheus/client_golang v1.18.0 // indirect - github.com/prometheus/client_model v0.6.0 // indirect - github.com/prometheus/common v0.45.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect - github.com/prometheus/prometheus v0.48.1 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/prometheus/client_golang v1.19.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.52.2 // indirect + github.com/prometheus/procfs v0.13.0 // indirect + github.com/prometheus/prometheus v0.51.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/sirupsen/logrus v1.9.3 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.11.0 // indirect @@ -161,47 +172,46 @@ require ( github.com/subosito/gotenv v1.6.0 // indirect 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/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.21.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.44.0 // indirect - go.opentelemetry.io/otel/metric v1.21.0 // indirect - go.opentelemetry.io/otel/sdk v1.21.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.21.0 // indirect - go.opentelemetry.io/otel/trace v1.21.0 // indirect - go.opentelemetry.io/proto/otlp v1.0.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.46.0 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect + go.opentelemetry.io/otel/sdk v1.24.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.24.0 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect + go.opentelemetry.io/proto/otlp v1.1.0 // indirect go.starlark.net v0.0.0-20231121155337-90ade8b19d09 // indirect go.uber.org/atomic v1.11.0 // indirect - go.uber.org/goleak v1.3.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.26.0 // indirect + go.uber.org/zap v1.27.0 // indirect golang.org/x/crypto v0.23.0 // indirect golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.25.0 // indirect - golang.org/x/oauth2 v0.16.0 // indirect + golang.org/x/oauth2 v0.19.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.20.0 // indirect golang.org/x/term v0.20.0 // indirect golang.org/x/text v0.15.0 // indirect golang.org/x/tools v0.21.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c // indirect - google.golang.org/grpc v1.62.2 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/grpc v1.63.2 // 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.14.2 // indirect - k8s.io/apiserver v0.29.3 // indirect - k8s.io/cli-runtime v0.29.3 // indirect - k8s.io/component-base v0.29.3 // indirect - k8s.io/klog/v2 v2.120.0 // indirect - k8s.io/kube-openapi v0.0.0-20240105020646-a37d4de58910 // indirect - sigs.k8s.io/gateway-api v1.0.1-0.20240112015229-444631bfe06f // indirect + helm.sh/helm/v3 v3.14.3 // indirect + k8s.io/apiserver v0.30.0 // indirect + k8s.io/cli-runtime v0.30.0 // indirect + k8s.io/component-base v0.30.0 // indirect + k8s.io/klog/v2 v2.120.1 // indirect + k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 // indirect + sigs.k8s.io/gateway-api v1.1.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 diff --git a/go.sum b/go.sum index ce267b4a7..d0c9074bb 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,10 @@ +cel.dev/expr v0.15.0 h1:O1jzfJCQBfL5BFoYktaxwIhuttaQPsVWerH9/EEKx0w= +cel.dev/expr v0.15.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 v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= +cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= @@ -42,10 +43,10 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko 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.1.0 h1:/PBnzDBxfHJ66AinLNglzZH4oWLrc1/QTKlSoNNnei8= -github.com/alecholmes/xfccparser v0.1.0/go.mod h1:c1S35dudNR5aZ4Vf9zKCrEwC8iqwF4TcDAbU+RXQ5yY= -github.com/alecthomas/participle v0.7.1 h1:2bN7reTw//5f0cugJcTOnY/NYZcWQOaajW+BwZB5xWs= -github.com/alecthomas/participle v0.7.1/go.mod h1:HfdmEuwvr12HXQN44HPWXR0lHmVolVYe4dyL6lQ3duY= +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= @@ -71,23 +72,23 @@ github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17 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.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 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.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +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= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= -github.com/cheggaaa/pb/v3 v3.1.4 h1:DN8j4TVVdKu3WxVwcRKu0sG00IIU6FewoABZzXbRQeo= -github.com/cheggaaa/pb/v3 v3.1.4/go.mod h1:6wVjILNBaXMs8c21qRiaUM8BR82erfgau1DQ4iUXmSA= +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-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= +github.com/cncf/xds/go v0.0.0-20240329184929-0c46c01016dc h1:Xo7J+m6Iq9pGYXnooTSpxZ11PzNzI7cKU9V81dpKSRQ= +github.com/cncf/xds/go v0.0.0-20240329184929-0c46c01016dc/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= 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= @@ -96,8 +97,8 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc 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.9.0 h1:0J/ogVOd4y8P0f0xUh8l9t07xRP/d8tccvjHl2dcsSo= -github.com/coreos/go-oidc/v3 v3.9.0/go.mod h1:rTKz2PYwftcrtoCzV5g5kvfJoWcm0Mk8AF8y1iAQro4= +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-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= @@ -136,8 +137,8 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 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 v24.0.7+incompatible h1:wa/nIwYFW7BVTGa7SWPVyyXU9lgORqUb1xfI36MSkFg= -github.com/docker/cli v24.0.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v26.0.0+incompatible h1:90BKrx1a1HKYpSnnBFR6AgDq/FqkHxwlUyzJVPxD30I= +github.com/docker/cli v26.0.0+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= @@ -154,23 +155,23 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn 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.11.2 h1:1onLa9DcsMYO9P+CXaL0dStDqQ2EHHXLiz+BtnqkLAU= -github.com/emicklei/go-restful/v3 v3.11.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +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.20240326194405-485b2263e153 h1:D+Yo0IlXeBjENmgPBeLmIDTswqNXaVkrufcFmpJarWE= -github.com/envoyproxy/go-control-plane v0.12.1-0.20240326194405-485b2263e153/go.mod h1:lRNe3QkzRMIgsumGdg6KCetEbBVIZzEyAcgJBAY30IU= +github.com/envoyproxy/go-control-plane v0.12.1-0.20240415211714-57c85e1829e6 h1:hr74TzQHrbbYUij8W5PYKTQexuduz4XY0K3vXpCOM4Q= +github.com/envoyproxy/go-control-plane v0.12.1-0.20240415211714-57c85e1829e6/go.mod h1:Dj0RQ153G7gNYzcQCihXUreYTQbuJNuL7IT7v9+jTr4= 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/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= -github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +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.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= -github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +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= @@ -193,6 +194,8 @@ github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8b 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-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -200,14 +203,13 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V 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.2.4/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.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= -github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= +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= @@ -221,15 +223,15 @@ github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwds 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.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= -github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= +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.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU= -github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4= +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= @@ -252,8 +254,8 @@ github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/ 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.22.7 h1:JWrc1uc/P9cSomxfnsFSVWoE1FW6bNbrVPmpQYpCcR8= -github.com/go-openapi/swag v0.22.7/go.mod h1:Gl91UqO+btAM0plGGxHqJcQZ1ZTy6jbmridBTsDy8A0= +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= @@ -291,28 +293,25 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU 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.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= 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.7 h1:6ebJFzu1xO2n7TLtN+UBqShGBhlD85bhvglh5DpcfqQ= -github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +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/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.5/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.17.0 h1:5p+zYs/R4VGHkhyvgWurWrpJ2hW4Vv9fQI+GzdcwXLk= -github.com/google/go-containerregistry v0.17.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +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/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= @@ -401,8 +400,8 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW 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.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= +github.com/klauspost/compress v1.17.7/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= @@ -459,10 +458,8 @@ github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp 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/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= -github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM= -github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk= +github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4= +github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= 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= @@ -517,8 +514,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 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-20240111155829-b6df9ba0be95 h1:j0eYo5xy/lW+oeLvpbtJBNc7bvbiuJaW7ZXBoQ8gsjw= -github.com/openshift/api v0.0.0-20240111155829-b6df9ba0be95/go.mod h1:CxgbWAlvu2iQB0UmKTtRu1YfepRg1/vJ64n2DlIEVz4= +github.com/openshift/api v0.0.0-20240404200104-96ed2d49b255 h1:OPEl/rl/Bt8soLkMUex9PZu9PJB59VPFnaPh/n1Pb3I= +github.com/openshift/api v0.0.0-20240404200104-96ed2d49b255/go.mod h1:CxgbWAlvu2iQB0UmKTtRu1YfepRg1/vJ64n2DlIEVz4= 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= @@ -531,8 +528,8 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE 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.5.1-0.20231212170721-e7d721933795 h1:pH+U6pJP0BhxqQ4njBUjOg0++WMMvv3eByWzB+oATBY= -github.com/planetscale/vtprotobuf v0.5.1-0.20231212170721-e7d721933795/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +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/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= @@ -540,31 +537,31 @@ github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prY 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.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= -github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= 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_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.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= -github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= +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.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= +github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= 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/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/prometheus/prometheus v0.48.1 h1:CTszphSNTXkuCG6O0IfpKdHcJkvvnAAE1GbELKS+NFk= -github.com/prometheus/prometheus v0.48.1/go.mod h1:SRw624aMAxTfryAcP8rOjg4S/sHHaetx2lyJJ2nM83g= +github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= +github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= +github.com/prometheus/prometheus v0.51.1 h1:V2e7x2oiUC0Megp26+xjffxBf9EGkyP1iQuGd4VjUSU= +github.com/prometheus/prometheus v0.51.1/go.mod h1:yv4MwOn3yHMQ6MZGHPg/U7Fcyqf+rxqiZfSur6myVtc= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +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= @@ -677,7 +674,6 @@ github.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+Seva github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 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= @@ -688,20 +684,20 @@ go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qL 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/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= -go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= -go.opentelemetry.io/otel/exporters/prometheus v0.44.0 h1:08qeJgaPC0YEBu2PQMbqU3rogTlyzpjhCI2b58Yn00w= -go.opentelemetry.io/otel/exporters/prometheus v0.44.0/go.mod h1:ERL2uIeBtg4TxZdojHUwzZfIFlUIjZtxubT5p4h1Gjg= -go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= -go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= -go.opentelemetry.io/otel/sdk/metric v1.21.0/go.mod h1:FJ8RAsoPGv/wYMgBdUJXOm+6pzFY3YdljnXtv1SBE8Q= -go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= -go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= -go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= -go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/exporters/prometheus v0.46.0 h1:I8WIFXR351FoLJYuloU4EgXbtNX2URfU/85pUPheIEQ= +go.opentelemetry.io/otel/exporters/prometheus v0.46.0/go.mod h1:ztwVUHe5DTR/1v7PeuGRnU5Bbd4QKYwApWmuutKsJSs= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= +go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/sdk/metric v1.24.0 h1:yyMQrPzF+k88/DbH7o4FMAs80puqd+9osbiBrJrz/w8= +go.opentelemetry.io/otel/sdk/metric v1.24.0/go.mod h1:I6Y5FjH6rvEnTTAYQz3Mmv2kl6Ek5IIrmwTLqMrrOE0= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= +go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= 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= @@ -710,7 +706,6 @@ 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.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= 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= @@ -719,9 +714,8 @@ 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.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +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= @@ -739,8 +733,8 @@ golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOM golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240110193028-0dcbfd608b1e h1:723BNChdd0c2Wk6WOE320qGBiPtYx0F0Bbm1kriShfE= -golang.org/x/exp v0.0.0-20240110193028-0dcbfd608b1e/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY= +golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= 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= @@ -748,7 +742,6 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl 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= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= @@ -775,7 +768,6 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL 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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 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= @@ -786,8 +778,8 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= 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.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= -golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= +golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= 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= @@ -795,7 +787,6 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ 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= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= @@ -825,13 +816,12 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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= @@ -857,7 +847,6 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= 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= @@ -886,7 +875,6 @@ golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtn 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= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= @@ -902,17 +890,15 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt 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/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= 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-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= -google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c h1:lfpJ/2rWPa/kJgxyyXM8PrNnfCzcmxJ265mADgwmvLI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda h1:b6F6WIV4xHHD0FA4oIyzU6mHWg2WI2X1RBehwa5QN38= +google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda/go.mod h1:AHcE/gZH76Bk/ROZhQphlRoWo5xKDEtz3eVEO1LfA8c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= 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= @@ -921,16 +907,14 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ 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.62.2 h1:iEIj1U5qjyBjzkM5nk3Fq+S1IbjbXSyqeULZ1Nfo4AA= -google.golang.org/grpc v1.62.2/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= 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/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -967,71 +951,74 @@ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C 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= -helm.sh/helm/v3 v3.14.2 h1:V71fv+NGZv0icBlr+in1MJXuUIHCiPG1hW9gEBISTIA= -helm.sh/helm/v3 v3.14.2/go.mod h1:2itvvDv2WSZXTllknfQo6j7u3VVgMAvm8POCDgYH424= +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.14.3 h1:HmvRJlwyyt9HjgmAuxHbHv3PhMz9ir/XNWHyXfmnOP4= +helm.sh/helm/v3 v3.14.3/go.mod h1:v6myVbyseSBJTzhmeE39UcPLNv6cQK6qss3dvgAySaE= 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.21.3-0.20240422111456-ce2c1feea604 h1:rBkCndZuKojMaNBV6iC7zD/q8zwDKDaWs+1t8mrf13Q= -istio.io/api v1.21.3-0.20240422111456-ce2c1feea604/go.mod h1:TFCMUCAHRjxBv1CsIsFCsYHPHi4axVI4vdIzVr8eFjY= -istio.io/client-go v1.21.3-0.20240422111956-6caf45ef5297 h1:79TwlDwAC9BOIsmNJuoBj1DFeifnntHKovTU3C8a6PM= -istio.io/client-go v1.21.3-0.20240422111956-6caf45ef5297/go.mod h1:9LEzw82gl2VZrc9fNnWrkGMmhWSrYsgcgi650KY3LII= -istio.io/istio v0.0.0-20240601203759-7f26a100ece0 h1:6HLkTVaj5+eXNmHCV2BRntBLGnEyRlbSKSYfqppzKqo= -istio.io/istio v0.0.0-20240601203759-7f26a100ece0/go.mod h1:3Sdk3OWMOVuli/H/AaOPpk+5VpJqpDxtbr5OUN+A9VU= +istio.io/api v1.22.1-0.20240524024004-b6815be0740d h1:2GncSQ55NOr91NYPmi0jqhVM7z7/xswJsD96dQMkN38= +istio.io/api v1.22.1-0.20240524024004-b6815be0740d/go.mod h1:S3l8LWqNYS9yT+d4bH+jqzH2lMencPkW7SKM1Cu9EyM= +istio.io/client-go v1.22.1-0.20240524024404-e48447329f77 h1:RxyTd7arbmdk/E7xINxtrsC4pXtVR6piZgn25WYVqJ4= +istio.io/client-go v1.22.1-0.20240524024404-e48447329f77/go.mod h1:Z2QE9uMt6tDVyrmiLfLVhutbqtfUkPJ7A5Uw/p6gNFo= +istio.io/istio v0.0.0-20240601204907-a1a76b8e75f8 h1:wxNbsjiAP99zIkNYi2QQIrMluRCtIt9SI03exkmy20M= +istio.io/istio v0.0.0-20240601204907-a1a76b8e75f8/go.mod h1:h7kNaznOyS+lED6Mj8nihoUeTU52WQvnB8hDAGjM3Co= 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.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw= -k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80= +k8s.io/api v0.30.0 h1:siWhRq7cNjy2iHssOB9SCGNCl2spiF1dO3dABqZ8niA= +k8s.io/api v0.30.0/go.mod h1:OPlaYhoHs8EQ1ql0R/TsUgaRPhpKNxIMrKQfWUp8QSE= 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.29.3 h1:9HF+EtZaVpFjStakF4yVufnXGPRppWFEQ87qnO91YeI= -k8s.io/apiextensions-apiserver v0.29.3/go.mod h1:po0XiY5scnpJfFizNGo6puNU6Fq6D70UJY2Cb2KwAVc= +k8s.io/apiextensions-apiserver v0.30.0 h1:jcZFKMqnICJfRxTgnC4E+Hpcq8UEhT8B2lhBcQ+6uAs= +k8s.io/apiextensions-apiserver v0.30.0/go.mod h1:N9ogQFGcrbWqAY9p2mUAL5mGxsLqwgtUce127VtRX5Y= 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.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU= -k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU= +k8s.io/apimachinery v0.30.0 h1:qxVPsyDM5XS96NIh9Oj6LavoVFYff/Pon9cZeDIkHHA= +k8s.io/apimachinery v0.30.0/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.29.3 h1:xR7ELlJ/BZSr2n4CnD3lfA4gzFivh0wwfNfz9L0WZcE= -k8s.io/apiserver v0.29.3/go.mod h1:hrvXlwfRulbMbBgmWRQlFru2b/JySDpmzvQwwk4GUOs= -k8s.io/cli-runtime v0.29.3 h1:r68rephmmytoywkw2MyJ+CxjpasJDQY7AGc3XY2iv1k= -k8s.io/cli-runtime v0.29.3/go.mod h1:aqVUsk86/RhaGJwDhHXH0jcdqBrgdF3bZWk4Z9D4mkM= +k8s.io/apiserver v0.30.0 h1:QCec+U72tMQ+9tR6A0sMBB5Vh6ImCEkoKkTDRABWq6M= +k8s.io/apiserver v0.30.0/go.mod h1:smOIBq8t0MbKZi7O7SyIpjPsiKJ8qa+llcFCluKyqiY= +k8s.io/cli-runtime v0.30.0 h1:0vn6/XhOvn1RJ2KJOC6IRR2CGqrpT6QQF4+8pYpWQ48= +k8s.io/cli-runtime v0.30.0/go.mod h1:vATpDMATVTMA79sZ0YUCzlMelf6rUjoBzlp+RnoM+cg= 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.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg= -k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0= +k8s.io/client-go v0.30.0 h1:sB1AGGlhY/o7KCyCEQ0bPWzYDL0pwOZO4vAtTSh/gJQ= +k8s.io/client-go v0.30.0/go.mod h1:g7li5O5256qe6TYdAMyX/otJqMhIiGgTapdLchhmOaY= 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.29.3 h1:Oq9/nddUxlnrCuuR2K/jp6aflVvc0uDvxMzAWxnGzAo= -k8s.io/component-base v0.29.3/go.mod h1:Yuj33XXjuOk2BAaHsIGHhCKZQAgYKhqIxIjIr2UXYio= +k8s.io/component-base v0.30.0 h1:cj6bp38g0ainlfYtaOQuRELh5KSYjhKxM+io7AUIk4o= +k8s.io/component-base v0.30.0/go.mod h1:V9x/0ePFNaKeKYA3bOvIbrNoluTSG+fSJKjLdjOoeXQ= 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.0 h1:z+q5mfovBj1fKFxiRzsa2DsJLPIVMk/KFL81LMOfK+8= -k8s.io/klog/v2 v2.120.0/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +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= -k8s.io/kube-openapi v0.0.0-20240105020646-a37d4de58910 h1:1Rp/XEKP5uxPs6QrsngEHAxBjaAR78iJRiJq5Fi7LSU= -k8s.io/kube-openapi v0.0.0-20240105020646-a37d4de58910/go.mod h1:Pa1PvrP7ACSkuX6I7KYomY6cmMA0Tx86waBhDUgoKPw= -k8s.io/kubectl v0.29.3 h1:RuwyyIU42MAISRIePaa8Q7A3U74Q9P4MoJbDFz9o3us= -k8s.io/kubectl v0.29.3/go.mod h1:yCxfY1dbwgVdEt2zkJ6d5NNLOhhWgTyrqACIoFhpdd4= +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.0 h1:xbPvzagbJ6RNYVMVuiHArC1grrV5vSmmIcSZuCdzRyk= +k8s.io/kubectl v0.30.0/go.mod h1:zgolRw2MQXLPwmic2l/+iHs239L49fhSeICuMhQQXTI= 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-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ= -k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240423183400-0849a56e8f22 h1:ao5hUqGhsqdm+bYbjH/pRkCs0unBGe9UyDahzs9zQzQ= +k8s.io/utils v0.0.0-20240423183400-0849a56e8f22/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/controller-runtime v0.6.1/go.mod h1:XRYBPdbf5XJu9kpS84VJiZ7h/u1hF3gEORz0efEja7A= -sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= -sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= +sigs.k8s.io/controller-runtime v0.18.0 h1:Z7jKuX784TQSUL1TIyeuF7j8KXZ4RtSX0YgtjKcSTME= +sigs.k8s.io/controller-runtime v0.18.0/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw= sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI= -sigs.k8s.io/gateway-api v1.0.1-0.20240112015229-444631bfe06f h1:IqK1xo4VRJLVH8EDGbmy7I1+JNovVhnS047WhdlVctI= -sigs.k8s.io/gateway-api v1.0.1-0.20240112015229-444631bfe06f/go.mod h1:pDJbtMU6/wv6ft+zWyOQe4mm2L8XO9J+5YPcCvrYjac= +sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM= +sigs.k8s.io/gateway-api v1.1.0/go.mod h1:ZH4lHrL2sDi0FHZ9jjneb8kKnGzFWyrTya35sWUTrRs= 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= diff --git a/internal/compatibility/proxy_restart.go b/internal/compatibility/proxy_restart.go new file mode 100644 index 000000000..40faa05bb --- /dev/null +++ b/internal/compatibility/proxy_restart.go @@ -0,0 +1,54 @@ +package compatibility + +import ( + "context" + "github.com/kyma-project/istio/operator/api/v1alpha2" + "github.com/kyma-project/istio/operator/internal/filter" + "github.com/kyma-project/istio/operator/internal/reconciliations/istio" + v1 "k8s.io/api/core/v1" +) + +type ProxyRestartPredicate struct { + istioCR *v1alpha2.Istio + config config +} + +func NewRestartPredicate(istioCR *v1alpha2.Istio) *ProxyRestartPredicate { + return &ProxyRestartPredicate{istioCR: istioCR, config: config{proxyMetadata: v1alpha2.ProxyMetaDataCompatibility}} +} + +type config struct { + proxyMetadata map[string]string +} + +func (c config) hasProxyMetadata() bool { + return len(c.proxyMetadata) > 0 +} + +func (p ProxyRestartPredicate) NewProxyRestartEvaluator(_ context.Context) (filter.ProxyRestartEvaluator, error) { + lastAppliedConfig, err := istio.GetLastAppliedConfiguration(p.istioCR) + if err != nil { + return nil, err + } + + return ProxiesRestartEvaluator{ + oldCompatibilityMode: lastAppliedConfig.IstioSpec.CompatibilityMode, + newCompatibilityMode: p.istioCR.Spec.CompatibilityMode, + config: p.config, + }, nil +} + +type ProxiesRestartEvaluator struct { + oldCompatibilityMode bool + newCompatibilityMode bool + config config +} + +func (p ProxiesRestartEvaluator) RequiresProxyRestart(_ v1.Pod) bool { + + if p.config.hasProxyMetadata() && p.oldCompatibilityMode != p.newCompatibilityMode { + return true + } + + return false +} diff --git a/internal/compatibility/proxy_restart_test.go b/internal/compatibility/proxy_restart_test.go new file mode 100644 index 000000000..c710f5b3a --- /dev/null +++ b/internal/compatibility/proxy_restart_test.go @@ -0,0 +1,134 @@ +package compatibility + +import ( + "context" + "github.com/kyma-project/istio/operator/pkg/labels" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + operatorv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("Proxy Restarter", func() { + Context("RequiresProxyRestart", func() { + It("Should evaluate to true when proxy metadata values exist and new and old compatibility mode is different", func() { + evaluator := ProxiesRestartEvaluator{ + oldCompatibilityMode: true, + newCompatibilityMode: false, + config: config{ + proxyMetadata: map[string]string{"key": "value"}, + }, + } + + Expect(evaluator.RequiresProxyRestart(v1.Pod{})).To(BeTrue()) + }) + + It("Should evaluate to false when proxy metadata values exist and new and old compatibility mode is equal", func() { + evaluator := ProxiesRestartEvaluator{ + oldCompatibilityMode: true, + newCompatibilityMode: true, + config: config{ + proxyMetadata: map[string]string{"key": "value"}, + }, + } + + Expect(evaluator.RequiresProxyRestart(v1.Pod{})).To(BeFalse()) + }) + + It("Should evaluate to false when no proxy metadata values exist and new and old compatibility mode is different", func() { + evaluator := ProxiesRestartEvaluator{ + oldCompatibilityMode: true, + newCompatibilityMode: false, + } + + Expect(evaluator.RequiresProxyRestart(v1.Pod{})).To(BeFalse()) + }) + + It("Should evaluate to false when no proxy metadata values exist and new and old compatibility mode is equal", func() { + evaluator := ProxiesRestartEvaluator{ + oldCompatibilityMode: true, + newCompatibilityMode: true, + } + + Expect(evaluator.RequiresProxyRestart(v1.Pod{})).To(BeFalse()) + + }) + }) + + Context("NewProxyRestartEvaluator", func() { + + It("Should return an error if getLastAppliedConfiguration fails", func() { + predicate := NewRestartPredicate(&operatorv1alpha2.Istio{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + labels.LastAppliedConfiguration: `{"compatibilityMode":abc}`, + }, + }, + }) + _, err := predicate.NewProxyRestartEvaluator(context.Background()) + + Expect(err).To(HaveOccurred()) + }) + + It("Should return false for old compatibility mode if lastAppliedConfiguration is empty", func() { + predicate := NewRestartPredicate(&operatorv1alpha2.Istio{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{}, + }, + }) + evaluator, err := predicate.NewProxyRestartEvaluator(context.Background()) + + Expect(err).NotTo(HaveOccurred()) + Expect(evaluator).NotTo(BeNil()) + Expect(evaluator.(ProxiesRestartEvaluator).oldCompatibilityMode).To(BeFalse()) + }) + + It("Should return value for old compatibility mode from lastAppliedConfiguration", func() { + predicate := NewRestartPredicate(&operatorv1alpha2.Istio{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + labels.LastAppliedConfiguration: `{"compatibilityMode":true}`, + }, + }, + }) + + evaluator, err := predicate.NewProxyRestartEvaluator(context.Background()) + + Expect(err).NotTo(HaveOccurred()) + Expect(evaluator).NotTo(BeNil()) + Expect(evaluator.(ProxiesRestartEvaluator).oldCompatibilityMode).To(BeTrue()) + }) + + It("Should return value for new compatibility mode from istio CR", func() { + predicate := NewRestartPredicate(&operatorv1alpha2.Istio{ + Spec: operatorv1alpha2.IstioSpec{ + CompatibilityMode: true, + }, + }) + + evaluator, err := predicate.NewProxyRestartEvaluator(context.Background()) + + Expect(err).NotTo(HaveOccurred()) + Expect(evaluator).NotTo(BeNil()) + Expect(evaluator.(ProxiesRestartEvaluator).newCompatibilityMode).To(BeTrue()) + }) + }) + + Context("config", func() { + It("Should return true if proxy metadata values exist", func() { + config := config{ + proxyMetadata: map[string]string{"key": "value"}, + } + + Expect(config.hasProxyMetadata()).To(BeTrue()) + }) + + It("Should return false if proxy metadata values do not exist", func() { + config := config{} + + Expect(config.hasProxyMetadata()).To(BeFalse()) + }) + }) +}) diff --git a/internal/compatibility/suite_test.go b/internal/compatibility/suite_test.go new file mode 100644 index 000000000..2a7cf85bf --- /dev/null +++ b/internal/compatibility/suite_test.go @@ -0,0 +1,19 @@ +package compatibility_test + +import ( + "github.com/kyma-project/istio/operator/internal/tests" + . "github.com/onsi/ginkgo/v2" + "github.com/onsi/ginkgo/v2/types" + . "github.com/onsi/gomega" + "testing" +) + +func TestRestarter(t *testing.T) { + RegisterFailHandler(Fail) + + RunSpecs(t, "Compatibility Mode Suite") +} + +var _ = ReportAfterSuite("custom reporter", func(report types.Report) { + tests.GenerateGinkgoJunitReport("compatibility-mode", report) +}) diff --git a/internal/istiooperator/istio-operator-light.yaml b/internal/istiooperator/istio-operator-light.yaml index b173e0ffe..009ff952b 100644 --- a/internal/istiooperator/istio-operator-light.yaml +++ b/internal/istiooperator/istio-operator-light.yaml @@ -7,7 +7,7 @@ metadata: kyma-project.io/module: istio spec: hub: europe-docker.pkg.dev/kyma-project/prod/external/istio - tag: "1.21.3-distroless" + tag: "1.22.1-distroless" components: base: enabled: true @@ -253,7 +253,6 @@ spec: enabled: false network: "" omitSidecarInjectorConfigMap: false - oneNamespace: false operatorManageWebhooks: false pilotCertProvider: istiod priorityClassName: istio-kyma-priority diff --git a/internal/istiooperator/istio-operator.yaml b/internal/istiooperator/istio-operator.yaml index 07163f288..8f097299a 100644 --- a/internal/istiooperator/istio-operator.yaml +++ b/internal/istiooperator/istio-operator.yaml @@ -7,7 +7,7 @@ metadata: kyma-project.io/module: istio spec: hub: europe-docker.pkg.dev/kyma-project/prod/external/istio - tag: "1.21.3-distroless" + tag: "1.22.1-distroless" components: base: enabled: true @@ -260,7 +260,6 @@ spec: enabled: false network: "" omitSidecarInjectorConfigMap: false - oneNamespace: false operatorManageWebhooks: false pilotCertProvider: istiod priorityClassName: istio-kyma-priority diff --git a/internal/reconciliations/istio/client.go b/internal/reconciliations/istio/client.go index 905cf7a8f..27952f778 100644 --- a/internal/reconciliations/istio/client.go +++ b/internal/reconciliations/istio/client.go @@ -5,7 +5,6 @@ import ( "fmt" "os" "os/exec" - "sync" "time" "github.com/pkg/errors" @@ -31,24 +30,28 @@ import ( istiolog "istio.io/istio/pkg/log" ) -type LibraryClient interface { +type libraryClient interface { Install(mergedIstioOperatorPath string) error Uninstall(ctx context.Context) error } type IstioClient struct { - istioLogOptions *istiolog.Options - consoleLogger *clog.ConsoleLogger - printer istio.Printer + consoleLogger *clog.ConsoleLogger + printer istio.Printer +} + +const logScope = "istio-library" + +func CreateIstioLibraryLogger() *clog.ConsoleLogger { + registeredScope := istiolog.RegisterScope(logScope, logScope) + return clog.NewConsoleLogger(os.Stdout, os.Stderr, registeredScope) } func NewIstioClient() *IstioClient { - istioLogOptions := initializeLog() - registeredScope := istiolog.RegisterScope("installation", "installation") - consoleLogger := clog.NewConsoleLogger(os.Stdout, os.Stderr, registeredScope) + consoleLogger := CreateIstioLibraryLogger() printer := istio.NewPrinterForWriter(os.Stdout) - return &IstioClient{istioLogOptions: istioLogOptions, consoleLogger: consoleLogger, printer: printer} + return &IstioClient{consoleLogger: consoleLogger, printer: printer} } func installIstioInExternalProcess(mergedIstioOperatorPath string) error { @@ -88,11 +91,6 @@ func (c *IstioClient) Uninstall(ctx context.Context) error { // We don't use any revision capabilities yet defaultRevision := "" - // Since we copied the internal uninstall function, we also need to make sure that Istio's internal logging is correctly configured - if err := initializeIstioLogSubsystem(c.istioLogOptions); err != nil { - return fmt.Errorf("could not configure logs: %s", err) - } - rc, err := kube.DefaultRestConfig("", "", func(config *rest.Config) { config.QPS = 50 config.Burst = 100 @@ -160,30 +158,17 @@ func (c *IstioClient) Uninstall(ctx context.Context) error { return nil } -func initializeLog() *istiolog.Options { - logoptions := istiolog.DefaultOptions() - logoptions.SetOutputLevel("validation", istiolog.ErrorLevel) - logoptions.SetOutputLevel("processing", istiolog.ErrorLevel) - logoptions.SetOutputLevel("analysis", istiolog.WarnLevel) - logoptions.SetOutputLevel("installation", istiolog.WarnLevel) - logoptions.SetOutputLevel("translator", istiolog.WarnLevel) - logoptions.SetOutputLevel("adsc", istiolog.WarnLevel) - logoptions.SetOutputLevel("default", istiolog.WarnLevel) - logoptions.SetOutputLevel("klog", istiolog.WarnLevel) - logoptions.SetOutputLevel("kube", istiolog.ErrorLevel) - - return logoptions -} - -var istioLogMutex = sync.Mutex{} - -func initializeIstioLogSubsystem(opt *istiolog.Options) error { - istioLogMutex.Lock() - defer istioLogMutex.Unlock() - op := []string{"stderr"} - opt2 := *opt - opt2.OutputPaths = op - opt2.ErrorOutputPaths = op - - return istiolog.Configure(&opt2) +func ConfigureIstioLogScopes() error { + o := istiolog.DefaultOptions() + o.SetDefaultOutputLevel(logScope, istiolog.WarnLevel) + o.SetDefaultOutputLevel("analysis", istiolog.WarnLevel) + o.SetDefaultOutputLevel("translator", istiolog.WarnLevel) + o.SetDefaultOutputLevel("adsc", istiolog.WarnLevel) + o.SetDefaultOutputLevel("klog", istiolog.WarnLevel) + // These scopes are too noisy even at warning level + o.SetDefaultOutputLevel("validation", istiolog.ErrorLevel) + o.SetDefaultOutputLevel("processing", istiolog.ErrorLevel) + o.SetDefaultOutputLevel("kube", istiolog.ErrorLevel) + + return istiolog.Configure(o) } diff --git a/internal/reconciliations/istio/configuration.go b/internal/reconciliations/istio/configuration.go index abb58469c..22ac6d1f8 100644 --- a/internal/reconciliations/istio/configuration.go +++ b/internal/reconciliations/istio/configuration.go @@ -3,25 +3,25 @@ package istio import ( "encoding/json" "fmt" + "github.com/kyma-project/istio/operator/api/v1alpha2" "github.com/kyma-project/istio/operator/pkg/labels" "github.com/coreos/go-semver/semver" - operatorv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" ) -type appliedConfig struct { - operatorv1alpha2.IstioSpec +type AppliedConfig struct { + v1alpha2.IstioSpec IstioTag string } // UpdateLastAppliedConfiguration annotates the passed CR with LastAppliedConfiguration, which holds information about last applied // IstioCR spec and IstioTag (IstioVersion-IstioImageBase) -func UpdateLastAppliedConfiguration(istioCR *operatorv1alpha2.Istio, istioTag string) error { +func UpdateLastAppliedConfiguration(istioCR *v1alpha2.Istio, istioTag string) error { if len(istioCR.Annotations) == 0 { istioCR.Annotations = map[string]string{} } - newAppliedConfig := appliedConfig{ + newAppliedConfig := AppliedConfig{ IstioSpec: istioCR.Spec, IstioTag: istioTag, } @@ -35,8 +35,8 @@ func UpdateLastAppliedConfiguration(istioCR *operatorv1alpha2.Istio, istioTag st return nil } -func getLastAppliedConfiguration(istioCR *operatorv1alpha2.Istio) (appliedConfig, error) { - lastAppliedConfig := appliedConfig{} +func GetLastAppliedConfiguration(istioCR *v1alpha2.Istio) (AppliedConfig, error) { + lastAppliedConfig := AppliedConfig{} if len(istioCR.Annotations) == 0 { return lastAppliedConfig, nil } diff --git a/internal/reconciliations/istio/configuration_test.go b/internal/reconciliations/istio/configuration_test.go index 03b7f4e6f..6b26e3286 100644 --- a/internal/reconciliations/istio/configuration_test.go +++ b/internal/reconciliations/istio/configuration_test.go @@ -1,9 +1,9 @@ -package istio +package istio_test import ( "fmt" - operatorv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" + "github.com/kyma-project/istio/operator/internal/reconciliations/istio" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -22,14 +22,14 @@ var _ = Describe("Istio Configuration", func() { istioCR := operatorv1alpha2.Istio{Spec: operatorv1alpha2.IstioSpec{Config: operatorv1alpha2.Config{NumTrustedProxies: &numTrustedProxies}}} // when - err := UpdateLastAppliedConfiguration(&istioCR, mockIstioTag) + err := istio.UpdateLastAppliedConfiguration(&istioCR, mockIstioTag) // then Expect(err).ShouldNot(HaveOccurred()) Expect(istioCR.Annotations).To(Not(BeEmpty())) Expect(istioCR.Annotations[lastAppliedConfiguration]).To(Equal(fmt.Sprintf(`{"config":{"numTrustedProxies":1},"IstioTag":"%s"}`, mockIstioTag))) - appliedConfig, err := getLastAppliedConfiguration(&istioCR) + appliedConfig, err := istio.GetLastAppliedConfiguration(&istioCR) Expect(err).ShouldNot(HaveOccurred()) Expect(*appliedConfig.Config.NumTrustedProxies).To(Equal(1)) diff --git a/internal/reconciliations/istio/install.go b/internal/reconciliations/istio/install.go index c92081328..f3fbb33a4 100644 --- a/internal/reconciliations/istio/install.go +++ b/internal/reconciliations/istio/install.go @@ -20,7 +20,7 @@ type installArgs struct { statusHandler status.Status istioOperatorMerger istiooperator.Merger istioImageVersion istiooperator.IstioImageVersion - istioClient LibraryClient + istioClient libraryClient } func installIstio(ctx context.Context, args installArgs) (istiooperator.IstioImageVersion, described_errors.DescribedError) { @@ -32,10 +32,10 @@ func installIstio(ctx context.Context, args installArgs) (istiooperator.IstioIma iopMerger := args.istioOperatorMerger istioClient := args.istioClient - ctrl.Log.Info("Starting Istio install", "istio version", istioImageVersion.Version) + ctrl.Log.Info("Starting Istio install", "istio version", istioImageVersion.Version()) if _, ok := istioCR.Annotations[labels.LastAppliedConfiguration]; ok { - lastAppliedConfig, err := getLastAppliedConfiguration(istioCR) + lastAppliedConfig, err := GetLastAppliedConfiguration(istioCR) if err != nil { ctrl.Log.Error(err, "Error evaluating Istio CR changes") return istioImageVersion, described_errors.NewDescribedError(err, "Istio install check failed") diff --git a/internal/reconciliations/istio/reconciliation.go b/internal/reconciliations/istio/reconciliation.go index d9992e802..4783a0cb6 100644 --- a/internal/reconciliations/istio/reconciliation.go +++ b/internal/reconciliations/istio/reconciliation.go @@ -15,7 +15,7 @@ type InstallationReconciliation interface { } type Installation struct { - IstioClient LibraryClient + IstioClient libraryClient Client client.Client Merger istiooperator.Merger } diff --git a/internal/reconciliations/istio/reconciliation_test.go b/internal/reconciliations/istio/reconciliation_test.go index 270615c95..24311157a 100644 --- a/internal/reconciliations/istio/reconciliation_test.go +++ b/internal/reconciliations/istio/reconciliation_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/kyma-project/istio/operator/pkg/labels" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" "time" "github.com/kyma-project/istio/operator/internal/described_errors" @@ -806,7 +807,7 @@ var _ = Describe("Installation reconciliation", func() { } mockClient := mockLibraryClient{} - c := createFakeClient(&istioCR, &networkingv1alpha3.VirtualService{ + c := createFakeClient(&istioCR, &networkingv1.VirtualService{ ObjectMeta: metav1.ObjectMeta{ Name: "mock-vs", Namespace: "mock-ns", @@ -917,6 +918,8 @@ func createFakeClient(objects ...client.Object) client.Client { Expect(err).ShouldNot(HaveOccurred()) err = networkingv1alpha3.AddToScheme(scheme.Scheme) Expect(err).ShouldNot(HaveOccurred()) + err = networkingv1.AddToScheme(scheme.Scheme) + Expect(err).ShouldNot(HaveOccurred()) return fake.NewClientBuilder().WithScheme(scheme.Scheme).WithObjects(objects...).WithStatusSubresource(objects...).Build() } diff --git a/internal/reconciliations/istio/uninstall.go b/internal/reconciliations/istio/uninstall.go index a17ebac36..d63c29176 100644 --- a/internal/reconciliations/istio/uninstall.go +++ b/internal/reconciliations/istio/uninstall.go @@ -21,7 +21,7 @@ type uninstallArgs struct { istioCR *operatorv1alpha2.Istio statusHandler status.Status istioImageVersion istiooperator.IstioImageVersion - istioClient LibraryClient + istioClient libraryClient } func uninstallIstio(ctx context.Context, args uninstallArgs) (istiooperator.IstioImageVersion, described_errors.DescribedError) { diff --git a/internal/reconciliations/istio_resources/peer_authentication_mtls.yaml b/internal/reconciliations/istio_resources/peer_authentication_mtls.yaml index 2ebf6bec6..68d3c9ea6 100644 --- a/internal/reconciliations/istio_resources/peer_authentication_mtls.yaml +++ b/internal/reconciliations/istio_resources/peer_authentication_mtls.yaml @@ -1,4 +1,4 @@ -apiVersion: security.istio.io/v1beta1 +apiVersion: security.istio.io/v1 kind: PeerAuthentication metadata: name: default diff --git a/internal/reconciliations/istio_resources/peer_authentication_mtls_test.go b/internal/reconciliations/istio_resources/peer_authentication_mtls_test.go index 28ca344d1..896e47460 100644 --- a/internal/reconciliations/istio_resources/peer_authentication_mtls_test.go +++ b/internal/reconciliations/istio_resources/peer_authentication_mtls_test.go @@ -7,7 +7,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - securityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1" + securityv1 "istio.io/client-go/pkg/apis/security/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/yaml" @@ -33,7 +33,7 @@ var _ = Describe("Apply", func() { Expect(err).To(Not(HaveOccurred())) Expect(changed).To(Equal(controllerutil.OperationResultCreated)) - var s securityv1beta1.PeerAuthenticationList + var s securityv1.PeerAuthenticationList listErr := client.List(context.TODO(), &s) Expect(listErr).To(Not(HaveOccurred())) Expect(s.Items).To(HaveLen(1)) @@ -53,7 +53,7 @@ var _ = Describe("Apply", func() { It("should return not changed if no change was applied", func() { //given - var p securityv1beta1.PeerAuthentication + var p securityv1.PeerAuthentication err := yaml.Unmarshal(paMtls, &p) Expect(err).To(Not(HaveOccurred())) @@ -68,7 +68,7 @@ var _ = Describe("Apply", func() { Expect(err).To(Not(HaveOccurred())) Expect(changed).To(Equal(controllerutil.OperationResultNone)) - var s securityv1beta1.PeerAuthenticationList + var s securityv1.PeerAuthenticationList listErr := client.List(context.TODO(), &s) Expect(listErr).To(Not(HaveOccurred())) Expect(s.Items).To(HaveLen(1)) @@ -79,7 +79,7 @@ var _ = Describe("Apply", func() { It("should return updated if change was applied", func() { //given - var p securityv1beta1.PeerAuthentication + var p securityv1.PeerAuthentication err := yaml.Unmarshal(paMtls, &p) Expect(err).To(Not(HaveOccurred())) @@ -95,7 +95,7 @@ var _ = Describe("Apply", func() { Expect(err).To(Not(HaveOccurred())) Expect(changed).To(Equal(controllerutil.OperationResultUpdated)) - var s securityv1beta1.PeerAuthenticationList + var s securityv1.PeerAuthenticationList listErr := client.List(context.TODO(), &s) Expect(listErr).To(Not(HaveOccurred())) Expect(s.Items).To(HaveLen(1)) diff --git a/internal/reconciliations/istio_resources/reconciliation_test.go b/internal/reconciliations/istio_resources/reconciliation_test.go index 90645f8c8..be756fdac 100644 --- a/internal/reconciliations/istio_resources/reconciliation_test.go +++ b/internal/reconciliations/istio_resources/reconciliation_test.go @@ -2,14 +2,13 @@ package istio_resources import ( "context" - "strings" operatorv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" - securityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1" + securityv1 "istio.io/client-go/pkg/apis/security/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -45,7 +44,7 @@ var _ = Describe("Reconciliation", func() { //then Expect(err).To(Not(HaveOccurred())) - var s securityv1beta1.PeerAuthenticationList + var s securityv1.PeerAuthenticationList listErr := client.List(context.Background(), &s) Expect(listErr).To(Not(HaveOccurred())) Expect(s.Items).To(HaveLen(1)) @@ -129,7 +128,7 @@ func createFakeClient(objects ...ctrlclient.Object) ctrlclient.Client { Expect(err).ShouldNot(HaveOccurred()) err = networkingv1alpha3.AddToScheme(scheme.Scheme) Expect(err).ShouldNot(HaveOccurred()) - err = securityv1beta1.AddToScheme(scheme.Scheme) + err = securityv1.AddToScheme(scheme.Scheme) Expect(err).ShouldNot(HaveOccurred()) return fake.NewClientBuilder().WithScheme(scheme.Scheme).WithObjects(objects...).Build() diff --git a/internal/resources/controlled_resources_list.yaml b/internal/resources/controlled_resources_list.yaml index ea4fa404a..2a2c2c904 100644 --- a/internal/resources/controlled_resources_list.yaml +++ b/internal/resources/controlled_resources_list.yaml @@ -2,11 +2,11 @@ resources: - GroupVersionKind: group: security.istio.io - version: v1beta1 + version: v1 kind: AuthorizationPolicy - GroupVersionKind: group: networking.istio.io - version: v1alpha3 + version: v1 kind: DestinationRule - GroupVersionKind: group: networking.istio.io @@ -23,11 +23,11 @@ resources: namespace: "istio-system" - GroupVersionKind: group: networking.istio.io - version: v1alpha3 + version: v1 kind: Gateway - GroupVersionKind: group: security.istio.io - version: v1beta1 + version: v1 kind: PeerAuthentication ControlledList: - name: "default" @@ -38,30 +38,23 @@ resources: kind: ProxyConfig - GroupVersionKind: group: security.istio.io - version: v1beta1 + version: v1 kind: RequestAuthentication - GroupVersionKind: group: networking.istio.io - version: v1alpha3 + version: v1 kind: ServiceEntry - GroupVersionKind: group: networking.istio.io - version: v1alpha3 + version: v1 kind: Sidecar - GroupVersionKind: group: telemetry.istio.io - version: v1alpha1 + version: v1 kind: Telemetry - GroupVersionKind: group: networking.istio.io - version: v1alpha3 - kind: VirtualService - ControlledList: - - name: "istio-healthz" - namespace: "istio-system" - - GroupVersionKind: - group: networking.istio.io - version: v1beta1 + version: v1 kind: VirtualService ControlledList: - name: "istio-healthz" @@ -72,9 +65,9 @@ resources: kind: WasmPlugin - GroupVersionKind: group: networking.istio.io - version: v1alpha3 + version: v1 kind: WorkloadEntry - GroupVersionKind: group: networking.istio.io - version: v1alpha3 + version: v1 kind: WorkloadGroup diff --git a/internal/resources/disclaimer_annotation_test.go b/internal/resources/disclaimer_annotation_test.go index 02efe7ff4..d9dee00bb 100644 --- a/internal/resources/disclaimer_annotation_test.go +++ b/internal/resources/disclaimer_annotation_test.go @@ -9,8 +9,8 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" - securityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1" + networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1" + securityv1 "istio.io/client-go/pkg/apis/security/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" ctrlClient "sigs.k8s.io/controller-runtime/pkg/client" @@ -68,7 +68,7 @@ func createFakeClient(objects ...ctrlClient.Object) ctrlClient.Client { Expect(err).ShouldNot(HaveOccurred()) err = networkingv1alpha3.AddToScheme(scheme.Scheme) Expect(err).ShouldNot(HaveOccurred()) - err = securityv1beta1.AddToScheme(scheme.Scheme) + err = securityv1.AddToScheme(scheme.Scheme) Expect(err).ShouldNot(HaveOccurred()) err = networkingv1alpha3.AddToScheme(scheme.Scheme) Expect(err).ShouldNot(HaveOccurred()) diff --git a/internal/resources/resources_test.go b/internal/resources/resources_test.go index 38de25df7..03f020f7f 100644 --- a/internal/resources/resources_test.go +++ b/internal/resources/resources_test.go @@ -7,8 +7,8 @@ import ( "github.com/kyma-project/istio/operator/internal/resources" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - v1beta12 "istio.io/api/security/v1beta1" - "istio.io/client-go/pkg/apis/security/v1beta1" + apisecurityv1 "istio.io/api/security/v1" + securityclientv1 "istio.io/client-go/pkg/apis/security/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -36,7 +36,7 @@ var _ = Describe("Apply", func() { Expect(err).ToNot(HaveOccurred()) Expect(res).To(Equal(controllerutil.OperationResultCreated)) - var pa v1beta1.PeerAuthentication + var pa securityclientv1.PeerAuthentication Expect(yaml.Unmarshal(resourceWithSpec, &pa)).Should(Succeed()) Expect(k8sClient.Get(context.Background(), ctrlClient.ObjectKeyFromObject(&pa), &pa)).Should(Succeed()) um, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&pa) @@ -57,7 +57,7 @@ var _ = Describe("Apply", func() { Expect(err).ToNot(HaveOccurred()) Expect(res).To(Equal(controllerutil.OperationResultCreated)) - var pa v1beta1.PeerAuthentication + var pa securityclientv1.PeerAuthentication Expect(yaml.Unmarshal(resourceWithSpec, &pa)).Should(Succeed()) Expect(k8sClient.Get(context.Background(), ctrlClient.ObjectKeyFromObject(&pa), &pa)).Should(Succeed()) um, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&pa) @@ -71,11 +71,11 @@ var _ = Describe("Apply", func() { It("should update resource with spec and add disclaimer", func() { // given - var pa v1beta1.PeerAuthentication + var pa securityclientv1.PeerAuthentication Expect(yaml.Unmarshal(resourceWithSpec, &pa)).Should(Succeed()) k8sClient := createFakeClient(&pa) - pa.Spec.Mtls.Mode = v1beta12.PeerAuthentication_MutualTLS_PERMISSIVE + pa.Spec.Mtls.Mode = apisecurityv1.PeerAuthentication_MutualTLS_PERMISSIVE var resourceWithUpdatedSpec []byte resourceWithUpdatedSpec, err := yaml.Marshal(&pa) Expect(err).ShouldNot(HaveOccurred()) @@ -88,7 +88,7 @@ var _ = Describe("Apply", func() { Expect(res).To(Equal(controllerutil.OperationResultUpdated)) Expect(k8sClient.Get(context.Background(), ctrlClient.ObjectKeyFromObject(&pa), &pa)).Should(Succeed()) - Expect(pa.Spec.Mtls.Mode).To(Equal(v1beta12.PeerAuthentication_MutualTLS_PERMISSIVE)) + Expect(pa.Spec.Mtls.Mode).To(Equal(apisecurityv1.PeerAuthentication_MutualTLS_PERMISSIVE)) um, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&pa) unstr := unstructured.Unstructured{Object: um} Expect(err).ToNot(HaveOccurred()) @@ -129,7 +129,7 @@ var _ = Describe("Apply", func() { // given k8sClient := createFakeClient() ownerReference := metav1.OwnerReference{ - APIVersion: "security.istio.io/v1beta1", + APIVersion: "security.istio.io/v1", Kind: "PeerAuthentication", Name: "owner-name", UID: "owner-uid", @@ -141,7 +141,7 @@ var _ = Describe("Apply", func() { Expect(err).ToNot(HaveOccurred()) Expect(res).To(Equal(controllerutil.OperationResultCreated)) - var pa v1beta1.PeerAuthentication + var pa securityclientv1.PeerAuthentication Expect(yaml.Unmarshal(resourceWithSpec, &pa)).Should(Succeed()) Expect(k8sClient.Get(context.Background(), ctrlClient.ObjectKeyFromObject(&pa), &pa)).Should(Succeed()) Expect(pa.OwnerReferences).To(ContainElement(ownerReference)) diff --git a/internal/resources/test_files/resource_with_spec.yaml b/internal/resources/test_files/resource_with_spec.yaml index 530346318..4d90f8b40 100644 --- a/internal/resources/test_files/resource_with_spec.yaml +++ b/internal/resources/test_files/resource_with_spec.yaml @@ -1,4 +1,4 @@ -apiVersion: security.istio.io/v1beta1 +apiVersion: security.istio.io/v1 kind: PeerAuthentication metadata: name: default diff --git a/internal/restarter/sidecars.go b/internal/restarter/sidecars.go index b11d340ef..d98070ef9 100644 --- a/internal/restarter/sidecars.go +++ b/internal/restarter/sidecars.go @@ -3,6 +3,7 @@ package restarter import ( "context" "fmt" + "github.com/kyma-project/istio/operator/internal/compatibility" "strings" "github.com/kyma-project/istio/operator/api/v1alpha2" @@ -28,17 +29,15 @@ type SidecarsRestarter struct { Client client.Client Merger istiooperator.Merger ProxyResetter sidecars.ProxyResetter - Predicates []filter.SidecarProxyPredicate StatusHandler status.Status } -func NewSidecarsRestarter(logger logr.Logger, client client.Client, merger istiooperator.Merger, resetter sidecars.ProxyResetter, predicates []filter.SidecarProxyPredicate, statusHandler status.Status) *SidecarsRestarter { +func NewSidecarsRestarter(logger logr.Logger, client client.Client, merger istiooperator.Merger, resetter sidecars.ProxyResetter, statusHandler status.Status) *SidecarsRestarter { return &SidecarsRestarter{ Log: logger, Client: client, Merger: merger, ProxyResetter: resetter, - Predicates: predicates, StatusHandler: statusHandler, } } @@ -83,7 +82,9 @@ func (s *SidecarsRestarter) Restart(ctx context.Context, istioCR *v1alpha2.Istio return described_errors.NewDescribedError(err, errorDescription) } - warnings, err := s.ProxyResetter.ProxyReset(ctx, s.Client, expectedImage, expectedResources, s.Predicates, &s.Log) + predicates := []filter.SidecarProxyPredicate{compatibility.NewRestartPredicate(istioCR)} + + warnings, err := s.ProxyResetter.ProxyReset(ctx, s.Client, expectedImage, expectedResources, predicates, &s.Log) if err != nil { s.Log.Error(err, "Failed to reset proxy") s.StatusHandler.SetCondition(istioCR, v1alpha2.NewReasonWithMessage(v1alpha2.ConditionReasonProxySidecarRestartFailed)) diff --git a/internal/restarter/sidecars_test.go b/internal/restarter/sidecars_test.go index 8f09f6b24..466119696 100644 --- a/internal/restarter/sidecars_test.go +++ b/internal/restarter/sidecars_test.go @@ -19,7 +19,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "google.golang.org/protobuf/types/known/structpb" - "istio.io/client-go/pkg/apis/networking/v1alpha3" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" iopv1alpha1 "istio.io/istio/operator/pkg/apis/istio/v1alpha1" corev1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" @@ -49,7 +49,7 @@ var _ = Describe("SidecarsRestarter reconciliation", func() { fakeClient := createFakeClient(&istioCr, istiod) statusHandler := status.NewStatusHandler(fakeClient) sidecarsRestarter := restarter.NewSidecarsRestarter(logr.Discard(), createFakeClient(&istioCr, istiod), - &MergerMock{"1.16.1-distroless"}, sidecars.NewProxyResetter(), []filter.SidecarProxyPredicate{}, statusHandler) + &MergerMock{"1.16.1-distroless"}, sidecars.NewProxyResetter(), statusHandler) // when err := sidecarsRestarter.Restart(context.Background(), &istioCr) @@ -106,7 +106,7 @@ var _ = Describe("SidecarsRestarter reconciliation", func() { fakeClient := createFakeClient(&istioCr, istiod) statusHandler := status.NewStatusHandler(fakeClient) sidecarsRestarter := restarter.NewSidecarsRestarter(logr.Discard(), createFakeClient(&istioCr, istiod), - &MergerMock{"1.16.1-distroless"}, proxyResetter, []filter.SidecarProxyPredicate{}, statusHandler) + &MergerMock{"1.16.1-distroless"}, proxyResetter, statusHandler) // when err := sidecarsRestarter.Restart(context.Background(), &istioCr) @@ -147,7 +147,7 @@ var _ = Describe("SidecarsRestarter reconciliation", func() { fakeClient := createFakeClient(&istioCr, istiod) statusHandler := status.NewStatusHandler(fakeClient) sidecarsRestarter := restarter.NewSidecarsRestarter(logr.Discard(), createFakeClient(&istioCr, istiod), - &MergerMock{"1.16.1-distroless"}, proxyResetter, []filter.SidecarProxyPredicate{}, statusHandler) + &MergerMock{"1.16.1-distroless"}, proxyResetter, statusHandler) // when err := sidecarsRestarter.Restart(context.Background(), &istioCr) @@ -177,7 +177,7 @@ var _ = Describe("SidecarsRestarter reconciliation", func() { fakeClient := createFakeClient(&istioCr, istiod) statusHandler := status.NewStatusHandler(fakeClient) sidecarsRestarter := restarter.NewSidecarsRestarter(logr.Discard(), createFakeClient(&istioCr, istiod), - &MergerMock{"1.16.1-distroless"}, proxyResetter, []filter.SidecarProxyPredicate{}, statusHandler) + &MergerMock{"1.16.1-distroless"}, proxyResetter, statusHandler) // when err := sidecarsRestarter.Restart(context.Background(), &istioCr) @@ -194,7 +194,7 @@ func createFakeClient(objects ...client.Object) client.Client { Expect(err).ShouldNot(HaveOccurred()) err = corev1.AddToScheme(scheme.Scheme) Expect(err).ShouldNot(HaveOccurred()) - err = v1alpha3.AddToScheme(scheme.Scheme) + err = networkingv1.AddToScheme(scheme.Scheme) Expect(err).ShouldNot(HaveOccurred()) return fake.NewClientBuilder().WithScheme(scheme.Scheme).WithObjects(objects...).Build() diff --git a/internal/status/status_test.go b/internal/status/status_test.go index 99e98803a..15c60050b 100644 --- a/internal/status/status_test.go +++ b/internal/status/status_test.go @@ -11,8 +11,8 @@ import ( "github.com/onsi/ginkgo/v2/types" . "github.com/onsi/gomega" "github.com/pkg/errors" - "istio.io/client-go/pkg/apis/networking/v1alpha3" - securityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" + securityv1 "istio.io/client-go/pkg/apis/security/v1" "k8s.io/api/apps/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -290,9 +290,9 @@ func createFakeClient(objects ...client.Object) client.Client { func getTestScheme() *runtime.Scheme { scheme := runtime.NewScheme() Expect(operatorv1alpha2.AddToScheme(scheme)).Should(Succeed()) - Expect(v1alpha3.AddToScheme(scheme)).Should(Succeed()) + Expect(networkingv1.AddToScheme(scheme)).Should(Succeed()) Expect(v1beta1.AddToScheme(scheme)).Should(Succeed()) - Expect(securityv1beta1.AddToScheme(scheme)).Should(Succeed()) + Expect(securityv1.AddToScheme(scheme)).Should(Succeed()) return scheme } diff --git a/internal/webhooks/webhooks_test.go b/internal/webhooks/webhooks_test.go index 44a533751..34c9a09af 100644 --- a/internal/webhooks/webhooks_test.go +++ b/internal/webhooks/webhooks_test.go @@ -7,7 +7,7 @@ import ( . "github.com/onsi/ginkgo/v2" gingkoTypes "github.com/onsi/ginkgo/v2/types" . "github.com/onsi/gomega" - networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" "istio.io/istio/istioctl/pkg/tag" v1 "k8s.io/api/admissionregistration/v1" appsv1 "k8s.io/api/apps/v1" @@ -54,7 +54,7 @@ func createFakeClient(objects ...client.Object) client.Client { Expect(err).NotTo(HaveOccurred()) err = appsv1.AddToScheme(scheme.Scheme) Expect(err).NotTo(HaveOccurred()) - err = networkingv1alpha3.AddToScheme(scheme.Scheme) + err = networkingv1.AddToScheme(scheme.Scheme) Expect(err).NotTo(HaveOccurred()) return fake.NewClientBuilder().WithScheme(scheme.Scheme).WithObjects(objects...).Build() diff --git a/main.go b/main.go index d2009b104..e23d04cfb 100644 --- a/main.go +++ b/main.go @@ -18,12 +18,15 @@ package main import ( "flag" + "github.com/kyma-project/istio/operator/internal/reconciliations/istio" + networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" v1 "k8s.io/api/apps/v1" "os" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/manager" "time" - networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" "sigs.k8s.io/controller-runtime/pkg/webhook" // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) @@ -73,6 +76,7 @@ func init() { //nolint:gochecknoinits utilruntime.Must(clientgoscheme.AddToScheme(scheme)) utilruntime.Must(networkingv1alpha3.AddToScheme(scheme)) + utilruntime.Must(networkingv1.AddToScheme(scheme)) utilruntime.Must(componentv1alpha1.AddToScheme(scheme)) utilruntime.Must(operatorv1alpha2.AddToScheme(scheme)) //+kubebuilder:scaffold:scheme @@ -94,13 +98,49 @@ func main() { FailureMaxDelay: flagVar.failureMaxDelay, } + ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) + + // We configure the Istio logging here to make it visible that global log config is updated instead of hiding it in the scope of istio package. + err := istio.ConfigureIstioLogScopes() + if err != nil { + setupLog.Error(err, "Unable to configure Istio log scopes") + os.Exit(1) + } + + mgr, err := createManager(flagVar) + if err != nil { + setupLog.Error(err, "Unable to create manager") + os.Exit(1) + } + + if err = controllers.NewController(mgr, flagVar.reconciliationInterval).SetupWithManager(mgr, rateLimiter); err != nil { + setupLog.Error(err, "Unable to create controller", "controller", "Istio") + os.Exit(1) + } + //+kubebuilder:scaffold:builder + + if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { + setupLog.Error(err, "Unable to set up health check") + os.Exit(1) + } + if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil { + setupLog.Error(err, "Unable to set up ready check") + os.Exit(1) + } + + setupLog.Info("starting manager") + if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { + setupLog.Error(err, "Problem running manager") + os.Exit(1) + } +} + +func createManager(flagVar *FlagVar) (manager.Manager, error) { webhookServer := webhook.NewServer(webhook.Options{ Port: 9443, }) - ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) - - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ + return ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, Metrics: metricsserver.Options{ BindAddress: flagVar.metricsAddr, @@ -123,31 +163,6 @@ func main() { }, }, }) - if err != nil { - setupLog.Error(err, "unable to start manager") - os.Exit(1) - } - - if err = controllers.NewReconciler(mgr, flagVar.reconciliationInterval).SetupWithManager(mgr, rateLimiter); err != nil { - setupLog.Error(err, "unable to create controller", "controller", "Istio") - os.Exit(1) - } - //+kubebuilder:scaffold:builder - - if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { - setupLog.Error(err, "unable to set up health check") - os.Exit(1) - } - if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil { - setupLog.Error(err, "unable to set up ready check") - os.Exit(1) - } - - setupLog.Info("starting manager") - if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { - setupLog.Error(err, "problem running manager") - os.Exit(1) - } } func defineFlagVar() *FlagVar { diff --git a/pkg/lib/ingressgateway/ingressgateway.go b/pkg/lib/ingressgateway/ingressgateway.go index 98a3c09e7..4f28cfec9 100644 --- a/pkg/lib/ingressgateway/ingressgateway.go +++ b/pkg/lib/ingressgateway/ingressgateway.go @@ -2,10 +2,9 @@ package ingressgateway import ( "context" - "encoding/json" operatorv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" "github.com/kyma-project/istio/operator/internal/filter" - "github.com/kyma-project/istio/operator/pkg/labels" + "github.com/kyma-project/istio/operator/internal/reconciliations/istio" ) type RestartPredicate struct { @@ -16,36 +15,15 @@ func NewRestartPredicate(istioCR *operatorv1alpha2.Istio) *RestartPredicate { return &RestartPredicate{istioCR: istioCR} } -type appliedConfig struct { - operatorv1alpha2.IstioSpec - IstioTag string -} - -func getLastAppliedConfiguration(istioCR *operatorv1alpha2.Istio) (appliedConfig, error) { - lastAppliedConfig := appliedConfig{} - if len(istioCR.Annotations) == 0 { - return lastAppliedConfig, nil - } - - if lastAppliedAnnotation, found := istioCR.Annotations[labels.LastAppliedConfiguration]; found { - err := json.Unmarshal([]byte(lastAppliedAnnotation), &lastAppliedConfig) - if err != nil { - return lastAppliedConfig, err - } - } - - return lastAppliedConfig, nil -} - func (i RestartPredicate) NewIngressGatewayEvaluator(_ context.Context) (filter.IngressGatewayRestartEvaluator, error) { - lastAppliedConfig, err := getLastAppliedConfiguration(i.istioCR) + lastAppliedConfig, err := istio.GetLastAppliedConfiguration(i.istioCR) if err != nil { return nil, err } return NumTrustedProxiesRestartEvaluator{ NewNumTrustedProxies: i.istioCR.Spec.Config.NumTrustedProxies, - OldNumTrustedProxies: lastAppliedConfig.IstioSpec.Config.NumTrustedProxies, + OldNumTrustedProxies: lastAppliedConfig.Config.NumTrustedProxies, }, nil } diff --git a/pkg/lib/sidecars/pods/filter.go b/pkg/lib/sidecars/pods/filter.go index 80674aaf5..141542e84 100644 --- a/pkg/lib/sidecars/pods/filter.go +++ b/pkg/lib/sidecars/pods/filter.go @@ -16,6 +16,7 @@ type RestartProxyPredicate struct { expectedResources v1.ResourceRequirements } +// NewRestartProxyPredicate creates a new RestartProxyPredicate that checks if a pod needs a restart based on the expected image and resources. func NewRestartProxyPredicate(expectedImage SidecarImage, expectedResources v1.ResourceRequirements) *RestartProxyPredicate { return &RestartProxyPredicate{expectedImage: expectedImage, expectedResources: expectedResources} } @@ -37,12 +38,14 @@ func (r RestartProxyPredicate) NewProxyRestartEvaluator(_ context.Context) (filt } func needsRestart(pod v1.Pod, expectedImage SidecarImage, expectedResources v1.ResourceRequirements) bool { - return HasIstioSidecarStatusAnnotation(pod) && - IsPodReady(pod) && - !hasCustomImageAnnotation(pod) && + return !hasCustomImageAnnotation(pod) && (hasSidecarContainerWithWithDifferentImage(pod, expectedImage) || hasDifferentSidecarResources(pod, expectedResources)) } +func isReadyWithIstioAnnotation(pod v1.Pod) bool { + return IsPodReady(pod) && HasIstioSidecarStatusAnnotation(pod) +} + func HasIstioSidecarStatusAnnotation(pod v1.Pod) bool { _, exists := pod.Annotations["sidecar.istio.io/status"] return exists diff --git a/pkg/lib/sidecars/pods/get.go b/pkg/lib/sidecars/pods/get.go index 61257da21..4fc701623 100644 --- a/pkg/lib/sidecars/pods/get.go +++ b/pkg/lib/sidecars/pods/get.go @@ -51,35 +51,68 @@ func getAllRunningPods(ctx context.Context, c client.Client) (*v1.PodList, error return podList, nil } -func GetPodsToRestart(ctx context.Context, c client.Client, expectedImage SidecarImage, expectedResources v1.ResourceRequirements, predicates []filter.SidecarProxyPredicate, logger *logr.Logger) (outputPodsList *v1.PodList, err error) { +func getSidecarPods(ctx context.Context, c client.Client, logger *logr.Logger) (*[]v1.Pod, error) { podList, err := getAllRunningPods(ctx, c) if err != nil { return nil, err } + logger.Info("Read all running pods for proxy restart", "number of pods", len(podList.Items)) + + podsWithSidecar := make([]v1.Pod, 0, len(podList.Items)) + for _, pod := range podList.Items { + if isReadyWithIstioAnnotation(pod) { + podsWithSidecar = append(podsWithSidecar, pod) + } + } + logger.Info("Filtered pods with Istio sidecar", "number of pods", len(podsWithSidecar)) + + return &podsWithSidecar, nil +} +func GetPodsToRestart(ctx context.Context, c client.Client, expectedImage SidecarImage, expectedResources v1.ResourceRequirements, predicates []filter.SidecarProxyPredicate, logger *logr.Logger) (outputPodsList *v1.PodList, err error) { //Add predicate for image version and resources configuration predicates = append(predicates, NewRestartProxyPredicate(expectedImage, expectedResources)) + evaluators, err := initRestartEvaluators(ctx, predicates) + if err != nil { + return &v1.PodList{}, err + } - for _, predicate := range predicates { - evaluator, err := predicate.NewProxyRestartEvaluator(ctx) - if err != nil { - return &v1.PodList{}, err - } + pods, err := getSidecarPods(ctx, c, logger) + if err != nil { + return &v1.PodList{}, err + } + + outputPodsList = &v1.PodList{} + outputPodsList.Items = make([]v1.Pod, 0, len(*pods)) - outputPodsList = &v1.PodList{} - for _, pod := range podList.Items { + for _, pod := range *pods { + for _, evaluator := range evaluators { if evaluator.RequiresProxyRestart(pod) { outputPodsList.Items = append(outputPodsList.Items, pod) + // To avoid adding the same pod multiple times, we need to skip the remaining evaluators + break } } } - if outputPodsList != nil { - logger.Info("Pods to restart", "number of pods", len(outputPodsList.Items)) - } + logger.Info("Pods to restart", "number of pods", len(outputPodsList.Items)) return outputPodsList, nil } +func initRestartEvaluators(ctx context.Context, predicates []filter.SidecarProxyPredicate) ([]filter.ProxyRestartEvaluator, error) { + var evaluators []filter.ProxyRestartEvaluator + + for _, predicate := range predicates { + e, err := predicate.NewProxyRestartEvaluator(ctx) + if err != nil { + return nil, err + } + + evaluators = append(evaluators, e) + } + return evaluators, nil +} + func containsSidecar(pod v1.Pod) bool { // If the pod has one container it is not injected // This skips IngressGateway pods, as those only have istio-proxy diff --git a/pkg/lib/sidecars/pods/get_test.go b/pkg/lib/sidecars/pods/get_test.go index 681674407..388508868 100644 --- a/pkg/lib/sidecars/pods/get_test.go +++ b/pkg/lib/sidecars/pods/get_test.go @@ -58,6 +58,7 @@ var _ = Describe("Get Pods", func() { tests := []struct { name string c client.Client + predicates []filter.SidecarProxyPredicate assertFunc func(val interface{}) }{ { @@ -143,11 +144,26 @@ var _ = Describe("Get Pods", func() { ), assertFunc: func(val interface{}) { Expect(val).To(BeEmpty()) }, }, + { + name: "should contain only one pod when there are multiple predicates that would restart the pod", + c: createClientSet( + helpers.NewSidecarPodBuilder(). + SetName("changedSidecarPod"). + SetSidecarImageRepository("istio/different-proxy"). + Build(), + ), + predicates: []filter.SidecarProxyPredicate{pods.NewRestartProxyPredicate(expectedImage, helpers.DefaultSidecarResources)}, + assertFunc: func(val interface{}) { + Expect(val).NotTo(BeEmpty()) + resultPods := val.([]v1.Pod) + Expect(len(resultPods)).To(Equal(1)) + }, + }, } for _, tt := range tests { It(tt.name, func() { - podList, err := pods.GetPodsToRestart(ctx, tt.c, expectedImage, helpers.DefaultSidecarResources, []filter.SidecarProxyPredicate{}, &logger) + podList, err := pods.GetPodsToRestart(ctx, tt.c, expectedImage, helpers.DefaultSidecarResources, tt.predicates, &logger) Expect(err).NotTo(HaveOccurred()) tt.assertFunc(podList.Items) diff --git a/pkg/lib/sidecars/test/pod_states.go b/pkg/lib/sidecars/test/pod_states.go index 8c769f176..6f9745008 100644 --- a/pkg/lib/sidecars/test/pod_states.go +++ b/pkg/lib/sidecars/test/pod_states.go @@ -81,6 +81,12 @@ func (s *scenario) WithSidecarInVersionXPods(sidecarTag string) error { } deployment := appsv1.Deployment{ + // The TypeMeta needs to be set due to some recent changes in the fake client as it populates the TypeMeta only for + // unstructured since version 0.17.0. See: https://github.com/kubernetes-sigs/controller-runtime/pull/2633 + TypeMeta: metav1.TypeMeta{ + Kind: "Deployment", + APIVersion: appsv1.SchemeGroupVersion.String(), + }, ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("owner-injected-%s", sidecarTag), }, diff --git a/sec-scanners-config.yaml b/sec-scanners-config.yaml index c605243fe..82dd88a6d 100644 --- a/sec-scanners-config.yaml +++ b/sec-scanners-config.yaml @@ -1,9 +1,9 @@ module-name: istio protecode: - europe-docker.pkg.dev/kyma-project/prod/istio-manager:v20240614-ae9b3746 - - europe-docker.pkg.dev/kyma-project/prod/external/istio/install-cni:1.21.3-distroless - - europe-docker.pkg.dev/kyma-project/prod/external/istio/proxyv2:1.21.3-distroless - - europe-docker.pkg.dev/kyma-project/prod/external/istio/pilot:1.21.3-distroless + - europe-docker.pkg.dev/kyma-project/prod/external/istio/install-cni:1.22.1-distroless + - europe-docker.pkg.dev/kyma-project/prod/external/istio/proxyv2:1.22.1-distroless + - europe-docker.pkg.dev/kyma-project/prod/external/istio/pilot:1.22.1-distroless whitesource: language: golang-mod subprojects: false diff --git a/tests/integration/main_test.go b/tests/integration/main_test.go index b343415af..4f0267d4e 100644 --- a/tests/integration/main_test.go +++ b/tests/integration/main_test.go @@ -10,9 +10,9 @@ import ( "github.com/cucumber/godog/colors" iopv1alpha2 "github.com/kyma-project/istio/operator/api/v1alpha2" "github.com/kyma-project/istio/operator/tests/integration/testcontext" - networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" - securityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1" - telemetryv1alpha1 "istio.io/client-go/pkg/apis/telemetry/v1alpha1" + 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" @@ -118,17 +118,17 @@ func createK8sClient() client.Client { panic(err) } - err = networkingv1alpha3.AddToScheme(c.Scheme()) + err = networkingv1.AddToScheme(c.Scheme()) if err != nil { panic(err) } - err = securityv1beta1.AddToScheme(c.Scheme()) + err = securityv1.AddToScheme(c.Scheme()) if err != nil { panic(err) } - err = telemetryv1alpha1.AddToScheme(c.Scheme()) + err = telemetryv1.AddToScheme(c.Scheme()) if err != nil { panic(err) } diff --git a/tests/integration/steps/destination_rule.go b/tests/integration/steps/destination_rule.go index 41b8eb62c..cdb34cc88 100644 --- a/tests/integration/steps/destination_rule.go +++ b/tests/integration/steps/destination_rule.go @@ -4,8 +4,8 @@ import ( "context" "github.com/avast/retry-go" "github.com/kyma-project/istio/operator/tests/integration/testcontext" - networkingv1alpha3 "istio.io/api/networking/v1alpha3" - "istio.io/client-go/pkg/apis/networking/v1alpha3" + apinetworkingv1 "istio.io/api/networking/v1" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -15,16 +15,16 @@ func CreateDestinationRule(ctx context.Context, name, namespace, host string) (c return ctx, err } - d := v1alpha3.DestinationRule{ + d := networkingv1.DestinationRule{ TypeMeta: metav1.TypeMeta{ - APIVersion: "networking.istio.io/v1beta1", + APIVersion: "networking.istio.io/v1", Kind: "DestinationRule", }, ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: namespace, }, - Spec: networkingv1alpha3.DestinationRule{ + Spec: apinetworkingv1.DestinationRule{ Host: host, }, } diff --git a/tests/integration/steps/istio.go b/tests/integration/steps/istio.go index 7107e269f..7ad0455fe 100644 --- a/tests/integration/steps/istio.go +++ b/tests/integration/steps/istio.go @@ -8,11 +8,11 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "strings" - apinetworkingv1alpha3 "istio.io/api/networking/v1alpha3" - apisecurityv1beta1 "istio.io/api/security/v1beta1" - v1beta1 "istio.io/api/type/v1beta1" - networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" - securityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1" + apinetworkingv1 "istio.io/api/networking/v1" + apisecurityv1 "istio.io/api/security/v1" + apiv1beta1 "istio.io/api/type/v1beta1" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" + securityv1 "istio.io/client-go/pkg/apis/security/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/avast/retry-go" @@ -144,19 +144,19 @@ func CreateIstioGateway(ctx context.Context, name, namespace string) (context.Co return ctx, err } - gateway := &networkingv1alpha3.Gateway{ + gateway := &networkingv1.Gateway{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: namespace, }, - Spec: apinetworkingv1alpha3.Gateway{ + Spec: apinetworkingv1.Gateway{ Selector: map[string]string{ "app": "istio-ingressgateway", "istio": "ingressgateway", }, - Servers: []*apinetworkingv1alpha3.Server{ + Servers: []*apinetworkingv1.Server{ { - Port: &apinetworkingv1alpha3.Port{ + Port: &apinetworkingv1.Port{ Number: 80, Protocol: "HTTP", Name: "http", @@ -194,34 +194,34 @@ func CreateVirtualServiceWithPort(ctx context.Context, name, exposedService stri return ctx, err } - vs := &networkingv1alpha3.VirtualService{ + vs := &networkingv1.VirtualService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: namespace, }, - Spec: apinetworkingv1alpha3.VirtualService{ + Spec: apinetworkingv1.VirtualService{ Hosts: []string{ "*", }, Gateways: []string{ gateway, }, - Http: []*apinetworkingv1alpha3.HTTPRoute{ + Http: []*apinetworkingv1.HTTPRoute{ { - Match: []*apinetworkingv1alpha3.HTTPMatchRequest{ + Match: []*apinetworkingv1.HTTPMatchRequest{ { - Uri: &apinetworkingv1alpha3.StringMatch{ - MatchType: &apinetworkingv1alpha3.StringMatch_Prefix{ + Uri: &apinetworkingv1.StringMatch{ + MatchType: &apinetworkingv1.StringMatch_Prefix{ Prefix: "/", }, }, }, }, - Route: []*apinetworkingv1alpha3.HTTPRouteDestination{ + Route: []*apinetworkingv1.HTTPRouteDestination{ { - Destination: &apinetworkingv1alpha3.Destination{ + Destination: &apinetworkingv1.Destination{ Host: exposedService, - Port: &apinetworkingv1alpha3.PortSelector{ + Port: &apinetworkingv1.PortSelector{ Number: uint32(exposedPort), }, }, @@ -250,26 +250,26 @@ func CreateAuthorizationPolicyExtAuthz(ctx context.Context, name, namespace, sel return ctx, err } - ap := &securityv1beta1.AuthorizationPolicy{ + ap := &securityv1.AuthorizationPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: namespace, }, - Spec: apisecurityv1beta1.AuthorizationPolicy{ - Selector: &v1beta1.WorkloadSelector{ + Spec: apisecurityv1.AuthorizationPolicy{ + Selector: &apiv1beta1.WorkloadSelector{ MatchLabels: map[string]string{"app": selector}, }, - Action: apisecurityv1beta1.AuthorizationPolicy_CUSTOM, - ActionDetail: &apisecurityv1beta1.AuthorizationPolicy_Provider{ - Provider: &apisecurityv1beta1.AuthorizationPolicy_ExtensionProvider{ + Action: apisecurityv1.AuthorizationPolicy_CUSTOM, + ActionDetail: &apisecurityv1.AuthorizationPolicy_Provider{ + Provider: &apisecurityv1.AuthorizationPolicy_ExtensionProvider{ Name: provider, }, }, - Rules: []*apisecurityv1beta1.Rule{ + Rules: []*apisecurityv1.Rule{ { - To: []*apisecurityv1beta1.Rule_To{ + To: []*apisecurityv1.Rule_To{ { - Operation: &apisecurityv1beta1.Operation{ + Operation: &apisecurityv1.Operation{ Paths: []string{operation}, }, }, diff --git a/tests/integration/steps/observability.go b/tests/integration/steps/observability.go index 9c012aaf7..0d326c917 100644 --- a/tests/integration/steps/observability.go +++ b/tests/integration/steps/observability.go @@ -6,8 +6,8 @@ import ( "github.com/avast/retry-go" "github.com/kyma-project/istio/operator/tests/integration/testcontext" - "istio.io/api/telemetry/v1alpha1" - v1alpha12 "istio.io/client-go/pkg/apis/telemetry/v1alpha1" + apitelemetryv1 "istio.io/api/telemetry/v1" + telemetryv1 "istio.io/client-go/pkg/apis/telemetry/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -19,15 +19,15 @@ func EnableAccessLogging(ctx context.Context, provider string) (context.Context, return ctx, err } err = retry.Do(func() error { - tm := &v1alpha12.Telemetry{ + tm := &telemetryv1.Telemetry{ ObjectMeta: metav1.ObjectMeta{ Name: "access-logs", Namespace: "istio-system", }, - Spec: v1alpha1.Telemetry{ - AccessLogging: []*v1alpha1.AccessLogging{ + Spec: apitelemetryv1.Telemetry{ + AccessLogging: []*apitelemetryv1.AccessLogging{ { - Providers: []*v1alpha1.ProviderRef{ + Providers: []*apitelemetryv1.ProviderRef{ {Name: provider}, }, }, @@ -51,15 +51,15 @@ func EnableTracing(ctx context.Context, tracingProvider string) (context.Context return ctx, err } err = retry.Do(func() error { - tm := &v1alpha12.Telemetry{ + tm := &telemetryv1.Telemetry{ ObjectMeta: metav1.ObjectMeta{ Name: "enable-tracing", Namespace: "istio-system", }, - Spec: v1alpha1.Telemetry{ - Tracing: []*v1alpha1.Tracing{ + Spec: apitelemetryv1.Telemetry{ + Tracing: []*apitelemetryv1.Tracing{ { - Providers: []*v1alpha1.ProviderRef{ + Providers: []*apitelemetryv1.ProviderRef{ {Name: tracingProvider}, }, }, diff --git a/tests/integration/steps/resource.go b/tests/integration/steps/resource.go index 7ec193f64..f7947c25f 100644 --- a/tests/integration/steps/resource.go +++ b/tests/integration/steps/resource.go @@ -12,8 +12,9 @@ import ( "github.com/kyma-project/istio/operator/internal/clusterconfig" "github.com/kyma-project/istio/operator/internal/istiooperator" "github.com/kyma-project/istio/operator/tests/integration/testcontext" + networkingv1 "istio.io/client-go/pkg/apis/networking/v1" networkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3" - securityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1" + 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" @@ -119,13 +120,13 @@ func ResourceIsPresent(ctx context.Context, kind, name, namespace, present strin switch kind { case Gateway.String(): - object = &networkingv1alpha3.Gateway{} + object = &networkingv1.Gateway{} case EnvoyFilter.String(): object = &networkingv1alpha3.EnvoyFilter{} case PeerAuthentication.String(): - object = &securityv1beta1.PeerAuthentication{} + object = &securityv1.PeerAuthentication{} case VirtualService.String(): - object = &networkingv1alpha3.VirtualService{} + object = &networkingv1.VirtualService{} case ConfigMap.String(): object = &corev1.ConfigMap{} case IstioOperator.String(): @@ -260,7 +261,7 @@ func ResourceInNamespaceIsDeleted(ctx context.Context, kind, name, namespace str }) case DestinationRule.String(): return retry.Do(func() error { - var dr networkingv1alpha3.DestinationRule + var dr networkingv1.DestinationRule err := k8sClient.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: namespace}, &dr) if err != nil { return err @@ -290,7 +291,7 @@ func ResourceInNamespaceIsDeleted(ctx context.Context, kind, name, namespace str }) case Gateway.String(): return retry.Do(func() error { - var r networkingv1alpha3.Gateway + var r networkingv1.Gateway err := k8sClient.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: namespace}, &r) if err != nil { return err @@ -310,7 +311,7 @@ func ResourceInNamespaceIsDeleted(ctx context.Context, kind, name, namespace str }) case PeerAuthentication.String(): return retry.Do(func() error { - var r securityv1beta1.PeerAuthentication + var r securityv1.PeerAuthentication err := k8sClient.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: namespace}, &r) if err != nil { return err @@ -320,7 +321,7 @@ func ResourceInNamespaceIsDeleted(ctx context.Context, kind, name, namespace str }) case VirtualService.String(): return retry.Do(func() error { - var r networkingv1alpha3.VirtualService + var r networkingv1.VirtualService err := k8sClient.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: namespace}, &r) if err != nil { return err @@ -372,7 +373,7 @@ func ResourceNotPresent(ctx context.Context, kind string) error { } case DestinationRule.String(): - var drList networkingv1alpha3.DestinationRuleList + var drList networkingv1.DestinationRuleList err := k8sClient.List(context.TODO(), &drList) if err != nil { return err diff --git a/tests/performance/load-testing/templates/kyma-gateway.yaml b/tests/performance/load-testing/templates/kyma-gateway.yaml index 3448d45de..6101e118e 100644 --- a/tests/performance/load-testing/templates/kyma-gateway.yaml +++ b/tests/performance/load-testing/templates/kyma-gateway.yaml @@ -1,4 +1,4 @@ -apiVersion: networking.istio.io/v1alpha3 +apiVersion: networking.istio.io/v1 kind: Gateway metadata: name: kyma-gateway diff --git a/tests/performance/load-testing/templates/vs-allow.yaml b/tests/performance/load-testing/templates/vs-allow.yaml index 346920393..9e0894b6c 100644 --- a/tests/performance/load-testing/templates/vs-allow.yaml +++ b/tests/performance/load-testing/templates/vs-allow.yaml @@ -1,4 +1,4 @@ -apiVersion: networking.istio.io/v1beta1 +apiVersion: networking.istio.io/v1 kind: VirtualService metadata: labels: diff --git a/tests/performance/load-testing/templates/vs-grafana.yaml b/tests/performance/load-testing/templates/vs-grafana.yaml index 922401c91..8751bd850 100644 --- a/tests/performance/load-testing/templates/vs-grafana.yaml +++ b/tests/performance/load-testing/templates/vs-grafana.yaml @@ -1,4 +1,4 @@ -apiVersion: networking.istio.io/v1beta1 +apiVersion: networking.istio.io/v1 kind: VirtualService metadata: labels: diff --git a/tests/ui/fixtures/authorizationPolicy.yaml b/tests/ui/fixtures/authorizationPolicy.yaml index e71680985..15085fca3 100644 --- a/tests/ui/fixtures/authorizationPolicy.yaml +++ b/tests/ui/fixtures/authorizationPolicy.yaml @@ -1,4 +1,4 @@ -apiVersion: security.istio.io/v1beta1 +apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: name: placeholderName