Repository: kubernetes/minikube
Pull request #15238 (2022-10-28 21:58:48)

Add logging if docker images command fails
Helps debugging https://github.com/kubernetes/minikube/issues/15237


Patch:
diff --git a/deploy/addons/assets.go b/deploy/addons/assets.go
index 4ea4b5baf..209f0560d 100644
--- a/deploy/addons/assets.go
+++ b/deploy/addons/assets.go
@@ -151,8 +151,4 @@ var (
 	// HeadlampAssets assets for headlamp addon
 	//go:embed headlamp/*.yaml headlamp/*.tmpl
 	HeadlampAssets embed.FS
-
-	// CloudSpanner assets for cloud-spanner addon
-	//go:embed cloud-spanner/*.yaml
-	CloudSpanner embed.FS
 )
diff --git a/deploy/addons/cloud-spanner/deployment.yaml b/deploy/addons/cloud-spanner/deployment.yaml
deleted file mode 100644
index c95aca034..000000000
--- a/deploy/addons/cloud-spanner/deployment.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: cloud-spanner-emulator
-  labels:
-    app: cloud-spanner-emulator
-    gcp-auth-skip-secret: "true"
-    kubernetes.io/minikube-addons-endpoint: cloud-spanner
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: cloud-spanner-emulator
-  template:
-    metadata:
-      labels:
-        app: cloud-spanner-emulator
-    spec:
-      containers:
-        - name: cloud-spanner-emulator
-          image: gcr.io/cloud-spanner-emulator/emulator:latest
-          imagePullPolicy: IfNotPresent
-          ports:
-          - containerPort: 9020
-            name: http
-          - containerPort: 9010
-            name: grpc
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: cloud-spanner-emulator
-  labels:
-    app: cloud-spanner-emulator
-spec:
-  type: NodePort
-  ports:
-    - port: 9020
-      name: http
-    - port: 9010
-      name: grpc
-  selector:
-    app: cloud-spanner-emulator
diff --git a/pkg/addons/config.go b/pkg/addons/config.go
index 5e74c3460..6aba241a0 100644
--- a/pkg/addons/config.go
+++ b/pkg/addons/config.go
@@ -207,9 +207,4 @@ var Addons = []*Addon{
 		set:       SetBool,
 		callbacks: []setFn{EnableOrDisableAddon},
 	},
-	{
-		name:      "cloud-spanner",
-		set:       SetBool,
-		callbacks: []setFn{EnableOrDisableAddon},
-	},
 }
diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go
index 94f98a9d3..638bb891e 100644
--- a/pkg/minikube/assets/addons.go
+++ b/pkg/minikube/assets/addons.go
@@ -742,13 +742,6 @@ var Addons = map[string]*Addon{
 		map[string]string{
 			"Headlamp": "ghcr.io",
 		}),
-	"cloud-spanner": NewAddon([]*BinAsset{
-		MustBinAsset(addons.CloudSpanner, "cloud-spanner/deployment.yaml", vmpath.GuestAddonsDir, "deployment.yaml", "6040"),
-	}, false, "cloud-spanner", "Google", "", "https://minikube.sigs.k8s.io/docs/handbook/addons/cloud-spanner/", map[string]string{
-		"CloudSpannerAddon": "cloud-spanner-emulator/emulator",
-	}, map[string]string{
-		"CloudSpannerAddon": "gcr.io",
-	}),
 }
 
 // parseMapString creates a map based on `str` which is encoded as <key1>=<value1>,<key2>=<value2>,...
