commit
e2104b2f0f
|
@ -613,6 +613,11 @@ func validateDriver(ds registry.DriverState, existing *config.ClusterConfig) {
|
|||
exit.WithCodeT(exit.Unavailable, "The driver '{{.driver}}' is not supported on {{.os}}", out.V{"driver": name, "os": runtime.GOOS})
|
||||
}
|
||||
|
||||
// if we are only downloading artifacts for a driver, we can stop validation here
|
||||
if viper.GetBool("download-only") {
|
||||
return
|
||||
}
|
||||
|
||||
st := ds.State
|
||||
glog.Infof("status for %s: %+v", name, st)
|
||||
|
||||
|
|
34
go.mod
34
go.mod
|
@ -3,7 +3,8 @@ module k8s.io/minikube
|
|||
go 1.13
|
||||
|
||||
require (
|
||||
cloud.google.com/go v0.45.1
|
||||
cloud.google.com/go v0.57.0
|
||||
cloud.google.com/go/storage v1.8.0
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 // indirect
|
||||
github.com/Parallels/docker-machine-parallels v1.3.0
|
||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
|
||||
|
@ -22,20 +23,17 @@ require (
|
|||
github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f // indirect
|
||||
github.com/evanphx/json-patch v4.5.0+incompatible // indirect
|
||||
github.com/go-ole/go-ole v1.2.4 // indirect
|
||||
github.com/gogo/protobuf v1.3.1 // indirect
|
||||
github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
|
||||
github.com/google/go-cmp v0.4.0
|
||||
github.com/google/go-cmp v0.4.1
|
||||
github.com/google/go-containerregistry v0.0.0-20200601195303-96cf69f03a3c
|
||||
github.com/google/go-github v17.0.0+incompatible
|
||||
github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible // indirect
|
||||
github.com/google/slowjam v0.0.0-20200530021616-df27e642fe7b
|
||||
github.com/googleapis/gnostic v0.3.0 // indirect
|
||||
github.com/hashicorp/go-getter v1.4.0
|
||||
github.com/hashicorp/go-retryablehttp v0.5.4
|
||||
github.com/hashicorp/go-retryablehttp v0.6.6
|
||||
github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 // indirect
|
||||
github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8
|
||||
github.com/imdario/mergo v0.3.8 // indirect
|
||||
github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 // indirect
|
||||
github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f
|
||||
github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c
|
||||
|
@ -47,19 +45,15 @@ require (
|
|||
github.com/juju/utils v0.0.0-20180820210520-bf9cc5bdd62d // indirect
|
||||
github.com/juju/version v0.0.0-20180108022336-b64dbd566305 // indirect
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
|
||||
github.com/kr/pretty v0.2.0 // indirect
|
||||
github.com/libvirt/libvirt-go v3.4.0+incompatible
|
||||
github.com/machine-drivers/docker-machine-driver-vmware v0.1.1
|
||||
github.com/mattn/go-isatty v0.0.12
|
||||
github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936
|
||||
github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b
|
||||
github.com/moby/hyperkit v0.0.0-20171020124204-a12cd7250bcd
|
||||
github.com/olekukonko/tablewriter v0.0.4
|
||||
github.com/onsi/ginkgo v1.10.3 // indirect
|
||||
github.com/onsi/gomega v1.7.1 // indirect
|
||||
github.com/opencontainers/go-digest v1.0.0-rc1
|
||||
github.com/otiai10/copy v1.0.2
|
||||
github.com/pborman/uuid v1.2.0
|
||||
github.com/pelletier/go-toml v1.6.0 // indirect
|
||||
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
|
||||
github.com/pkg/browser v0.0.0-20160118053552-9302be274faa
|
||||
github.com/pkg/errors v0.9.1
|
||||
|
@ -70,27 +64,21 @@ require (
|
|||
github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 // indirect
|
||||
github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 // indirect
|
||||
github.com/shirou/gopsutil v2.18.12+incompatible
|
||||
github.com/spf13/cast v1.3.1 // indirect
|
||||
github.com/spf13/cobra v1.0.0
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/spf13/viper v1.6.1
|
||||
github.com/spf13/viper v1.7.0
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||
github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f
|
||||
github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097
|
||||
golang.org/x/build v0.0.0-20190927031335-2835ba2e683f
|
||||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073
|
||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a // indirect
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae
|
||||
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37
|
||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a
|
||||
golang.org/x/sys v0.0.0-20200523222454-059865788121
|
||||
golang.org/x/text v0.3.2
|
||||
google.golang.org/api v0.9.0
|
||||
google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24 // indirect
|
||||
google.golang.org/grpc v1.26.0 // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
|
||||
gopkg.in/ini.v1 v1.51.1 // indirect
|
||||
google.golang.org/api v0.25.0
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
|
||||
gopkg.in/yaml.v2 v2.2.8
|
||||
gopkg.in/yaml.v2 v2.3.0
|
||||
gotest.tools/v3 v3.0.2 // indirect
|
||||
k8s.io/api v0.17.4
|
||||
k8s.io/apimachinery v0.17.4
|
||||
|
|
|
@ -34,8 +34,11 @@ import (
|
|||
v1 "github.com/google/go-containerregistry/pkg/v1"
|
||||
"github.com/google/go-containerregistry/pkg/v1/daemon"
|
||||
"github.com/google/go-containerregistry/pkg/v1/remote"
|
||||
"github.com/google/go-containerregistry/pkg/v1/tarball"
|
||||
"github.com/pkg/errors"
|
||||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
"k8s.io/minikube/pkg/minikube/driver"
|
||||
"k8s.io/minikube/pkg/minikube/localpath"
|
||||
)
|
||||
|
||||
var defaultPlatform = v1.Platform{
|
||||
|
@ -94,6 +97,32 @@ func ExistsImageInDaemon(img string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
// LoadFromTarball checks if the image exists as a tarball and tries to load it to the local daemon
|
||||
// TODO: Pass in if we are loading to docker or podman so this function can also be used for podman
|
||||
func LoadFromTarball(binary, img string) error {
|
||||
p := filepath.Join(constants.ImageCacheDir, img)
|
||||
p = localpath.SanitizeCacheDir(p)
|
||||
|
||||
switch binary {
|
||||
case driver.Podman:
|
||||
return fmt.Errorf("not yet implemented, see issue #8426")
|
||||
default:
|
||||
tag, err := name.NewTag(Tag(img))
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "new tag")
|
||||
}
|
||||
|
||||
i, err := tarball.ImageFromPath(p, &tag)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "tarball")
|
||||
}
|
||||
|
||||
_, err = daemon.Write(tag, i)
|
||||
return err
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Tag returns just the image with the tag
|
||||
// eg image:tag@sha256:digest -> image:tag if there is an associated tag
|
||||
// if not possible, just return the initial img
|
||||
|
|
|
@ -31,6 +31,7 @@ import (
|
|||
"k8s.io/minikube/pkg/minikube/config"
|
||||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
"k8s.io/minikube/pkg/minikube/download"
|
||||
"k8s.io/minikube/pkg/minikube/driver"
|
||||
"k8s.io/minikube/pkg/minikube/exit"
|
||||
"k8s.io/minikube/pkg/minikube/image"
|
||||
"k8s.io/minikube/pkg/minikube/localpath"
|
||||
|
@ -102,7 +103,7 @@ func doCacheBinaries(k8sVersion string) error {
|
|||
}
|
||||
|
||||
// beginDownloadKicBaseImage downloads the kic image
|
||||
func beginDownloadKicBaseImage(g *errgroup.Group, cc *config.ClusterConfig) {
|
||||
func beginDownloadKicBaseImage(g *errgroup.Group, cc *config.ClusterConfig, downloadOnly bool) {
|
||||
if cc.Driver != "docker" {
|
||||
// TODO: driver == "podman"
|
||||
glog.Info("Driver isn't docker, skipping base image download")
|
||||
|
@ -117,17 +118,36 @@ func beginDownloadKicBaseImage(g *errgroup.Group, cc *config.ClusterConfig) {
|
|||
out.T(out.Pulling, "Pulling base image ...")
|
||||
g.Go(func() error {
|
||||
// TODO #8004 : make base-image respect --image-repository
|
||||
var finalImg string
|
||||
// If we end up using a fallback image, notify the user
|
||||
defer func() {
|
||||
if finalImg != "" && finalImg != cc.KicBaseImage {
|
||||
out.WarningT(fmt.Sprintf("minikube was unable to download %s, but successfully downloaded %s as a fallback image", image.Tag(cc.KicBaseImage), image.Tag(finalImg)))
|
||||
cc.KicBaseImage = finalImg
|
||||
}
|
||||
}()
|
||||
for _, img := range append([]string{cc.KicBaseImage}, kic.FallbackImages...) {
|
||||
if err := image.LoadFromTarball(driver.Docker, img); err == nil {
|
||||
glog.Infof("successfully loaded %s from cached tarball", img)
|
||||
// strip the digest from the img before saving it in the config
|
||||
// because loading an image from tarball to daemon doesn't load the digest
|
||||
finalImg = image.Tag(img)
|
||||
return nil
|
||||
}
|
||||
glog.Infof("Downloading %s to local daemon", img)
|
||||
err := image.WriteImageToDaemon(img)
|
||||
if err == nil {
|
||||
if img != cc.KicBaseImage {
|
||||
out.WarningT(fmt.Sprintf("minikube was unable to download %s, but successfully downloaded %s\n minikube will use %s as a fallback image", image.Tag(cc.KicBaseImage), image.Tag(img), image.Tag(img)))
|
||||
cc.KicBaseImage = img
|
||||
}
|
||||
glog.Infof("successfully downloaded %s", img)
|
||||
finalImg = img
|
||||
return nil
|
||||
}
|
||||
if downloadOnly {
|
||||
if err := image.SaveToDir([]string{img}, constants.ImageCacheDir); err == nil {
|
||||
glog.Infof("successfully saved %s as a tarball", img)
|
||||
finalImg = img
|
||||
return nil
|
||||
}
|
||||
}
|
||||
glog.Infof("failed to download %s, will try fallback image if available: %v", img, err)
|
||||
}
|
||||
return fmt.Errorf("failed to download kic base image or any fallback image")
|
||||
|
|
|
@ -195,7 +195,7 @@ func Provision(cc *config.ClusterConfig, n *config.Node, apiServer bool) (comman
|
|||
}
|
||||
|
||||
if driver.IsKIC(cc.Driver) {
|
||||
beginDownloadKicBaseImage(&kicGroup, cc)
|
||||
beginDownloadKicBaseImage(&kicGroup, cc, viper.GetBool("download-only"))
|
||||
}
|
||||
|
||||
if !driver.BareMetal(cc.Driver) {
|
||||
|
|
Loading…
Reference in New Issue