diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 0fe6cc0407..0d4f574e29 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -54,6 +54,7 @@ import ( "k8s.io/minikube/pkg/minikube/detect" "k8s.io/minikube/pkg/minikube/download" "k8s.io/minikube/pkg/minikube/driver" + "k8s.io/minikube/pkg/minikube/driver/auxdriver" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/kubeconfig" "k8s.io/minikube/pkg/minikube/localpath" @@ -403,7 +404,7 @@ func updateDriver(driverName string) { v, err := version.GetSemverVersion() if err != nil { out.WarningT("Error parsing minikube version: {{.error}}", out.V{"error": err}) - } else if err := driver.InstallOrUpdate(driverName, localpath.MakeMiniPath("bin"), v, viper.GetBool(interactive), viper.GetBool(autoUpdate)); err != nil { + } else if err := auxdriver.InstallOrUpdate(driverName, localpath.MakeMiniPath("bin"), v, viper.GetBool(interactive), viper.GetBool(autoUpdate)); err != nil { out.WarningT("Unable to update {{.driver}} driver: {{.error}}", out.V{"driver": driverName, "error": err}) } } diff --git a/hack/preload-images/preload_images.go b/hack/preload-images/preload_images.go index 7a8607b477..57a0723d88 100644 --- a/hack/preload-images/preload_images.go +++ b/hack/preload-images/preload_images.go @@ -86,7 +86,8 @@ out: if *limit > 0 && i >= *limit { break out } - if !download.PreloadExists(kv, cr) { + // Since none/mock are the only exceptions, it does not matter what driver we choose. + if !download.PreloadExists(kv, cr, "docker") { toGenerate = append(toGenerate, preloadCfg{kv, cr}) i++ fmt.Printf("[%d] A preloaded tarball for k8s version %s - runtime %q does not exist.\n", i, kv, cr) diff --git a/pkg/drivers/kic/kic.go b/pkg/drivers/kic/kic.go index 0637da197d..1a4963203d 100644 --- a/pkg/drivers/kic/kic.go +++ b/pkg/drivers/kic/kic.go @@ -172,7 +172,7 @@ func (d *Driver) Create() error { go func() { defer waitForPreload.Done() // If preload doesn't exist, don't bother extracting tarball to volume - if !download.PreloadExists(d.NodeConfig.KubernetesVersion, d.NodeConfig.ContainerRuntime) { + if !download.PreloadExists(d.NodeConfig.KubernetesVersion, d.NodeConfig.ContainerRuntime, d.DriverName()) { return } t := time.Now() diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go index a469bcdae3..09a40d9de6 100644 --- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go +++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go @@ -866,7 +866,7 @@ func (k *Bootstrapper) UpdateCluster(cfg config.ClusterConfig) error { return errors.Wrap(err, "runtime") } - if err := r.Preload(cfg.KubernetesConfig); err != nil { + if err := r.Preload(cfg); err != nil { klog.Infof("preload failed, will try to load cached images: %v", err) } diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go index f74646e113..ccd8a679ec 100644 --- a/pkg/minikube/cruntime/containerd.go +++ b/pkg/minikube/cruntime/containerd.go @@ -464,16 +464,16 @@ func (r *Containerd) SystemLogCmd(len int) string { } // Preload preloads the container runtime with k8s images -func (r *Containerd) Preload(cfg config.KubernetesConfig) error { - if !download.PreloadExists(cfg.KubernetesVersion, cfg.ContainerRuntime) { +func (r *Containerd) Preload(cc config.ClusterConfig) error { + if !download.PreloadExists(cc.KubernetesConfig.KubernetesVersion, cc.KubernetesConfig.ContainerRuntime, cc.Driver) { return nil } - k8sVersion := cfg.KubernetesVersion - cRuntime := cfg.ContainerRuntime + k8sVersion := cc.KubernetesConfig.KubernetesVersion + cRuntime := cc.KubernetesConfig.ContainerRuntime // If images already exist, return - images, err := images.Kubeadm(cfg.ImageRepository, k8sVersion) + images, err := images.Kubeadm(cc.KubernetesConfig.ImageRepository, k8sVersion) if err != nil { return errors.Wrap(err, "getting images") } diff --git a/pkg/minikube/cruntime/crio.go b/pkg/minikube/cruntime/crio.go index 8e099a9474..f0da74092c 100644 --- a/pkg/minikube/cruntime/crio.go +++ b/pkg/minikube/cruntime/crio.go @@ -316,16 +316,16 @@ func (r *CRIO) SystemLogCmd(len int) string { } // Preload preloads the container runtime with k8s images -func (r *CRIO) Preload(cfg config.KubernetesConfig) error { - if !download.PreloadExists(cfg.KubernetesVersion, cfg.ContainerRuntime) { +func (r *CRIO) Preload(cc config.ClusterConfig) error { + if !download.PreloadExists(cc.KubernetesConfig.KubernetesVersion, cc.KubernetesConfig.ContainerRuntime, cc.Driver) { return nil } - k8sVersion := cfg.KubernetesVersion - cRuntime := cfg.ContainerRuntime + k8sVersion := cc.KubernetesConfig.KubernetesVersion + cRuntime := cc.KubernetesConfig.ContainerRuntime // If images already exist, return - images, err := images.Kubeadm(cfg.ImageRepository, k8sVersion) + images, err := images.Kubeadm(cc.KubernetesConfig.ImageRepository, k8sVersion) if err != nil { return errors.Wrap(err, "getting images") } diff --git a/pkg/minikube/cruntime/cruntime.go b/pkg/minikube/cruntime/cruntime.go index 4441013eb4..7bee38519f 100644 --- a/pkg/minikube/cruntime/cruntime.go +++ b/pkg/minikube/cruntime/cruntime.go @@ -125,7 +125,7 @@ type Manager interface { // SystemLogCmd returns the command to return the system logs SystemLogCmd(int) string // Preload preloads the container runtime with k8s images - Preload(config.KubernetesConfig) error + Preload(config.ClusterConfig) error // ImagesPreloaded returns true if all images have been preloaded ImagesPreloaded([]string) bool } diff --git a/pkg/minikube/cruntime/docker.go b/pkg/minikube/cruntime/docker.go index b3b2abab43..9ec896676c 100644 --- a/pkg/minikube/cruntime/docker.go +++ b/pkg/minikube/cruntime/docker.go @@ -450,15 +450,15 @@ func (r *Docker) forceSystemd() error { // 1. Copy over the preloaded tarball into the VM // 2. Extract the preloaded tarball to the correct directory // 3. Remove the tarball within the VM -func (r *Docker) Preload(cfg config.KubernetesConfig) error { - if !download.PreloadExists(cfg.KubernetesVersion, cfg.ContainerRuntime) { +func (r *Docker) Preload(cc config.ClusterConfig) error { + if !download.PreloadExists(cc.KubernetesConfig.KubernetesVersion, cc.KubernetesConfig.ContainerRuntime, cc.Driver) { return nil } - k8sVersion := cfg.KubernetesVersion - cRuntime := cfg.ContainerRuntime + k8sVersion := cc.KubernetesConfig.KubernetesVersion + cRuntime := cc.KubernetesConfig.ContainerRuntime // If images already exist, return - images, err := images.Kubeadm(cfg.ImageRepository, k8sVersion) + images, err := images.Kubeadm(cc.KubernetesConfig.ImageRepository, k8sVersion) if err != nil { return errors.Wrap(err, "getting images") } diff --git a/pkg/minikube/download/download_test.go b/pkg/minikube/download/download_test.go index defdc54fec..e4d63b36de 100644 --- a/pkg/minikube/download/download_test.go +++ b/pkg/minikube/download/download_test.go @@ -86,14 +86,14 @@ func testPreloadDownloadPreventsMultipleDownload(t *testing.T) { } return nil, nil } - checkPreloadExists = func(k8sVersion, containerRuntime string, forcePreload ...bool) bool { return true } + checkPreloadExists = func(k8sVersion, containerRuntime, driverName string, forcePreload ...bool) bool { return true } getChecksum = func(k8sVersion, containerRuntime string) ([]byte, error) { return []byte("check"), nil } ensureChecksumValid = func(k8sVersion, containerRuntime, path string, checksum []byte) error { return nil } var group sync.WaitGroup group.Add(2) dlCall := func() { - if err := Preload(constants.DefaultKubernetesVersion, constants.DefaultContainerRuntime); err != nil { + if err := Preload(constants.DefaultKubernetesVersion, constants.DefaultContainerRuntime, "docker"); err != nil { t.Logf("Failed to download preload: %+v (may be ok)", err) } group.Done() @@ -114,11 +114,11 @@ func testPreloadNotExists(t *testing.T) { DownloadMock = mockSleepDownload(&downloadNum) checkCache = func(file string) (fs.FileInfo, error) { return nil, fmt.Errorf("cache not found") } - checkPreloadExists = func(k8sVersion, containerRuntime string, forcePreload ...bool) bool { return false } + checkPreloadExists = func(k8sVersion, containerRuntime, driverName string, forcePreload ...bool) bool { return false } getChecksum = func(k8sVersion, containerRuntime string) ([]byte, error) { return []byte("check"), nil } ensureChecksumValid = func(k8sVersion, containerRuntime, path string, checksum []byte) error { return nil } - err := Preload(constants.DefaultKubernetesVersion, constants.DefaultContainerRuntime) + err := Preload(constants.DefaultKubernetesVersion, constants.DefaultContainerRuntime, "docker") if err != nil { t.Errorf("Expected no error when preload exists") } @@ -133,13 +133,13 @@ func testPreloadChecksumMismatch(t *testing.T) { DownloadMock = mockSleepDownload(&downloadNum) checkCache = func(file string) (fs.FileInfo, error) { return nil, fmt.Errorf("cache not found") } - checkPreloadExists = func(k8sVersion, containerRuntime string, forcePreload ...bool) bool { return true } + checkPreloadExists = func(k8sVersion, containerRuntime, driverName string, forcePreload ...bool) bool { return true } getChecksum = func(k8sVersion, containerRuntime string) ([]byte, error) { return []byte("check"), nil } ensureChecksumValid = func(k8sVersion, containerRuntime, path string, checksum []byte) error { return fmt.Errorf("checksum mismatch") } - err := Preload(constants.DefaultKubernetesVersion, constants.DefaultContainerRuntime) + err := Preload(constants.DefaultKubernetesVersion, constants.DefaultContainerRuntime, "docker") expectedErrMsg := "checksum mismatch" if err == nil { t.Errorf("Expected error when checksum mismatches") diff --git a/pkg/minikube/download/preload.go b/pkg/minikube/download/preload.go index 7643b3341a..d7ef9b1b6c 100644 --- a/pkg/minikube/download/preload.go +++ b/pkg/minikube/download/preload.go @@ -33,6 +33,7 @@ import ( "github.com/pkg/errors" "github.com/spf13/viper" "k8s.io/klog/v2" + "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/style" @@ -98,7 +99,7 @@ func remoteTarballURL(k8sVersion, containerRuntime string) string { } // PreloadExists returns true if there is a preloaded tarball that can be used -func PreloadExists(k8sVersion, containerRuntime string, forcePreload ...bool) bool { +func PreloadExists(k8sVersion, containerRuntime, driverName string, forcePreload ...bool) bool { // TODO (#8166): Get rid of the need for this and viper at all force := false if len(forcePreload) > 0 { @@ -107,7 +108,9 @@ func PreloadExists(k8sVersion, containerRuntime string, forcePreload ...bool) bo // TODO: debug why this func is being called two times klog.Infof("Checking if preload exists for k8s version %s and runtime %s", k8sVersion, containerRuntime) - if !viper.GetBool("preload") && !force { + // If `driverName` is BareMetal, there is no preload. Note: some uses of + // `PreloadExists` assume that the driver is irrelevant unless BareMetal. + if !driver.AllowsPreload(driverName) || !viper.GetBool("preload") && !force { return false } @@ -147,7 +150,7 @@ func PreloadExists(k8sVersion, containerRuntime string, forcePreload ...bool) bo var checkPreloadExists = PreloadExists // Preload caches the preloaded images tarball on the host machine -func Preload(k8sVersion, containerRuntime string) error { +func Preload(k8sVersion, containerRuntime, driverName string) error { targetPath := TarballPath(k8sVersion, containerRuntime) targetLock := targetPath + ".lock" @@ -165,7 +168,7 @@ func Preload(k8sVersion, containerRuntime string) error { } // Make sure we support this k8s version - if !checkPreloadExists(k8sVersion, containerRuntime) { + if !checkPreloadExists(k8sVersion, containerRuntime, driverName) { klog.Infof("Preloaded tarball for k8s version %s does not exist", k8sVersion) return nil } diff --git a/pkg/minikube/driver/install.go b/pkg/minikube/driver/auxdriver/install.go similarity index 97% rename from pkg/minikube/driver/install.go rename to pkg/minikube/driver/auxdriver/install.go index 4ef71b5753..e498f85bfe 100644 --- a/pkg/minikube/driver/install.go +++ b/pkg/minikube/driver/auxdriver/install.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package driver +package auxdriver import ( "fmt" @@ -32,6 +32,7 @@ import ( "k8s.io/klog/v2" "k8s.io/minikube/pkg/minikube/download" + "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/util/lock" @@ -39,7 +40,7 @@ import ( // InstallOrUpdate downloads driver if it is not present, or updates it if there's a newer version func InstallOrUpdate(name string, directory string, v semver.Version, interactive bool, autoUpdate bool) error { - if name != KVM2 && name != HyperKit { + if name != driver.KVM2 && name != driver.HyperKit { return nil } @@ -69,7 +70,7 @@ func InstallOrUpdate(name string, directory string, v semver.Version, interactiv // fixDriverPermissions fixes the permissions on a driver func fixDriverPermissions(name string, path string, interactive bool) error { - if name != HyperKit { + if name != driver.HyperKit { return nil } diff --git a/pkg/minikube/driver/install_test.go b/pkg/minikube/driver/auxdriver/install_test.go similarity index 98% rename from pkg/minikube/driver/install_test.go rename to pkg/minikube/driver/auxdriver/install_test.go index 6cd8cd010d..95bc5a1b19 100644 --- a/pkg/minikube/driver/install_test.go +++ b/pkg/minikube/driver/auxdriver/install_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package driver +package auxdriver import ( "testing" diff --git a/pkg/minikube/driver/version.go b/pkg/minikube/driver/auxdriver/version.go similarity index 82% rename from pkg/minikube/driver/version.go rename to pkg/minikube/driver/auxdriver/version.go index 7ccf96dd46..298ac1094a 100644 --- a/pkg/minikube/driver/version.go +++ b/pkg/minikube/driver/auxdriver/version.go @@ -14,11 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -package driver +package auxdriver import ( "github.com/blang/semver" "k8s.io/klog/v2" + "k8s.io/minikube/pkg/minikube/driver" ) // minHyperkitVersion is the minimum version of the minikube hyperkit driver compatible with the current minikube code @@ -36,17 +37,17 @@ func init() { } // minAcceptableDriverVersion is the minimum version of driver supported by current version of minikube -func minAcceptableDriverVersion(driver string, mkVer semver.Version) semver.Version { - switch driver { - case HyperKit: +func minAcceptableDriverVersion(driverName string, mkVer semver.Version) semver.Version { + switch driverName { + case driver.HyperKit: if minHyperkitVersion != nil { return *minHyperkitVersion } return mkVer - case KVM2: + case driver.KVM2: return mkVer default: - klog.Warningf("Unexpected driver: %v", driver) + klog.Warningf("Unexpected driver: %v", driverName) return mkVer } } diff --git a/pkg/minikube/driver/version_test.go b/pkg/minikube/driver/auxdriver/version_test.go similarity index 87% rename from pkg/minikube/driver/version_test.go rename to pkg/minikube/driver/auxdriver/version_test.go index bcd19bb8c2..d5569cc9f7 100644 --- a/pkg/minikube/driver/version_test.go +++ b/pkg/minikube/driver/auxdriver/version_test.go @@ -14,12 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -package driver +package auxdriver import ( "testing" "github.com/blang/semver" + "k8s.io/minikube/pkg/minikube/driver" ) func Test_minDriverVersion(t *testing.T) { @@ -30,9 +31,9 @@ func Test_minDriverVersion(t *testing.T) { mkV string want semver.Version }{ - {"Hyperkit", HyperKit, "1.1.1", *minHyperkitVersion}, + {"Hyperkit", driver.HyperKit, "1.1.1", *minHyperkitVersion}, {"Invalid", "_invalid_", "1.1.1", v("1.1.1")}, - {"KVM2", KVM2, "1.1.1", v("1.1.1")}, + {"KVM2", driver.KVM2, "1.1.1", v("1.1.1")}, } for _, tt := range tests { t.Run(tt.desc, func(t *testing.T) { diff --git a/pkg/minikube/driver/driver.go b/pkg/minikube/driver/driver.go index 0821f4dad0..6481ff632f 100644 --- a/pkg/minikube/driver/driver.go +++ b/pkg/minikube/driver/driver.go @@ -172,6 +172,10 @@ func IsSSH(name string) bool { return name == SSH } +func AllowsPreload(driverName string) bool { + return !BareMetal(driverName) && !IsSSH(driverName) +} + // NeedsPortForward returns true if driver is unable provide direct IP connectivity func NeedsPortForward(name string) bool { if !IsKIC(name) { diff --git a/pkg/minikube/node/cache.go b/pkg/minikube/node/cache.go index 92d992b05a..30aade94ca 100644 --- a/pkg/minikube/node/cache.go +++ b/pkg/minikube/node/cache.go @@ -48,11 +48,11 @@ const ( ) // BeginCacheKubernetesImages caches images required for Kubernetes version in the background -func beginCacheKubernetesImages(g *errgroup.Group, imageRepository string, k8sVersion string, cRuntime string) { +func beginCacheKubernetesImages(g *errgroup.Group, imageRepository string, k8sVersion string, cRuntime string, driverName string) { // TODO: remove imageRepository check once #7695 is fixed - if imageRepository == "" && download.PreloadExists(k8sVersion, cRuntime) { + if imageRepository == "" && download.PreloadExists(k8sVersion, cRuntime, driverName) { klog.Info("Caching tarball of preloaded images") - err := download.Preload(k8sVersion, cRuntime) + err := download.Preload(k8sVersion, cRuntime, driverName) if err == nil { klog.Infof("Finished verifying existence of preloaded tar for %s on %s", k8sVersion, cRuntime) return // don't cache individual images if preload is successful. @@ -70,12 +70,12 @@ func beginCacheKubernetesImages(g *errgroup.Group, imageRepository string, k8sVe } // handleDownloadOnly caches appropariate binaries and images -func handleDownloadOnly(cacheGroup, kicGroup *errgroup.Group, k8sVersion, containerRuntime string) { +func handleDownloadOnly(cacheGroup, kicGroup *errgroup.Group, k8sVersion, containerRuntime, driverName string) { // If --download-only, complete the remaining downloads and exit. if !viper.GetBool("download-only") { return } - if err := doCacheBinaries(k8sVersion, containerRuntime); err != nil { + if err := doCacheBinaries(k8sVersion, containerRuntime, driverName); err != nil { exit.Error(reason.InetCacheBinaries, "Failed to cache binaries", err) } if _, err := CacheKubectlBinary(k8sVersion); err != nil { @@ -101,9 +101,9 @@ func CacheKubectlBinary(k8sVersion string) (string, error) { } // doCacheBinaries caches Kubernetes binaries in the foreground -func doCacheBinaries(k8sVersion, containerRuntime string) error { +func doCacheBinaries(k8sVersion, containerRuntime, driverName string) error { existingBinaries := constants.KubernetesReleaseBinaries - if !download.PreloadExists(k8sVersion, containerRuntime) { + if !download.PreloadExists(k8sVersion, containerRuntime, driverName) { existingBinaries = nil } return machine.CacheBinariesForBootstrapper(k8sVersion, viper.GetString(cmdcfg.Bootstrapper), existingBinaries) diff --git a/pkg/minikube/node/start.go b/pkg/minikube/node/start.go index f7de547518..7f0a97471c 100644 --- a/pkg/minikube/node/start.go +++ b/pkg/minikube/node/start.go @@ -285,7 +285,7 @@ func Provision(cc *config.ClusterConfig, n *config.Node, apiServer bool, delOnFa } if !driver.BareMetal(cc.Driver) { - beginCacheKubernetesImages(&cacheGroup, cc.KubernetesConfig.ImageRepository, n.KubernetesVersion, cc.KubernetesConfig.ContainerRuntime) + beginCacheKubernetesImages(&cacheGroup, cc.KubernetesConfig.ImageRepository, n.KubernetesVersion, cc.KubernetesConfig.ContainerRuntime, cc.Driver) } // Abstraction leakage alert: startHost requires the config to be saved, to satistfy pkg/provision/buildroot. @@ -294,7 +294,7 @@ func Provision(cc *config.ClusterConfig, n *config.Node, apiServer bool, delOnFa return nil, false, nil, nil, errors.Wrap(err, "Failed to save config") } - handleDownloadOnly(&cacheGroup, &kicGroup, n.KubernetesVersion, cc.KubernetesConfig.ContainerRuntime) + handleDownloadOnly(&cacheGroup, &kicGroup, n.KubernetesVersion, cc.KubernetesConfig.ContainerRuntime, cc.Driver) waitDownloadKicBaseImage(&kicGroup) return startMachine(cc, n, delOnFail) @@ -323,7 +323,7 @@ func configureRuntimes(runner cruntime.CommandRunner, cc config.ClusterConfig, k // Preload is overly invasive for bare metal, and caching is not meaningful. // KIC handles preload elsewhere. if driver.IsVM(cc.Driver) { - if err := cr.Preload(cc.KubernetesConfig); err != nil { + if err := cr.Preload(cc); err != nil { switch err.(type) { case *cruntime.ErrISOFeature: out.ErrT(style.Tip, "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'", out.V{"error": err}) diff --git a/test/integration/aaa_download_only_test.go b/test/integration/aaa_download_only_test.go index 726395d15d..0037c98bd6 100644 --- a/test/integration/aaa_download_only_test.go +++ b/test/integration/aaa_download_only_test.go @@ -97,7 +97,9 @@ func TestDownloadOnly(t *testing.T) { if NoneDriver() { t.Skip("None driver does not have preload") } - if download.PreloadExists(v, containerRuntime, true) { + // Driver does not matter here, since the only exception is none driver, + // which cannot occur here. + if download.PreloadExists(v, containerRuntime, "docker", true) { // Just make sure the tarball path exists if _, err := os.Stat(download.TarballPath(v, containerRuntime)); err != nil { t.Errorf("failed to verify preloaded tarball file exists: %v", err) diff --git a/test/integration/driver_install_or_update_test.go b/test/integration/driver_install_or_update_test.go index adf06060c6..018077e160 100644 --- a/test/integration/driver_install_or_update_test.go +++ b/test/integration/driver_install_or_update_test.go @@ -28,7 +28,7 @@ import ( "github.com/Azure/azure-sdk-for-go/tools/apidiff/ioext" "github.com/blang/semver" - "k8s.io/minikube/pkg/minikube/driver" + "k8s.io/minikube/pkg/minikube/driver/auxdriver" "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/version" ) @@ -98,7 +98,7 @@ func TestKVMDriverInstallOrUpdate(t *testing.T) { t.Fatalf("Expected new semver. test: %v, got: %v", tc.name, err) } - err = driver.InstallOrUpdate("kvm2", dir, newerVersion, true, true) + err = auxdriver.InstallOrUpdate("kvm2", dir, newerVersion, true, true) if err != nil { t.Fatalf("Failed to update driver to %v. test: %s, got: %v", newerVersion, tc.name, err) } @@ -171,7 +171,7 @@ func TestHyperKitDriverInstallOrUpdate(t *testing.T) { t.Skipf("password required to execute 'sudo', skipping remaining test") } - err = driver.InstallOrUpdate("hyperkit", dir, newerVersion, false, true) + err = auxdriver.InstallOrUpdate("hyperkit", dir, newerVersion, false, true) if err != nil { t.Fatalf("Failed to update driver to %v. test: %s, got: %v", newerVersion, tc.name, err) }