Skip to content

Commit 020a494

Browse files
committed
Retry oci push operations
Signed-off-by: Somtochi Onyekwere <[email protected]>
1 parent 96ed1e1 commit 020a494

File tree

3 files changed

+85
-26
lines changed

3 files changed

+85
-26
lines changed

Diff for: cmd/flux/push_artifact.go

+74-9
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,24 @@ import (
2222
"fmt"
2323
"os"
2424
"strings"
25+
"time"
2526

26-
sourcev1 "github.com/fluxcd/source-controller/api/v1beta2"
27+
"github.com/google/go-containerregistry/pkg/authn"
28+
"github.com/google/go-containerregistry/pkg/crane"
29+
"github.com/google/go-containerregistry/pkg/logs"
30+
"github.com/google/go-containerregistry/pkg/name"
2731
reg "github.com/google/go-containerregistry/pkg/name"
32+
"github.com/google/go-containerregistry/pkg/v1/remote"
33+
"github.com/google/go-containerregistry/pkg/v1/remote/transport"
2834
"github.com/spf13/cobra"
2935
"sigs.k8s.io/yaml"
3036

31-
"github.com/fluxcd/flux2/v2/internal/flags"
37+
"github.com/fluxcd/pkg/oci"
38+
"github.com/fluxcd/pkg/oci/auth/login"
39+
client "github.com/fluxcd/pkg/oci/client"
40+
sourcev1 "github.com/fluxcd/source-controller/api/v1beta2"
3241

33-
oci "github.com/fluxcd/pkg/oci/client"
42+
"github.com/fluxcd/flux2/v2/internal/flags"
3443
)
3544

