Skip to content

Commit 531a6ec

Browse files
committed
Switch to github.com/aws/aws-sdk-go-v2
1 parent 0298a22 commit 531a6ec

File tree

4 files changed

+99
-65
lines changed

4 files changed

+99
-65
lines changed

get_s3.go

+54-49
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import (
99
"strings"
1010
"time"
1111

12-
"github.com/aws/aws-sdk-go/aws"
13-
"github.com/aws/aws-sdk-go/aws/credentials"
14-
"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
15-
"github.com/aws/aws-sdk-go/aws/ec2metadata"
16-
"github.com/aws/aws-sdk-go/aws/session"
17-
"github.com/aws/aws-sdk-go/service/s3"
12+
"github.com/aws/aws-sdk-go-v2/aws"
13+
"github.com/aws/aws-sdk-go-v2/config"
14+
"github.com/aws/aws-sdk-go-v2/credentials"
15+
"github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds"
16+
"github.com/aws/aws-sdk-go-v2/feature/ec2/imds"
17+
"github.com/aws/aws-sdk-go-v2/service/s3"
1818
)
1919

2020
// S3Getter is a Getter implementation that will download a module from
@@ -55,7 +55,7 @@ func (g *S3Getter) ClientMode(u *url.URL) (ClientMode, error) {
5555
Bucket: aws.String(bucket),
5656
Prefix: aws.String(path),
5757
}
58-
resp, err := client.ListObjectsWithContext(ctx, req)
58+
resp, err := client.ListObjects(ctx, req)
5959
if err != nil {
6060
return 0, err
6161
}
@@ -127,17 +127,17 @@ func (g *S3Getter) Get(dst string, u *url.URL) error {
127127
req.Marker = aws.String(lastMarker)
128128
}
129129

130-
resp, err := client.ListObjectsWithContext(ctx, req)
130+
resp, err := client.ListObjects(ctx, req)
131131
if err != nil {
132132
return err
133133
}
134134

135-
hasMore = aws.BoolValue(resp.IsTruncated)
135+
hasMore = resp.IsTruncated
136136

