Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package minio-client for openSUSE:Factory checked in at 2022-05-16 18:08:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/minio-client (Old) and /work/SRC/openSUSE:Factory/.minio-client.new.1538 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "minio-client" Mon May 16 18:08:54 2022 rev:7 rq:977517 version:20220509T040826Z Changes: -------- --- /work/SRC/openSUSE:Factory/minio-client/minio-client.changes 2022-05-06 18:59:56.965396573 +0200 +++ /work/SRC/openSUSE:Factory/.minio-client.new.1538/minio-client.changes 2022-05-16 18:11:24.349415989 +0200 @@ -1,0 +2,12 @@ +Sat May 14 18:38:17 UTC 2022 - ka...@b1-systems.de + +- Update to version 20220509T040826Z: + * Prefix version suspension (#4064) + * doc: Fix broken link (#4072) + * avoid cascading deletes for active-active setups (#4079) + * Fix example for `mc admin replicate edit` (#4080) + * Add admin prometheus metrics (#4049) + * Use latest version of madmin-go (1.3.13) (#4075) + * Add support for minio warm tier (#4009) + +------------------------------------------------------------------- Old: ---- mc-20220504T060755Z.tar.gz New: ---- mc-20220509T040826Z.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ minio-client.spec ++++++ --- /var/tmp/diff_new_pack.8XWhU6/_old 2022-05-16 18:11:25.121416602 +0200 +++ /var/tmp/diff_new_pack.8XWhU6/_new 2022-05-16 18:11:25.125416606 +0200 @@ -22,7 +22,7 @@ %define binary_name minio-client Name: minio-client -Version: 20220504T060755Z +Version: 20220509T040826Z Release: 0 Summary: Client for MinIO License: AGPL-3.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.8XWhU6/_old 2022-05-16 18:11:25.161416634 +0200 +++ /var/tmp/diff_new_pack.8XWhU6/_new 2022-05-16 18:11:25.165416637 +0200 @@ -5,7 +5,7 @@ <param name="exclude">.git</param> <param name="changesgenerate">enable</param> <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">RELEASE.2022-05-04T06-07-55Z</param> + <param name="revision">RELEASE.2022-05-09T04-08-26Z</param> <param name="match-tag">RELEASE.*</param> <param name="versionrewrite-pattern">RELEASE\.(.*)-(.*)-(.*)-(.*)-(.*)</param> <param name="versionrewrite-replacement">\1\2\3\4\5</param> @@ -21,7 +21,7 @@ <param name="compression">gz</param> </service> <service name="go_modules" mode="disabled"> - <param name="archive">mc-20220504T060755Z.tar.gz</param> + <param name="archive">mc-20220509T040826Z.tar.gz</param> </service> </services> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.8XWhU6/_old 2022-05-16 18:11:25.189416656 +0200 +++ /var/tmp/diff_new_pack.8XWhU6/_new 2022-05-16 18:11:25.193416659 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/minio/mc</param> - <param name="changesrevision">5619a78ead66ba651bcbc36df61ef892e470b8ea</param></service></servicedata> + <param name="changesrevision">b5a0640899f8f8653bcacd19791c92ca22066ba3</param></service></servicedata> (No newline at EOF) ++++++ mc-20220504T060755Z.tar.gz -> mc-20220509T040826Z.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/README.md new/mc-20220509T040826Z/README.md --- old/mc-20220504T060755Z/README.md 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/README.md 2022-05-09 03:15:17.000000000 +0200 @@ -59,7 +59,7 @@ then use the [`mc alias` command](#add-a-cloud-storage-service). ### GitLab CI -When using the Docker container in GitLab CI, you must [set the entrypoint to an empty string](https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#overriding-the-entrypoint-of-an-image). +When using the Docker container in GitLab CI, you must [set the entrypoint to an empty string](https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#override-the-entrypoint-of-an-image). ``` deploy: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/admin-prometheus-generate.go new/mc-20220509T040826Z/cmd/admin-prometheus-generate.go --- old/mc-20220504T060755Z/cmd/admin-prometheus-generate.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/admin-prometheus-generate.go 2022-05-09 03:15:17.000000000 +0200 @@ -27,7 +27,6 @@ "github.com/minio/mc/pkg/probe" "github.com/minio/pkg/console" - jwtgo "github.com/golang-jwt/jwt/v4" json "github.com/minio/colorjson" yaml "gopkg.in/yaml.v2" ) @@ -165,17 +164,10 @@ } if !ctx.Bool("public") { - jwt := jwtgo.NewWithClaims(jwtgo.SigningMethodHS512, jwtgo.StandardClaims{ - ExpiresAt: UTCNow().Add(defaultPrometheusJWTExpiry).Unix(), - Subject: hostConfig.AccessKey, - Issuer: "prometheus", - }) - - token, e := jwt.SignedString([]byte(hostConfig.SecretKey)) + token, e := getPrometheusToken(hostConfig) if e != nil { return e } - // Setting the values defaultConfig.ScrapeConfigs[0].BearerToken = token } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/admin-prometheus-metrics.go new/mc-20220509T040826Z/cmd/admin-prometheus-metrics.go --- old/mc-20220504T060755Z/cmd/admin-prometheus-metrics.go 1970-01-01 01:00:00.000000000 +0100 +++ new/mc-20220509T040826Z/cmd/admin-prometheus-metrics.go 2022-05-09 03:15:17.000000000 +0200 @@ -0,0 +1,140 @@ +// Copyright (c) 2015-2022 MinIO, Inc. +// +// This file is part of MinIO Object Storage stack +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +package cmd + +import ( + "io" + "io/ioutil" + "net/http" + "time" + + "github.com/minio/cli" + json "github.com/minio/colorjson" + "github.com/minio/mc/pkg/probe" + dto "github.com/prometheus/client_model/go" + prom2json "github.com/prometheus/prom2json" +) + +var adminPrometheusMetricsCmd = cli.Command{ + Name: "metrics", + Usage: "print cluster wide prometheus metrics", + OnUsageError: onUsageError, + Action: mainSupportMetrics, + Before: setGlobalsFromContext, + Flags: globalFlags, + CustomHelpTemplate: `NAME: + {{.HelpName}} - {{.Usage}} +USAGE: + {{.HelpName}} TARGET +FLAGS: + {{range .VisibleFlags}}{{.}} + {{end}} +EXAMPLES: + 1. List of metrics reported cluster wide. + {{.Prompt}} {{.HelpName}} play +`, +} + +const ( + metricsRespBodyLimit = 10 << 20 // 10 MiB + metricsEndPoint = "/minio/v2/metrics/cluster" +) + +// checkSupportMetricsSyntax - validate arguments passed by a user +func checkSupportMetricsSyntax(ctx *cli.Context) { + if len(ctx.Args()) == 0 || len(ctx.Args()) > 1 { + cli.ShowCommandHelpAndExit(ctx, "metrics", 1) // last argument is exit code + } +} + +func printPrometheusMetrics(ctx *cli.Context) error { + // Get the alias parameter from cli + args := ctx.Args() + alias := cleanAlias(args.Get(0)) + + if !isValidAlias(alias) { + fatalIf(errInvalidAlias(alias), "Invalid alias.") + } + hostConfig := mustGetHostConfig(alias) + if hostConfig == nil { + fatalIf(errInvalidAliasedURL(alias), "No such alias `"+alias+"` found.") + return nil + } + + token, e := getPrometheusToken(hostConfig) + if e != nil { + return e + } + + req, e := http.NewRequest(http.MethodGet, hostConfig.URL+metricsEndPoint, nil) + if e != nil { + return e + } + req.Header.Add("Authorization", "Bearer "+token) + client := httpClient(10 * time.Second) + resp, e := client.Do(req) + if e != nil { + return e + } + + defer resp.Body.Close() + + if resp.StatusCode == http.StatusOK { + printMsg(prometheusMetricsReader{Reader: io.LimitReader(resp.Body, metricsRespBodyLimit)}) + } + return nil +} + +// JSON returns jsonified message +func (pm prometheusMetricsReader) JSON() string { + mfChan := make(chan *dto.MetricFamily) + go func() { + if err := prom2json.ParseReader(pm.Reader, mfChan); err != nil { + fatalIf(probe.NewError(err), "error reading metrics:") + } + }() + result := []*prom2json.Family{} + for mf := range mfChan { + result = append(result, prom2json.NewFamily(mf)) + } + jsonMessageBytes, e := json.MarshalIndent(result, "", " ") + fatalIf(probe.NewError(e), "Unable to marshal into JSON.") + return string(jsonMessageBytes) +} + +// String - returns the string representation of the prometheus metrics +func (pm prometheusMetricsReader) String() string { + respBytes, e := ioutil.ReadAll(pm.Reader) + if e != nil { + fatalIf(probe.NewError(e), "error reading metrics:") + } + return string(respBytes) +} + +// prometheusMetricsReader mirrors the MetricFamily proto message. +type prometheusMetricsReader struct { + Reader io.Reader +} + +func mainSupportMetrics(ctx *cli.Context) error { + checkSupportMetricsSyntax(ctx) + if err := printPrometheusMetrics(ctx); err != nil { + fatalIf(probe.NewError(err), "Error in listing prometheus metrics") + } + return nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/admin-prometheus.go new/mc-20220509T040826Z/cmd/admin-prometheus.go --- old/mc-20220504T060755Z/cmd/admin-prometheus.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/admin-prometheus.go 2022-05-09 03:15:17.000000000 +0200 @@ -21,6 +21,7 @@ var adminPrometheusSubcommands = []cli.Command{ adminPrometheusGenerateCmd, + adminPrometheusMetricsCmd, } var adminPrometheusCmd = cli.Command{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/admin-replicate-edit.go new/mc-20220509T040826Z/cmd/admin-replicate-edit.go --- old/mc-20220504T060755Z/cmd/admin-replicate-edit.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/admin-replicate-edit.go 2022-05-09 03:15:17.000000000 +0200 @@ -59,7 +59,7 @@ EXAMPLES: 1. Edit a site endpoint participating in cluster-level replication: - {{.Prompt}} {{.HelpName}} --deployment-id c1758167-4426-454f-9aae-5c3dfdf6df64 --endpoint https://minio2:9000 + {{.Prompt}} {{.HelpName}} myminio --deployment-id c1758167-4426-454f-9aae-5c3dfdf6df64 --endpoint https://minio2:9000 `, } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/admin-tier-add.go new/mc-20220509T040826Z/cmd/admin-tier-add.go --- old/mc-20220504T060755Z/cmd/admin-tier-add.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/admin-tier-add.go 2022-05-09 03:15:17.000000000 +0200 @@ -101,7 +101,7 @@ {{.HelpName}} TYPE ALIAS NAME [FLAGS] TYPE: - Transition objects to supported cloud storage backend tier. Supported values are s3, azure and gcs. + Transition objects to supported cloud storage backend tier. Supported values are minio, s3, azure and gcs. NAME: Name of the remote tier target. e.g WARM-TIER @@ -110,23 +110,22 @@ {{range .VisibleFlags}}{{.}} {{end}} EXAMPLES: - 1. Configure a new remote tier which transitions objects to a bucket in Azure Blob Storage: + 1. Configure a new remote tier which transitions objects to a bucket in AWS S3 with STANDARD storage class: + {{.Prompt}} {{.HelpName}} minio myminio WARM-MINIO-TIER --endpoint https://warm-minio.com \ + --access-key ACCESSKEY --secret-key SECRETKEY --bucket mybucket --prefix myprefix/ + + 2. Configure a new remote tier which transitions objects to a bucket in Azure Blob Storage: {{.Prompt}} {{.HelpName}} azure myminio AZTIER --account-name ACCOUNT-NAME --account-key ACCOUNT-KEY \ --bucket myazurebucket --prefix myazureprefix/ - 2. Configure a new remote tier which transitions objects to a bucket in AWS S3 with STANDARD storage class: + 3. Configure a new remote tier which transitions objects to a bucket in AWS S3 with STANDARD storage class: {{.Prompt}} {{.HelpName}} s3 myminio S3TIER --endpoint https://s3.amazonaws.com \ --access-key ACCESSKEY --secret-key SECRETKEY --bucket mys3bucket --prefix mys3prefix/ \ --storage-class "STANDARD" --region us-west-2 - 3. Configure a new remote tier which transitions objects to a bucket in Google Cloud Storage: + 4. Configure a new remote tier which transitions objects to a bucket in Google Cloud Storage: {{.Prompt}} {{.HelpName}} gcs myminio GCSTIER --credentials-file /path/to/credentials.json \ --bucket mygcsbucket --prefix mygcsprefix/ - - 4. Configure a new remote tier which transitions objects to a bucket in AWS S3 with STANDARD storage class using aws role: - {{.Prompt}} {{.HelpName}} s3 myminio S3TIER --endpoint https://s3.amazonaws.com \ - --use-aws-role --bucket mys3bucket --prefix mys3prefix/ --storage-class "STANDARD" \ - --region us-east-2 `, } @@ -152,6 +151,40 @@ // the flags contain invalid values. func fetchTierConfig(ctx *cli.Context, tierName string, tierType madmin.TierType) *madmin.TierConfig { switch tierType { + case madmin.MinIO: + accessKey := ctx.String("access-key") + secretKey := ctx.String("secret-key") + if accessKey == "" || secretKey == "" { + fatalIf(errInvalidArgument().Trace(), fmt.Sprintf("%s remote tier requires access credentials", tierType)) + } + bucket := ctx.String("bucket") + if bucket == "" { + fatalIf(errInvalidArgument().Trace(), fmt.Sprintf("%s remote tier requires target bucket", tierType)) + } + + endpoint := ctx.String("endpoint") + if endpoint == "" { + fatalIf(errInvalidArgument().Trace(), fmt.Sprintf("%s remote tier requires target endpoint", tierType)) + } + + minioOpts := []madmin.MinIOOptions{} + prefix := ctx.String("prefix") + if prefix != "" { + minioOpts = append(minioOpts, madmin.MinIOPrefix(prefix)) + } + + region := ctx.String("region") + if region != "" { + minioOpts = append(minioOpts, madmin.MinIORegion(region)) + } + + minioCfg, err := madmin.NewTierMinIO(tierName, endpoint, accessKey, secretKey, bucket, minioOpts...) + if err != nil { + fatalIf(probe.NewError(err), "Invalid configuration for MinIO tier") + } + + return minioCfg + case madmin.S3: accessKey := ctx.String("access-key") secretKey := ctx.String("secret-key") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/auto-complete.go new/mc-20220509T040826Z/cmd/auto-complete.go --- old/mc-20220504T060755Z/cmd/auto-complete.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/auto-complete.go 2022-05-09 03:15:17.000000000 +0200 @@ -334,6 +334,7 @@ "/admin/service/restart": aliasCompleter, "/admin/prometheus/generate": aliasCompleter, + "/admin/prometheus/metrics": aliasCompleter, "/admin/profile/start": aliasCompleter, "/admin/profile/stop": aliasCompleter, @@ -410,6 +411,7 @@ "/support/profile/stop": aliasCompleter, "/support/inspect": aliasCompleter, "/support/perf": aliasCompleter, + "/support/metrics": aliasCompleter, "/update": nil, } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/client-fs.go new/mc-20220509T040826Z/cmd/client-fs.go --- old/mc-20220504T060755Z/cmd/client-fs.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/client-fs.go 2022-05-09 03:15:17.000000000 +0200 @@ -1195,7 +1195,7 @@ } // SetVersion - Set version configuration on a bucket, not implemented -func (f *fsClient) SetVersion(ctx context.Context, status string) *probe.Error { +func (f *fsClient) SetVersion(ctx context.Context, status string, _ []string, _ bool) *probe.Error { return probe.NewError(APINotImplemented{ API: "SetVersion", APIType: "filesystem", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/client-s3.go new/mc-20220509T040826Z/cmd/client-s3.go --- old/mc-20220504T060755Z/cmd/client-s3.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/client-s3.go 2022-05-09 03:15:17.000000000 +0200 @@ -2526,7 +2526,7 @@ } // SetVersion - Set version configuration on a bucket -func (c *S3Client) SetVersion(ctx context.Context, status string) *probe.Error { +func (c *S3Client) SetVersion(ctx context.Context, status string, prefixes []string, excludeFolders bool) *probe.Error { bucket, _ := c.url2BucketAndObject() if bucket == "" { return probe.NewError(BucketNameEmpty{}) @@ -2534,7 +2534,23 @@ var err error switch status { case "enable": - err = c.api.EnableVersioning(ctx, bucket) + + if len(prefixes) > 0 || excludeFolders { + vc := minio.BucketVersioningConfiguration{ + Status: minio.Enabled, + ExcludeFolders: excludeFolders, + } + if len(prefixes) > 0 { + eprefixes := make([]minio.ExcludedPrefix, 0, len(prefixes)) + for _, prefix := range prefixes { + eprefixes = append(eprefixes, minio.ExcludedPrefix{Prefix: prefix}) + } + vc.ExcludedPrefixes = eprefixes + } + err = c.api.SetBucketVersioning(ctx, bucket, vc) + } else { + err = c.api.EnableVersioning(ctx, bucket) + } case "suspend": err = c.api.SuspendVersioning(ctx, bucket) default: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/client.go new/mc-20220509T040826Z/cmd/client.go --- old/mc-20220504T060755Z/cmd/client.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/client.go 2022-05-09 03:15:17.000000000 +0200 @@ -154,7 +154,7 @@ // Versioning operations GetVersion(ctx context.Context) (minio.BucketVersioningConfiguration, *probe.Error) - SetVersion(ctx context.Context, status string) *probe.Error + SetVersion(ctx context.Context, status string, prefixes []string, excludeFolders bool) *probe.Error // Replication operations GetReplication(ctx context.Context) (replication.Config, *probe.Error) SetReplication(ctx context.Context, cfg *replication.Config, opts replication.Options) *probe.Error diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/common-methods.go new/mc-20220509T040826Z/cmd/common-methods.go --- old/mc-20220504T060755Z/cmd/common-methods.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/common-methods.go 2022-05-09 03:15:17.000000000 +0200 @@ -146,7 +146,8 @@ // getSourceStreamMetadataFromURL gets a reader from URL. func getSourceStreamMetadataFromURL(ctx context.Context, aliasedURL, versionID string, timeRef time.Time, encKeyDB map[string][]prefixSSEPair) (reader io.ReadCloser, - metadata map[string]string, err *probe.Error) { + metadata map[string]string, err *probe.Error, +) { alias, urlStrFull, _, err := expandAlias(aliasedURL) if err != nil { return nil, nil, err.Trace(aliasedURL) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/ilm/tabular_info.go new/mc-20220509T040826Z/cmd/ilm/tabular_info.go --- old/mc-20220504T060755Z/cmd/ilm/tabular_info.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/ilm/tabular_info.go 2022-05-09 03:15:17.000000000 +0200 @@ -155,7 +155,8 @@ // Multiple rows are required for display of data with tags. // Each 'key:value' pair is shown in 1 row and the rest of it is cells populated with blanks. func checkAddTableCellRows(rowArr *[]string, rowCheck map[string]int, showOpts showDetails, - cellInfo tableCellInfo, ruleID string, newRows map[string][]string) { + cellInfo tableCellInfo, ruleID string, newRows map[string][]string, +) { var cellLabel string multLth := len(cellInfo.multLabels) if cellInfo.label != "" || multLth == 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/mirror-main.go new/mc-20220509T040826Z/cmd/mirror-main.go --- old/mc-20220504T060755Z/cmd/mirror-main.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/mirror-main.go 2022-05-09 03:15:17.000000000 +0200 @@ -339,7 +339,11 @@ if pErr != nil { return sURLs.WithError(pErr) } - clnt.AddUserAgent(uaMirrorAppName, ReleaseTag) + if sURLs.SourceAlias != "" { + clnt.AddUserAgent(uaMirrorAppName+":"+sURLs.SourceAlias, ReleaseTag) + } else { + clnt.AddUserAgent(uaMirrorAppName, ReleaseTag) + } contentCh := make(chan *ClientContent, 1) contentCh <- &ClientContent{URL: *newClientURL(sURLs.TargetContent.URL.Path)} close(contentCh) @@ -607,7 +611,8 @@ return mj.doMirrorWatch(ctx, targetPath, tgtSSE, mirrorURL) }, mirrorURL.SourceContent.Size) } else if event.Type == notification.ObjectRemovedDelete { - if strings.Contains(event.UserAgent, uaMirrorAppName) { + if targetAlias != "" && strings.Contains(event.UserAgent, uaMirrorAppName+":"+targetAlias) { + // Ignore delete cascading delete events if cyclical. continue } mirrorURL := URLs{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/retention-common.go new/mc-20220509T040826Z/cmd/retention-common.go --- old/mc-20220504T060755Z/cmd/retention-common.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/retention-common.go 2022-05-09 03:15:17.000000000 +0200 @@ -180,7 +180,8 @@ // Apply Retention for one object/version or many objects within a given prefix. func applyRetention(ctx context.Context, op lockOpType, target, versionID string, timeRef time.Time, withOlderVersions, isRecursive bool, - mode minio.RetentionMode, validity uint64, unit minio.ValidityUnit, bypassGovernance bool) error { + mode minio.RetentionMode, validity uint64, unit minio.ValidityUnit, bypassGovernance bool, +) error { clnt, err := newClient(target) if err != nil { fatalIf(err.Trace(), "Unable to parse the provided url.") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/retention-set.go new/mc-20220509T040826Z/cmd/retention-set.go --- old/mc-20220504T060755Z/cmd/retention-set.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/retention-set.go 2022-05-09 03:15:17.000000000 +0200 @@ -129,7 +129,8 @@ // Set Retention for one object/version or many objects within a given prefix. func setRetention(ctx context.Context, target, versionID string, timeRef time.Time, withOlderVersions, isRecursive bool, - mode minio.RetentionMode, validity uint64, unit minio.ValidityUnit, bypassGovernance bool) error { + mode minio.RetentionMode, validity uint64, unit minio.ValidityUnit, bypassGovernance bool, +) error { return applyRetention(ctx, lockOpSet, target, versionID, timeRef, withOlderVersions, isRecursive, mode, validity, unit, bypassGovernance) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/subnet-utils.go new/mc-20220509T040826Z/cmd/subnet-utils.go --- old/mc-20220504T060755Z/cmd/subnet-utils.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/subnet-utils.go 2022-05-09 03:15:17.000000000 +0200 @@ -147,7 +147,7 @@ return map[string]string{"Authorization": "Bearer " + authToken} } -func httpDo(req *http.Request) (*http.Response, error) { +func subnetHTTPDo(req *http.Request) (*http.Response, error) { client := httpClient(10 * time.Second) if globalSubnetProxyURL != nil { client.Transport.(*http.Transport).Proxy = http.ProxyURL(globalSubnetProxyURL) @@ -165,7 +165,7 @@ r.Header.Add("Content-Type", "application/json") } - resp, e := httpDo(r) + resp, e := subnetHTTPDo(r) if e != nil { return "", e } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/utils.go new/mc-20220509T040826Z/cmd/utils.go --- old/mc-20220504T060755Z/cmd/utils.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/utils.go 2022-05-09 03:15:17.000000000 +0200 @@ -40,6 +40,7 @@ "github.com/minio/minio-go/v7/pkg/encrypt" "maze.io/x/duration" + jwtgo "github.com/golang-jwt/jwt/v4" "github.com/minio/mc/pkg/probe" "github.com/minio/pkg/console" ) @@ -449,3 +450,17 @@ }, } } + +func getPrometheusToken(hostConfig *aliasConfigV10) (string, error) { + jwt := jwtgo.NewWithClaims(jwtgo.SigningMethodHS512, jwtgo.StandardClaims{ + ExpiresAt: UTCNow().Add(defaultPrometheusJWTExpiry).Unix(), + Subject: hostConfig.AccessKey, + Issuer: "prometheus", + }) + + token, e := jwt.SignedString([]byte(hostConfig.SecretKey)) + if e != nil { + return "", e + } + return token, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/version-enable.go new/mc-20220509T040826Z/cmd/version-enable.go --- old/mc-20220504T060755Z/cmd/version-enable.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/version-enable.go 2022-05-09 03:15:17.000000000 +0200 @@ -20,6 +20,7 @@ import ( "context" "fmt" + "strings" "github.com/fatih/color" "github.com/minio/cli" @@ -28,13 +29,24 @@ "github.com/minio/pkg/console" ) +var versionEnableFlags = []cli.Flag{ + cli.StringFlag{ + Name: "excluded-prefixes", + Usage: "exclude versioning on these prefix patterns", + }, + cli.BoolFlag{ + Name: "exclude-folders", + Usage: "exclude versioning on folder objects", + }, +} + var versionEnableCmd = cli.Command{ Name: "enable", Usage: "enable bucket versioning", Action: mainVersionEnable, OnUsageError: onUsageError, Before: setGlobalsFromContext, - Flags: globalFlags, + Flags: append(globalFlags, versionEnableFlags...), CustomHelpTemplate: `NAME: {{.HelpName}} - {{.Usage}} @@ -47,6 +59,13 @@ EXAMPLES: 1. Enable versioning on bucket "mybucket" for alias "myminio". {{.Prompt}} {{.HelpName}} myminio/mybucket + + 2. Enable versioning on bucket "mybucket" while excluding versioning on a few select prefixes. + {{.Prompt}} {{.HelpName}} myminio/mybucket --excluded-prefixes "app1/*/_temporary/,app2/*/_staging/" + + 3. Enable versioning on bucket "mybucket" while excluding versioning on a few select prefixes and all folders. + Note: this is useful on buckets used with Spark/Hadoop workloads. + {{.Prompt}} {{.HelpName}} myminio/mybucket --excluded-prefixes "app1/*/_temporary/,app2/*/_staging/" --exclude-folders `, } @@ -62,8 +81,10 @@ Status string `json:"status"` URL string `json:"url"` Versioning struct { - Status string `json:"status"` - MFADelete string `json:"MFADelete"` + Status string `json:"status"` + MFADelete string `json:"MFADelete"` + ExcludedPrefixes []string `json:"ExcludedPrefixes,omitempty"` + ExcludeFolders bool `json:"ExcludeFolders,,omitempty"` } `json:"versioning"` } @@ -89,10 +110,18 @@ // Get the alias parameter from cli args := cliCtx.Args() aliasedURL := args.Get(0) + + var excludedPrefixes []string + prefixesStr := cliCtx.String("excluded-prefixes") + if prefixesStr != "" { + excludedPrefixes = strings.Split(prefixesStr, ",") + } + excludeFolders := cliCtx.Bool("exclude-folders") + // Create a new Client client, err := newClient(aliasedURL) fatalIf(err, "Unable to initialize connection.") - fatalIf(client.SetVersion(ctx, "enable"), "Unable to enable versioning") + fatalIf(client.SetVersion(ctx, "enable", excludedPrefixes, excludeFolders), "Unable to enable versioning") printMsg(versionEnableMessage{ Op: "enable", Status: "success", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/version-info.go new/mc-20220509T040826Z/cmd/version-info.go --- old/mc-20220504T060755Z/cmd/version-info.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/version-info.go 2022-05-09 03:15:17.000000000 +0200 @@ -63,8 +63,10 @@ Status string `json:"status"` URL string `json:"url"` Versioning struct { - Status string `json:"status"` - MFADelete string `json:"MFADelete"` + Status string `json:"status"` + MFADelete string `json:"MFADelete"` + ExcludedPrefixes []string `json:"ExcludedPrefixes,omitempty"` + ExcludeFolders bool `json:"ExcludeFolders,omitempty"` } `json:"versioning"` } @@ -109,6 +111,15 @@ } vMsg.Versioning.Status = vConfig.Status vMsg.Versioning.MFADelete = vConfig.MFADelete + vMsg.Versioning.ExcludeFolders = vConfig.ExcludeFolders + if len(vConfig.ExcludedPrefixes) > 0 { + prefixes := make([]string, 0, len(vConfig.ExcludedPrefixes)) + for _, eprefix := range vConfig.ExcludedPrefixes { + prefixes = append(prefixes, eprefix.Prefix) + } + vMsg.Versioning.ExcludedPrefixes = prefixes + } + printMsg(vMsg) return nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/cmd/version-suspend.go new/mc-20220509T040826Z/cmd/version-suspend.go --- old/mc-20220504T060755Z/cmd/version-suspend.go 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/cmd/version-suspend.go 2022-05-09 03:15:17.000000000 +0200 @@ -89,10 +89,11 @@ // Get the alias parameter from cli args := cliCtx.Args() aliasedURL := args.Get(0) + // Create a new Client client, err := newClient(aliasedURL) fatalIf(err, "Unable to initialize connection.") - fatalIf(client.SetVersion(ctx, "suspend"), "Unable to suspend versioning") + fatalIf(client.SetVersion(ctx, "suspend", nil, false), "Unable to suspend versioning") printMsg(versionSuspendMessage{ Op: "suspend", Status: "success", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/go.mod new/mc-20220509T040826Z/go.mod --- old/mc-20220504T060755Z/go.mod 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/go.mod 2022-05-09 03:15:17.000000000 +0200 @@ -19,23 +19,24 @@ github.com/minio/cli v1.22.0 github.com/minio/colorjson v1.0.2 github.com/minio/filepath v1.0.0 - github.com/minio/madmin-go v1.3.12 + github.com/minio/madmin-go v1.3.13 github.com/minio/md5-simd v1.1.2 // indirect - github.com/minio/minio-go/v7 v7.0.24 + github.com/minio/minio-go/v7 v7.0.26 github.com/minio/pkg v1.1.22 github.com/minio/selfupdate v0.4.0 github.com/minio/sha256-simd v1.0.0 github.com/mitchellh/go-homedir v1.1.0 github.com/pkg/xattr v0.4.4 github.com/posener/complete v1.2.3 - github.com/prometheus/client_golang v1.11.0 + github.com/prometheus/client_golang v1.12.1 + github.com/prometheus/prom2json v1.3.1 github.com/rjeczalik/notify v0.9.2 github.com/rs/xid v1.3.0 github.com/secure-io/sio-go v0.3.1 github.com/shirou/gopsutil/v3 v3.21.12 github.com/tidwall/gjson v1.12.1 - golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f - golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd + golang.org/x/crypto v0.0.0-20220128200615-198e4374d7ed + golang.org/x/net v0.0.0-20220225172249-27dd8689420f golang.org/x/text v0.3.7 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b gopkg.in/h2non/filetype.v1 v1.0.5 @@ -51,6 +52,7 @@ github.com/golang-jwt/jwt/v4 v4.4.1 github.com/navidys/tvxwidgets v0.1.0 github.com/olekukonko/tablewriter v0.0.5 + github.com/prometheus/client_model v0.2.0 github.com/rivo/tview v0.0.0-20211202162923-2a6de950f73b github.com/tinylib/msgp v1.1.6 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 @@ -91,8 +93,7 @@ github.com/philhofer/fwd v1.1.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/common v0.33.0 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/sirupsen/logrus v1.8.1 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mc-20220504T060755Z/go.sum new/mc-20220509T040826Z/go.sum --- old/mc-20220504T060755Z/go.sum 2022-04-29 16:42:08.000000000 +0200 +++ new/mc-20220509T040826Z/go.sum 2022-05-09 03:15:17.000000000 +0200 @@ -135,9 +135,11 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= @@ -341,14 +343,14 @@ github.com/minio/filepath v1.0.0 h1:fvkJu1+6X+ECRA6G3+JJETj4QeAYO9sV43I79H8ubDY= github.com/minio/filepath v1.0.0/go.mod h1:/nRZA2ldl5z6jT9/KQuvZcQlxZIMQoFFQPvEXx9T/Bw= github.com/minio/madmin-go v1.3.5/go.mod h1:vGKGboQgGIWx4DuDUaXixjlIEZOCIp6ivJkQoiVaACc= -github.com/minio/madmin-go v1.3.12 h1:7SmK/KtT7+d3hn3VcYBqI/c4yETfXV9gRT1j+g/U1jE= -github.com/minio/madmin-go v1.3.12/go.mod h1:ez87VmMtsxP7DRxjKJKD4RDNW+nhO2QF9KSzwxBDQ98= +github.com/minio/madmin-go v1.3.13 h1:157u3bFK9qh2EkkqjpJ/bwOw/5KonXUWqhKP3ZczAdY= +github.com/minio/madmin-go v1.3.13/go.mod h1:ez87VmMtsxP7DRxjKJKD4RDNW+nhO2QF9KSzwxBDQ98= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= github.com/minio/minio-go/v7 v7.0.23/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do= -github.com/minio/minio-go/v7 v7.0.24 h1:HPlHiET6L5gIgrHRaw1xFo1OaN4bEP/082asWh3WJtI= -github.com/minio/minio-go/v7 v7.0.24/go.mod h1:x81+AX5gHSfCSqw7jxRKHvxUXMlE5uKX0Vb75Xk5yYg= +github.com/minio/minio-go/v7 v7.0.26 h1:D0HK+8793etZfRY/vHhDmFaP+vmT41K3K4JV9vmZCBQ= +github.com/minio/minio-go/v7 v7.0.26/go.mod h1:x81+AX5gHSfCSqw7jxRKHvxUXMlE5uKX0Vb75Xk5yYg= github.com/minio/pkg v1.1.20/go.mod h1:Xo7LQshlxGa9shKwJ7NzQbgW4s8T/Wc1cOStR/eUiMY= github.com/minio/pkg v1.1.22 h1:Fm3oPu9LJag0FhD5BjFxj0Ut+M8S8IkiPHaq5OAoZaM= github.com/minio/pkg v1.1.22/go.mod h1:z9PfmEI804KFkF6eY4LoGe8IDVvTCsYGVuaf58Dr0WI= @@ -415,8 +417,9 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= 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= @@ -425,14 +428,17 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.33.0 h1:rHgav/0a6+uYgGdNt3jwz8FNSesO/Hsang3O0T9A5SE= +github.com/prometheus/common v0.33.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/prom2json v1.3.1 h1:OogL5hsrJpLPz3jZ4LPz4sJRTtADzViCNRQoqrzUQvk= +github.com/prometheus/prom2json v1.3.1/go.mod h1:A8Oy9aiQx4wrJY9ya1i4nHOySGmkVp5EO0aU1iSJR+g= github.com/rivo/tview v0.0.0-20211202162923-2a6de950f73b h1:EMgbQ+bOHWkl0Ptano8M0yrzVZkxans+Vfv7ox/EtO8= github.com/rivo/tview v0.0.0-20211202162923-2a6de950f73b/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -546,8 +552,8 @@ golang.org/x/crypto v0.0.0-20201217014255-9d1352758620/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220128200615-198e4374d7ed h1:YoWVYYAfvQ4ddHv3OKmIvX7NCAhFGTj62VP2l2kfBbA= +golang.org/x/crypto v0.0.0-20220128200615-198e4374d7ed/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -625,8 +631,9 @@ golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 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= @@ -640,6 +647,7 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= 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= @@ -718,6 +726,8 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/minio-client/vendor.tar.gz /work/SRC/openSUSE:Factory/.minio-client.new.1538/vendor.tar.gz differ: char 5, line 1