diff --git a/.github/workflows/deps.yml b/.github/workflows/deps.yml index 3f5c7d945..e53e896ae 100644 --- a/.github/workflows/deps.yml +++ b/.github/workflows/deps.yml @@ -26,4 +26,3 @@ jobs: with: go-version-input: 1.21.5 go-version-file: go.mod - diff --git a/.gitignore b/.gitignore index f8fe237d0..cd2c4c09e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ aws-iam-authenticator +bin + /dist /_output diff --git a/.go-version b/.go-version new file mode 100644 index 000000000..ce2dd5357 --- /dev/null +++ b/.go-version @@ -0,0 +1 @@ +1.21.5 diff --git a/Dockerfile b/Dockerfile index 4168e6506..48d642f52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,6 +17,7 @@ ARG golang_image=public.ecr.aws/docker/library/golang:1.21.5 FROM --platform=$BUILDPLATFORM $golang_image AS builder WORKDIR /go/src/github.com/kubernetes-sigs/aws-iam-authenticator COPY . . +RUN go version RUN goproxy=https://goproxy.io go mod download ARG TARGETOS TARGETARCH RUN GOOS=$TARGETOS GOARCH=$TARGETARCH make bin diff --git a/Makefile b/Makefile index be14c41d3..ede3fc206 100644 --- a/Makefile +++ b/Makefile @@ -102,6 +102,7 @@ image: .image-linux-$(GOARCH) .PHONY: .image-linux-% .image-linux-%: docker buildx build --output=type=docker --platform linux/$* \ + --build-arg golang_image=$(shell hack/setup-go.sh) \ --tag aws-iam-authenticator:$(VERSION)_$(GIT_COMMIT)_$(BUILD_DATE_STRIPPED)-linux_$* . .PHONY: goreleaser @@ -113,8 +114,7 @@ endif .PHONY: test test: - go test -v -coverprofile=coverage.out -race $(PKG)/pkg/... - go tool cover -html=coverage.out -o coverage.html + ./hack/test-unit.sh .PHONY: integration integration: diff --git a/README.md b/README.md index e3da1cb5d..39a5a1ce0 100644 --- a/README.md +++ b/README.md @@ -482,7 +482,7 @@ server: groups: - system:masters - # each mapUsers entry maps an IAM role to a static username and set of groups + # each mapUsers entry maps an IAM user to a static username and set of groups mapUsers: # map user IAM user Alice in 000000000000 to user "alice" in group "system:masters" - userarn: arn:aws:iam::000000000000:user/Alice diff --git a/go.mod b/go.mod index 0a88be1e6..e8e7ca572 100644 --- a/go.mod +++ b/go.mod @@ -37,7 +37,7 @@ require ( github.com/go-openapi/swag v0.22.7 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.5.0 // indirect @@ -72,7 +72,7 @@ require ( golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.16.1 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/protobuf v1.32.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.51.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 0e9452a59..188cffa84 100644 --- a/go.sum +++ b/go.sum @@ -95,8 +95,8 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/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/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= @@ -449,8 +449,8 @@ google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiq google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 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.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/hack/setup-go.sh b/hack/setup-go.sh new file mode 100755 index 000000000..2dae86bb0 --- /dev/null +++ b/hack/setup-go.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Copyright 2020 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# script to setup go version as needed +# MUST BE RUN FROM THE REPO ROOT DIRECTORY + +# read go-version file unless GO_VERSION is set +GO_VERSION="${GO_VERSION:-"$(cat .go-version)"}" +GO_IMAGE=public.ecr.aws/docker/library/golang:$GO_VERSION + +# gotoolchain +# https://go.dev/doc/toolchain +export GOSUMDB="sum.golang.org" +export GOTOOLCHAIN=go${GO_VERSION} + +# force go modules +export GO111MODULE=on + +echo $GO_IMAGE diff --git a/hack/test-integration.sh b/hack/test-integration.sh index 4b7d97ded..272659a91 100755 --- a/hack/test-integration.sh +++ b/hack/test-integration.sh @@ -78,6 +78,10 @@ if [[ "${CREATE_TEST_ROLE}" = "true" ]]; then TEST_ROLE_ARN="$(echo ${create_role_output} | jq -r '.Role.Arn')" fi +source hack/setup-go.sh + +go version + make clean make bin diff --git a/hack/test-unit.sh b/hack/test-unit.sh new file mode 100755 index 000000000..0dd47c6b0 --- /dev/null +++ b/hack/test-unit.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# Copyright 2016 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set -o pipefail +set -o nounset + +# cd to the repo root and setup go +REPO_ROOT="$(cd "$( dirname "${BASH_SOURCE[0]}" )"/.. &> /dev/null && pwd)" + +source hack/setup-go.sh + +pushd ${REPO_ROOT} + +go version +go test -v -coverprofile=coverage.out -race sigs.k8s.io/aws-iam-authenticator/pkg/... +go tool cover -html=coverage.out -o coverage.html +popd diff --git a/pkg/fileutil/util.go b/pkg/fileutil/util.go index d9ebd1e26..bf424186f 100644 --- a/pkg/fileutil/util.go +++ b/pkg/fileutil/util.go @@ -1,7 +1,9 @@ package fileutil import ( + "fmt" "os" + "strconv" "time" "github.com/fsnotify/fsnotify" @@ -104,3 +106,18 @@ func StartLoadDynamicFile(filename string, callBack FileChangeCallBack, stopCh < } }, time.Second, stopCh) } + +func CalculateTimeDeltaFromUnixInSeconds(from string) (int64, error) { + startTime, err := strconv.ParseInt(from, 10, 64) + if err != nil { + return 0, fmt.Errorf("failed to parse 'startTime' string: %v", err) + } + + endTime := time.Now().Unix() + + if startTime > endTime { + return 0, fmt.Errorf("start timestamp is after end timestamp") + } + + return endTime - startTime, nil +} diff --git a/pkg/fileutil/util_test.go b/pkg/fileutil/util_test.go index 13acab7c1..fb8bf7f41 100644 --- a/pkg/fileutil/util_test.go +++ b/pkg/fileutil/util_test.go @@ -2,6 +2,7 @@ package fileutil import ( "os" + "strconv" "sync" "testing" "time" @@ -122,3 +123,57 @@ func TestDeleteDynamicFile(t *testing.T) { } testA.mutex.Unlock() } + +func TestCalculateTimeDeltaFromUnixInSeconds(t *testing.T) { + type args struct { + startTime string + } + cases := []struct { + input args + errexp bool + sleep bool + }{ + { + args{"1706648530"}, + false, + false, + }, + { + args{"1706648520"}, + false, + false, + }, + { + args{"foo"}, + true, + false, + }, + { + args{"2706648520"}, + true, + false, + }, + { + args{strconv.FormatInt(time.Now().Unix(), 10)}, + false, + true, + }, + } + + for _, c := range cases { + if c.sleep { + time.Sleep(1 * time.Second) + } + + out, err := CalculateTimeDeltaFromUnixInSeconds(c.input.startTime) + if !c.errexp && err != nil { + t.Errorf("Did not expect error but got err: %v", err) + } else if c.errexp && err == nil { + t.Error("Expected error but got nil") + } + + if !c.errexp && out < 1 { + t.Errorf("Returned an invalid value: %d", out) + } + } +} diff --git a/pkg/mapper/dynamicfile/dynamicfile.go b/pkg/mapper/dynamicfile/dynamicfile.go index 4a4f3c6c9..735cd3fb0 100644 --- a/pkg/mapper/dynamicfile/dynamicfile.go +++ b/pkg/mapper/dynamicfile/dynamicfile.go @@ -10,6 +10,8 @@ import ( "sigs.k8s.io/aws-iam-authenticator/pkg/arn" "sigs.k8s.io/aws-iam-authenticator/pkg/config" "sigs.k8s.io/aws-iam-authenticator/pkg/errutil" + "sigs.k8s.io/aws-iam-authenticator/pkg/fileutil" + "sigs.k8s.io/aws-iam-authenticator/pkg/metrics" ) type DynamicFileMapStore struct { @@ -21,13 +23,18 @@ type DynamicFileMapStore struct { filename string userIDStrict bool usernamePrefixReserveList []string + + dynamicFileInitDone bool } type DynamicFileData struct { + // Time that the object takes from update time to load time + LastUpdatedDateTime string `json:"LastUpdatedDateTime"` + // Version is the version number of the update + Version string `json:"Version"` // RoleMappings is a list of mappings from AWS IAM Role to // Kubernetes username + groups. RoleMappings []config.RoleMapping `json:"mapRoles"` - // UserMappings is a list of mappings from AWS IAM User to // Kubernetes username + groups. UserMappings []config.UserMapping `json:"mapUsers"` @@ -48,6 +55,7 @@ func NewDynamicFileMapStore(cfg config.Config) (*DynamicFileMapStore, error) { ms := DynamicFileMapStore{} ms.filename = cfg.DynamicFilePath ms.userIDStrict = cfg.DynamicFileUserIDStrict + ms.dynamicFileInitDone = false return &ms, nil } @@ -165,6 +173,26 @@ func (ms *DynamicFileMapStore) CallBackForFileLoad(dynamicContent []byte) error return err } ms.saveMap(userMappings, roleMappings, awsAccounts) + + // when instance or container restarts, the dynamic file is (re)loaded and the latency metric is calculated + // regardless if there was a change upstream, and thus can emit an incorrect latency value + // so a workaround is to skip the first time the metric is calculated, and only emit metris after + // as we know any subsequent calculations are from a valid change upstream + if ms.dynamicFileInitDone { + latency, err := fileutil.CalculateTimeDeltaFromUnixInSeconds(dynamicFileData.LastUpdatedDateTime) + if err != nil { + logrus.Errorf("error parsing latency for dynamic file: %v", err) + } else { + metrics.Get().E2ELatency.WithLabelValues("dynamic_file").Observe(float64(latency)) + logrus.WithFields(logrus.Fields{ + "Version": dynamicFileData.Version, + "Type": "dynamic_file", + "Latency": latency, + }).Infof("logging latency metric") + } + } + ms.dynamicFileInitDone = true + return nil } diff --git a/pkg/mapper/dynamicfile/dynamicfile_test.go b/pkg/mapper/dynamicfile/dynamicfile_test.go index 328b5bfac..345037104 100644 --- a/pkg/mapper/dynamicfile/dynamicfile_test.go +++ b/pkg/mapper/dynamicfile/dynamicfile_test.go @@ -7,9 +7,11 @@ import ( "time" "github.com/google/go-cmp/cmp" + "github.com/prometheus/client_golang/prometheus" "sigs.k8s.io/aws-iam-authenticator/pkg/config" "sigs.k8s.io/aws-iam-authenticator/pkg/errutil" "sigs.k8s.io/aws-iam-authenticator/pkg/fileutil" + "sigs.k8s.io/aws-iam-authenticator/pkg/metrics" "sigs.k8s.io/aws-iam-authenticator/pkg/token" ) @@ -18,6 +20,11 @@ var ( testRole = config.RoleMapping{RoleARN: "arn:aws:iam::012345678912:role/computer", Username: "computer", Groups: []string{"system:nodes"}} ) +func TestMain(m *testing.M) { + metrics.InitMetrics(prometheus.NewRegistry()) + m.Run() +} + func makeStore(users map[string]config.UserMapping, roles map[string]config.RoleMapping, filename string, userIDStrict bool) DynamicFileMapStore { ms := DynamicFileMapStore{ users: users, @@ -96,6 +103,9 @@ func TestAWSAccount(t *testing.T) { var origFileContent = ` { + "Version": "1", + "LastUpdatedDateTime": "12345678", + "ClusterId": "000000000098", "mapRoles": [ { "rolearn": "arn:aws:iam::000000000098:role/KubernetesAdmin", @@ -133,6 +143,9 @@ var origFileContent = ` var updatedFileContent = ` { + "Version": "1", + "LastUpdatedDateTime": "12345678", + "ClusterId": "000000000098", "mapRoles": [ { "rolearn": "arn:aws:iam::000000000098:role/KubernetesAdmin", diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index 36a124681..b45feef73 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -42,6 +42,9 @@ type Metrics struct { StsResponses *prometheus.CounterVec DynamicFileFailures prometheus.Counter StsThrottling prometheus.Counter + E2ELatency *prometheus.HistogramVec + DynamicFileEnabled prometheus.Gauge + DynamicFileOnly prometheus.Gauge } func createMetrics(reg prometheus.Registerer) Metrics { @@ -98,5 +101,28 @@ func createMetrics(reg prometheus.Registerer) Metrics { Help: "Number of EC2 describe instances calls.", }, ), + E2ELatency: factory.NewHistogramVec( + prometheus.HistogramOpts{ + Name: "dynamic_e2e_latency_seconds", + Namespace: Namespace, + Help: "End to end latency in seconds partitioned by type.", + Buckets: []float64{1, 3, 5, 10, 15, 20, 30, 60}, + }, + []string{"type"}, + ), + DynamicFileEnabled: factory.NewGauge( + prometheus.GaugeOpts{ + Name: "dynamic_file_enabled", + Namespace: Namespace, + Help: "Dynamic file in backend mode is enabled", + }, + ), + DynamicFileOnly: factory.NewGauge( + prometheus.GaugeOpts{ + Name: "dynamic_file_only", + Namespace: Namespace, + Help: "Only dynamic file in backend mode is enabled", + }, + ), } } diff --git a/pkg/server/server.go b/pkg/server/server.go index ea27b8a8e..5059ed006 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -70,13 +70,14 @@ var ( // server state (internal) type handler struct { http.ServeMux - mutex sync.RWMutex - verifier token.Verifier - ec2Provider ec2provider.EC2Provider - clusterID string - backendMapper BackendMapper - scrubbedAccounts []string - cfg config.Config + mutex sync.RWMutex + verifier token.Verifier + ec2Provider ec2provider.EC2Provider + clusterID string + backendMapper BackendMapper + backendModeConfigInitDone bool + scrubbedAccounts []string + cfg config.Config } // New authentication webhook server. @@ -205,12 +206,13 @@ func (c *Server) getHandler(backendMapper BackendMapper, ec2DescribeQps int, ec2 } h := &handler{ - verifier: token.NewVerifier(c.ClusterID, c.PartitionID, instanceRegion), - ec2Provider: ec2provider.New(c.ServerEC2DescribeInstancesRoleARN, instanceRegion, ec2DescribeQps, ec2DescribeBurst), - clusterID: c.ClusterID, - backendMapper: backendMapper, - scrubbedAccounts: c.Config.ScrubbedAWSAccounts, - cfg: c.Config, + verifier: token.NewVerifier(c.ClusterID, c.PartitionID, instanceRegion), + ec2Provider: ec2provider.New(c.ServerEC2DescribeInstancesRoleARN, instanceRegion, ec2DescribeQps, ec2DescribeBurst), + clusterID: c.ClusterID, + backendMapper: backendMapper, + scrubbedAccounts: c.Config.ScrubbedAWSAccounts, + cfg: c.Config, + backendModeConfigInitDone: false, } h.HandleFunc("/authenticate", h.authenticateEndpoint) @@ -513,6 +515,32 @@ func (h *handler) CallBackForFileLoad(dynamicContent []byte) error { } else { logrus.Infof("BackendMode dynamic file got changed, but same with current mode, skip rebuild mapper") } + + // when instance or container restarts, the backendend mode config is (re)loaded and the latency metric is calculated + // regardless if there was a change upstream, and thus can emit an incorrect latency value + // so a workaround is to skip the first time the metric is calculated, and only emit metris after + // as we know any subsequent calculations are from a valid change upstream + if h.backendModeConfigInitDone { + latency, err := fileutil.CalculateTimeDeltaFromUnixInSeconds(backendModes.LastUpdatedDateTime) + if err != nil { + logrus.Errorf("error parsing latency for dynamic backend mode file: %v", err) + } else { + metrics.Get().E2ELatency.WithLabelValues("dynamic_backend_mode").Observe(float64(latency)) + logrus.WithFields(logrus.Fields{ + "Version": backendModes.Version, + "Type": "dynamic_backend_mode", + "Latency": latency, + }).Infof("logging latency metric") + } + } + h.backendModeConfigInitDone = true + + if h.backendMapper.currentModes == mapper.ModeDynamicFile { + metrics.Get().DynamicFileOnly.Set(1) + } else if strings.Contains(h.backendMapper.currentModes, mapper.ModeDynamicFile) { + metrics.Get().DynamicFileEnabled.Set(1) + } + return nil } diff --git a/pkg/server/types.go b/pkg/server/types.go index 4900dc186..45e059a9b 100644 --- a/pkg/server/types.go +++ b/pkg/server/types.go @@ -41,5 +41,9 @@ type BackendMapper struct { // AccessConfig represents the configuration format for cluster access config via backend mode. type BackendModeConfig struct { + // Time that the object takes from update time to load time + LastUpdatedDateTime string `json:"LastUpdatedDateTime"` + // Version is the version number of the update + Version string `json:"Version"` BackendMode string `json:"backendMode"` } diff --git a/tests/e2e/go.mod b/tests/e2e/go.mod index c9b6fa9d1..5255f62b9 100644 --- a/tests/e2e/go.mod +++ b/tests/e2e/go.mod @@ -23,7 +23,7 @@ require ( github.com/go-openapi/swag v0.22.7 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect @@ -52,7 +52,7 @@ require ( golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.17.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/protobuf v1.32.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/tests/e2e/go.sum b/tests/e2e/go.sum index 5aacf484b..5780d527a 100644 --- a/tests/e2e/go.sum +++ b/tests/e2e/go.sum @@ -28,8 +28,8 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/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/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.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -157,8 +157,8 @@ google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAs google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= 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.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/tests/integration/go.mod b/tests/integration/go.mod index e6f7d5fe5..5626f79eb 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -55,7 +55,7 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/cel-go v0.17.7 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect @@ -127,7 +127,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/grpc v1.58.3 // indirect - google.golang.org/protobuf v1.32.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/gcfg.v1 v1.2.3 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index db669de48..2948c6ced 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -211,8 +211,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/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/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 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= @@ -863,8 +863,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba 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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -935,8 +935,6 @@ k8s.io/kubectl v0.29.2 h1:uaDYaBhumvkwz0S2XHt36fK0v5IdNgL7HyUniwb2IUo= k8s.io/kubectl v0.29.2/go.mod h1:BhizuYBGcKaHWyq+G7txGw2fXg576QbPrrnQdQDZgqI= k8s.io/kubelet v0.29.2 h1:bQ2StqkUqPCFNLtGLsb3v3O2LKQHXNMju537zOGboRg= k8s.io/kubelet v0.29.2/go.mod h1:i5orNPqW/fAMrqptbCXFW/vLBBP12TZZc41IrrvF7SY= -k8s.io/kubernetes v1.29.1 h1:fxJFVb8uqbYZDYHpwIsAndBQs360cQGb0xa1gYFh3fo= -k8s.io/kubernetes v1.29.1/go.mod h1:xZPKU0yO0CBbLTnbd+XGyRmmtmaVuJykDb8gNCkeeUE= k8s.io/kubernetes v1.29.2 h1:8hh1cntqdulanjQt7wSSSsJfBgOyx6fUdFWslvGL5m0= k8s.io/kubernetes v1.29.2/go.mod h1:xZPKU0yO0CBbLTnbd+XGyRmmtmaVuJykDb8gNCkeeUE= k8s.io/legacy-cloud-providers v0.29.2 h1:fm2Zgf1XbwMdUDzZZnLvezmjsl7E1bekVOTed99/f5A=