lint-a-geddon is here
parent
666c3487f0
commit
6e693d22ee
12
Makefile
12
Makefile
|
@ -219,12 +219,16 @@ fmt:
|
||||||
vet:
|
vet:
|
||||||
@go vet $(SOURCE_PACKAGES)
|
@go vet $(SOURCE_PACKAGES)
|
||||||
|
|
||||||
|
out/linters/golangci-lint:
|
||||||
|
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \
|
||||||
|
| bash -s -- -b out/linters v1.16.0
|
||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint: pkg/minikube/assets/assets.go
|
lint: pkg/minikube/assets/assets.go out/linters/golangci-lint
|
||||||
@env GO111MODULE=off go get github.com/golangci/golangci-lint/cmd/golangci-lint
|
./out/linters/golangci-lint run \
|
||||||
@golangci-lint run \
|
--build-tags "${MINIKUBE_INTEGRATION_BUILD_TAGS}" \
|
||||||
--enable goimports,gocritic,golint,gocyclo,interfacer,misspell,nakedret,stylecheck,unconvert,unparam \
|
--enable goimports,gocritic,golint,gocyclo,interfacer,misspell,nakedret,stylecheck,unconvert,unparam \
|
||||||
--exclude 'Using variable on range scope.*in function literal' \
|
--exclude 'variable on range scope.*in function literal|ifElseChain' \
|
||||||
./...
|
./...
|
||||||
|
|
||||||
.PHONY: reportcard
|
.PHONY: reportcard
|
||||||
|
|
|
@ -56,16 +56,16 @@ For the list of accessible variables for the template, see the struct values her
|
||||||
cacheCmd.AddCommand(listCacheCmd)
|
cacheCmd.AddCommand(listCacheCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cacheList returns a formatted list of images found within the local cache
|
||||||
func cacheList(images []string) error {
|
func cacheList(images []string) error {
|
||||||
for _, image := range images {
|
for _, image := range images {
|
||||||
tmpl, err := template.New("list").Parse(cacheListFormat)
|
tmpl, err := template.New("list").Parse(cacheListFormat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
exit.WithError("Unable to parse template", err)
|
return err
|
||||||
}
|
}
|
||||||
listTmplt := CacheListTemplate{image}
|
listTmplt := CacheListTemplate{image}
|
||||||
err = tmpl.Execute(os.Stdout, listTmplt)
|
if err := tmpl.Execute(os.Stdout, listTmplt); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
exit.WithError("Unable to process template", err)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -23,6 +23,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
"golang.org/x/crypto/ssh/terminal"
|
"golang.org/x/crypto/ssh/terminal"
|
||||||
"k8s.io/minikube/pkg/minikube/console"
|
"k8s.io/minikube/pkg/minikube/console"
|
||||||
)
|
)
|
||||||
|
@ -49,7 +50,6 @@ func AskForYesNoConfirmation(s string, posResponses, negResponses []string) bool
|
||||||
return false
|
return false
|
||||||
default:
|
default:
|
||||||
console.Err("Please type yes or no:")
|
console.Err("Please type yes or no:")
|
||||||
return AskForYesNoConfirmation(s, posResponses, negResponses)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ func concealableAskForStaticValue(readWriter io.ReadWriter, promptString string,
|
||||||
response = strings.TrimSpace(response)
|
response = strings.TrimSpace(response)
|
||||||
if len(response) == 0 {
|
if len(response) == 0 {
|
||||||
console.Warning("Please enter a value:")
|
console.Warning("Please enter a value:")
|
||||||
return concealableAskForStaticValue(readWriter, promptString, hidden)
|
continue
|
||||||
}
|
}
|
||||||
return response, nil
|
return response, nil
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,11 @@ func AskForPasswordValue(s string) string {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
defer terminal.Restore(stdInFd, oldState)
|
defer func() {
|
||||||
|
if err := terminal.Restore(stdInFd, oldState); err != nil {
|
||||||
|
glog.Errorf("terminal restore failed: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
result, err := concealableAskForStaticValue(os.Stdin, s, true)
|
result, err := concealableAskForStaticValue(os.Stdin, s, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -33,6 +33,16 @@ import (
|
||||||
"k8s.io/minikube/pkg/minikube/cruntime"
|
"k8s.io/minikube/pkg/minikube/cruntime"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// containerdOnlyMsg is the message shown when a containerd-only addon is enabled
|
||||||
|
const containerdOnlyAddonMsg = `
|
||||||
|
This addon can only be enabled with the containerd runtime backend. To enable this backend, please first stop minikube with:
|
||||||
|
|
||||||
|
minikube stop
|
||||||
|
|
||||||
|
and then start minikube again with the following flags:
|
||||||
|
|
||||||
|
minikube start --container-runtime=containerd --docker-opt containerd=/var/run/containerd/containerd.sock`
|
||||||
|
|
||||||
// IsValidDriver checks if a driver is supported
|
// IsValidDriver checks if a driver is supported
|
||||||
func IsValidDriver(string, driver string) error {
|
func IsValidDriver(string, driver string) error {
|
||||||
for _, d := range constants.SupportedVMDrivers {
|
for _, d := range constants.SupportedVMDrivers {
|
||||||
|
@ -53,7 +63,7 @@ func RequiresRestartMsg(string, string) error {
|
||||||
func IsValidDiskSize(name string, disksize string) error {
|
func IsValidDiskSize(name string, disksize string) error {
|
||||||
_, err := units.FromHumanSize(disksize)
|
_, err := units.FromHumanSize(disksize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Not valid disk size: %v", err)
|
return fmt.Errorf("invalid disk size: %v", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -117,7 +127,7 @@ func IsPositive(name string, val string) error {
|
||||||
func IsValidCIDR(name string, cidr string) error {
|
func IsValidCIDR(name string, cidr string) error {
|
||||||
_, _, err := net.ParseCIDR(cidr)
|
_, _, err := net.ParseCIDR(cidr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error parsing CIDR: %v", err)
|
return fmt.Errorf("invalid CIDR: %v", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -151,16 +161,7 @@ func IsContainerdRuntime(_, _ string) error {
|
||||||
}
|
}
|
||||||
_, ok := r.(*cruntime.Containerd)
|
_, ok := r.(*cruntime.Containerd)
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf(`This addon can only be enabled with the containerd runtime backend.
|
return fmt.Errorf(containerdOnlyAddonMsg)
|
||||||
|
|
||||||
To enable this backend, please first stop minikube with:
|
|
||||||
|
|
||||||
minikube stop
|
|
||||||
|
|
||||||
and then start minikube again with the following flags:
|
|
||||||
|
|
||||||
minikube start --container-runtime=containerd --docker-opt containerd=/var/run/containerd/containerd.sock`)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -377,7 +377,9 @@ var dockerEnvCmd = &cobra.Command{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
executeTemplateStdout(shellCfg)
|
if err := executeTemplateStdout(shellCfg); err != nil {
|
||||||
|
exit.WithError("Error executing template", err)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,9 @@ var RootCmd = &cobra.Command{
|
||||||
|
|
||||||
logDir := pflag.Lookup("log_dir")
|
logDir := pflag.Lookup("log_dir")
|
||||||
if !logDir.Changed {
|
if !logDir.Changed {
|
||||||
logDir.Value.Set(constants.MakeMiniPath("logs"))
|
if err := logDir.Value.Set(constants.MakeMiniPath("logs")); err != nil {
|
||||||
|
exit.WithError("logdir set failed", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if enableUpdateNotification {
|
if enableUpdateNotification {
|
||||||
|
@ -116,7 +118,9 @@ func setFlagsUsingViper() {
|
||||||
}
|
}
|
||||||
// Viper will give precedence first to calls to the Set command,
|
// Viper will give precedence first to calls to the Set command,
|
||||||
// then to values from the config.yml
|
// then to values from the config.yml
|
||||||
a.Value.Set(viper.GetString(a.Name))
|
if err := a.Value.Set(viper.GetString(a.Name)); err != nil {
|
||||||
|
exit.WithError(fmt.Sprintf("failed to set value for %q", a.Name), err)
|
||||||
|
}
|
||||||
a.Changed = true
|
a.Changed = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,7 +133,9 @@ func init() {
|
||||||
RootCmd.AddCommand(configCmd.AddonsCmd)
|
RootCmd.AddCommand(configCmd.AddonsCmd)
|
||||||
RootCmd.AddCommand(configCmd.ProfileCmd)
|
RootCmd.AddCommand(configCmd.ProfileCmd)
|
||||||
pflag.CommandLine.AddGoFlagSet(goflag.CommandLine)
|
pflag.CommandLine.AddGoFlagSet(goflag.CommandLine)
|
||||||
viper.BindPFlags(RootCmd.PersistentFlags())
|
if err := viper.BindPFlags(RootCmd.PersistentFlags()); err != nil {
|
||||||
|
exit.WithError("Unable to bind flags", err)
|
||||||
|
}
|
||||||
|
|
||||||
cobra.OnInitialize(initConfig)
|
cobra.OnInitialize(initConfig)
|
||||||
|
|
||||||
|
@ -176,7 +182,7 @@ func GetClusterBootstrapper(api libmachine.API, bootstrapperName string) (bootst
|
||||||
return nil, errors.Wrap(err, "getting kubeadm bootstrapper")
|
return nil, errors.Wrap(err, "getting kubeadm bootstrapper")
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("Unknown bootstrapper: %s", bootstrapperName)
|
return nil, fmt.Errorf("unknown bootstrapper: %s", bootstrapperName)
|
||||||
}
|
}
|
||||||
|
|
||||||
return b, nil
|
return b, nil
|
||||||
|
|
|
@ -22,6 +22,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
@ -145,37 +146,43 @@ func getEnvVarName(name string) string {
|
||||||
return constants.MinikubeEnvPrefix + "_" + strings.ToUpper(name)
|
return constants.MinikubeEnvPrefix + "_" + strings.ToUpper(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setValues(t *testing.T, tt configTest) {
|
func setValues(tt configTest) error {
|
||||||
if tt.FlagValue != "" {
|
if tt.FlagValue != "" {
|
||||||
pflag.Set(tt.Name, tt.FlagValue)
|
if err := pflag.Set(tt.Name, tt.FlagValue); err != nil {
|
||||||
|
return errors.Wrap(err, "flag set")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if tt.EnvValue != "" {
|
if tt.EnvValue != "" {
|
||||||
s := strings.Replace(getEnvVarName(tt.Name), "-", "_", -1)
|
s := strings.Replace(getEnvVarName(tt.Name), "-", "_", -1)
|
||||||
os.Setenv(s, tt.EnvValue)
|
os.Setenv(s, tt.EnvValue)
|
||||||
}
|
}
|
||||||
if tt.ConfigValue != "" {
|
if tt.ConfigValue != "" {
|
||||||
err := initTestConfig(tt.ConfigValue)
|
if err := initTestConfig(tt.ConfigValue); err != nil {
|
||||||
if err != nil {
|
return errors.Wrapf(err, "Config %s not read correctly", tt.ConfigValue)
|
||||||
t.Fatalf("Config %s not read correctly: %v", tt.ConfigValue, err)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func unsetValues(tt configTest) {
|
func unsetValues(name string) error {
|
||||||
var f = pflag.Lookup(tt.Name)
|
f := pflag.Lookup(name)
|
||||||
f.Value.Set(f.DefValue)
|
if err := f.Value.Set(f.DefValue); err != nil {
|
||||||
|
return errors.Wrapf(err, "set(%s)", f.DefValue)
|
||||||
|
}
|
||||||
f.Changed = false
|
f.Changed = false
|
||||||
|
os.Unsetenv(getEnvVarName(name))
|
||||||
os.Unsetenv(getEnvVarName(tt.Name))
|
|
||||||
|
|
||||||
viper.Reset()
|
viper.Reset()
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestViperAndFlags(t *testing.T) {
|
func TestViperAndFlags(t *testing.T) {
|
||||||
restore := hideEnv(t)
|
restore := hideEnv(t)
|
||||||
defer restore(t)
|
defer restore(t)
|
||||||
for _, tt := range configTests {
|
for _, tt := range configTests {
|
||||||
setValues(t, tt)
|
err := setValues(tt)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("setValues: %v", err)
|
||||||
|
}
|
||||||
setupViper()
|
setupViper()
|
||||||
f := pflag.Lookup(tt.Name)
|
f := pflag.Lookup(tt.Name)
|
||||||
if f == nil {
|
if f == nil {
|
||||||
|
@ -185,6 +192,9 @@ func TestViperAndFlags(t *testing.T) {
|
||||||
if actual != tt.ExpectedValue {
|
if actual != tt.ExpectedValue {
|
||||||
t.Errorf("pflag.Value(%s) => %s, wanted %s [%+v]", tt.Name, actual, tt.ExpectedValue, tt)
|
t.Errorf("pflag.Value(%s) => %s, wanted %s [%+v]", tt.Name, actual, tt.ExpectedValue, tt)
|
||||||
}
|
}
|
||||||
unsetValues(tt)
|
// Some flag validation may not accept their default value, such as log_at_backtrace :(
|
||||||
|
if err := unsetValues(tt.Name); err != nil {
|
||||||
|
t.Logf("unsetValues(%s) failed: %v", tt.Name, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
|
|
||||||
"github.com/olekukonko/tablewriter"
|
"github.com/olekukonko/tablewriter"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/minikube/pkg/minikube/console"
|
"k8s.io/minikube/pkg/minikube/console"
|
||||||
"k8s.io/minikube/pkg/minikube/exit"
|
"k8s.io/minikube/pkg/minikube/exit"
|
||||||
"k8s.io/minikube/pkg/minikube/machine"
|
"k8s.io/minikube/pkg/minikube/machine"
|
||||||
|
|
|
@ -153,7 +153,9 @@ func init() {
|
||||||
startCmd.Flags().Bool(gpu, false, "Enable experimental NVIDIA GPU support in minikube (works only with kvm2 driver on Linux)")
|
startCmd.Flags().Bool(gpu, false, "Enable experimental NVIDIA GPU support in minikube (works only with kvm2 driver on Linux)")
|
||||||
startCmd.Flags().Bool(hidden, false, "Hide the hypervisor signature from the guest in minikube (works only with kvm2 driver on Linux)")
|
startCmd.Flags().Bool(hidden, false, "Hide the hypervisor signature from the guest in minikube (works only with kvm2 driver on Linux)")
|
||||||
startCmd.Flags().Bool(noVTXCheck, false, "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox)")
|
startCmd.Flags().Bool(noVTXCheck, false, "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox)")
|
||||||
viper.BindPFlags(startCmd.Flags())
|
if err := viper.BindPFlags(startCmd.Flags()); err != nil {
|
||||||
|
exit.WithError("unable to bind flags", err)
|
||||||
|
}
|
||||||
RootCmd.AddCommand(startCmd)
|
RootCmd.AddCommand(startCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +234,7 @@ func runStart(cmd *cobra.Command, args []string) {
|
||||||
exit.WithError("Failed to get command runner", err)
|
exit.WithError("Failed to get command runner", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cr := configureRuntimes(host, runner, k8sVersion)
|
cr := configureRuntimes(runner, k8sVersion)
|
||||||
|
|
||||||
// prepareHostEnvironment uses the downloaded images, so we need to wait for background task completion.
|
// prepareHostEnvironment uses the downloaded images, so we need to wait for background task completion.
|
||||||
waitCacheImages(&cacheGroup)
|
waitCacheImages(&cacheGroup)
|
||||||
|
@ -277,7 +279,7 @@ func selectImageRepository(mirrorCountry string, k8sVersion string) (bool, strin
|
||||||
|
|
||||||
if mirrorCountry != "" {
|
if mirrorCountry != "" {
|
||||||
localRepos, ok := constants.ImageRepositories[mirrorCountry]
|
localRepos, ok := constants.ImageRepositories[mirrorCountry]
|
||||||
if !ok || len(localRepos) <= 0 {
|
if !ok || len(localRepos) == 0 {
|
||||||
return false, "", fmt.Errorf("invalid image mirror country code: %s", mirrorCountry)
|
return false, "", fmt.Errorf("invalid image mirror country code: %s", mirrorCountry)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -617,7 +619,7 @@ func updateKubeConfig(h *host.Host, c *cfg.Config) *pkgutil.KubeConfigSetup {
|
||||||
}
|
}
|
||||||
|
|
||||||
// configureRuntimes does what needs to happen to get a runtime going.
|
// configureRuntimes does what needs to happen to get a runtime going.
|
||||||
func configureRuntimes(h *host.Host, runner bootstrapper.CommandRunner, k8sVersion string) cruntime.Manager {
|
func configureRuntimes(runner cruntime.CommandRunner, k8sVersion string) cruntime.Manager {
|
||||||
config := cruntime.Config{Type: viper.GetString(containerRuntime), Runner: runner}
|
config := cruntime.Config{Type: viper.GetString(containerRuntime), Runner: runner}
|
||||||
cr, err := cruntime.New(config)
|
cr, err := cruntime.New(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
212
go.sum
212
go.sum
|
@ -1,115 +1,43 @@
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
|
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
|
||||||
github.com/OpenPeeDeeP/depguard v0.0.0-20180806142446-a69c782687b2 h1:HTOmFEEYrWi4MW5ZKUx6xfeyM10Sx3kQF65xiQJMPYA=
|
|
||||||
github.com/OpenPeeDeeP/depguard v0.0.0-20180806142446-a69c782687b2/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o=
|
|
||||||
github.com/Parallels/docker-machine-parallels v1.3.0 h1:RG1fyf3v1GwXMCeHRiZkB4tL9phFZEv6ixcvRZ1raN8=
|
github.com/Parallels/docker-machine-parallels v1.3.0 h1:RG1fyf3v1GwXMCeHRiZkB4tL9phFZEv6ixcvRZ1raN8=
|
||||||
github.com/Parallels/docker-machine-parallels v1.3.0/go.mod h1:HCOMm3Hulq/xuEVQMyZOuQlA+dSZpFY5kdCTZWjMVis=
|
github.com/Parallels/docker-machine-parallels v1.3.0/go.mod h1:HCOMm3Hulq/xuEVQMyZOuQlA+dSZpFY5kdCTZWjMVis=
|
||||||
github.com/Quasilyte/go-consistent v0.0.0-20181230194409-8f8379e70f99/go.mod h1:ds1OLa3HF2x4OGKCx0pNTVL1s9Ii/2mT0Bg/8PtW6AM=
|
github.com/Sirupsen/logrus v0.0.0-20170822132746-89742aefa4b2 h1:k1A7eIeUk6rnX2yuagwljW/pDezkK8oSpvPumT9zdZY=
|
||||||
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
|
github.com/Sirupsen/logrus v0.0.0-20170822132746-89742aefa4b2/go.mod h1:rmk17hk6i8ZSAJkSDa7nOxamrG+SP4P0mm+DAvExv4U=
|
||||||
github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs=
|
github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs=
|
||||||
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||||
github.com/c4milo/gotoolkit v0.0.0-20170318115440-bcc06269efa9 h1:+ziP/wVJWuAORkjv7386TRidVKY57X0bXBZFMeFlW+U=
|
github.com/c4milo/gotoolkit v0.0.0-20170318115440-bcc06269efa9 h1:+ziP/wVJWuAORkjv7386TRidVKY57X0bXBZFMeFlW+U=
|
||||||
github.com/c4milo/gotoolkit v0.0.0-20170318115440-bcc06269efa9/go.mod h1:txokOny9wavBtq2PWuHmj1P+eFwpCsj+gQeNNANChfU=
|
github.com/c4milo/gotoolkit v0.0.0-20170318115440-bcc06269efa9/go.mod h1:txokOny9wavBtq2PWuHmj1P+eFwpCsj+gQeNNANChfU=
|
||||||
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:Yg2hDs4b13Evkpj42FU2idX2cVXVFqQSheXYKM86Qsk=
|
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:Yg2hDs4b13Evkpj42FU2idX2cVXVFqQSheXYKM86Qsk=
|
||||||
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:MgJyK38wkzZbiZSKeIeFankxxSA8gayko/nr5x5bgBA=
|
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:MgJyK38wkzZbiZSKeIeFankxxSA8gayko/nr5x5bgBA=
|
||||||
|
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:tuijfIjZyjZaHq9xDUh0tNitwXshJpbLkqMOJv4H3do=
|
||||||
|
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc=
|
||||||
github.com/cpuguy83/go-md2man v1.0.4 h1:OwjhDpK9YGCcI5CDf8HcdfsXqr6znFyAJfuZ27ixJsc=
|
github.com/cpuguy83/go-md2man v1.0.4 h1:OwjhDpK9YGCcI5CDf8HcdfsXqr6znFyAJfuZ27ixJsc=
|
||||||
github.com/cpuguy83/go-md2man v1.0.4/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY=
|
github.com/cpuguy83/go-md2man v1.0.4/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY=
|
||||||
github.com/davecgh/go-spew v0.0.0-20170626231645-782f4967f2dc h1:0A0n6a0Y3vW5ktoWKC+ggkGXRzMJWMvqIYlFmsjwQzY=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v0.0.0-20170626231645-782f4967f2dc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/docker/docker v0.0.0-20180917213351-bbe08dc7f0b9 h1:dArdEP6A7F7aoAph4Gs505ME7QSBjjbRdpklFV384KU=
|
github.com/docker/docker v1.13.1 h1:IkZjBSIc8hBjLpqeAbeE5mca5mNgeatLHBy3GO78BWo=
|
||||||
github.com/docker/docker v0.0.0-20180917213351-bbe08dc7f0b9/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v1.13.1/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/go-units v0.0.0-20170127094116-9e638d38cf69 h1:N4WAsrRIb+4U1yIwJO3FMrLnrr61ael894nygpViQTU=
|
github.com/docker/go-units v0.0.0-20170127094116-9e638d38cf69 h1:N4WAsrRIb+4U1yIwJO3FMrLnrr61ael894nygpViQTU=
|
||||||
github.com/docker/go-units v0.0.0-20170127094116-9e638d38cf69/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
github.com/docker/go-units v0.0.0-20170127094116-9e638d38cf69/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||||
github.com/docker/machine v0.16.1 h1:zrgroZounGVkxLmBqMyc1uT2GgapXVjIWHCfBf0udrA=
|
github.com/docker/machine v0.16.1 h1:zrgroZounGVkxLmBqMyc1uT2GgapXVjIWHCfBf0udrA=
|
||||||
github.com/docker/machine v0.16.1/go.mod h1:I8mPNDeK1uH+JTcUU7X0ZW8KiYz0jyAgNaeSJ1rCfDI=
|
github.com/docker/machine v0.16.1/go.mod h1:I8mPNDeK1uH+JTcUU7X0ZW8KiYz0jyAgNaeSJ1rCfDI=
|
||||||
github.com/fatih/color v1.6.0 h1:66qjqZk8kalYAvDRtM1AdAJQI0tj4Wrue3Eq3B3pmFU=
|
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
|
||||||
github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/fsnotify/fsnotify v0.0.0-20160816051541-f12c6236fe7b h1:lHoxUxMozh/yCASOoFep9dPMva62ztmxKK2VB8//Aoo=
|
|
||||||
github.com/fsnotify/fsnotify v0.0.0-20160816051541-f12c6236fe7b/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680 h1:ZktWZesgun21uEDrwW7iEV1zPCGQldM2atlJZ3TdvVM=
|
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680 h1:ZktWZesgun21uEDrwW7iEV1zPCGQldM2atlJZ3TdvVM=
|
||||||
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/go-critic/go-critic v0.0.0-20181204210945-c3db6069acc5 h1:+7jr1oKB2or53kzZk2gwPbTa+Bo/rjSmdSIIlKmcSos=
|
|
||||||
github.com/go-critic/go-critic v0.0.0-20181204210945-c3db6069acc5/go.mod h1:Jc75BZJv2dNy7opKH6bF29VveDQHfGZ6Asn/3phBesg=
|
|
||||||
github.com/go-critic/go-critic v0.0.0-20181204210945-ee9bf5809ead h1:qwmAYufKDopQnFdeMw+iHJVxAd2CbF+VFKHyJJwnPKk=
|
|
||||||
github.com/go-critic/go-critic v0.0.0-20181204210945-ee9bf5809ead/go.mod h1:3MzXZKJdeXqdU9cj+rvZdNiN7SZ8V9OjybF8loZDmHU=
|
|
||||||
github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0=
|
|
||||||
github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM=
|
|
||||||
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
|
|
||||||
github.com/go-toolsmith/astcast v0.0.0-20181028201508-b7a89ed70af1 h1:h+1eMw+tZAlgTVclcVN0/rdPaBI/RUzG0peblT6df+Q=
|
|
||||||
github.com/go-toolsmith/astcast v0.0.0-20181028201508-b7a89ed70af1/go.mod h1:TEo3Ghaj7PsZawQHxT/oBvo4HK/sl1RcuUHDKTTju+o=
|
|
||||||
github.com/go-toolsmith/astcopy v0.0.0-20180903214859-79b422d080c4 h1:wVs9OMjICHbAryp9hcIuWqUOi+NqEbUSZy9zMe3W//I=
|
|
||||||
github.com/go-toolsmith/astcopy v0.0.0-20180903214859-79b422d080c4/go.mod h1:c9CPdq2AzM8oPomdlPniEfPAC6g1s7NqZzODt8y6ib8=
|
|
||||||
github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6 h1:aTBUNRTatDDU24gbOEKEoLiDwxtc98ga6K/iMTm6fvs=
|
|
||||||
github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
|
|
||||||
github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086 h1:EIMuvbE9fbtQtimdLe5yeXjuC5CeKbQt8zH6GwtIrhM=
|
|
||||||
github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg=
|
|
||||||
github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU=
|
|
||||||
github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30 h1:zRJPftZJNLPDiOtvYbFRwjSbaJAcVOf80TeEmWGe2kQ=
|
|
||||||
github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk=
|
|
||||||
github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks=
|
|
||||||
github.com/go-toolsmith/strparse v0.0.0-20180903215201-830b6daa1241 h1:ZRDeQioMGTBLeJxcPxXfFifEUgYxzR7fXw7w2WR+1bo=
|
|
||||||
github.com/go-toolsmith/strparse v0.0.0-20180903215201-830b6daa1241/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
|
|
||||||
github.com/go-toolsmith/typep v0.0.0-20181030061450-d63dc7650676 h1:6Qrsp0+25KEkaS2bB26UE0giFgRrIc8mYXboDL5OVMA=
|
|
||||||
github.com/go-toolsmith/typep v0.0.0-20181030061450-d63dc7650676/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU=
|
|
||||||
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
|
|
||||||
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
|
|
||||||
github.com/gogo/protobuf v0.0.0-20170330071051-c0656edd0d9e h1:ago6fNuQ6IhszPsXkeU7qRCyfsIX7L67WDybsAPkLl8=
|
github.com/gogo/protobuf v0.0.0-20170330071051-c0656edd0d9e h1:ago6fNuQ6IhszPsXkeU7qRCyfsIX7L67WDybsAPkLl8=
|
||||||
github.com/gogo/protobuf v0.0.0-20170330071051-c0656edd0d9e/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v0.0.0-20170330071051-c0656edd0d9e/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
|
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/golang/glog v0.0.0-20141105023935-44145f04b68c h1:CbdkBQ1/PiAo0FYJhQGwASD8wrgNvTdf01g6+O9tNuA=
|
github.com/golang/glog v0.0.0-20141105023935-44145f04b68c h1:CbdkBQ1/PiAo0FYJhQGwASD8wrgNvTdf01g6+O9tNuA=
|
||||||
github.com/golang/glog v0.0.0-20141105023935-44145f04b68c/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20141105023935-44145f04b68c/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
|
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
|
||||||
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/mock v1.1.1 h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=
|
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/protobuf v0.0.0-20171021043952-1643683e1b54/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0=
|
|
||||||
github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
|
|
||||||
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM=
|
|
||||||
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
|
|
||||||
github.com/golangci/errcheck v0.0.0-20181003203344-ef45e06d44b6 h1:i2jIkQFb8RG45DuQs+ElyROY848cSJIoIkBM+7XXypA=
|
|
||||||
github.com/golangci/errcheck v0.0.0-20181003203344-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0=
|
|
||||||
github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw=
|
|
||||||
github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8=
|
|
||||||
github.com/golangci/go-tools v0.0.0-20180109140146-af6baa5dc196 h1:9rtVlONXLF1rJZzvLt4tfOXtnAFUEhxCJ64Ibzj6ECo=
|
|
||||||
github.com/golangci/go-tools v0.0.0-20180109140146-af6baa5dc196/go.mod h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM=
|
|
||||||
github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8=
|
|
||||||
github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o=
|
|
||||||
github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee h1:J2XAy40+7yz70uaOiMbNnluTg7gyQhtGqLQncQh+4J8=
|
|
||||||
github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU=
|
|
||||||
github.com/golangci/gofmt v0.0.0-20181105071733-0b8337e80d98 h1:ir6/L2ZOJfFrJlOTsuf/hlzdPuUwXV/VzkSlgS6f1vs=
|
|
||||||
github.com/golangci/gofmt v0.0.0-20181105071733-0b8337e80d98/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU=
|
|
||||||
github.com/golangci/golangci-lint v1.16.0 h1:PcWAN9JHflZzJQaZVY1JXZE0Tgjq+jO2v4QLqJ/Azvw=
|
|
||||||
github.com/golangci/golangci-lint v1.16.0/go.mod h1:uySrAxrUmZYnxyccYSnwuAEm+3144Zg5IAUueIW8+fA=
|
|
||||||
github.com/golangci/golangci-lint v1.16.1-0.20190425135923-692dacb773b7 h1:RfttK8W9qaF98OAdNFW2Mbr3ELn1Dyw1nnip6kYVc8M=
|
|
||||||
github.com/golangci/golangci-lint v1.16.1-0.20190425135923-692dacb773b7/go.mod h1:kSe2pu2LlcsMT5Dr95yNKUT5RNfMkwif9MZqtOW5NEs=
|
|
||||||
github.com/golangci/gosec v0.0.0-20180901114220-66fb7fc33547 h1:qMomh8bv+kDazm1dSLZ9S3zZ2PJZMHL4ilfBjxFOlmI=
|
|
||||||
github.com/golangci/gosec v0.0.0-20180901114220-66fb7fc33547/go.mod h1:0qUabqiIQgfmlAmulqxyiGkkyF6/tOGSnY2cnPVwrzU=
|
|
||||||
github.com/golangci/ineffassign v0.0.0-20180808204949-2ee8f2867dde h1:qEGp3ZF1Qw6TkbWKn6GdJ12Ssu/CpJBaBcJ4hrUjrSo=
|
|
||||||
github.com/golangci/ineffassign v0.0.0-20180808204949-2ee8f2867dde/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU=
|
|
||||||
github.com/golangci/lint-1 v0.0.0-20180610141402-4bf9709227d1/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y=
|
|
||||||
github.com/golangci/lint-1 v0.0.0-20180610141402-ee948d087217 h1:r7vyX+SN24x6+5AnpnrRn/bdwBb7U+McZqCHOVtXDuk=
|
|
||||||
github.com/golangci/lint-1 v0.0.0-20180610141402-ee948d087217/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg=
|
|
||||||
github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA=
|
|
||||||
github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o=
|
|
||||||
github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 h1:EL/O5HGrF7Jaq0yNhBLucz9hTuRzj2LdwGBOaENgxIk=
|
|
||||||
github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA=
|
|
||||||
github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us=
|
|
||||||
github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI=
|
|
||||||
github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 h1:HVfrLniijszjS1aiNg8JbBMO2+E1WIQ+j/gL4SQqGPg=
|
|
||||||
github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4=
|
|
||||||
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys=
|
|
||||||
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
|
|
||||||
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
|
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
|
||||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
||||||
|
@ -122,10 +50,10 @@ github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASu
|
||||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||||
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367 h1:ScAXWS+TR6MZKex+7Z8rneuSJH+FSDqd6ocQyl+ZHo4=
|
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367 h1:ScAXWS+TR6MZKex+7Z8rneuSJH+FSDqd6ocQyl+ZHo4=
|
||||||
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
|
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
|
||||||
github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA=
|
|
||||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
|
||||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k=
|
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k=
|
||||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||||
|
github.com/gorilla/mux v1.7.1 h1:Dw4jY2nghMMRsh1ol8dv1axHkDwMQK2DHerMNJsIpJU=
|
||||||
|
github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM=
|
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM=
|
||||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||||
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce h1:prjrVgOk2Yg6w+PflHoszQNLTUh4kaByUcEWM/9uin4=
|
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce h1:prjrVgOk2Yg6w+PflHoszQNLTUh4kaByUcEWM/9uin4=
|
||||||
|
@ -138,10 +66,11 @@ github.com/hashicorp/golang-lru v0.0.0-20160207214719-a0d98a5f2880 h1:OaRuzt9oCK
|
||||||
github.com/hashicorp/golang-lru v0.0.0-20160207214719-a0d98a5f2880/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.0.0-20160207214719-a0d98a5f2880/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/hcl v0.0.0-20160711231752-d8c773c4cba1 h1:9j16AiR0R5hDbDBMzfUfIP9CUbbw6T8nYN4iZz3/wjg=
|
github.com/hashicorp/hcl v0.0.0-20160711231752-d8c773c4cba1 h1:9j16AiR0R5hDbDBMzfUfIP9CUbbw6T8nYN4iZz3/wjg=
|
||||||
github.com/hashicorp/hcl v0.0.0-20160711231752-d8c773c4cba1/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
github.com/hashicorp/hcl v0.0.0-20160711231752-d8c773c4cba1/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
||||||
github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce h1:xdsDDbiBDQTKASoGEZ+pEmF1OnWuu8AQ9I8iNbHNeno=
|
github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 h1:WgfvpuKg42WVLkxNwzfFraXkTXPK36bMqXvMFN67clI=
|
||||||
github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214/go.mod h1:kj6hFWqfwSjFjLnYW5PK1DoxZ4O0uapwHRmd9jhln4E=
|
||||||
github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8 h1:ARl0RuGZTqBOMXQIfXen0twVSJ8kMojd7ThJf4EBcrc=
|
github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8 h1:ARl0RuGZTqBOMXQIfXen0twVSJ8kMojd7ThJf4EBcrc=
|
||||||
github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8/go.mod h1:sOC47ru8lB0DlU0EZ7BJ0KCP5rDqOvx0c/5K5ADm8H0=
|
github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8/go.mod h1:sOC47ru8lB0DlU0EZ7BJ0KCP5rDqOvx0c/5K5ADm8H0=
|
||||||
|
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/imdario/mergo v0.0.0-20141206190957-6633656539c1 h1:FeeCi0I2Fu8kA8IXrdVPtGzym+mW9bzfj9f26EaES9k=
|
github.com/imdario/mergo v0.0.0-20141206190957-6633656539c1 h1:FeeCi0I2Fu8kA8IXrdVPtGzym+mW9bzfj9f26EaES9k=
|
||||||
github.com/imdario/mergo v0.0.0-20141206190957-6633656539c1/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
github.com/imdario/mergo v0.0.0-20141206190957-6633656539c1/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||||
|
@ -155,67 +84,50 @@ github.com/johanneswuerbach/nfsexports v0.0.0-20181204082207-1aa528dcb345 h1:XP1
|
||||||
github.com/johanneswuerbach/nfsexports v0.0.0-20181204082207-1aa528dcb345/go.mod h1:+c1/kUpg2zlkoWqTOvzDs36Wpbm3Gd1nlmtXAEB0WGU=
|
github.com/johanneswuerbach/nfsexports v0.0.0-20181204082207-1aa528dcb345/go.mod h1:+c1/kUpg2zlkoWqTOvzDs36Wpbm3Gd1nlmtXAEB0WGU=
|
||||||
github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE=
|
github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE=
|
||||||
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
|
||||||
github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
|
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169 h1:YUrU1/jxRqnt0PSrKj1Uj/wEjk/fjnE80QFfi2Zlj7Q=
|
github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169 h1:YUrU1/jxRqnt0PSrKj1Uj/wEjk/fjnE80QFfi2Zlj7Q=
|
||||||
github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169/go.mod h1:glhvuHOU9Hy7/8PwwdtnarXqLagOX0b/TbZx2zLMqEg=
|
github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169/go.mod h1:glhvuHOU9Hy7/8PwwdtnarXqLagOX0b/TbZx2zLMqEg=
|
||||||
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/libvirt/libvirt-go v3.4.0+incompatible h1:Cpyalgj1x8JIeTlL6SDYZBo7j8nY3+5XHqmi8DaunCk=
|
github.com/libvirt/libvirt-go v3.4.0+incompatible h1:Cpyalgj1x8JIeTlL6SDYZBo7j8nY3+5XHqmi8DaunCk=
|
||||||
github.com/libvirt/libvirt-go v3.4.0+incompatible/go.mod h1:34zsnB4iGeOv7Byj6qotuW8Ya4v4Tr43ttjz/F0wjLE=
|
github.com/libvirt/libvirt-go v3.4.0+incompatible/go.mod h1:34zsnB4iGeOv7Byj6qotuW8Ya4v4Tr43ttjz/F0wjLE=
|
||||||
github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
|
|
||||||
github.com/machine-drivers/docker-machine-driver-vmware v0.1.1 h1:+E1IKKk+6kaQrCPg6edJZ/zISZijuZTPnzy6RE4C/Ho=
|
github.com/machine-drivers/docker-machine-driver-vmware v0.1.1 h1:+E1IKKk+6kaQrCPg6edJZ/zISZijuZTPnzy6RE4C/Ho=
|
||||||
github.com/machine-drivers/docker-machine-driver-vmware v0.1.1/go.mod h1:ej014C83EmSnxJeJ8PtVb8OLJ91PJKO1Q8Y7sM5CK0o=
|
github.com/machine-drivers/docker-machine-driver-vmware v0.1.1/go.mod h1:ej014C83EmSnxJeJ8PtVb8OLJ91PJKO1Q8Y7sM5CK0o=
|
||||||
github.com/magiconair/properties v0.0.0-20160816085511-61b492c03cf4 h1:YVH4JcnWs1z/qQ2Dg5BnGGQL8PcUOO97Sb5w7RyuBl4=
|
github.com/magiconair/properties v0.0.0-20160816085511-61b492c03cf4 h1:YVH4JcnWs1z/qQ2Dg5BnGGQL8PcUOO97Sb5w7RyuBl4=
|
||||||
github.com/magiconair/properties v0.0.0-20160816085511-61b492c03cf4/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v0.0.0-20160816085511-61b492c03cf4/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
github.com/magiconair/properties v1.7.6 h1:U+1DqNen04MdEPgFiIwdOUiqZ8qPa37xgogX/sd3+54=
|
github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg=
|
||||||
github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
||||||
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
|
github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw=
|
||||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
|
||||||
github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs=
|
|
||||||
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
|
||||||
github.com/mattn/go-runewidth v0.0.0-20161012013512-737072b4e32b h1:idzeyUe3K4aU/SIZWMykIkJJyTD7CgDkxUQEjV07fno=
|
github.com/mattn/go-runewidth v0.0.0-20161012013512-737072b4e32b h1:idzeyUe3K4aU/SIZWMykIkJJyTD7CgDkxUQEjV07fno=
|
||||||
github.com/mattn/go-runewidth v0.0.0-20161012013512-737072b4e32b/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
github.com/mattn/go-runewidth v0.0.0-20161012013512-737072b4e32b/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||||
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
|
|
||||||
github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0=
|
|
||||||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
|
||||||
github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936 h1:kw1v0NlnN+GZcU8Ma8CLF2Zzgjfx95gs3/GN3vYAPpo=
|
github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936 h1:kw1v0NlnN+GZcU8Ma8CLF2Zzgjfx95gs3/GN3vYAPpo=
|
||||||
github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk=
|
github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk=
|
||||||
github.com/mitchellh/mapstructure v0.0.0-20170307201123-53818660ed49 h1:kaWdlw4YogwkDl8CG+/VxhXkrL9uz3n1D9QBC2pEGLE=
|
github.com/mitchellh/mapstructure v0.0.0-20170307201123-53818660ed49 h1:kaWdlw4YogwkDl8CG+/VxhXkrL9uz3n1D9QBC2pEGLE=
|
||||||
github.com/mitchellh/mapstructure v0.0.0-20170307201123-53818660ed49/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v0.0.0-20170307201123-53818660ed49/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238 h1:+MZW2uvHgN8kYvksEN3f7eFL2wpzk0GxmlFsMybWc7E=
|
|
||||||
github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
|
||||||
github.com/moby/hyperkit v0.0.0-20171020124204-a12cd7250bcd h1:WDG9l//UGcGx4lqqEDY23+mRnQMKFY+8LD83OxQllRk=
|
github.com/moby/hyperkit v0.0.0-20171020124204-a12cd7250bcd h1:WDG9l//UGcGx4lqqEDY23+mRnQMKFY+8LD83OxQllRk=
|
||||||
github.com/moby/hyperkit v0.0.0-20171020124204-a12cd7250bcd/go.mod h1:zGAVB/FkAf4ozkR8CCuj4LcVuErrNsj9APTDFvhOckw=
|
github.com/moby/hyperkit v0.0.0-20171020124204-a12cd7250bcd/go.mod h1:zGAVB/FkAf4ozkR8CCuj4LcVuErrNsj9APTDFvhOckw=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
|
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
|
||||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
|
|
||||||
github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
|
|
||||||
github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663 h1:Ri1EhipkbhWsffPJ3IPlrb4SkTOPa2PfRXp3jchBczw=
|
|
||||||
github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
|
|
||||||
github.com/olekukonko/tablewriter v0.0.0-20160923125401-bdcc175572fd h1:nEatQ6JnwCT9iYD5uqYUiFqq8tJGX25to8KVKXqya7k=
|
github.com/olekukonko/tablewriter v0.0.0-20160923125401-bdcc175572fd h1:nEatQ6JnwCT9iYD5uqYUiFqq8tJGX25to8KVKXqya7k=
|
||||||
github.com/olekukonko/tablewriter v0.0.0-20160923125401-bdcc175572fd/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
|
github.com/olekukonko/tablewriter v0.0.0-20160923125401-bdcc175572fd/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
|
||||||
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w=
|
||||||
github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
|
github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
|
||||||
|
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
github.com/pborman/uuid v0.0.0-20150603214016-ca53cad383ca h1:dKRMHfduZ/ZqOHuYGk/0kkTIUbnyorkAfzLOp6Ts8pU=
|
github.com/pborman/uuid v0.0.0-20150603214016-ca53cad383ca h1:dKRMHfduZ/ZqOHuYGk/0kkTIUbnyorkAfzLOp6Ts8pU=
|
||||||
github.com/pborman/uuid v0.0.0-20150603214016-ca53cad383ca/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
|
github.com/pborman/uuid v0.0.0-20150603214016-ca53cad383ca/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
|
||||||
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
|
|
||||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
|
||||||
github.com/pelletier/go-buffruneio v0.1.0 h1:ig6N9Cg71k/P+UUbhwdOFtJWz+qa8/3by7AzMprMWBM=
|
github.com/pelletier/go-buffruneio v0.1.0 h1:ig6N9Cg71k/P+UUbhwdOFtJWz+qa8/3by7AzMprMWBM=
|
||||||
github.com/pelletier/go-buffruneio v0.1.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
|
github.com/pelletier/go-buffruneio v0.1.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
|
||||||
github.com/pelletier/go-toml v0.0.0-20160822122712-0049ab3dc4c4 h1:tMVXZ04h5CqgTvMyA8IL1b9xlJz7G+mTcCsYi3WXRtA=
|
github.com/pelletier/go-toml v0.0.0-20160822122712-0049ab3dc4c4 h1:tMVXZ04h5CqgTvMyA8IL1b9xlJz7G+mTcCsYi3WXRtA=
|
||||||
github.com/pelletier/go-toml v0.0.0-20160822122712-0049ab3dc4c4/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v0.0.0-20160822122712-0049ab3dc4c4/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
github.com/pelletier/go-toml v1.1.0 h1:cmiOvKzEunMsAxyhXSzpL5Q1CRKpVv0KQsnAIcSEVYM=
|
|
||||||
github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
|
||||||
github.com/petar/GoLLRB v0.0.0-20130427215148-53be0d36a84c/go.mod h1:HUpKUBZnpzkdx0kD/+Yfuft+uD3zHGtXF/XJB14TUr4=
|
|
||||||
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
|
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
|
||||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||||
github.com/pkg/browser v0.0.0-20160118053552-9302be274faa h1:od00Tr1U7+cLVtc+RNFmR53spHUF98Ziu33S8UIQnt0=
|
github.com/pkg/browser v0.0.0-20160118053552-9302be274faa h1:od00Tr1U7+cLVtc+RNFmR53spHUF98Ziu33S8UIQnt0=
|
||||||
|
@ -230,51 +142,32 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/r2d4/external-storage v0.0.0-20171222174501-8c0e8605dc7b h1:+wokSDzl6kjfWhVQsBhFOC2t4TYfdLfRXfWorEg3KUE=
|
github.com/r2d4/external-storage v0.0.0-20171222174501-8c0e8605dc7b h1:+wokSDzl6kjfWhVQsBhFOC2t4TYfdLfRXfWorEg3KUE=
|
||||||
github.com/r2d4/external-storage v0.0.0-20171222174501-8c0e8605dc7b/go.mod h1:/UlUhYuWiiitqIPbAxyU96i/wDlBS8sRHX2lRN+ffgs=
|
github.com/r2d4/external-storage v0.0.0-20171222174501-8c0e8605dc7b/go.mod h1:/UlUhYuWiiitqIPbAxyU96i/wDlBS8sRHX2lRN+ffgs=
|
||||||
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
|
||||||
github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5 h1:+6eORf9Bt4C3Wjt91epyu6wvLW+P6+AEODb6uKgO+4g=
|
github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5 h1:+6eORf9Bt4C3Wjt91epyu6wvLW+P6+AEODb6uKgO+4g=
|
||||||
github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
|
|
||||||
github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 h1:XRl74t6xHKI5EVIjDI5nPlHRq0bHED9/TjQuD8/UMkE=
|
github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 h1:XRl74t6xHKI5EVIjDI5nPlHRq0bHED9/TjQuD8/UMkE=
|
||||||
github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859/go.mod h1:yeYR4SlaRZJct6lwNRKR+qd0CocnxxWDE7Vh5dxsn/w=
|
github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859/go.mod h1:yeYR4SlaRZJct6lwNRKR+qd0CocnxxWDE7Vh5dxsn/w=
|
||||||
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
|
||||||
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
|
|
||||||
github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
|
|
||||||
github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
|
|
||||||
github.com/shurcooL/sanitized_anchor_name v0.0.0-20151028001915-10ef21a441db h1:lrOUn8raSZS/V52c7elGaEyuogqSkEo/Qj2Auo2G1ik=
|
github.com/shurcooL/sanitized_anchor_name v0.0.0-20151028001915-10ef21a441db h1:lrOUn8raSZS/V52c7elGaEyuogqSkEo/Qj2Auo2G1ik=
|
||||||
github.com/shurcooL/sanitized_anchor_name v0.0.0-20151028001915-10ef21a441db/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
github.com/shurcooL/sanitized_anchor_name v0.0.0-20151028001915-10ef21a441db/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/sirupsen/logrus v0.0.0-20170822132746-89742aefa4b2 h1:+8J/sCAVv2Y9Ct1BKszDFJEVWv6Aynr2O4FYGUg6+Mc=
|
|
||||||
github.com/sirupsen/logrus v0.0.0-20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
|
||||||
github.com/sirupsen/logrus v1.0.5 h1:8c8b5uO0zS4X6RPl/sd1ENwSkIc0/H2PaHxE3udaE8I=
|
|
||||||
github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
|
||||||
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
|
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
|
||||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||||
github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs=
|
|
||||||
github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE=
|
|
||||||
github.com/spf13/afero v0.0.0-20160816080757-b28a7effac97 h1:Gv1HykSEG+RKWWWkM69nPrJKhE/EM2oFb1nBWogHNv8=
|
github.com/spf13/afero v0.0.0-20160816080757-b28a7effac97 h1:Gv1HykSEG+RKWWWkM69nPrJKhE/EM2oFb1nBWogHNv8=
|
||||||
github.com/spf13/afero v0.0.0-20160816080757-b28a7effac97/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
github.com/spf13/afero v0.0.0-20160816080757-b28a7effac97/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||||
github.com/spf13/afero v1.1.0 h1:bopulORc2JeYaxfHLvJa5NzxviA9PoWhpiiJkru7Ji4=
|
|
||||||
github.com/spf13/afero v1.1.0/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
|
||||||
github.com/spf13/cast v0.0.0-20160730092037-e31f36ffc91a h1:tPI5RnYZJhcXj0LhJ9pi7PS7gqOhuFR+4HEKyDz3BnQ=
|
github.com/spf13/cast v0.0.0-20160730092037-e31f36ffc91a h1:tPI5RnYZJhcXj0LhJ9pi7PS7gqOhuFR+4HEKyDz3BnQ=
|
||||||
github.com/spf13/cast v0.0.0-20160730092037-e31f36ffc91a/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
|
github.com/spf13/cast v0.0.0-20160730092037-e31f36ffc91a/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
|
||||||
github.com/spf13/cast v1.2.0 h1:HHl1DSRbEQN2i8tJmtS6ViPyHx35+p51amrdsiTCrkg=
|
|
||||||
github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
|
|
||||||
github.com/spf13/cobra v0.0.0-20180228053838-6644d46b81fa h1:w+PYzMV4Hrxj0nSHUxY881YFte8hst14ZZ0ZNL3mlEA=
|
github.com/spf13/cobra v0.0.0-20180228053838-6644d46b81fa h1:w+PYzMV4Hrxj0nSHUxY881YFte8hst14ZZ0ZNL3mlEA=
|
||||||
github.com/spf13/cobra v0.0.0-20180228053838-6644d46b81fa/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
github.com/spf13/cobra v0.0.0-20180228053838-6644d46b81fa/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||||
github.com/spf13/cobra v0.0.2 h1:NfkwRbgViGoyjBKsLI0QMDcuMnhM+SBg3T0cGfpvKDE=
|
|
||||||
github.com/spf13/cobra v0.0.2/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
|
||||||
github.com/spf13/jwalterweatherman v0.0.0-20160311093646-33c24e77fb80 h1:evyGXhHMrxKBDkdlSPv9HMWV2o53o+Ibhm28BGc0450=
|
github.com/spf13/jwalterweatherman v0.0.0-20160311093646-33c24e77fb80 h1:evyGXhHMrxKBDkdlSPv9HMWV2o53o+Ibhm28BGc0450=
|
||||||
github.com/spf13/jwalterweatherman v0.0.0-20160311093646-33c24e77fb80/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v0.0.0-20160311093646-33c24e77fb80/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec h1:2ZXvIUGghLpdTVHR1UfvfrzoVlZaE/yOWC5LueIHZig=
|
|
||||||
github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
|
||||||
github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
|
github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
|
||||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/viper v1.0.0 h1:RUA/ghS2i64rlnn4ydTfblY8Og8QzcPtCcHvgMn+w/I=
|
github.com/spf13/viper v1.0.0 h1:RUA/ghS2i64rlnn4ydTfblY8Og8QzcPtCcHvgMn+w/I=
|
||||||
github.com/spf13/viper v1.0.0/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
|
github.com/spf13/viper v1.0.0/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
|
||||||
github.com/spf13/viper v1.0.2 h1:Ncr3ZIuJn322w2k1qmzXDnkLAdQMlJqBa9kfAH+irso=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
|
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20151027082146-e0fe6f683076 h1:KM4T3G70MiR+JtqplcYkNVoNz7pDwYaBxWBXQK804So=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20151027082146-e0fe6f683076 h1:KM4T3G70MiR+JtqplcYkNVoNz7pDwYaBxWBXQK804So=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20151027082146-e0fe6f683076/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20151027082146-e0fe6f683076/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||||
github.com/xeipuuv/gojsonreference v0.0.0-20150808065054-e02fc20de94c h1:XZWnr3bsDQWAZg4Ne+cPoXRPILrNlPNQfxBuwLl43is=
|
github.com/xeipuuv/gojsonreference v0.0.0-20150808065054-e02fc20de94c h1:XZWnr3bsDQWAZg4Ne+cPoXRPILrNlPNQfxBuwLl43is=
|
||||||
|
@ -283,73 +176,54 @@ github.com/xeipuuv/gojsonschema v0.0.0-20160623135812-c539bca196be h1:sRGd3e18iz
|
||||||
github.com/xeipuuv/gojsonschema v0.0.0-20160623135812-c539bca196be/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
|
github.com/xeipuuv/gojsonschema v0.0.0-20160623135812-c539bca196be/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
|
||||||
github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097 h1:Ucx5I1l1+TWXvqFmBigYu4Ub4MLvUuUU/whjoUvV95I=
|
github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097 h1:Ucx5I1l1+TWXvqFmBigYu4Ub4MLvUuUU/whjoUvV95I=
|
||||||
github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097/go.mod h1:lFZSWRIpCfE/pt91hHBBpV6+x87YlCjsp+aIR2qCPPU=
|
github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097/go.mod h1:lFZSWRIpCfE/pt91hHBBpV6+x87YlCjsp+aIR2qCPPU=
|
||||||
golang.org/x/crypto v0.0.0-20170825220121-81e90905daef h1:R8ubLIilYRXIXpgjOg2l/ECVs3HzVKIjJEhxSsQ91u4=
|
|
||||||
golang.org/x/crypto v0.0.0-20170825220121-81e90905daef/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a h1:YX8ljsm6wXlHZO+aRz9Exqr0evNhKRNe5K/gi+zKh4U=
|
|
||||||
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
|
||||||
golang.org/x/net v0.0.0-20170809000501-1c05540f6879/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e h1:bRhVy7zSSasaqNksaRZiA5EEI+Ei4I1nO5Jh72wfHlg=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e h1:bRhVy7zSSasaqNksaRZiA5EEI+Ei4I1nO5Jh72wfHlg=
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190313220215-9f648a60d977 h1:actzWV6iWn3GLqN8dZjzsB+CLt+gaV2+wsxroxiQI8I=
|
|
||||||
golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
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-20190115181402-5dab4167f31c h1:pcBdqVcrlT+A3i+tWsOROFONQyey9tisIQHI4xqVGLg=
|
golang.org/x/oauth2 v0.0.0-20190115181402-5dab4167f31c h1:pcBdqVcrlT+A3i+tWsOROFONQyey9tisIQHI4xqVGLg=
|
||||||
golang.org/x/oauth2 v0.0.0-20190115181402-5dab4167f31c/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190115181402-5dab4167f31c/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/sync v0.0.0-20170517211232-f52d1811a629/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20171026204733-164713f0dfce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20171031081856-95c657629925 h1:nCH33NboKIsT4HoXBsXTWX8ul303HxWgkc5s2Ezwacg=
|
|
||||||
golang.org/x/sys v0.0.0-20171031081856-95c657629925/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313 h1:pczuHS43Cp2ktBEEmLwScxgjWsBSzdaQiKzUyf3DTTc=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8=
|
||||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/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.0/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=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/time v0.0.0-20161028155119-f51c12702a4d h1:TnM+PKb3ylGmZvyPXmo9m/wktg7Jn/a/fNmr33HSj8g=
|
golang.org/x/time v0.0.0-20161028155119-f51c12702a4d h1:TnM+PKb3ylGmZvyPXmo9m/wktg7Jn/a/fNmr33HSj8g=
|
||||||
golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20181024171208-a2dc47679d30/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20181205014116-22934f0fdb62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190121143147-24cd39ecf745/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
golang.org/x/tools v0.0.0-20190314010720-f0bfdbff1f9c/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
golang.org/x/tools v0.0.0-20190420000508-685fecacd0a0 h1:pa1CyBALPFjblgkNQp7T7gEcFcG/GOG5Ck8IcnSVWGs=
|
|
||||||
golang.org/x/tools v0.0.0-20190420000508-685fecacd0a0/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
|
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo=
|
||||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/cheggaaa/pb.v1 v1.0.6 h1:YQye4a1JysUfXYB6VihDfxb4lxOAei0xS44yN+srOew=
|
gopkg.in/cheggaaa/pb.v1 v1.0.6 h1:YQye4a1JysUfXYB6VihDfxb4lxOAei0xS44yN+srOew=
|
||||||
gopkg.in/cheggaaa/pb.v1 v1.0.6/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
|
gopkg.in/cheggaaa/pb.v1 v1.0.6/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
|
||||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||||
|
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0=
|
||||||
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
|
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
|
||||||
gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o=
|
gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o=
|
||||||
gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||||
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170721113624-670d4cfef054 h1:ROF+R/wHHruzF40n5DfPv2jwm7rCJwvs8fz+RTZWjLE=
|
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU=
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170721113624-670d4cfef054/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
k8s.io/api v0.0.0-20180712090710-2d6f90ab1293 h1:hROmpFC7JMobXFXMmD7ZKZLhDKvr1IKfFJoYS/45G/8=
|
k8s.io/api v0.0.0-20180712090710-2d6f90ab1293 h1:hROmpFC7JMobXFXMmD7ZKZLhDKvr1IKfFJoYS/45G/8=
|
||||||
|
@ -364,13 +238,3 @@ k8s.io/kube-openapi v0.0.0-20180216212618-50ae88d24ede h1:YOWlONzJUq456SnNYPcK/o
|
||||||
k8s.io/kube-openapi v0.0.0-20180216212618-50ae88d24ede/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc=
|
k8s.io/kube-openapi v0.0.0-20180216212618-50ae88d24ede/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc=
|
||||||
k8s.io/kubernetes v1.11.3 h1:49Pz+NOerox7nZ9F0m/fWv2MIuFDU5cDAoYMozurx1k=
|
k8s.io/kubernetes v1.11.3 h1:49Pz+NOerox7nZ9F0m/fWv2MIuFDU5cDAoYMozurx1k=
|
||||||
k8s.io/kubernetes v1.11.3/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
|
k8s.io/kubernetes v1.11.3/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
|
||||||
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I=
|
|
||||||
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
|
|
||||||
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo=
|
|
||||||
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
|
|
||||||
mvdan.cc/unparam v0.0.0-20190124213536-fbb59629db34 h1:B1LAOfRqg2QUyCdzfjf46quTSYUTAK5OCwbh6pljHbM=
|
|
||||||
mvdan.cc/unparam v0.0.0-20190124213536-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY=
|
|
||||||
sourcegraph.com/sourcegraph/go-diff v0.5.1-0.20190210232911-dee78e514455 h1:qoQ5Kt+Zm+GXBtz49YwD3juBhr/E0U25jO6bBzxW6NI=
|
|
||||||
sourcegraph.com/sourcegraph/go-diff v0.5.1-0.20190210232911-dee78e514455/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
|
||||||
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c=
|
|
||||||
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
|
||||||
|
|
|
@ -25,9 +25,15 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
os.MkdirAll("./out/docs", os.FileMode(0755))
|
if err := os.MkdirAll("./out/docs", os.FileMode(0755)); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
cmd.RootCmd.DisableAutoGenTag = true
|
cmd.RootCmd.DisableAutoGenTag = true
|
||||||
doc.GenMarkdownTree(cmd.RootCmd, "./out/docs")
|
if err := doc.GenMarkdownTree(cmd.RootCmd, "./out/docs"); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
f, err := os.Create("./out/docs/bash-completion")
|
f, err := os.Create("./out/docs/bash-completion")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -30,7 +30,9 @@ func Test_createDiskImage(t *testing.T) {
|
||||||
defer os.RemoveAll(tmpdir)
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
sshPath := filepath.Join(tmpdir, "ssh")
|
sshPath := filepath.Join(tmpdir, "ssh")
|
||||||
ioutil.WriteFile(sshPath, []byte("mysshkey"), 0644)
|
if err := ioutil.WriteFile(sshPath, []byte("mysshkey"), 0644); err != nil {
|
||||||
|
t.Fatalf("writefile: %v", err)
|
||||||
|
}
|
||||||
diskPath := filepath.Join(tmpdir, "disk")
|
diskPath := filepath.Join(tmpdir, "disk")
|
||||||
|
|
||||||
sizeInMb := 100
|
sizeInMb := 100
|
||||||
|
|
|
@ -36,10 +36,11 @@ import (
|
||||||
"github.com/docker/machine/libmachine/log"
|
"github.com/docker/machine/libmachine/log"
|
||||||
"github.com/docker/machine/libmachine/state"
|
"github.com/docker/machine/libmachine/state"
|
||||||
"github.com/johanneswuerbach/nfsexports"
|
"github.com/johanneswuerbach/nfsexports"
|
||||||
"github.com/mitchellh/go-ps"
|
ps "github.com/mitchellh/go-ps"
|
||||||
"github.com/moby/hyperkit/go"
|
hyperkit "github.com/moby/hyperkit/go"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
pkgdrivers "k8s.io/minikube/pkg/drivers"
|
pkgdrivers "k8s.io/minikube/pkg/drivers"
|
||||||
|
|
||||||
"k8s.io/minikube/pkg/minikube/constants"
|
"k8s.io/minikube/pkg/minikube/constants"
|
||||||
commonutil "k8s.io/minikube/pkg/util"
|
commonutil "k8s.io/minikube/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build darwin
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2016 The Kubernetes Authors All rights reserved.
|
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
@ -23,6 +25,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/machine/libmachine/log"
|
"github.com/docker/machine/libmachine/log"
|
||||||
|
@ -37,6 +40,10 @@ const (
|
||||||
SharedNetAddrKey = "Shared_Net_Address"
|
SharedNetAddrKey = "Shared_Net_Address"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
leadingZeroRegexp = regexp.MustCompile(`0([A-Fa-f0-9](:|$))`)
|
||||||
|
)
|
||||||
|
|
||||||
// DHCPEntry holds a parsed DNS entry
|
// DHCPEntry holds a parsed DNS entry
|
||||||
type DHCPEntry struct {
|
type DHCPEntry struct {
|
||||||
Name string
|
Name string
|
||||||
|
@ -115,6 +122,11 @@ func parseDHCPdLeasesFile(file io.Reader) ([]DHCPEntry, error) {
|
||||||
return dhcpEntries, scanner.Err()
|
return dhcpEntries, scanner.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// trimMacAddress trimming "0" of the ten's digit
|
||||||
|
func trimMacAddress(rawUUID string) string {
|
||||||
|
return leadingZeroRegexp.ReplaceAllString(rawUUID, "$1")
|
||||||
|
}
|
||||||
|
|
||||||
// GetNetAddr gets the network address for vmnet
|
// GetNetAddr gets the network address for vmnet
|
||||||
func GetNetAddr() (net.IP, error) {
|
func GetNetAddr() (net.IP, error) {
|
||||||
plistPath := VMNetDomain + ".plist"
|
plistPath := VMNetDomain + ".plist"
|
||||||
|
|
|
@ -22,6 +22,6 @@ import (
|
||||||
vmnet "github.com/zchee/go-vmnet"
|
vmnet "github.com/zchee/go-vmnet"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetMACAddressFromUUID(UUID string) (string, error) {
|
func GetMACAddressFromUUID(id string) (string, error) {
|
||||||
return vmnet.GetMACAddressFromUUID(UUID)
|
return vmnet.GetMACAddressFromUUID(id)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2016 The Kubernetes Authors All rights reserved.
|
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2018 The Kubernetes Authors All rights reserved.
|
Copyright 2018 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2016 The Kubernetes Authors All rights reserved.
|
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2016 The Kubernetes Authors All rights reserved.
|
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ func NewComponentExtraArgs(opts util.ExtraOptionSlice, version semver.Version, f
|
||||||
var kubeadmExtraArgs []ComponentExtraArgs
|
var kubeadmExtraArgs []ComponentExtraArgs
|
||||||
for _, extraOpt := range opts {
|
for _, extraOpt := range opts {
|
||||||
if _, ok := componentToKubeadmConfigKey[extraOpt.Component]; !ok {
|
if _, ok := componentToKubeadmConfigKey[extraOpt.Component]; !ok {
|
||||||
return nil, fmt.Errorf("Unknown component %s. Valid components and kubeadm config are %v", componentToKubeadmConfigKey, componentToKubeadmConfigKey)
|
return nil, fmt.Errorf("unknown component %q. valid components are: %v", componentToKubeadmConfigKey, componentToKubeadmConfigKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ func ParseFeatureArgs(featureGates string) (map[string]bool, string, error) {
|
||||||
// feature gates for kubeadm
|
// feature gates for kubeadm
|
||||||
func Supports(featureName string) bool {
|
func Supports(featureName string) bool {
|
||||||
for k := range features.InitFeatureGates {
|
for k := range features.InitFeatureGates {
|
||||||
if featureName == string(k) {
|
if featureName == k {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -310,7 +310,7 @@ func DefaultOptionsForComponentAndVersion(component string, version semver.Versi
|
||||||
if opts.Option.Component == component {
|
if opts.Option.Component == component {
|
||||||
if VersionIsBetween(version, opts.GreaterThanOrEqual, opts.LessThanOrEqual) {
|
if VersionIsBetween(version, opts.GreaterThanOrEqual, opts.LessThanOrEqual) {
|
||||||
if val, ok := versionedOpts[opts.Option.Key]; ok {
|
if val, ok := versionedOpts[opts.Option.Key]; ok {
|
||||||
return nil, fmt.Errorf("Flag %s=%s already set %s=%s", opts.Option.Key, opts.Option.Value, opts.Option.Key, val)
|
return nil, fmt.Errorf("flag %s=%q already set %s=%q", opts.Option.Key, opts.Option.Value, opts.Option.Key, val)
|
||||||
}
|
}
|
||||||
versionedOpts[opts.Option.Key] = opts.Option.Value
|
versionedOpts[opts.Option.Key] = opts.Option.Value
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,15 +44,13 @@ import (
|
||||||
pkgutil "k8s.io/minikube/pkg/util"
|
pkgutil "k8s.io/minikube/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
defaultVirtualboxNicType = "virtio"
|
|
||||||
)
|
|
||||||
|
|
||||||
//This init function is used to set the logtostderr variable to false so that INFO level log info does not clutter the CLI
|
//This init function is used to set the logtostderr variable to false so that INFO level log info does not clutter the CLI
|
||||||
//INFO lvl logging is displayed due to the kubernetes api calling flag.Set("logtostderr", "true") in its init()
|
//INFO lvl logging is displayed due to the kubernetes api calling flag.Set("logtostderr", "true") in its init()
|
||||||
//see: https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/util/logs/logs.go#L32-L34
|
//see: https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/util/logs/logs.go#L32-L34
|
||||||
func init() {
|
func init() {
|
||||||
flag.Set("logtostderr", "false")
|
if err := flag.Set("logtostderr", "false"); err != nil {
|
||||||
|
exit.WithError("unable to set logtostderr", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Setting the default client to native gives much better performance.
|
// Setting the default client to native gives much better performance.
|
||||||
ssh.SetDefaultClient(ssh.Native)
|
ssh.SetDefaultClient(ssh.Native)
|
||||||
|
|
|
@ -214,7 +214,11 @@ func TestStopHostError(t *testing.T) {
|
||||||
|
|
||||||
func TestStopHost(t *testing.T) {
|
func TestStopHost(t *testing.T) {
|
||||||
api := tests.NewMockAPI()
|
api := tests.NewMockAPI()
|
||||||
h, _ := createHost(api, defaultMachineConfig)
|
h, err := createHost(api, defaultMachineConfig)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("createHost failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := StopHost(api); err != nil {
|
if err := StopHost(api); err != nil {
|
||||||
t.Fatal("An error should be thrown when stopping non-existing machine.")
|
t.Fatal("An error should be thrown when stopping non-existing machine.")
|
||||||
}
|
}
|
||||||
|
@ -225,7 +229,9 @@ func TestStopHost(t *testing.T) {
|
||||||
|
|
||||||
func TestDeleteHost(t *testing.T) {
|
func TestDeleteHost(t *testing.T) {
|
||||||
api := tests.NewMockAPI()
|
api := tests.NewMockAPI()
|
||||||
createHost(api, defaultMachineConfig)
|
if _, err := createHost(api, defaultMachineConfig); err != nil {
|
||||||
|
t.Errorf("createHost failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := DeleteHost(api); err != nil {
|
if err := DeleteHost(api); err != nil {
|
||||||
t.Fatalf("Unexpected error deleting host: %v", err)
|
t.Fatalf("Unexpected error deleting host: %v", err)
|
||||||
|
@ -234,7 +240,10 @@ func TestDeleteHost(t *testing.T) {
|
||||||
|
|
||||||
func TestDeleteHostErrorDeletingVM(t *testing.T) {
|
func TestDeleteHostErrorDeletingVM(t *testing.T) {
|
||||||
api := tests.NewMockAPI()
|
api := tests.NewMockAPI()
|
||||||
h, _ := createHost(api, defaultMachineConfig)
|
h, err := createHost(api, defaultMachineConfig)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("createHost failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
d := &tests.MockDriver{RemoveError: true}
|
d := &tests.MockDriver{RemoveError: true}
|
||||||
|
|
||||||
|
@ -248,7 +257,9 @@ func TestDeleteHostErrorDeletingVM(t *testing.T) {
|
||||||
func TestDeleteHostErrorDeletingFiles(t *testing.T) {
|
func TestDeleteHostErrorDeletingFiles(t *testing.T) {
|
||||||
api := tests.NewMockAPI()
|
api := tests.NewMockAPI()
|
||||||
api.RemoveError = true
|
api.RemoveError = true
|
||||||
createHost(api, defaultMachineConfig)
|
if _, err := createHost(api, defaultMachineConfig); err != nil {
|
||||||
|
t.Errorf("createHost failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := DeleteHost(api); err == nil {
|
if err := DeleteHost(api); err == nil {
|
||||||
t.Fatal("Expected error deleting host.")
|
t.Fatal("Expected error deleting host.")
|
||||||
|
@ -270,10 +281,15 @@ func TestGetHostStatus(t *testing.T) {
|
||||||
|
|
||||||
checkState(state.None.String())
|
checkState(state.None.String())
|
||||||
|
|
||||||
createHost(api, defaultMachineConfig)
|
if _, err := createHost(api, defaultMachineConfig); err != nil {
|
||||||
|
t.Errorf("createHost failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
checkState(state.Running.String())
|
checkState(state.Running.String())
|
||||||
|
|
||||||
StopHost(api)
|
if err := StopHost(api); err != nil {
|
||||||
|
t.Errorf("StopHost failed: %v", err)
|
||||||
|
}
|
||||||
checkState(state.Stopped.String())
|
checkState(state.Stopped.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -482,7 +482,9 @@ func TestContainerFunctions(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kill the containers and assert that they have disappeared
|
// Kill the containers and assert that they have disappeared
|
||||||
cr.KillContainers(got)
|
if err := cr.KillContainers(got); err != nil {
|
||||||
|
t.Errorf("KillContainers: %v", err)
|
||||||
|
}
|
||||||
got, err = cr.ListContainers("")
|
got, err = cr.ListContainers("")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("ListContainers: %v", err)
|
t.Fatalf("ListContainers: %v", err)
|
||||||
|
|
|
@ -19,6 +19,8 @@ limitations under the License.
|
||||||
package hyperkit
|
package hyperkit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/docker/machine/libmachine/drivers"
|
"github.com/docker/machine/libmachine/drivers"
|
||||||
"github.com/pborman/uuid"
|
"github.com/pborman/uuid"
|
||||||
"k8s.io/minikube/pkg/drivers/hyperkit"
|
"k8s.io/minikube/pkg/drivers/hyperkit"
|
||||||
|
@ -28,11 +30,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
registry.Register(registry.DriverDef{
|
if err := registry.Register(registry.DriverDef{
|
||||||
Name: "hyperkit",
|
Name: "hyperkit",
|
||||||
Builtin: false,
|
Builtin: false,
|
||||||
ConfigCreator: createHyperkitHost,
|
ConfigCreator: createHyperkitHost,
|
||||||
})
|
}); err != nil {
|
||||||
|
panic(fmt.Sprintf("register: %v", err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createHyperkitHost(config cfg.MachineConfig) interface{} {
|
func createHyperkitHost(config cfg.MachineConfig) interface{} {
|
||||||
|
|
|
@ -19,6 +19,8 @@ limitations under the License.
|
||||||
package vmwarefusion
|
package vmwarefusion
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/docker/machine/drivers/vmwarefusion"
|
"github.com/docker/machine/drivers/vmwarefusion"
|
||||||
"github.com/docker/machine/libmachine/drivers"
|
"github.com/docker/machine/libmachine/drivers"
|
||||||
cfg "k8s.io/minikube/pkg/minikube/config"
|
cfg "k8s.io/minikube/pkg/minikube/config"
|
||||||
|
@ -27,14 +29,16 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
registry.Register(registry.DriverDef{
|
if err := registry.Register(registry.DriverDef{
|
||||||
Name: "vmwarefusion",
|
Name: "vmwarefusion",
|
||||||
Builtin: true,
|
Builtin: true,
|
||||||
ConfigCreator: createVMwareFusionHost,
|
ConfigCreator: createVMwareFusionHost,
|
||||||
DriverCreator: func() drivers.Driver {
|
DriverCreator: func() drivers.Driver {
|
||||||
return vmwarefusion.NewDriver("", "")
|
return vmwarefusion.NewDriver("", "")
|
||||||
},
|
},
|
||||||
})
|
}); err != nil {
|
||||||
|
panic(fmt.Sprintf("register: %v", err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createVMwareFusionHost(config cfg.MachineConfig) interface{} {
|
func createVMwareFusionHost(config cfg.MachineConfig) interface{} {
|
||||||
|
|
|
@ -34,7 +34,7 @@ https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#xhyve-driver
|
||||||
`
|
`
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
registry.Register(registry.DriverDef{
|
if err := registry.Register(registry.DriverDef{
|
||||||
Name: "xhyve",
|
Name: "xhyve",
|
||||||
Builtin: false,
|
Builtin: false,
|
||||||
ConfigCreator: createXhyveHost,
|
ConfigCreator: createXhyveHost,
|
||||||
|
@ -43,7 +43,9 @@ func init() {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
})
|
}); err != nil {
|
||||||
|
panic(fmt.Sprintf("register: %v", err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type xhyveDriver struct {
|
type xhyveDriver struct {
|
||||||
|
|
|
@ -298,7 +298,9 @@ func CacheImage(image, dst string) error {
|
||||||
defer func() {
|
defer func() {
|
||||||
log.SetOutput(os.Stdout)
|
log.SetOutput(os.Stdout)
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
io.Copy(&buf, r)
|
if _, err := io.Copy(&buf, r); err != nil {
|
||||||
|
glog.Errorf("output copy failed: %v", err)
|
||||||
|
}
|
||||||
glog.Infof(buf.String())
|
glog.Infof(buf.String())
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,9 @@ func MaybePrintUpdateText(output io.Writer, url string, lastUpdatePath string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if localVersion.Compare(latestVersion) < 0 {
|
if localVersion.Compare(latestVersion) < 0 {
|
||||||
writeTimeToFile(lastUpdateCheckFilePath, time.Now().UTC())
|
if err := writeTimeToFile(lastUpdateCheckFilePath, time.Now().UTC()); err != nil {
|
||||||
|
glog.Errorf("write time failed: %v", err)
|
||||||
|
}
|
||||||
fmt.Fprintf(output, `There is a newer version of minikube available (%s%s). Download it here:
|
fmt.Fprintf(output, `There is a newer version of minikube available (%s%s). Download it here:
|
||||||
%s%s
|
%s%s
|
||||||
|
|
||||||
|
|
|
@ -54,13 +54,19 @@ func TestShouldCheckURL(t *testing.T) {
|
||||||
|
|
||||||
// test that update notifications get triggered if it has been longer than 24 hours
|
// test that update notifications get triggered if it has been longer than 24 hours
|
||||||
viper.Set(config.ReminderWaitPeriodInHours, 24)
|
viper.Set(config.ReminderWaitPeriodInHours, 24)
|
||||||
writeTimeToFile(lastUpdateCheckFilePath, time.Time{}) //time.Time{} returns time -> January 1, year 1, 00:00:00.000000000 UTC.
|
|
||||||
|
//time.Time{} returns time -> January 1, year 1, 00:00:00.000000000 UTC.
|
||||||
|
if err := writeTimeToFile(lastUpdateCheckFilePath, time.Time{}); err != nil {
|
||||||
|
t.Errorf("write failed: %v", err)
|
||||||
|
}
|
||||||
if !shouldCheckURLVersion(lastUpdateCheckFilePath) {
|
if !shouldCheckURLVersion(lastUpdateCheckFilePath) {
|
||||||
t.Fatalf("shouldCheckURLVersion returned false even though longer than 24 hours since last update")
|
t.Fatalf("shouldCheckURLVersion returned false even though longer than 24 hours since last update")
|
||||||
}
|
}
|
||||||
|
|
||||||
// test that update notifications do not get triggered if it has been less than 24 hours
|
// test that update notifications do not get triggered if it has been less than 24 hours
|
||||||
writeTimeToFile(lastUpdateCheckFilePath, time.Now().UTC())
|
if err := writeTimeToFile(lastUpdateCheckFilePath, time.Now().UTC()); err != nil {
|
||||||
|
t.Errorf("write failed: %v", err)
|
||||||
|
}
|
||||||
if shouldCheckURLVersion(lastUpdateCheckFilePath) {
|
if shouldCheckURLVersion(lastUpdateCheckFilePath) {
|
||||||
t.Fatalf("shouldCheckURLVersion returned true even though less than 24 hours since last update")
|
t.Fatalf("shouldCheckURLVersion returned true even though less than 24 hours since last update")
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,12 +81,12 @@ func (*K8sClientGetter) GetClientset(timeout time.Duration) (*kubernetes.Clients
|
||||||
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
|
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
|
||||||
clientConfig, err := kubeConfig.ClientConfig()
|
clientConfig, err := kubeConfig.ClientConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Error creating kubeConfig: %v", err)
|
return nil, fmt.Errorf("kubeConfig: %v", err)
|
||||||
}
|
}
|
||||||
clientConfig.Timeout = timeout
|
clientConfig.Timeout = timeout
|
||||||
client, err := kubernetes.NewForConfig(clientConfig)
|
client, err := kubernetes.NewForConfig(clientConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "Error creating new client from kubeConfig.ClientConfig()")
|
return nil, errors.Wrap(err, "client from config")
|
||||||
}
|
}
|
||||||
|
|
||||||
return client, nil
|
return client, nil
|
||||||
|
@ -177,7 +177,7 @@ func printURLsForService(c corev1.CoreV1Interface, ip, service, namespace string
|
||||||
if err == nil && endpoints != nil && len(endpoints.Subsets) > 0 {
|
if err == nil && endpoints != nil && len(endpoints.Subsets) > 0 {
|
||||||
for _, ept := range endpoints.Subsets {
|
for _, ept := range endpoints.Subsets {
|
||||||
for _, p := range ept.Ports {
|
for _, p := range ept.Ports {
|
||||||
m[int32(p.Port)] = p.Name
|
m[p.Port] = p.Name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -258,7 +258,9 @@ func WaitAndMaybeOpenService(api libmachine.API, namespace string, service strin
|
||||||
console.OutLn(urlString)
|
console.OutLn(urlString)
|
||||||
} else {
|
} else {
|
||||||
console.OutStyle("celebrate", "Opening kubernetes service %s/%s in default browser...", namespace, service)
|
console.OutStyle("celebrate", "Opening kubernetes service %s/%s in default browser...", namespace, service)
|
||||||
browser.OpenURL(urlString)
|
if err := browser.OpenURL(urlString); err != nil {
|
||||||
|
console.Err("browser failed to open url: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -332,10 +334,6 @@ func DeleteSecret(namespace, name string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
secrets := client.Secrets(namespace)
|
secrets := client.Secrets(namespace)
|
||||||
if err != nil {
|
|
||||||
return &util.RetriableError{Err: err}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = secrets.Delete(name, &metav1.DeleteOptions{})
|
err = secrets.Delete(name, &metav1.DeleteOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &util.RetriableError{Err: err}
|
return &util.RetriableError{Err: err}
|
||||||
|
|
|
@ -22,10 +22,12 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/docker/machine/libmachine"
|
"github.com/docker/machine/libmachine"
|
||||||
"github.com/docker/machine/libmachine/host"
|
"github.com/docker/machine/libmachine/host"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/intstr"
|
"k8s.io/apimachinery/pkg/util/intstr"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
|
@ -33,7 +35,6 @@ import (
|
||||||
"k8s.io/client-go/kubernetes/typed/core/v1/fake"
|
"k8s.io/client-go/kubernetes/typed/core/v1/fake"
|
||||||
"k8s.io/minikube/pkg/minikube/config"
|
"k8s.io/minikube/pkg/minikube/config"
|
||||||
"k8s.io/minikube/pkg/minikube/tests"
|
"k8s.io/minikube/pkg/minikube/tests"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type MockClientGetter struct {
|
type MockClientGetter struct {
|
||||||
|
|
|
@ -20,10 +20,10 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
core_v1 "k8s.io/api/core/v1"
|
core "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
k8s_types "k8s.io/apimachinery/pkg/types"
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/client-go/kubernetes/typed/core/v1"
|
typed_core "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -39,26 +39,22 @@ type patchConverter interface {
|
||||||
|
|
||||||
//loadBalancerEmulator is the main struct for emulating the loadbalancer behavior. it sets the ingress to the cluster IP
|
//loadBalancerEmulator is the main struct for emulating the loadbalancer behavior. it sets the ingress to the cluster IP
|
||||||
type loadBalancerEmulator struct {
|
type loadBalancerEmulator struct {
|
||||||
coreV1Client v1.CoreV1Interface
|
coreV1Client typed_core.CoreV1Interface
|
||||||
requestSender requestSender
|
requestSender requestSender
|
||||||
patchConverter patchConverter
|
patchConverter patchConverter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loadBalancerEmulator) PatchServices() ([]string, error) {
|
func (l *loadBalancerEmulator) PatchServices() ([]string, error) {
|
||||||
return l.applyOnLBServices(func(restClient rest.Interface, svc core_v1.Service) ([]byte, error) {
|
return l.applyOnLBServices(l.updateService)
|
||||||
return l.updateService(restClient, svc)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loadBalancerEmulator) Cleanup() ([]string, error) {
|
func (l *loadBalancerEmulator) Cleanup() ([]string, error) {
|
||||||
return l.applyOnLBServices(func(restClient rest.Interface, svc core_v1.Service) ([]byte, error) {
|
return l.applyOnLBServices(l.cleanupService)
|
||||||
return l.cleanupService(restClient, svc)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loadBalancerEmulator) applyOnLBServices(action func(restClient rest.Interface, svc core_v1.Service) ([]byte, error)) ([]string, error) {
|
func (l *loadBalancerEmulator) applyOnLBServices(action func(restClient rest.Interface, svc core.Service) ([]byte, error)) ([]string, error) {
|
||||||
services := l.coreV1Client.Services("")
|
services := l.coreV1Client.Services("")
|
||||||
serviceList, err := services.List(metav1.ListOptions{})
|
serviceList, err := services.List(meta.ListOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -83,7 +79,7 @@ func (l *loadBalancerEmulator) applyOnLBServices(action func(restClient rest.Int
|
||||||
}
|
}
|
||||||
return managedServices, nil
|
return managedServices, nil
|
||||||
}
|
}
|
||||||
func (l *loadBalancerEmulator) updateService(restClient rest.Interface, svc core_v1.Service) ([]byte, error) {
|
func (l *loadBalancerEmulator) updateService(restClient rest.Interface, svc core.Service) ([]byte, error) {
|
||||||
clusterIP := svc.Spec.ClusterIP
|
clusterIP := svc.Spec.ClusterIP
|
||||||
ingresses := svc.Status.LoadBalancer.Ingress
|
ingresses := svc.Status.LoadBalancer.Ingress
|
||||||
if len(ingresses) == 1 && ingresses[0].IP == clusterIP {
|
if len(ingresses) == 1 && ingresses[0].IP == clusterIP {
|
||||||
|
@ -92,7 +88,7 @@ func (l *loadBalancerEmulator) updateService(restClient rest.Interface, svc core
|
||||||
glog.V(3).Infof("[%s] setting ClusterIP as the LoadBalancer Ingress", svc.Name)
|
glog.V(3).Infof("[%s] setting ClusterIP as the LoadBalancer Ingress", svc.Name)
|
||||||
jsonPatch := fmt.Sprintf(`[{"op": "add", "path": "/status/loadBalancer/ingress", "value": [ { "ip": "%s" } ] }]`, clusterIP)
|
jsonPatch := fmt.Sprintf(`[{"op": "add", "path": "/status/loadBalancer/ingress", "value": [ { "ip": "%s" } ] }]`, clusterIP)
|
||||||
patch := &Patch{
|
patch := &Patch{
|
||||||
Type: k8s_types.JSONPatchType,
|
Type: types.JSONPatchType,
|
||||||
ResourceName: svc.Name,
|
ResourceName: svc.Name,
|
||||||
NameSpaceSet: true,
|
NameSpaceSet: true,
|
||||||
NameSpace: svc.Namespace,
|
NameSpace: svc.Namespace,
|
||||||
|
@ -110,7 +106,7 @@ func (l *loadBalancerEmulator) updateService(restClient rest.Interface, svc core
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *loadBalancerEmulator) cleanupService(restClient rest.Interface, svc core_v1.Service) ([]byte, error) {
|
func (l *loadBalancerEmulator) cleanupService(restClient rest.Interface, svc core.Service) ([]byte, error) {
|
||||||
ingresses := svc.Status.LoadBalancer.Ingress
|
ingresses := svc.Status.LoadBalancer.Ingress
|
||||||
if len(ingresses) == 0 {
|
if len(ingresses) == 0 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
@ -118,7 +114,7 @@ func (l *loadBalancerEmulator) cleanupService(restClient rest.Interface, svc cor
|
||||||
glog.V(3).Infof("[%s] cleanup: unset load balancer ingress", svc.Name)
|
glog.V(3).Infof("[%s] cleanup: unset load balancer ingress", svc.Name)
|
||||||
jsonPatch := `[{"op": "remove", "path": "/status/loadBalancer/ingress" }]`
|
jsonPatch := `[{"op": "remove", "path": "/status/loadBalancer/ingress" }]`
|
||||||
patch := &Patch{
|
patch := &Patch{
|
||||||
Type: k8s_types.JSONPatchType,
|
Type: types.JSONPatchType,
|
||||||
ResourceName: svc.Name,
|
ResourceName: svc.Name,
|
||||||
NameSpaceSet: true,
|
NameSpaceSet: true,
|
||||||
NameSpace: svc.Namespace,
|
NameSpace: svc.Namespace,
|
||||||
|
@ -133,7 +129,7 @@ func (l *loadBalancerEmulator) cleanupService(restClient rest.Interface, svc cor
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newLoadBalancerEmulator(corev1Client v1.CoreV1Interface) loadBalancerEmulator {
|
func newLoadBalancerEmulator(corev1Client typed_core.CoreV1Interface) loadBalancerEmulator {
|
||||||
return loadBalancerEmulator{
|
return loadBalancerEmulator{
|
||||||
coreV1Client: corev1Client,
|
coreV1Client: corev1Client,
|
||||||
requestSender: &defaultRequestSender{},
|
requestSender: &defaultRequestSender{},
|
||||||
|
|
|
@ -21,20 +21,20 @@ import (
|
||||||
|
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
apiV1 "k8s.io/api/core/v1"
|
core "k8s.io/api/core/v1"
|
||||||
metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/client-go/kubernetes/typed/core/v1"
|
typed_core "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
"k8s.io/client-go/kubernetes/typed/core/v1/fake"
|
fake "k8s.io/client-go/kubernetes/typed/core/v1/fake"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
)
|
)
|
||||||
|
|
||||||
type stubCoreClient struct {
|
type stubCoreClient struct {
|
||||||
fake.FakeCoreV1
|
fake.FakeCoreV1
|
||||||
servicesList *apiV1.ServiceList
|
servicesList *core.ServiceList
|
||||||
restClient *rest.RESTClient
|
restClient *rest.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *stubCoreClient) Services(namespace string) v1.ServiceInterface {
|
func (c *stubCoreClient) Services(namespace string) typed_core.ServiceInterface {
|
||||||
return &stubServices{
|
return &stubServices{
|
||||||
fake.FakeServices{Fake: &c.FakeCoreV1},
|
fake.FakeServices{Fake: &c.FakeCoreV1},
|
||||||
c.servicesList,
|
c.servicesList,
|
||||||
|
@ -47,17 +47,17 @@ func (c *stubCoreClient) RESTClient() rest.Interface {
|
||||||
|
|
||||||
type stubServices struct {
|
type stubServices struct {
|
||||||
fake.FakeServices
|
fake.FakeServices
|
||||||
servicesList *apiV1.ServiceList
|
servicesList *core.ServiceList
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stubServices) List(opts metaV1.ListOptions) (*apiV1.ServiceList, error) {
|
func (s *stubServices) List(opts meta.ListOptions) (*core.ServiceList, error) {
|
||||||
return s.servicesList, nil
|
return s.servicesList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func newStubCoreClient(servicesList *apiV1.ServiceList) *stubCoreClient {
|
func newStubCoreClient(servicesList *core.ServiceList) *stubCoreClient {
|
||||||
if servicesList == nil {
|
if servicesList == nil {
|
||||||
servicesList = &apiV1.ServiceList{
|
servicesList = &core.ServiceList{
|
||||||
Items: []apiV1.Service{}}
|
Items: []core.Service{}}
|
||||||
}
|
}
|
||||||
return &stubCoreClient{
|
return &stubCoreClient{
|
||||||
servicesList: servicesList,
|
servicesList: servicesList,
|
||||||
|
@ -84,8 +84,8 @@ func (r *recordingPatchConverter) convert(restClient rest.Interface, patch *Patc
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEmptyListOfServicesDoesNothing(t *testing.T) {
|
func TestEmptyListOfServicesDoesNothing(t *testing.T) {
|
||||||
client := newStubCoreClient(&apiV1.ServiceList{
|
client := newStubCoreClient(&core.ServiceList{
|
||||||
Items: []apiV1.Service{}})
|
Items: []core.Service{}})
|
||||||
|
|
||||||
patcher := newLoadBalancerEmulator(client)
|
patcher := newLoadBalancerEmulator(client)
|
||||||
|
|
||||||
|
@ -98,15 +98,15 @@ func TestEmptyListOfServicesDoesNothing(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServicesWithNoLoadbalancerType(t *testing.T) {
|
func TestServicesWithNoLoadbalancerType(t *testing.T) {
|
||||||
client := newStubCoreClient(&apiV1.ServiceList{
|
client := newStubCoreClient(&core.ServiceList{
|
||||||
Items: []apiV1.Service{
|
Items: []core.Service{
|
||||||
{
|
{
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "ClusterIP",
|
Type: "ClusterIP",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "NodeIP",
|
Type: "NodeIP",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -124,20 +124,20 @@ func TestServicesWithNoLoadbalancerType(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServicesWithLoadbalancerType(t *testing.T) {
|
func TestServicesWithLoadbalancerType(t *testing.T) {
|
||||||
client := newStubCoreClient(&apiV1.ServiceList{
|
client := newStubCoreClient(&core.ServiceList{
|
||||||
Items: []apiV1.Service{
|
Items: []core.Service{
|
||||||
{
|
{
|
||||||
ObjectMeta: metaV1.ObjectMeta{
|
ObjectMeta: meta.ObjectMeta{
|
||||||
Name: "svc1-up-to-date",
|
Name: "svc1-up-to-date",
|
||||||
Namespace: "ns1",
|
Namespace: "ns1",
|
||||||
},
|
},
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "LoadBalancer",
|
Type: "LoadBalancer",
|
||||||
ClusterIP: "10.96.0.3",
|
ClusterIP: "10.96.0.3",
|
||||||
},
|
},
|
||||||
Status: apiV1.ServiceStatus{
|
Status: core.ServiceStatus{
|
||||||
LoadBalancer: apiV1.LoadBalancerStatus{
|
LoadBalancer: core.LoadBalancerStatus{
|
||||||
Ingress: []apiV1.LoadBalancerIngress{
|
Ingress: []core.LoadBalancerIngress{
|
||||||
{
|
{
|
||||||
IP: "10.96.0.3",
|
IP: "10.96.0.3",
|
||||||
},
|
},
|
||||||
|
@ -146,17 +146,17 @@ func TestServicesWithLoadbalancerType(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ObjectMeta: metaV1.ObjectMeta{
|
ObjectMeta: meta.ObjectMeta{
|
||||||
Name: "svc2-out-of-date",
|
Name: "svc2-out-of-date",
|
||||||
Namespace: "ns2",
|
Namespace: "ns2",
|
||||||
},
|
},
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "LoadBalancer",
|
Type: "LoadBalancer",
|
||||||
ClusterIP: "10.96.0.4",
|
ClusterIP: "10.96.0.4",
|
||||||
},
|
},
|
||||||
Status: apiV1.ServiceStatus{
|
Status: core.ServiceStatus{
|
||||||
LoadBalancer: apiV1.LoadBalancerStatus{
|
LoadBalancer: core.LoadBalancerStatus{
|
||||||
Ingress: []apiV1.LoadBalancerIngress{
|
Ingress: []core.LoadBalancerIngress{
|
||||||
{
|
{
|
||||||
IP: "10.96.0.5",
|
IP: "10.96.0.5",
|
||||||
},
|
},
|
||||||
|
@ -165,25 +165,25 @@ func TestServicesWithLoadbalancerType(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ObjectMeta: metaV1.ObjectMeta{
|
ObjectMeta: meta.ObjectMeta{
|
||||||
Name: "svc3-empty-ingress",
|
Name: "svc3-empty-ingress",
|
||||||
Namespace: "ns3",
|
Namespace: "ns3",
|
||||||
},
|
},
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "LoadBalancer",
|
Type: "LoadBalancer",
|
||||||
ClusterIP: "10.96.0.2",
|
ClusterIP: "10.96.0.2",
|
||||||
},
|
},
|
||||||
Status: apiV1.ServiceStatus{
|
Status: core.ServiceStatus{
|
||||||
LoadBalancer: apiV1.LoadBalancerStatus{
|
LoadBalancer: core.LoadBalancerStatus{
|
||||||
Ingress: []apiV1.LoadBalancerIngress{},
|
Ingress: []core.LoadBalancerIngress{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ObjectMeta: metaV1.ObjectMeta{
|
ObjectMeta: meta.ObjectMeta{
|
||||||
Name: "svc4-not-lb",
|
Name: "svc4-not-lb",
|
||||||
},
|
},
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "NodeIP",
|
Type: "NodeIP",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -259,20 +259,20 @@ func TestCleanupPatchedIPs(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
client := newStubCoreClient(&apiV1.ServiceList{
|
client := newStubCoreClient(&core.ServiceList{
|
||||||
Items: []apiV1.Service{
|
Items: []core.Service{
|
||||||
{
|
{
|
||||||
ObjectMeta: metaV1.ObjectMeta{
|
ObjectMeta: meta.ObjectMeta{
|
||||||
Name: "svc1-up-to-date",
|
Name: "svc1-up-to-date",
|
||||||
Namespace: "ns1",
|
Namespace: "ns1",
|
||||||
},
|
},
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "LoadBalancer",
|
Type: "LoadBalancer",
|
||||||
ClusterIP: "10.96.0.3",
|
ClusterIP: "10.96.0.3",
|
||||||
},
|
},
|
||||||
Status: apiV1.ServiceStatus{
|
Status: core.ServiceStatus{
|
||||||
LoadBalancer: apiV1.LoadBalancerStatus{
|
LoadBalancer: core.LoadBalancerStatus{
|
||||||
Ingress: []apiV1.LoadBalancerIngress{
|
Ingress: []core.LoadBalancerIngress{
|
||||||
{
|
{
|
||||||
IP: "10.96.0.3",
|
IP: "10.96.0.3",
|
||||||
},
|
},
|
||||||
|
@ -281,17 +281,17 @@ func TestCleanupPatchedIPs(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ObjectMeta: metaV1.ObjectMeta{
|
ObjectMeta: meta.ObjectMeta{
|
||||||
Name: "svc2-out-of-date",
|
Name: "svc2-out-of-date",
|
||||||
Namespace: "ns2",
|
Namespace: "ns2",
|
||||||
},
|
},
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "LoadBalancer",
|
Type: "LoadBalancer",
|
||||||
ClusterIP: "10.96.0.4",
|
ClusterIP: "10.96.0.4",
|
||||||
},
|
},
|
||||||
Status: apiV1.ServiceStatus{
|
Status: core.ServiceStatus{
|
||||||
LoadBalancer: apiV1.LoadBalancerStatus{
|
LoadBalancer: core.LoadBalancerStatus{
|
||||||
Ingress: []apiV1.LoadBalancerIngress{
|
Ingress: []core.LoadBalancerIngress{
|
||||||
{
|
{
|
||||||
IP: "10.96.0.5",
|
IP: "10.96.0.5",
|
||||||
},
|
},
|
||||||
|
@ -300,25 +300,25 @@ func TestCleanupPatchedIPs(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ObjectMeta: metaV1.ObjectMeta{
|
ObjectMeta: meta.ObjectMeta{
|
||||||
Name: "svc3-empty-ingress",
|
Name: "svc3-empty-ingress",
|
||||||
Namespace: "ns3",
|
Namespace: "ns3",
|
||||||
},
|
},
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "LoadBalancer",
|
Type: "LoadBalancer",
|
||||||
ClusterIP: "10.96.0.2",
|
ClusterIP: "10.96.0.2",
|
||||||
},
|
},
|
||||||
Status: apiV1.ServiceStatus{
|
Status: core.ServiceStatus{
|
||||||
LoadBalancer: apiV1.LoadBalancerStatus{
|
LoadBalancer: core.LoadBalancerStatus{
|
||||||
Ingress: []apiV1.LoadBalancerIngress{},
|
Ingress: []core.LoadBalancerIngress{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ObjectMeta: metaV1.ObjectMeta{
|
ObjectMeta: meta.ObjectMeta{
|
||||||
Name: "svc4-not-lb",
|
Name: "svc4-not-lb",
|
||||||
},
|
},
|
||||||
Spec: apiV1.ServiceSpec{
|
Spec: core.ServiceSpec{
|
||||||
Type: "NodeIP",
|
Type: "NodeIP",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -27,7 +27,7 @@ import (
|
||||||
"github.com/docker/machine/libmachine/host"
|
"github.com/docker/machine/libmachine/host"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"k8s.io/client-go/kubernetes/typed/core/v1"
|
typed_core "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
"k8s.io/minikube/pkg/minikube/config"
|
"k8s.io/minikube/pkg/minikube/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -43,10 +43,7 @@ func errorTunnelAlreadyExists(id *ID) error {
|
||||||
return fmt.Errorf("there is already a running tunnel for this machine: %s", id)
|
return fmt.Errorf("there is already a running tunnel for this machine: %s", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTunnel(machineName string,
|
func newTunnel(machineName string, machineAPI libmachine.API, configLoader config.Loader, v1Core typed_core.CoreV1Interface, registry *persistentRegistry, router router) (*tunnel, error) {
|
||||||
machineAPI libmachine.API,
|
|
||||||
configLoader config.Loader,
|
|
||||||
v1Core v1.CoreV1Interface, registry *persistentRegistry, router router) (*tunnel, error) {
|
|
||||||
ci := &clusterInspector{
|
ci := &clusterInspector{
|
||||||
machineName: machineName,
|
machineName: machineName,
|
||||||
machineAPI: machineAPI,
|
machineAPI: machineAPI,
|
||||||
|
@ -154,7 +151,7 @@ func setupRoute(t *tunnel, h *host.Host) {
|
||||||
|
|
||||||
if h.DriverName == "hyperkit" {
|
if h.DriverName == "hyperkit" {
|
||||||
//the virtio-net interface acts up with ip tunnels :(
|
//the virtio-net interface acts up with ip tunnels :(
|
||||||
setupBridge(t, h)
|
setupBridge(t)
|
||||||
if t.status.RouteError != nil {
|
if t.status.RouteError != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -193,7 +190,7 @@ func setupRoute(t *tunnel, h *host.Host) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupBridge(t *tunnel, h *host.Host) {
|
func setupBridge(t *tunnel) {
|
||||||
command := exec.Command("ifconfig", "bridge100")
|
command := exec.Command("ifconfig", "bridge100")
|
||||||
glog.Infof("About to run command: %s\n", command.Args)
|
glog.Infof("About to run command: %s\n", command.Args)
|
||||||
response, err := command.CombinedOutput()
|
response, err := command.CombinedOutput()
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
|
|
||||||
"github.com/docker/machine/libmachine"
|
"github.com/docker/machine/libmachine"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"k8s.io/client-go/kubernetes/typed/core/v1"
|
typed_core "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
"k8s.io/minikube/pkg/minikube/config"
|
"k8s.io/minikube/pkg/minikube/config"
|
||||||
"k8s.io/minikube/pkg/minikube/constants"
|
"k8s.io/minikube/pkg/minikube/constants"
|
||||||
)
|
)
|
||||||
|
@ -53,7 +53,7 @@ func NewManager() *Manager {
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartTunnel starts the tunnel
|
// StartTunnel starts the tunnel
|
||||||
func (mgr *Manager) StartTunnel(ctx context.Context, machineName string, machineAPI libmachine.API, configLoader config.Loader, v1Core v1.CoreV1Interface) (done chan bool, err error) {
|
func (mgr *Manager) StartTunnel(ctx context.Context, machineName string, machineAPI libmachine.API, configLoader config.Loader, v1Core typed_core.CoreV1Interface) (done chan bool, err error) {
|
||||||
tunnel, err := newTunnel(machineName, machineAPI, configLoader, v1Core, mgr.registry, mgr.router)
|
tunnel, err := newTunnel(machineName, machineAPI, configLoader, v1Core, mgr.registry, mgr.router)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error creating tunnel: %s", err)
|
return nil, fmt.Errorf("error creating tunnel: %s", err)
|
||||||
|
|
6
test.sh
6
test.sh
|
@ -30,11 +30,13 @@ if [[ -n "${missing}" ]]; then
|
||||||
echo "boilerplate missing: $missing"
|
echo "boilerplate missing: $missing"
|
||||||
echo "consider running: ${BDIR}/fix.sh"
|
echo "consider running: ${BDIR}/fix.sh"
|
||||||
((exitcode+=4))
|
((exitcode+=4))
|
||||||
|
else
|
||||||
|
echo "ok"
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "= schema_check =========================================================="
|
echo "= schema_check =========================================================="
|
||||||
go run deploy/minikube/schema_check.go || ((exitcode+=2))
|
go run deploy/minikube/schema_check.go >/dev/null && echo ok || ((exitcode+=2))
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "= go test ==============================================================="
|
echo "= go test ==============================================================="
|
||||||
|
@ -46,7 +48,7 @@ go test \
|
||||||
-tags "container_image_ostree_stub containers_image_openpgp" \
|
-tags "container_image_ostree_stub containers_image_openpgp" \
|
||||||
-covermode=count \
|
-covermode=count \
|
||||||
-coverprofile="${cov_tmp}" \
|
-coverprofile="${cov_tmp}" \
|
||||||
${pkgs} || ((exitcode+=3))
|
${pkgs} && echo ok || ((exitcode+=3))
|
||||||
tail -n +2 "${cov_tmp}" >> "${COVERAGE_PATH}"
|
tail -n +2 "${cov_tmp}" >> "${COVERAGE_PATH}"
|
||||||
|
|
||||||
exit "${exitcode}"
|
exit "${exitcode}"
|
||||||
|
|
|
@ -39,7 +39,11 @@ func testClusterDNS(t *testing.T) {
|
||||||
|
|
||||||
kr := util.NewKubectlRunner(t)
|
kr := util.NewKubectlRunner(t)
|
||||||
busybox := busyBoxPod(t, client, kr)
|
busybox := busyBoxPod(t, client, kr)
|
||||||
defer kr.RunCommand([]string{"delete", "po", busybox})
|
defer func() {
|
||||||
|
if _, err := kr.RunCommand([]string{"delete", "po", busybox}); err != nil {
|
||||||
|
t.Errorf("delete failed: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
out := []byte{}
|
out := []byte{}
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,9 @@ func TestDocker(t *testing.T) {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
// Pre-cleanup: this usually fails, because no instance is running.
|
if _, _, err := mk.RunWithContext(ctx, "delete"); err != nil {
|
||||||
mk.RunWithContext(ctx, "delete")
|
t.Logf("pre-delete failed (probably ok): %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
startCmd := fmt.Sprintf("start %s %s %s", mk.StartArgs, mk.Args,
|
startCmd := fmt.Sprintf("start %s %s %s", mk.StartArgs, mk.Args,
|
||||||
"--docker-env=FOO=BAR --docker-env=BAZ=BAT --docker-opt=debug --docker-opt=icc=true --alsologtostderr --v=5")
|
"--docker-env=FOO=BAR --docker-env=BAZ=BAT --docker-opt=debug --docker-opt=icc=true --alsologtostderr --v=5")
|
||||||
|
|
|
@ -147,7 +147,7 @@ func verifyFiles(minikubeRunner util.MinikubeRunner, kubectlRunner *util.Kubectl
|
||||||
}
|
}
|
||||||
// test that file written from pod can be read from host echo test > /mount-9p/frompod; in pod
|
// test that file written from pod can be read from host echo test > /mount-9p/frompod; in pod
|
||||||
if string(out) != expected {
|
if string(out) != expected {
|
||||||
return fmt.Errorf("Expected file %s to contain text %s, was %s.", path, expected, out)
|
return fmt.Errorf("expected file %s to contain text %q, was %q", path, expected, out)
|
||||||
}
|
}
|
||||||
|
|
||||||
// test that file written from host was read in by the pod via cat /mount-9p/fromhost;
|
// test that file written from host was read in by the pod via cat /mount-9p/fromhost;
|
||||||
|
@ -155,7 +155,7 @@ func verifyFiles(minikubeRunner util.MinikubeRunner, kubectlRunner *util.Kubectl
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if string(out) != expected {
|
if string(out) != expected {
|
||||||
return fmt.Errorf("Expected file %s to contain text %s, was %s.", path, expected, out)
|
return fmt.Errorf("expected file %s to contain text %q, was %q", path, expected, out)
|
||||||
}
|
}
|
||||||
|
|
||||||
// test file timestamps are correct
|
// test file timestamps are correct
|
||||||
|
|
|
@ -60,7 +60,7 @@ func testProvisioning(t *testing.T) {
|
||||||
if len(scl.Items) > 0 {
|
if len(scl.Items) > 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return fmt.Errorf("No default StorageClass yet.")
|
return fmt.Errorf("no default StorageClass yet")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := util.Retry(t, checkStorageClass, 5*time.Second, 20); err != nil {
|
if err := util.Retry(t, checkStorageClass, 5*time.Second, 20); err != nil {
|
||||||
|
|
|
@ -18,6 +18,8 @@ package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
@ -122,3 +124,34 @@ func testTunnel(t *testing.T) {
|
||||||
t.Fatalf("response body doesn't seem like an nginx response:\n%s", responseBody)
|
t.Fatalf("response body doesn't seem like an nginx response:\n%s", responseBody)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getResponseBody returns the contents of a URL
|
||||||
|
func getResponseBody(address string) (string, error) {
|
||||||
|
httpClient := http.DefaultClient
|
||||||
|
httpClient.Timeout = 5 * time.Second
|
||||||
|
|
||||||
|
var resp *http.Response
|
||||||
|
var err error
|
||||||
|
|
||||||
|
request := func() error {
|
||||||
|
resp, err = httpClient.Get(fmt.Sprintf("http://%s", address))
|
||||||
|
if err != nil {
|
||||||
|
retriable := &commonutil.RetriableError{Err: err}
|
||||||
|
return retriable
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = commonutil.RetryAfter(5, request, 1*time.Second); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil || len(body) == 0 {
|
||||||
|
return "", errors.Wrapf(err, "error reading body, len bytes read: %d", len(body))
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(body), nil
|
||||||
|
}
|
||||||
|
|
|
@ -94,7 +94,9 @@ func (m *MinikubeRunner) teeRun(cmd *exec.Cmd) (string, string, error) {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.Start()
|
if err := cmd.Start(); err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
var outB bytes.Buffer
|
var outB bytes.Buffer
|
||||||
var errB bytes.Buffer
|
var errB bytes.Buffer
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
|
|
Loading…
Reference in New Issue