3645
var pushArtifactCmd = &cobra.Command{
@@ -105,6 +114,7 @@ type pushArtifactFlags struct {
105114
ignorePaths []string
106115
annotations []string
107116
output string
117+
debug bool
108118
}
109119

110120
var pushArtifactArgs = newPushArtifactFlags()
@@ -125,6 +135,7 @@ func init() {
125135
pushArtifactCmd.Flags().StringArrayVarP(&pushArtifactArgs.annotations, "annotations", "a", nil, "Set custom OCI annotations in the format '<key>=<value>'")
126136
pushArtifactCmd.Flags().StringVarP(&pushArtifactArgs.output, "output", "o", "",
127137
"the format in which the artifact digest should be printed, can be 'json' or 'yaml'")
138+
pushArtifactCmd.Flags().BoolVarP(&pushArtifactArgs.debug, "debug", "", false, "display logs from underlying library")
128139

129140
pushCmd.AddCommand(pushArtifactCmd)
130141
}
@@ -147,7 +158,12 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error {
147158
return fmt.Errorf("invalid path %q", pushArtifactArgs.path)
148159
}
149160

150-
url, err := oci.ParseArtifactURL(ociURL)
161+
url, err := client.ParseArtifactURL(ociURL)
162+
if err != nil {
163+
return err
164+
}
165+
166+
ref, err := name.ParseReference(url)
151167
if err != nil {
152168
return err
153169
}
@@ -175,7 +191,13 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error {
175191
annotations[kv[0]] = kv[1]
176192
}
177193

178-
meta := oci.Metadata{
194+
if pushArtifactArgs.debug {
195+
// direct logs from crane library to stderr
196+
// this can be useful to figure out things happening underneath e.g when the library is retrying a request
197+
logs.Warn.SetOutput(os.Stderr)
198+
}
199+
200+
meta := client.Metadata{
179201
Source: pushArtifactArgs.source,
180202
Revision: pushArtifactArgs.revision,
181203
Annotations: annotations,
@@ -184,13 +206,15 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error {
184206
ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout)
185207
defer cancel()
186208

187-
ociClient := oci.NewClient(oci.DefaultOptions())
188-
209+
var auth authn.Authenticator
210+
opts := client.DefaultOptions()
189211
if pushArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && pushArtifactArgs.creds != "" {
190212
logger.Actionf("logging in to registry with credentials")
191-
if err := ociClient.LoginWithCredentials(pushArtifactArgs.creds); err != nil {
213+
auth, err = client.GetAuthFromCredentials(pushArtifactArgs.creds)
214+
if err != nil {
192215
return fmt.Errorf("could not login with credentials: %w", err)
193216
}
217+
opts = append(opts, crane.WithAuth(auth))
194218
}
195219

196220
if pushArtifactArgs.provider.String() != sourcev1.GenericOCIProvider {
@@ -200,15 +224,43 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error {
200224
return fmt.Errorf("provider not supported: %w", err)
201225
}
202226

203-
if err := ociClient.LoginWithProvider(ctx, url, ociProvider); err != nil {
227+
auth, err = login.NewManager().Login(ctx, url, ref, getProviderLoginOption(ociProvider))
228+
if err != nil {
204229
return fmt.Errorf("error during login with provider: %w", err)
205230
}
231+
opts = append(opts, crane.WithAuth(auth))
232+
}
233+
234+
if rootArgs.timeout != 0 {
235+
backoff := remote.Backoff{
236+
Duration: 1.0 * time.Second,
237+
Factor: 3,
238+
Jitter: 0.1,
239+
// timeout happens when the cap is exceeded or number of steps is reached
240+
// 10 steps is big enough that most reasonable cap(under 30min) will be exceeded before
241+
// the number of steps are completed.
242+
Steps: 10,
243+
Cap: rootArgs.timeout,
244+
}
245+
246+
if auth == nil {
247+
auth, err = authn.DefaultKeychain.Resolve(ref.Context())
248+
if err != nil {
249+
return err
250+
}
251+
}
252+
transportOpts, err := client.WithRetryTransport(ctx, ref, auth, backoff, []string{ref.Context().Scope(transport.PushScope)})
253+
if err != nil {
254+
return fmt.Errorf("error setting up transport: %w", err)
255+
}
256+
opts = append(opts, transportOpts, client.WithRetryBackOff(backoff))
206257
}
207258

208259
if pushArtifactArgs.output == "" {
209260
logger.Actionf("pushing artifact to %s", url)
210261
}
211262

263+
ociClient := client.NewClient(opts)
212264
digestURL, err := ociClient.Push(ctx, url, path, meta, pushArtifactArgs.ignorePaths)
213265
if err != nil {
214266
return fmt.Errorf("pushing artifact failed: %w", err)
@@ -256,3 +308,16 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error {
256308

257309
return nil
258310
}
311+
312+
func getProviderLoginOption(provider oci.Provider) login.ProviderOptions {
313+
var opts login.ProviderOptions
314+
switch provider {
315+
case oci.ProviderAzure:
316+
opts.AzureAutoLogin = true
317+
case oci.ProviderAWS:
318+
opts.AwsAutoLogin = true
319+
case oci.ProviderGCP:
320+
opts.GcpAutoLogin = true
321+
}
322+
return opts
323+
}

Diff for: go.mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ require (
1919
github.com/fluxcd/pkg/git v0.12.1
2020
github.com/fluxcd/pkg/git/gogit v0.10.0
2121
github.com/fluxcd/pkg/kustomize v1.3.1
22-
github.com/fluxcd/pkg/oci v0.26.1
22+
github.com/fluxcd/pkg/oci v0.27.0
2323
github.com/fluxcd/pkg/runtime v0.38.1
2424
github.com/fluxcd/pkg/sourceignore v0.3.3
2525
github.com/fluxcd/pkg/ssa v0.28.1
@@ -115,9 +115,9 @@ require (
115115
github.com/fluxcd/pkg/tar v0.2.0 // indirect
116116
github.com/fsnotify/fsnotify v1.6.0 // indirect
117117
github.com/go-errors/errors v1.4.2 // indirect
118-
github.com/go-git/gcfg v1.5.0 // indirect
118+
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
119119
github.com/go-git/go-billy/v5 v5.4.1 // indirect
120-
github.com/go-git/go-git/v5 v5.6.1 // indirect
120+
github.com/go-git/go-git/v5 v5.7.0 // indirect
121121
github.com/go-logr/logr v1.2.4 // indirect
122122
github.com/go-openapi/jsonpointer v0.19.6 // indirect
123123
github.com/go-openapi/jsonreference v0.20.1 // indirect

Diff for: go.sum

+8-14
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc
2323
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
2424
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
2525
github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8=
26-
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g=
2726
github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek=
2827
github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE=
2928
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs=
@@ -130,6 +129,7 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE
130129
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
131130
github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g=
132131
github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g=
132+
github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0=
133133
github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM=
134134
github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
135135
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
@@ -182,8 +182,8 @@ github.com/fluxcd/pkg/git/gogit v0.10.0/go.mod h1:BOEHZtgbHM5pzKTBIWbtTx2j2artkb
182182
github.com/fluxcd/pkg/gittestserver v0.8.3 h1:ehqTcqXyN095+AK1XCJDQBljeaOhatF9bc0lFblThCw=
183183
github.com/fluxcd/pkg/kustomize v1.3.1 h1:xOltPfO7/3h+bRMI90sTYgs/LI5VeW9pPMUMpZbo2HI=
184184
github.com/fluxcd/pkg/kustomize v1.3.1/go.mod h1:n9QJcwioLTWggJ+TYcVFa4jR7n0hRU+KeNA3zTWh9bo=
185-
github.com/fluxcd/pkg/oci v0.26.1 h1:MMEo751h8FF7yTbRkbJ1piXbOyFjlBOaGpPCmaWDWAg=
186-
github.com/fluxcd/pkg/oci v0.26.1/go.mod h1:WJRW6EbcYv5DC8PCGbIIviv1SxgCtyY9xai7GOERIKs=
185+
github.com/fluxcd/pkg/oci v0.27.0 h1:Q1jnPjuNGn1/xvG+sCXsWEmXvA5O1tU0WMdXdNlDEoE=
186+
github.com/fluxcd/pkg/oci v0.27.0/go.mod h1:LK6m+gxJFpedtb0Z5leNzIib3XbXu0Wts3eXhVbscDw=
187187
github.com/fluxcd/pkg/runtime v0.38.1 h1:deY7LP2e1UfHXmxNFFzY6MAbqdLWlRgvK9f/PIXyY5Y=
188188
github.com/fluxcd/pkg/runtime v0.38.1/go.mod h1:x7bNbCDuvErmqD3gPNgGDI/ovjHBwvNPiwmAJuIMqNM=
189189
github.com/fluxcd/pkg/sourceignore v0.3.3 h1:Ue29JAuPECEYdvIqdpXpQaDxpeySn7amarLArp7XoIs=
@@ -207,15 +207,16 @@ github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
207207
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
208208
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
209209
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
210-
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
211210
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
211+
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
212+
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
212213
github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
213214
github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4=
214215
github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg=
215-
github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ=
216216
github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo=
217-
github.com/go-git/go-git/v5 v5.6.1 h1:q4ZRqQl4pR/ZJHc1L5CFjGA1a10u76aV1iC+nh+bHsk=
218-
github.com/go-git/go-git/v5 v5.6.1/go.mod h1:mvyoL6Unz0PiTQrGQfSfiLFhBH1c1e84ylC2MDs4ee8=
217+
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8=
218+
github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE=
219+
github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8=
219220
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
220221
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
221222
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
@@ -398,7 +399,6 @@ github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTS
398399
github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0=
399400
github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA=
400401
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ=
401-
github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM=
402402
github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
403403
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
404404
github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA=
@@ -535,7 +535,6 @@ go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
535535
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
536536
go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
537537
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
538-
golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
539538
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
540539
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
541540
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -545,7 +544,6 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0
545544
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
546545
golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
547546
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
548-
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
549547
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
550548
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
551549
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
@@ -556,7 +554,6 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl
556554
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
557555
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
558556
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
559-
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
560557
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
561558
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
562559
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
@@ -581,7 +578,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
581578
golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
582579
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
583580
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
584-
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
585581
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
586582
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
587583
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
@@ -668,7 +664,6 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
668664
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
669665
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
670666
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
671-
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
672667
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
673668
golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo=
674669
golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
@@ -752,7 +747,6 @@ k8s.io/kubectl v0.27.2 h1:sSBM2j94MHBFRWfHIWtEXWCicViQzZsb177rNsKBhZg=
752747
k8s.io/kubectl v0.27.2/go.mod h1:GCOODtxPcrjh+EC611MqREkU8RjYBh10ldQCQ6zpFKw=
753748
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk=
754749
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
755-
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
756750
sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w=
757751
sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs=
758752
sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU=

0 commit comments

Comments
 (0)