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:
@@ -16,7 +16,9 @@
|
||||
|
||||
package cmd
|
||||
|
||||
import "github.com/minio/cli"
|
||||
import (
|
||||
"github.com/minio/cli"
|
||||
)
|
||||
|
||||
var adminInfoCmd = cli.Command{
|
||||
Name: "info",
|
||||
|
||||
@@ -31,6 +31,7 @@ var adminCmd = cli.Command{
|
||||
Flags: append(adminFlags, globalFlags...),
|
||||
Subcommands: []cli.Command{
|
||||
adminServiceCmd,
|
||||
adminServerUpdateCmd,
|
||||
adminInfoCmd,
|
||||
adminUserCmd,
|
||||
adminGroupCmd,
|
||||
|
||||
@@ -24,12 +24,11 @@ import (
|
||||
json "github.com/minio/mc/pkg/colorjson"
|
||||
"github.com/minio/mc/pkg/console"
|
||||
"github.com/minio/mc/pkg/probe"
|
||||
"github.com/minio/minio/pkg/madmin"
|
||||
)
|
||||
|
||||
var adminServiceRestartCmd = cli.Command{
|
||||
Name: "restart",
|
||||
Usage: "restart MinIO server",
|
||||
Usage: "restart all MinIO servers",
|
||||
Action: mainAdminServiceRestart,
|
||||
Before: setGlobalsFromContext,
|
||||
Flags: globalFlags,
|
||||
@@ -114,8 +113,7 @@ func mainAdminServiceRestart(ctx *cli.Context) error {
|
||||
fatalIf(err, "Cannot get a configured admin connection.")
|
||||
|
||||
// Restart the specified MinIO server
|
||||
fatalIf(probe.NewError(client.ServiceSendAction(
|
||||
madmin.ServiceActionValueRestart)), "Cannot restart server.")
|
||||
fatalIf(probe.NewError(client.ServiceRestart()), "Cannot restart the server.")
|
||||
|
||||
// Success..
|
||||
printMsg(serviceRestartCommand{Status: "success", ServerURL: aliasedURL})
|
||||
@@ -127,7 +125,7 @@ func mainAdminServiceRestart(ctx *cli.Context) error {
|
||||
time.Sleep(6 * time.Second)
|
||||
|
||||
// Fetch the service status of the specified MinIO server
|
||||
_, e := client.ServiceStatus()
|
||||
_, e := client.ServerInfo()
|
||||
|
||||
if e != nil {
|
||||
printMsg(serviceRestartMessage{Status: "failure", Err: e, ServerURL: aliasedURL})
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -22,7 +22,6 @@ import (
|
||||
json "github.com/minio/mc/pkg/colorjson"
|
||||
"github.com/minio/mc/pkg/console"
|
||||
"github.com/minio/mc/pkg/probe"
|
||||
"github.com/minio/minio/pkg/madmin"
|
||||
)
|
||||
|
||||
var adminServiceStopCmd = cli.Command{
|
||||
@@ -88,8 +87,7 @@ func mainAdminServiceStop(ctx *cli.Context) error {
|
||||
fatalIf(err, "Cannot get a configured admin connection.")
|
||||
|
||||
// Stop the specified MinIO server
|
||||
pErr := client.ServiceSendAction(madmin.ServiceActionValueStop)
|
||||
fatalIf(probe.NewError(pErr), "Cannot stop server.")
|
||||
fatalIf(probe.NewError(client.ServiceStop()), "Unable to stop the server.")
|
||||
|
||||
// Success..
|
||||
printMsg(serviceStopMessage{Status: "success", ServerURL: aliasedURL})
|
||||
|
||||
@@ -20,13 +20,12 @@ import "github.com/minio/cli"
|
||||
|
||||
var adminServiceCmd = cli.Command{
|
||||
Name: "service",
|
||||
Usage: "stop, restart or get status of MinIO server",
|
||||
Usage: "restart and stop all MinIO servers",
|
||||
Action: mainAdminService,
|
||||
Before: setGlobalsFromContext,
|
||||
Flags: globalFlags,
|
||||
HideHelpCommand: true,
|
||||
Subcommands: []cli.Command{
|
||||
adminServiceStatusCmd,
|
||||
adminServiceRestartCmd,
|
||||
adminServiceStopCmd,
|
||||
},
|
||||
|
||||
@@ -121,7 +121,7 @@ func mainAdminTrace(ctx *cli.Context) error {
|
||||
defer close(doneCh)
|
||||
|
||||
// Start listening on all trace activity.
|
||||
traceCh := client.Trace(all, errfltr, doneCh)
|
||||
traceCh := client.ServiceTrace(all, errfltr, doneCh)
|
||||
for traceInfo := range traceCh {
|
||||
if traceInfo.Err != nil {
|
||||
fatalIf(probe.NewError(traceInfo.Err), "Cannot listen to http trace")
|
||||
@@ -149,7 +149,7 @@ type shortTraceMsg struct {
|
||||
}
|
||||
|
||||
type traceMessage struct {
|
||||
madmin.TraceInfo
|
||||
madmin.ServiceTraceInfo
|
||||
}
|
||||
|
||||
type requestInfo struct {
|
||||
@@ -182,7 +182,7 @@ type trace struct {
|
||||
}
|
||||
|
||||
// return a struct with minimal trace info.
|
||||
func shortTrace(ti madmin.TraceInfo) shortTraceMsg {
|
||||
func shortTrace(ti madmin.ServiceTraceInfo) shortTraceMsg {
|
||||
s := shortTraceMsg{}
|
||||
t := ti.Trace
|
||||
s.Time = t.ReqInfo.Time
|
||||
|
||||
117
cmd/admin-update.go
Normal file
117
cmd/admin-update.go
Normal 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
|
||||
}
|
||||
@@ -3,7 +3,8 @@
|
||||
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
|
||||
user manage users
|
||||
policy manage canned policies
|
||||
@@ -260,44 +261,52 @@ Skip SSL certificate verification.
|
||||
## 7. Commands
|
||||
|
||||
| |
|
||||
|:---|
|
||||
|[**service** - start, stop or get the status of MinIO server](#service) |
|
||||
|[**info** - display MinIO server information](#info) |
|
||||
|[**user** - manage users](#user) |
|
||||
|[**group** - manage groups](#group) |
|
||||
|[**policy** - manage canned policies](#policy) |
|
||||
|[**config** - manage server configuration file](#config)|
|
||||
|[**heal** - heal disks, buckets and objects on MinIO server](#heal) |
|
||||
|[**top** - provide top like statistics for MinIO](#top) |
|
||||
|:--------------------------------------------------------------------|
|
||||
| [**service** - restart and stop all MinIO servers](#service) |
|
||||
| [**update** - updates all MinIO servers](#update) |
|
||||
| [**info** - display MinIO server information](#info) |
|
||||
| [**user** - manage users](#user) |
|
||||
| [**group** - manage groups](#group) |
|
||||
| [**policy** - manage canned policies](#policy) |
|
||||
| [**config** - manage server configuration file](#config) |
|
||||
| [**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>
|
||||
### Command `service` - stop, restart or get status of MinIO server
|
||||
`service` command provides a way to restart, stop one or get the status of MinIO servers (distributed cluster)
|
||||
### Command `service` - restart and stop all MinIO servers
|
||||
`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:
|
||||
mc admin service - stop, restart or get status of MinIO server
|
||||
mc admin service - restart and stop all MinIO servers
|
||||
|
||||
FLAGS:
|
||||
--help, -h show help
|
||||
|
||||
COMMANDS:
|
||||
status get the status of MinIO server
|
||||
restart restart MinIO server
|
||||
stop stop MinIO server
|
||||
restart restart all MinIO servers
|
||||
stop stop all MinIO servers
|
||||
```
|
||||
|
||||
*Example: Display service uptime for MinIO server.*
|
||||
|
||||
```
|
||||
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.
|
||||
|
||||
*Example: Restart all MinIO servers.*
|
||||
```
|
||||
mc admin service restart play
|
||||
Restarted `play` successfully.
|
||||
|
||||
4
go.mod
4
go.mod
@@ -19,7 +19,7 @@ require (
|
||||
github.com/mattn/go-isatty v0.0.7
|
||||
github.com/mattn/go-runewidth v0.0.4 // indirect
|
||||
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/sha256-simd v0.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/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // 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/time v0.0.0-20190308202827-9d24e82272b4 // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
|
||||
|
||||
24
go.sum
24
go.sum
@@ -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/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 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/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
||||
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-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-20190802212500-414a7eca839d h1:dO3pQKNF7LOykLYtri+dM+K3UKcxano7uPqiySBNRJU=
|
||||
github.com/minio/minio v0.0.0-20190802212500-414a7eca839d/go.mod h1:WKIs2ive12k4M0N0hytNGB+UbCo4wvzKNe+oa3WLYr4=
|
||||
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 v0.0.0-20190828220443-83d4c5763c3e h1:Srte0Sn6fh+OI9JV07YRWmqbX+hcWj9YZx3FSxm3YRo=
|
||||
github.com/minio/minio v0.0.0-20190828220443-83d4c5763c3e/go.mod h1:rHCDZtapHpTq8HXOD2Gc4aKoEXIbXrvpQ70icmaMr5E=
|
||||
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-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 v1.1.5-pre h1:5YV9PsFAN+ndcCtTM7s60no7nY7eTG3LPtxhSwuxzCs=
|
||||
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/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
|
||||
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-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-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo=
|
||||
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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
|
||||
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/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=
|
||||
@@ -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-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-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk=
|
||||
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 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA=
|
||||
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-20180821212333-d2e6202438be/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-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-20190801041406-cbf593c0f2f3 h1:4y9KwBHBgBNwDbtu44R5o1fdOCQUEXhbk/P4A9WmJq0=
|
||||
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/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/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
|
||||
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||
|
||||
Reference in New Issue
Block a user