diff --git a/pkg/minikube/cruntime/docker.go b/pkg/minikube/cruntime/docker.go
index 24256f36a..0fe4e3f95 100644
--- a/pkg/minikube/cruntime/docker.go
+++ b/pkg/minikube/cruntime/docker.go
@@ -601,6 +601,7 @@ func (r *Docker) Preload(cc config.ClusterConfig) error {
 func dockerImagesPreloaded(runner command.Runner, images []string) bool {
 	rr, err := runner.RunCmd(exec.Command("docker", "images", "--format", "{{.Repository}}:{{.Tag}}"))
 	if err != nil {
+		klog.Warning(err)
 		return false
 	}
 	preloadedImages := map[string]struct{}{}
diff --git a/site/content/en/docs/handbook/addons/cloud-spanner.md b/site/content/en/docs/handbook/addons/cloud-spanner.md
deleted file mode 100644
index 14489d3d8..000000000
--- a/site/content/en/docs/handbook/addons/cloud-spanner.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: "Using Cloud Spanner Addon"
-linkTitle: "Cloud Spanner"
-weight: 1
-date: 2022-10-14
----
-
-## Cloud Spanner Addon
-
-[Cloud Spanner](https://cloud.google.com/spanner) is a fully managed relational database. The Cloud Spanner addon provides a local emulator to test your local application without incurring the cost of an actual spanner instance. 
-
-### Enable Cloud Spanner on minikube
-
-To enable this addon, simply run:
-```shell script
-minikube addons enable cloud-spanner
-```
-
-### Cloud Spanner Endpoints
-Cloud Spanner provides two different ports, HTTP and GRPC. List Cloud Spanner emulator urls by running:
-``` shell
-minikube service cloud-spanner-emulator
-
-####################Sample Output#########################
-|-----------|------------------------|-------------|---------------------------|
-| NAMESPACE |          NAME          | TARGET PORT |            URL            |
-|-----------|------------------------|-------------|---------------------------|
-| default   | cloud-spanner-emulator | http/9020   | http://192.168.49.2:30233 |
-|           |                        | grpc/9010   | http://192.168.49.2:30556 |
-|-----------|------------------------|-------------|---------------------------|
-[default cloud-spanner-emulator http/9020
-grpc/9010 http://192.168.49.2:30233
-http://192.168.49.2:30556]
-```
-
-### Using Cloud Spanner within a cluster
-Cloud Spanner emulator can be used via endpoint `cloud-spanner-emulator:9020` for http clients and `cloud-spanner-emulator:9010` for grpc clients respectively. If you're using the standard client library for Cloud Spanner then set `SPANNER_EMULATOR_HOST` to the GRPC endpoint `cloud-spanner-emulator:9010`.
-
-### Testing installation
-
-```shell script
-kubectl get pods -n cloud-spanner-emulator
-```
-
-If everything went well, there should be no errors about Cloud Spanner's installation in your minikube cluster.
-
-### Disable Cloud Spanner
-
-To disable this addon, simply run:
-
-```shell script
-minikube addons disable cloud-spanner
-```
\ No newline at end of file


Test patch:
diff --git a/cmd/minikube/cmd/config/addons_list_test.go b/cmd/minikube/cmd/config/addons_list_test.go
index f58b24439..1398508c2 100644
--- a/cmd/minikube/cmd/config/addons_list_test.go
+++ b/cmd/minikube/cmd/config/addons_list_test.go
@@ -77,7 +77,7 @@ func TestAddonsList(t *testing.T) {
 			Ambassador *interface{} `json:"ambassador"`
 		}
 
-		b := make([]byte, 590)
+		b := make([]byte, 571)
 		r, w, err := os.Pipe()
 		if err != nil {
 			t.Fatalf("failed to create pipe: %v", err)
diff --git a/site/content/en/docs/contrib/tests.en.md b/site/content/en/docs/contrib/tests.en.md
index 2315f7410..993d54290 100644
--- a/site/content/en/docs/contrib/tests.en.md
+++ b/site/content/en/docs/contrib/tests.en.md
@@ -44,9 +44,6 @@ tests the GCP Auth addon with either phony or real credentials and makes sure th
 
 #### validateHeadlampAddon
 
-#### validateCloudSpannerAddon
-tests the cloud-spanner addon by ensuring the deployment and pod come up and addon disables
-
 ## TestCertOptions
 makes sure minikube certs respect the --apiserver-ips and --apiserver-names parameters
 
diff --git a/test/integration/addons_test.go b/test/integration/addons_test.go
index c87904763..ca123a98a 100644
--- a/test/integration/addons_test.go
+++ b/test/integration/addons_test.go
@@ -66,7 +66,7 @@ func TestAddons(t *testing.T) {
 			t.Fatalf("Failed setting GOOGLE_CLOUD_PROJECT env var: %v", err)
 		}
 
-		args := append([]string{"start", "-p", profile, "--wait=true", "--memory=4000", "--alsologtostderr", "--addons=registry", "--addons=metrics-server", "--addons=volumesnapshots", "--addons=csi-hostpath-driver", "--addons=gcp-auth", "--addons=cloud-spanner"}, StartArgs()...)
+		args := append([]string{"start", "-p", profile, "--wait=true", "--memory=4000", "--alsologtostderr", "--addons=registry", "--addons=metrics-server", "--addons=volumesnapshots", "--addons=csi-hostpath-driver", "--addons=gcp-auth"}, StartArgs()...)
 		if !NoneDriver() { // none driver does not support ingress
 			args = append(args, "--addons=ingress", "--addons=ingress-dns")
 		}
@@ -97,7 +97,6 @@ func TestAddons(t *testing.T) {
 			{"Olm", validateOlmAddon},
 			{"CSI", validateCSIDriverAndSnapshots},
 			{"Headlamp", validateHeadlampAddon},
-			{"CloudSpanner", validateCloudSpannerAddon},
 		}
 		for _, tc := range tests {
 			tc := tc
@@ -744,22 +743,3 @@ func validateHeadlampAddon(ctx context.Context, t *testing.T, profile string) {
 		t.Fatalf("failed waiting for headlamp pod: %v", err)
 	}
 }
-
-// validateCloudSpannerAddon tests the cloud-spanner addon by ensuring the deployment and pod come up and addon disables
-func validateCloudSpannerAddon(ctx context.Context, t *testing.T, profile string) {
-	defer PostMortemLogs(t, profile)
-
-	client, err := kapi.Client(profile)
-	if err != nil {
-		t.Fatalf("failed to get Kubernetes client for %s: %v", profile, err)
-	}
-	if err := kapi.WaitForDeploymentToStabilize(client, "default", "cloud-spanner-emulator", Minutes(6)); err != nil {
-		t.Errorf("failed waiting for cloud-spanner-emulator deployment to stabilize: %v", err)
-	}
-	if _, err := PodWait(ctx, t, profile, "default", "app=cloud-spanner-emulator", Minutes(6)); err != nil {
-		t.Errorf("failed waiting for app=cloud-spanner-emulator pod: %v", err)
-	}
-	if rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "disable", "cloud-spanner", "-p", profile)); err != nil {
-		t.Errorf("failed to disable cloud-spanner addon: args %q : %v", rr.Command(), err)
-	}
-}