137137
// Get each object storing each file relative to the destination path
138138
for _, object := range resp.Contents {
139-
lastMarker = aws.StringValue(object.Key)
140-
objPath := aws.StringValue(object.Key)
139+
lastMarker = *object.Key
140+
objPath := *object.Key
141141

142142
// If the key ends with a backslash assume it is a directory and ignore
143143
if strings.HasSuffix(objPath, "/") {
@@ -182,7 +182,7 @@ func (g *S3Getter) GetFile(dst string, u *url.URL) error {
182182
return g.getObject(ctx, client, dst, bucket, path, version)
183183
}
184184

185-
func (g *S3Getter) getObject(ctx context.Context, client *s3.S3, dst, bucket, key, version string) error {
185+
func (g *S3Getter) getObject(ctx context.Context, client *s3.Client, dst, bucket, key, version string) error {
186186
req := &s3.GetObjectInput{
187187
Bucket: aws.String(bucket),
188188
Key: aws.String(key),
@@ -191,7 +191,7 @@ func (g *S3Getter) getObject(ctx context.Context, client *s3.S3, dst, bucket, ke
191191
req.VersionId = aws.String(version)
192192
}
193193

194-
resp, err := client.GetObjectWithContext(ctx, req)
194+
resp, err := client.GetObject(ctx, req)
195195
if err != nil {
196196
return err
197197
}
@@ -205,47 +205,50 @@ func (g *S3Getter) getObject(ctx context.Context, client *s3.S3, dst, bucket, ke
205205

206206
if g.client != nil && g.client.ProgressListener != nil {
207207
fn := filepath.Base(key)
208-
body = g.client.ProgressListener.TrackProgress(fn, 0, *resp.ContentLength, resp.Body)
208+
body = g.client.ProgressListener.TrackProgress(fn, 0, resp.ContentLength, resp.Body)
209209
}
210210
defer body.Close()
211211

212212
// There is no limit set for the size of an object from S3
213213
return copyReader(dst, body, 0666, g.client.umask(), 0)
214214
}
215215

216-
func (g *S3Getter) getAWSConfig(region string, url *url.URL, creds *credentials.Credentials) *aws.Config {
217-
conf := &aws.Config{}
216+
func (g *S3Getter) getAWSConfig(region string, url *url.URL, staticCreds *credentials.StaticCredentialsProvider) (conf aws.Config, err error) {
217+
var loadOptions []func(*config.LoadOptions) error
218+
var creds aws.CredentialsProvider
219+
218220
metadataURLOverride := os.Getenv("AWS_METADATA_URL")
219-
if creds == nil && metadataURLOverride != "" {
220-
creds = credentials.NewChainCredentials(
221-
[]credentials.Provider{
222-
&credentials.EnvProvider{},
223-
&credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
224-
&ec2rolecreds.EC2RoleProvider{
225-
Client: ec2metadata.New(session.New(&aws.Config{
226-
Endpoint: aws.String(metadataURLOverride),
227-
})),
228-
},
221+
if staticCreds == nil && metadataURLOverride != "" {
222+
creds = ec2rolecreds.New(func(o *ec2rolecreds.Options) {
223+
o.Client = imds.New(imds.Options{
224+
Endpoint: metadataURLOverride,
225+
ClientEnableState: imds.ClientEnabled,
229226
})
227+
})
228+
} else if staticCreds != nil {
229+
creds = staticCreds
230230
}
231231

232232
if creds != nil {
233-
conf.Endpoint = &url.Host
234-
conf.S3ForcePathStyle = aws.Bool(true)
235-
if url.Scheme == "http" {
236-
conf.DisableSSL = aws.Bool(true)
237-
}
233+
loadOptions = append(loadOptions,
234+
config.WithEC2IMDSClientEnableState(imds.ClientEnabled),
235+
config.WithCredentialsProvider(creds),
236+
config.WithEndpointResolverWithOptions(aws.EndpointResolverWithOptionsFunc(
237+
func(service, region string, options ...interface{}) (aws.Endpoint, error) {
238+
return aws.Endpoint{URL: url.Host}, nil
239+
},
240+
)))
238241
}
239242

240243
conf.Credentials = creds
241244
if region != "" {
242-
conf.Region = aws.String(region)
245+
loadOptions = append(loadOptions, config.WithRegion(region))
243246
}
244247

245-
return conf.WithCredentialsChainVerboseErrors(true)
248+
return config.LoadDefaultConfig(context.TODO(), loadOptions...)
246249
}
247250

248-
func (g *S3Getter) parseUrl(u *url.URL) (region, bucket, path, version string, creds *credentials.Credentials, err error) {
251+
func (g *S3Getter) parseUrl(u *url.URL) (region, bucket, path, version string, creds *credentials.StaticCredentialsProvider, err error) {
249252
// This just check whether we are dealing with S3 or
250253
// any other S3 compliant service. S3 has a predictable
251254
// url as others do not
@@ -314,34 +317,36 @@ func (g *S3Getter) parseUrl(u *url.URL) (region, bucket, path, version string, c
314317
_, hasAwsSecret := u.Query()["aws_access_key_secret"]
315318
_, hasAwsToken := u.Query()["aws_access_token"]
316319
if hasAwsId || hasAwsSecret || hasAwsToken {
317-
creds = credentials.NewStaticCredentials(
320+
provider := credentials.NewStaticCredentialsProvider(
318321
u.Query().Get("aws_access_key_id"),
319322
u.Query().Get("aws_access_key_secret"),
320323
u.Query().Get("aws_access_token"),
321324
)
325+
creds = &provider
322326
}
323327

324328
return
325329
}
326330

327331
func (g *S3Getter) newS3Client(
328-
region string, url *url.URL, creds *credentials.Credentials,
329-
) (*s3.S3, error) {
330-
var sess *session.Session
332+
region string, url *url.URL, creds *credentials.StaticCredentialsProvider,
333+
) (*s3.Client, error) {
334+
var err error
335+
var cfg aws.Config
331336

332337
if profile := url.Query().Get("aws_profile"); profile != "" {
333-
var err error
334-
sess, err = session.NewSessionWithOptions(session.Options{
335-
Profile: profile,
336-
SharedConfigState: session.SharedConfigEnable,
337-
})
338-
if err != nil {
339-
return nil, err
340-
}
338+
cfg, err = config.LoadDefaultConfig(context.TODO(),
339+
config.WithSharedConfigProfile(profile),
340+
)
341341
} else {
342-
config := g.getAWSConfig(region, url, creds)
343-
sess = session.New(config)
342+
cfg, err = g.getAWSConfig(region, url, creds)
343+
}
344+
345+
if err != nil {
346+
return nil, err
344347
}
345348

346-
return s3.New(sess), nil
349+
return s3.NewFromConfig(cfg, func(opts *s3.Options) {
350+
opts.UsePathStyle = true
351+
}), nil
347352
}

get_s3_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package getter
22

33
import (
4+
"errors"
45
"net/url"
56
"os"
67
"path/filepath"
78
"testing"
89

9-
"github.com/aws/aws-sdk-go/aws/awserr"
10+
awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
1011
)
1112

1213
// Note for external contributors: In order to run the S3 test suite, you will only be able to be run
@@ -84,7 +85,8 @@ func TestS3Getter_GetFile_badParams(t *testing.T) {
8485
t.Fatalf("expected error, got none")
8586
}
8687

87-
if reqerr, ok := err.(awserr.RequestFailure); !ok || reqerr.StatusCode() != 403 {
88+
var respErr *awshttp.ResponseError
89+
if errors.As(err, &respErr) && respErr.HTTPStatusCode() != 403 {
8890
t.Fatalf("expected InvalidAccessKeyId error")
8991
}
9092
}

go.mod

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ module github.com/hashicorp/go-getter
33
require (
44
cloud.google.com/go/iam v0.5.0 // indirect
55
cloud.google.com/go/storage v1.27.0
6-
github.com/aws/aws-sdk-go v1.44.122
6+
github.com/aws/aws-sdk-go-v2 v1.21.2
7+
github.com/aws/aws-sdk-go-v2/config v1.19.0
8+
github.com/aws/aws-sdk-go-v2/credentials v1.13.43
9+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13
10+
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2
711
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d
812
github.com/cheggaaa/pb v1.0.27
9-
github.com/davecgh/go-spew v1.1.1 // indirect
1013
github.com/fatih/color v1.7.0 // indirect
1114
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
1215
github.com/hashicorp/go-cleanhttp v0.5.2

go.sum

+36-12
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,42 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
183183
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
184184
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
185185
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
186-
github.com/aws/aws-sdk-go v1.44.122 h1:p6mw01WBaNpbdP2xrisz5tIkcNwzj/HysobNoaAHjgo=
187-
github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
186+
github.com/aws/aws-sdk-go-v2 v1.21.2 h1:+LXZ0sgo8quN9UOKXXzAWRT3FWd4NxeXWOZom9pE7GA=
187+
github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM=
188+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 h1:Sc82v7tDQ/vdU1WtuSyzZ1I7y/68j//HJ6uozND1IDs=
189+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14/go.mod h1:9NCTOURS8OpxvoAVHq79LK81/zC78hfRWFn+aL0SPcY=
190+
github.com/aws/aws-sdk-go-v2/config v1.19.0 h1:AdzDvwH6dWuVARCl3RTLGRc4Ogy+N7yLFxVxXe1ClQ0=
191+
github.com/aws/aws-sdk-go-v2/config v1.19.0/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE=
192+
github.com/aws/aws-sdk-go-v2/credentials v1.13.43 h1:LU8vo40zBlo3R7bAvBVy/ku4nxGEyZe9N8MqAeFTzF8=
193+
github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg=
194+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 h1:PIktER+hwIG286DqXyvVENjgLTAwGgoeriLDD5C+YlQ=
195+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg=
196+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 h1:nFBQlGtkbPzp/NjZLuFxRqmT91rLJkgvsEQs68h962Y=
197+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ=
198+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 h1:JRVhO25+r3ar2mKGP7E0LDl8K9/G36gjlqca5iQbaqc=
199+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8=
200+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 h1:hze8YsjSh8Wl1rYa1CJpRmXP21BvOBuc76YhW0HsuQ4=
201+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE=
202+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6 h1:wmGLw2i8ZTlHLw7a9ULGfQbuccw8uIiNr6sol5bFzc8=
203+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6/go.mod h1:Q0Hq2X/NuL7z8b1Dww8rmOFl+jzusKEcyvkKspwdpyc=
204+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 h1:7R8uRYyXzdD71KWVCL78lJZltah6VVznXBazvKjfH58=
205+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15/go.mod h1:26SQUPcTNgV1Tapwdt4a1rOsYRsnBsJHLMPoxK2b0d8=
206+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38 h1:skaFGzv+3kA+v2BPKhuekeb1Hbb105+44r8ASC+q5SE=
207+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38/go.mod h1:epIZoRSSbRIwLPJU5F+OldHhwZPBdpDeQkRdCeY3+00=
208+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 h1:WWZA/I2K4ptBS1kg0kV1JbBtG/umed0vwHRrmcr9z7k=
209+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck=
210+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6 h1:9ulSU5ClouoPIYhDQdg9tpl83d5Yb91PXTKK+17q+ow=
211+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6/go.mod h1:lnc2taBsR9nTlz9meD+lhFZZ9EWY712QHrRflWpTcOA=
212+
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2 h1:Ll5/YVCOzRB+gxPqs2uD0R7/MyATC0w85626glSKmp4=
213+
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2/go.mod h1:Zjfqt7KhQK+PO1bbOsFNzKgaq7TcxzmEoDWN8lM0qzQ=
214+
github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 h1:JuPGc7IkOP4AaqcZSIcyqLpFSqBWK32rM9+a1g6u73k=
215+
github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo=
216+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 h1:HFiiRkf1SdaAmV3/BHOFZ9DjFynPHj8G/UIO1lQS+fk=
217+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg=
218+
github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 h1:0BkLfgeDjfZnZ+MhB3ONb01u9pwFYTCZVhlsSSBvlbU=
219+
github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ=
220+
github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8=
221+
github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
188222
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=
189223
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
190224
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -206,8 +240,6 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH
206240
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
207241
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
208242
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
209-
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
210-
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
211243
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
212244
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
213245
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -327,19 +359,15 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
327359
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
328360
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
329361
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
330-
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
331362
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
332-
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
333363
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
334364
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
335365
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
336366
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
337367
github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c=
338368
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
339-
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
340369
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
341370
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
342-
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
343371
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
344372
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
345373
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
@@ -351,8 +379,6 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
351379
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
352380
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
353381
github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
354-
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
355-
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
356382
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
357383
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
358384
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
@@ -865,14 +891,12 @@ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw
865891
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
866892
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
867893
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
868-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
869894
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
870895
gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo=
871896
gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
872897
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
873898
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
874899
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
875-
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
876900
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
877901
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
878902
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

0 commit comments

Comments
 (0)