1
0
mirror of https://github.com/minio/mc.git synced 2025-11-10 13:42:32 +03:00

Add 'mc admin update' command (#2857)

Also this PR deprecates `service status` command
This commit is contained in:
Harshavardhana
2019-08-28 15:57:25 -07:00
committed by GitHub
parent af7d551010
commit bd7564a2d4
11 changed files with 179 additions and 202 deletions

View File

@@ -16,7 +16,9 @@
package cmd package cmd
import "github.com/minio/cli" import (
"github.com/minio/cli"
)
var adminInfoCmd = cli.Command{ var adminInfoCmd = cli.Command{
Name: "info", Name: "info",

View File

@@ -31,6 +31,7 @@ var adminCmd = cli.Command{
Flags: append(adminFlags, globalFlags...), Flags: append(adminFlags, globalFlags...),
Subcommands: []cli.Command{ Subcommands: []cli.Command{
adminServiceCmd, adminServiceCmd,
adminServerUpdateCmd,
adminInfoCmd, adminInfoCmd,
adminUserCmd, adminUserCmd,
adminGroupCmd, adminGroupCmd,

View File

@@ -24,12 +24,11 @@ import (
json "github.com/minio/mc/pkg/colorjson" json "github.com/minio/mc/pkg/colorjson"
"github.com/minio/mc/pkg/console" "github.com/minio/mc/pkg/console"
"github.com/minio/mc/pkg/probe" "github.com/minio/mc/pkg/probe"
"github.com/minio/minio/pkg/madmin"
) )
var adminServiceRestartCmd = cli.Command{ var adminServiceRestartCmd = cli.Command{
Name: "restart", Name: "restart",
Usage: "restart MinIO server", Usage: "restart all MinIO servers",
Action: mainAdminServiceRestart, Action: mainAdminServiceRestart,
Before: setGlobalsFromContext, Before: setGlobalsFromContext,
Flags: globalFlags, Flags: globalFlags,
@@ -114,8 +113,7 @@ func mainAdminServiceRestart(ctx *cli.Context) error {
fatalIf(err, "Cannot get a configured admin connection.") fatalIf(err, "Cannot get a configured admin connection.")
// Restart the specified MinIO server // Restart the specified MinIO server
fatalIf(probe.NewError(client.ServiceSendAction( fatalIf(probe.NewError(client.ServiceRestart()), "Cannot restart the server.")
madmin.ServiceActionValueRestart)), "Cannot restart server.")
// Success.. // Success..
printMsg(serviceRestartCommand{Status: "success", ServerURL: aliasedURL}) printMsg(serviceRestartCommand{Status: "success", ServerURL: aliasedURL})
@@ -127,7 +125,7 @@ func mainAdminServiceRestart(ctx *cli.Context) error {
time.Sleep(6 * time.Second) time.Sleep(6 * time.Second)
// Fetch the service status of the specified MinIO server // Fetch the service status of the specified MinIO server
_, e := client.ServiceStatus() _, e := client.ServerInfo()
if e != nil { if e != nil {
printMsg(serviceRestartMessage{Status: "failure", Err: e, ServerURL: aliasedURL}) printMsg(serviceRestartMessage{Status: "failure", Err: e, ServerURL: aliasedURL})

View File

@@ -1,143 +0,0 @@
/*
* MinIO Client (C) 2016-2019 MinIO, Inc.
*
* 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.
*/
package cmd
import (
"fmt"
"net/url"
"time"
"github.com/fatih/color"
"github.com/minio/cli"
json "github.com/minio/mc/pkg/colorjson"
"github.com/minio/mc/pkg/console"
"github.com/minio/mc/pkg/probe"
)
var (
adminServiceStatusFlags = []cli.Flag{}
)
var adminServiceStatusCmd = cli.Command{
Name: "status",
Usage: "get the status of MinIO server",
Action: mainAdminServiceStatus,
Before: setGlobalsFromContext,
Flags: append(adminServiceStatusFlags, globalFlags...),
CustomHelpTemplate: `NAME:
{{.HelpName}} - {{.Usage}}
USAGE:
{{.HelpName}} TARGET
FLAGS:
{{range .VisibleFlags}}{{.}}
{{end}}
EXAMPLES:
1. Check if the 'play' MinIO server is online and show its uptime.
$ {{.HelpName}} play/
`,
}
// serviceStatusMessage container to hold service status information.
type serviceStatusMessage struct {
Status string `json:"status"`
Service string `json:"service"`
Uptime time.Duration `json:"uptime"`
}
// String colorized service status message.
func (u serviceStatusMessage) String() (msg string) {
defer func() {
msg = console.Colorize("ServiceStatus", msg)
}()
// When service is offline
if u.Service == "off" {
msg = "The server is offline."
return
}
msg = fmt.Sprintf("Uptime: %s.", timeDurationToHumanizedDuration(u.Uptime))
return
}
// JSON jsonified service status Message message.
func (u serviceStatusMessage) JSON() string {
switch u.Service {
case "on":
u.Status = "success"
case "off":
u.Status = "failure"
}
statusJSONBytes, e := json.MarshalIndent(u, "", " ")
fatalIf(probe.NewError(e), "Unable to marshal into JSON.")
return string(statusJSONBytes)
}
// checkAdminServiceStatusSyntax - validate all the passed arguments
func checkAdminServiceStatusSyntax(ctx *cli.Context) {
if len(ctx.Args()) == 0 || len(ctx.Args()) > 2 {
cli.ShowCommandHelpAndExit(ctx, "status", 1) // last argument is exit code
}
}
func mainAdminServiceStatus(ctx *cli.Context) error {
// Validate serivce status syntax.
checkAdminServiceStatusSyntax(ctx)
console.SetColor("ServiceStatus", color.New(color.FgGreen, color.Bold))
// Get the alias parameter from cli
args := ctx.Args()
aliasedURL := args.Get(0)
// Create a new MinIO Admin Client
client, err := newAdminClient(aliasedURL)
fatalIf(err, "Cannot get a configured admin connection.")
// Fetch the service status of the specified MinIO server
st, e := client.ServiceStatus()
// Check the availability of the server: online or offline. A server is considered
// offline if we can't get any response or we get a bad format response
var serviceOffline bool
switch v := e.(type) {
case *json.SyntaxError:
serviceOffline = true
case *url.Error:
if v.Timeout() {
serviceOffline = true
}
}
if serviceOffline {
printMsg(serviceStatusMessage{Service: "off"})
return nil
}
// If the error is not nil and not unrecognizable, just print it and exit
fatalIf(probe.NewError(e), "Cannot get service status.")
// Print the whole response
printMsg(serviceStatusMessage{
Service: "on",
Uptime: st.Uptime,
})
return nil
}

View File

@@ -22,7 +22,6 @@ import (
json "github.com/minio/mc/pkg/colorjson" json "github.com/minio/mc/pkg/colorjson"
"github.com/minio/mc/pkg/console" "github.com/minio/mc/pkg/console"
"github.com/minio/mc/pkg/probe" "github.com/minio/mc/pkg/probe"
"github.com/minio/minio/pkg/madmin"
) )
var adminServiceStopCmd = cli.Command{ var adminServiceStopCmd = cli.Command{
@@ -88,8 +87,7 @@ func mainAdminServiceStop(ctx *cli.Context) error {
fatalIf(err, "Cannot get a configured admin connection.") fatalIf(err, "Cannot get a configured admin connection.")
// Stop the specified MinIO server // Stop the specified MinIO server
pErr := client.ServiceSendAction(madmin.ServiceActionValueStop) fatalIf(probe.NewError(client.ServiceStop()), "Unable to stop the server.")
fatalIf(probe.NewError(pErr), "Cannot stop server.")
// Success.. // Success..
printMsg(serviceStopMessage{Status: "success", ServerURL: aliasedURL}) printMsg(serviceStopMessage{Status: "success", ServerURL: aliasedURL})

View File

@@ -20,13 +20,12 @@ import "github.com/minio/cli"
var adminServiceCmd = cli.Command{ var adminServiceCmd = cli.Command{
Name: "service", Name: "service",
Usage: "stop, restart or get status of MinIO server", Usage: "restart and stop all MinIO servers",
Action: mainAdminService, Action: mainAdminService,
Before: setGlobalsFromContext, Before: setGlobalsFromContext,
Flags: globalFlags, Flags: globalFlags,
HideHelpCommand: true, HideHelpCommand: true,
Subcommands: []cli.Command{ Subcommands: []cli.Command{
adminServiceStatusCmd,
adminServiceRestartCmd, adminServiceRestartCmd,
adminServiceStopCmd, adminServiceStopCmd,
}, },

View File

@@ -121,7 +121,7 @@ func mainAdminTrace(ctx *cli.Context) error {
defer close(doneCh) defer close(doneCh)
// Start listening on all trace activity. // Start listening on all trace activity.
traceCh := client.Trace(all, errfltr, doneCh) traceCh := client.ServiceTrace(all, errfltr, doneCh)
for traceInfo := range traceCh { for traceInfo := range traceCh {
if traceInfo.Err != nil { if traceInfo.Err != nil {
fatalIf(probe.NewError(traceInfo.Err), "Cannot listen to http trace") fatalIf(probe.NewError(traceInfo.Err), "Cannot listen to http trace")
@@ -149,7 +149,7 @@ type shortTraceMsg struct {
} }
type traceMessage struct { type traceMessage struct {
madmin.TraceInfo madmin.ServiceTraceInfo
} }
type requestInfo struct { type requestInfo struct {
@@ -182,7 +182,7 @@ type trace struct {
} }
// return a struct with minimal trace info. // return a struct with minimal trace info.
func shortTrace(ti madmin.TraceInfo) shortTraceMsg { func shortTrace(ti madmin.ServiceTraceInfo) shortTraceMsg {
s := shortTraceMsg{} s := shortTraceMsg{}
t := ti.Trace t := ti.Trace
s.Time = t.ReqInfo.Time s.Time = t.ReqInfo.Time

117
cmd/admin-update.go Normal file
View File

@@ -0,0 +1,117 @@
/*
* MinIO Client (C) 2018-2019 MinIO, Inc.
*
* 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.
*/
package cmd
import (
"fmt"
"github.com/fatih/color"
"github.com/minio/cli"
json "github.com/minio/mc/pkg/colorjson"
"github.com/minio/mc/pkg/console"
"github.com/minio/mc/pkg/probe"
)
var adminServerUpdateCmd = cli.Command{
Name: "update",
Usage: "update all MinIO servers",
Action: mainAdminServerUpdate,
Before: setGlobalsFromContext,
Flags: globalFlags,
CustomHelpTemplate: `NAME:
{{.HelpName}} - {{.Usage}}
USAGE:
{{.HelpName}} TARGET
FLAGS:
{{range .VisibleFlags}}{{.}}
{{end}}
EXAMPLES:
1. Update MinIO server represented by its alias 'play'.
$ {{.HelpName}} play/
2. Update all MinIO servers in a distributed setup, represented by its alias 'mydist'.
$ {{.HelpName}} mydist/
`,
}
// serverUpdateMessage is container for ServerUpdate success and failure messages.
type serverUpdateMessage struct {
Status string `json:"status"`
ServerURL string `json:"serverURL"`
CurrentVersion string `json:"currentVersion"`
UpdatedVersion string `json:"updatedVersion"`
}
// String colorized serverUpdate message.
func (s serverUpdateMessage) String() string {
if s.CurrentVersion != s.UpdatedVersion {
return console.Colorize("ServerUpdate",
fmt.Sprintf("Server `%s` updated successfully from %s to %s",
s.ServerURL, s.CurrentVersion, s.UpdatedVersion))
}
return console.Colorize("ServerUpdate",
fmt.Sprintf("Server `%s` already running the most recent version %s of MinIO",
s.ServerURL, s.CurrentVersion))
}
// JSON jsonified server update message.
func (s serverUpdateMessage) JSON() string {
serverUpdateJSONBytes, e := json.MarshalIndent(s, "", " ")
fatalIf(probe.NewError(e), "Unable to marshal into JSON.")
return string(serverUpdateJSONBytes)
}
// checkAdminServerUpdateSyntax - validate all the passed arguments
func checkAdminServerUpdateSyntax(ctx *cli.Context) {
if len(ctx.Args()) == 0 || len(ctx.Args()) > 2 {
cli.ShowCommandHelpAndExit(ctx, "update", 1) // last argument is exit code
}
}
func mainAdminServerUpdate(ctx *cli.Context) error {
// Validate serivce update syntax.
checkAdminServerUpdateSyntax(ctx)
// Set color.
console.SetColor("ServerUpdate", color.New(color.FgGreen, color.Bold))
// Get the alias parameter from cli
args := ctx.Args()
aliasedURL := args.Get(0)
client, err := newAdminClient(aliasedURL)
fatalIf(err, "Cannot get a configured admin connection.")
updateURL := args.Get(1)
// Update the specified MinIO server, optionally also
// with the provided update URL.
us, e := client.ServerUpdate(updateURL)
fatalIf(probe.NewError(e), "Unable to update the server.")
// Success..
printMsg(serverUpdateMessage{
Status: "success",
ServerURL: aliasedURL,
CurrentVersion: us.CurrentVersion,
UpdatedVersion: us.UpdatedVersion,
})
return nil
}

View File

@@ -3,7 +3,8 @@
MinIO Client (mc) provides `admin` sub-command to perform administrative tasks on your MinIO deployments. MinIO Client (mc) provides `admin` sub-command to perform administrative tasks on your MinIO deployments.
``` ```
service stop, restart or get status of MinIO server service restart or stop all MinIO servers
update updates all MinIO servers
info display MinIO server information info display MinIO server information
user manage users user manage users
policy manage canned policies policy manage canned policies
@@ -180,7 +181,7 @@ mc: <DEBUG> Response Time: 140.70112ms
MEM usage MEM usage
current 602 MiB current 602 MiB
historic 448 MiB historic 448 MiB
``` ```
### Option [--json] ### Option [--json]
@@ -259,45 +260,53 @@ Skip SSL certificate verification.
## 7. Commands ## 7. Commands
| | | |
|:---| |:--------------------------------------------------------------------|
|[**service** - start, stop or get the status of MinIO server](#service) | | [**service** - restart and stop all MinIO servers](#service) |
|[**info** - display MinIO server information](#info) | | [**update** - updates all MinIO servers](#update) |
|[**user** - manage users](#user) | | [**info** - display MinIO server information](#info) |
|[**group** - manage groups](#group) | | [**user** - manage users](#user) |
|[**policy** - manage canned policies](#policy) | | [**group** - manage groups](#group) |
|[**config** - manage server configuration file](#config)| | [**policy** - manage canned policies](#policy) |
|[**heal** - heal disks, buckets and objects on MinIO server](#heal) | | [**config** - manage server configuration file](#config) |
|[**top** - provide top like statistics for MinIO](#top) | | [**heal** - heal disks, buckets and objects on MinIO server](#heal) |
| [**top** - provide top like statistics for MinIO](#top) |
<a name="update"></a>
### Command `update` - updates all MinIO servers
`update` command provides a way to update all MinIO servers in a cluster.
> NOTE:
> - An alias pointing to a distributed setup this command will automatically update all MinIO servers in the cluster.
> - `update` is an disruptive operations for your MinIO service, any on-going API operations will be forcibly canceled. So, it should be used only when you are planning MinIO upgrades for your deployment.
*Example: Update all MinIO servers.*
```
mc admin update play
Server `play` updated successfully from RELEASE.2019-08-14T20-49-49Z to RELEASE.2019-08-21T19-59-10Z
```
<a name="service"></a> <a name="service"></a>
### Command `service` - stop, restart or get status of MinIO server ### Command `service` - restart and stop all MinIO servers
`service` command provides a way to restart, stop one or get the status of MinIO servers (distributed cluster) `service` command provides a way to restart and stop all MinIO servers.
> NOTE:
> - An alias pointing to a distributed setup this command will automatically execute the same actions across all servers.
> - `restart` and `stop` sub-commands are disruptive operations for your MinIO service, any on-going API operations will be forcibly canceled. So, it should be used only under administrative circumstances. Please use it with caution.
``` ```
NAME: NAME:
mc admin service - stop, restart or get status of MinIO server mc admin service - restart and stop all MinIO servers
FLAGS: FLAGS:
--help, -h show help --help, -h show help
COMMANDS: COMMANDS:
status get the status of MinIO server restart restart all MinIO servers
restart restart MinIO server stop stop all MinIO servers
stop stop MinIO server
``` ```
*Example: Display service uptime for MinIO server.* *Example: Restart all MinIO servers.*
```
mc admin service status play
Uptime: 1 days 19 hours 57 minutes 39 seconds.
```
*Example: Restart remote MinIO service.*
NOTE: `restart` and `stop` sub-commands are disruptive operations for your MinIO service, any on-going API operations will be forcibly canceled. So, it should be used only under certain circumstances. Please use it with caution.
``` ```
mc admin service restart play mc admin service restart play
Restarted `play` successfully. Restarted `play` successfully.

4
go.mod
View File

@@ -19,7 +19,7 @@ require (
github.com/mattn/go-isatty v0.0.7 github.com/mattn/go-isatty v0.0.7
github.com/mattn/go-runewidth v0.0.4 // indirect github.com/mattn/go-runewidth v0.0.4 // indirect
github.com/minio/cli v1.21.0 github.com/minio/cli v1.21.0
github.com/minio/minio v0.0.0-20190813204106-bf9b619d8656 github.com/minio/minio v0.0.0-20190828220443-83d4c5763c3e
github.com/minio/minio-go/v6 v6.0.32 github.com/minio/minio-go/v6 v6.0.32
github.com/minio/sha256-simd v0.1.0 github.com/minio/sha256-simd v0.1.0
github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/go-homedir v1.1.0
@@ -35,7 +35,7 @@ require (
github.com/ugorji/go v1.1.5-pre // indirect github.com/ugorji/go v1.1.5-pre // indirect
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
go.uber.org/multierr v1.1.0 // indirect go.uber.org/multierr v1.1.0 // indirect
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7
golang.org/x/text v0.3.2 golang.org/x/text v0.3.2
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127

24
go.sum
View File

@@ -216,8 +216,6 @@ github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z
github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U= github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U=
github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/rpc v0.0.0-20160517062331-bd3317b8f670/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/rpc v0.0.0-20160517062331-bd3317b8f670/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ=
github.com/gorilla/rpc v1.2.0+incompatible h1:V3Dz9mWwCvHKm0N+mVM2A/hShV+hLUMUdzoyHQjr1NA=
github.com/gorilla/rpc v1.2.0+incompatible/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ=
github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ=
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
@@ -408,10 +406,8 @@ github.com/minio/mc v0.0.0-20190529152718-f4bb0b8850cb/go.mod h1:GMIQKmYuGc7q10D
github.com/minio/minio v0.0.0-20190206103305-fd4e15c11641/go.mod h1:lXcp05uxYaW99ebgI6ZKIGYU7tqZkM5xSsG0xRt4VIU= github.com/minio/minio v0.0.0-20190206103305-fd4e15c11641/go.mod h1:lXcp05uxYaW99ebgI6ZKIGYU7tqZkM5xSsG0xRt4VIU=
github.com/minio/minio v0.0.0-20190325204105-0250f7de678b/go.mod h1:6ODmvb06uOpNy0IM+3pJRTHaauOMpLJ51jLhipbcifI= github.com/minio/minio v0.0.0-20190325204105-0250f7de678b/go.mod h1:6ODmvb06uOpNy0IM+3pJRTHaauOMpLJ51jLhipbcifI=
github.com/minio/minio v0.0.0-20190510004154-ac3b59645e92/go.mod h1:yFbQSwuA61mB/SDurPvsaSydqDyJdfAlBYpMiEe1lz8= github.com/minio/minio v0.0.0-20190510004154-ac3b59645e92/go.mod h1:yFbQSwuA61mB/SDurPvsaSydqDyJdfAlBYpMiEe1lz8=
github.com/minio/minio v0.0.0-20190802212500-414a7eca839d h1:dO3pQKNF7LOykLYtri+dM+K3UKcxano7uPqiySBNRJU= github.com/minio/minio v0.0.0-20190828220443-83d4c5763c3e h1:Srte0Sn6fh+OI9JV07YRWmqbX+hcWj9YZx3FSxm3YRo=
github.com/minio/minio v0.0.0-20190802212500-414a7eca839d/go.mod h1:WKIs2ive12k4M0N0hytNGB+UbCo4wvzKNe+oa3WLYr4= github.com/minio/minio v0.0.0-20190828220443-83d4c5763c3e/go.mod h1:rHCDZtapHpTq8HXOD2Gc4aKoEXIbXrvpQ70icmaMr5E=
github.com/minio/minio v0.0.0-20190813204106-bf9b619d8656 h1:BlC1/OsWCJo7UjbFBz+6obwWJZ5EjIbMPqbOJVugbxY=
github.com/minio/minio v0.0.0-20190813204106-bf9b619d8656/go.mod h1:5NStPp3TsjmKqHyCtkJi/SZfTcsGgVUzt/dUeV9iOwA=
github.com/minio/minio-go v0.0.0-20190227180923-59af836a7e6d h1:gptD0/Hnam7h4Iq9D/33fscRpHfzOOUqUbH2nPw9HcU= github.com/minio/minio-go v0.0.0-20190227180923-59af836a7e6d h1:gptD0/Hnam7h4Iq9D/33fscRpHfzOOUqUbH2nPw9HcU=
github.com/minio/minio-go v0.0.0-20190227180923-59af836a7e6d/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM= github.com/minio/minio-go v0.0.0-20190227180923-59af836a7e6d/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM=
github.com/minio/minio-go v0.0.0-20190313212832-5d20267d970d/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM= github.com/minio/minio-go v0.0.0-20190313212832-5d20267d970d/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM=
@@ -612,6 +608,7 @@ github.com/ugorji/go v1.1.5-pre/go.mod h1:FwP/aQVg39TXzItUBMwnWp9T9gPQnXw4Poh4/o
github.com/ugorji/go/codec v0.0.0-20190320090025-2dc34c0b8780/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA= github.com/ugorji/go/codec v0.0.0-20190320090025-2dc34c0b8780/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA=
github.com/ugorji/go/codec v1.1.5-pre h1:5YV9PsFAN+ndcCtTM7s60no7nY7eTG3LPtxhSwuxzCs= github.com/ugorji/go/codec v1.1.5-pre h1:5YV9PsFAN+ndcCtTM7s60no7nY7eTG3LPtxhSwuxzCs=
github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI= github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI=
github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o=
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc=
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
@@ -651,9 +648,10 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo=
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -681,8 +679,8 @@ golang.org/x/net v0.0.0-20190324223953-e3b2ff56ed87/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180603041954-1e0a3fa8ba9a/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180603041954-1e0a3fa8ba9a/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -722,10 +720,8 @@ golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3 h1:4y9KwBHBgBNwDbtu44R5o1fdOCQUEXhbk/P4A9WmJq0= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa h1:KIDDMLT1O0Nr7TSxp8xM5tJcdn8tgyAONntO829og1M=
golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=