From 972dae8133b6852d88a85a9b7d6dded852c3e9df Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 11 May 2021 15:17:43 -0700 Subject: [PATCH] Make sure all tests have comments --- cmd/minikube/cmd/generate-docs_test.go | 48 +++++ pkg/generate/docs.go | 2 +- pkg/generate/testdocs.go | 11 +- site/content/en/docs/contrib/tests.en.md | 218 +++++++++++------------ translations/de.json | 11 +- translations/es.json | 11 +- translations/fr.json | 11 +- translations/ja.json | 11 +- translations/ko.json | 11 +- translations/pl.json | 11 +- translations/strings.txt | 11 +- translations/zh-CN.json | 11 +- 12 files changed, 236 insertions(+), 131 deletions(-) diff --git a/cmd/minikube/cmd/generate-docs_test.go b/cmd/minikube/cmd/generate-docs_test.go index b8dab4e720..85e9824b6e 100644 --- a/cmd/minikube/cmd/generate-docs_test.go +++ b/cmd/minikube/cmd/generate-docs_test.go @@ -19,7 +19,9 @@ package cmd import ( "fmt" "io/ioutil" + "os" "path/filepath" + "strings" "testing" "github.com/google/go-cmp/cmp" @@ -51,3 +53,49 @@ func TestGenerateDocs(t *testing.T) { }) } } + +func TestGenerateTestDocs(t *testing.T) { + tempdir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatalf("creating temp dir failed: %v", err) + } + defer os.RemoveAll(tempdir) + docPath := filepath.Join(tempdir, "tests.md") + realPath := "../../../site/content/en/docs/contrib/tests.en.md" + + expectedContents, err := ioutil.ReadFile(realPath) + if err != nil { + t.Fatalf("error reading existing file: %v", err) + } + + err = generate.TestDocs(docPath, "../../../test/integration") + if err != nil { + t.Fatalf("error generating test docs: %v", err) + } + actualContents, err := ioutil.ReadFile(docPath) + if err != nil { + t.Fatalf("error reading generated file: %v", err) + } + + if diff := cmp.Diff(string(actualContents), string(expectedContents)); diff != "" { + t.Errorf("Docs are not updated. Please run `make generate-docs` to update commands documentation: %s", diff) + } + + rest := string(actualContents) + for rest != "" { + rest = checkForNeedsDoc(t, rest) + } +} + +func checkForNeedsDoc(t *testing.T, content string) string { + needs := "\nNEEDS DOC\n" + index := strings.Index(content, needs) + if index < 0 { + return "" + } + + topHalf := content[:index] + testName := topHalf[strings.LastIndex(topHalf, "\n"):] + t.Errorf("%s is missing a doc string.", testName) + return content[index+len(needs):] +} diff --git a/pkg/generate/docs.go b/pkg/generate/docs.go index 4cf9648ab8..bb66b86aa8 100644 --- a/pkg/generate/docs.go +++ b/pkg/generate/docs.go @@ -47,7 +47,7 @@ func Docs(root *cobra.Command, path string, testPath string) error { return errors.Wrapf(err, "saving doc for %s", c.Name()) } } - return testDocs(testPath) + return TestDocs(testPath, "test/integration") } // DocForCommand returns the specific doc for that command diff --git a/pkg/generate/testdocs.go b/pkg/generate/testdocs.go index 021b2554d1..b7cb2a0359 100644 --- a/pkg/generate/testdocs.go +++ b/pkg/generate/testdocs.go @@ -32,7 +32,7 @@ import ( "k8s.io/minikube/pkg/minikube/out" ) -func testDocs(docPath string) error { +func TestDocs(docPath string, pathToCheck string) error { counter := 0 buf := bytes.NewBuffer([]byte{}) date := time.Now().Format("2006-01-02") @@ -42,7 +42,7 @@ func testDocs(docPath string) error { return err } - err = filepath.Walk("test/integration", func(path string, info os.FileInfo, err error) error { + err = filepath.Walk(pathToCheck, func(path string, info os.FileInfo, err error) error { if info.IsDir() || !strings.HasSuffix(path, ".go") { return nil } @@ -78,14 +78,14 @@ func testDocs(docPath string) error { counter++ comments := fd.Doc if comments == nil { - e := writeComment("NEEDS DOC\n", buf) + e := writeComment(fnName, "// NEEDS DOC\n", buf) return e == nil } for _, comment := range comments.List { if strings.Contains(comment.Text, "TODO") { continue } - e := writeComment(comment.Text, buf) + e := writeComment(fnName, comment.Text, buf) if e != nil { return false } @@ -134,9 +134,10 @@ func writeSubTest(testName string, w *bytes.Buffer) error { return err } -func writeComment(comment string, w *bytes.Buffer) error { +func writeComment(testName string, comment string, w *bytes.Buffer) error { // Remove the leading // from the testdoc comments comment = comment[3:] + comment = strings.TrimPrefix(comment, testName+" ") _, err := w.WriteString(comment + "\n") return err } diff --git a/site/content/en/docs/contrib/tests.en.md b/site/content/en/docs/contrib/tests.en.md index 290a3a65db..81f7d03c0f 100644 --- a/site/content/en/docs/contrib/tests.en.md +++ b/site/content/en/docs/contrib/tests.en.md @@ -6,86 +6,86 @@ description: > ## TestDownloadOnly -TestDownloadOnly makes sure the --download-only parameter in minikube start caches the appropriate images and tarballs. +makes sure the --download-only parameter in minikube start caches the appropriate images and tarballs. ## TestDownloadOnlyKic -TestDownloadOnlyKic makes sure --download-only caches the docker driver images as well. +makes sure --download-only caches the docker driver images as well. ## TestOffline -TestOffline makes sure minikube works without internet, once the user has cached the necessary images. +makes sure minikube works without internet, once the user has cached the necessary images. This test has to run after TestDownloadOnly. ## TestAddons -TestAddons tests addons that require no special environment in parallel +tests addons that require no special environment in parallel #### validateIngressAddon -validateIngressAddon tests the ingress addon by deploying a default nginx pod +tests the ingress addon by deploying a default nginx pod #### validateRegistryAddon -validateRegistryAddon tests the registry addon +tests the registry addon #### validateMetricsServerAddon -validateMetricsServerAddon tests the metrics server addon by making sure "kubectl top pods" returns a sensible result +tests the metrics server addon by making sure "kubectl top pods" returns a sensible result #### validateHelmTillerAddon -validateHelmTillerAddon tests the helm tiller addon by running "helm version" inside the cluster +tests the helm tiller addon by running "helm version" inside the cluster #### validateOlmAddon -validateOlmAddon tests the OLM addon +tests the OLM addon #### validateCSIDriverAndSnapshots -validateCSIDriverAndSnapshots tests the csi hostpath driver by creating a persistent volume, snapshotting it and restoring it. +tests the csi hostpath driver by creating a persistent volume, snapshotting it and restoring it. #### validateGCPAuthAddon -validateGCPAuthAddon tests the GCP Auth addon with either phony or real credentials and makes sure the files are mounted into pods correctly +tests the GCP Auth addon with either phony or real credentials and makes sure the files are mounted into pods correctly ## TestCertOptions -TestCertOptions makes sure minikube certs respect the --apiserver-ips and --apiserver-names parameters +makes sure minikube certs respect the --apiserver-ips and --apiserver-names parameters ## TestDockerFlags -TestDockerFlags makes sure the --docker-env and --docker-opt parameters are respected +makes sure the --docker-env and --docker-opt parameters are respected ## TestForceSystemdFlag -TestForceSystemdFlag tests the --force-systemd flag, as one would expect. +tests the --force-systemd flag, as one would expect. #### validateDockerSystemd -validateDockerSystemd makes sure the --force-systemd flag worked with the docker container runtime +makes sure the --force-systemd flag worked with the docker container runtime #### validateContainerdSystemd -validateContainerdSystemd makes sure the --force-systemd flag worked with the containerd container runtime +makes sure the --force-systemd flag worked with the containerd container runtime ## TestForceSystemdEnv -TestForceSystemdEnv makes sure the MINIKUBE_FORCE_SYSTEMD environment variable works just as well as the --force-systemd flag +makes sure the MINIKUBE_FORCE_SYSTEMD environment variable works just as well as the --force-systemd flag ## TestKVMDriverInstallOrUpdate -TestKVMDriverInstallOrUpdate makes sure our docker-machine-driver-kvm2 binary can be installed properly +makes sure our docker-machine-driver-kvm2 binary can be installed properly ## TestHyperKitDriverInstallOrUpdate -TestHyperKitDriverInstallOrUpdate makes sure our docker-machine-driver-hyperkit binary can be installed properly +makes sure our docker-machine-driver-hyperkit binary can be installed properly ## TestHyperkitDriverSkipUpgrade -TestHyperkitDriverSkipUpgrade makes sure our docker-machine-driver-hyperkit binary can be installed properly +makes sure our docker-machine-driver-hyperkit binary can be installed properly ## TestErrorSpam -TestErrorSpam asserts that there are no unexpected errors displayed in minikube command outputs. +asserts that there are no unexpected errors displayed in minikube command outputs. ## TestFunctional -TestFunctional are functionality tests which can safely share a profile in parallel +are functionality tests which can safely share a profile in parallel #### validateNodeLabels -validateNodeLabels checks if minikube cluster is created with correct kubernetes's node label +checks if minikube cluster is created with correct kubernetes's node label #### validateLoadImage -validateLoadImage makes sure that `minikube image load` works as expected +makes sure that `minikube image load` works as expected #### validateRemoveImage -validateRemoveImage makes sures that `minikube image rm` works as expected +makes sures that `minikube image rm` works as expected #### validateBuildImage -validateBuildImage makes sures that `minikube image build` works as expected +makes sures that `minikube image build` works as expected #### validateListImages -validateListImages makes sures that `minikube image ls` works as expected +makes sures that `minikube image ls` works as expected #### validateDockerEnv check functionality of minikube after evaluating docker-env @@ -94,267 +94,267 @@ check functionality of minikube after evaluating docker-env check functionality of minikube after evaluating podman-env #### validateStartWithProxy -validateStartWithProxy makes sure minikube start respects the HTTP_PROXY environment variable +makes sure minikube start respects the HTTP_PROXY environment variable #### validateAuditAfterStart -validateAuditAfterStart makes sure the audit log contains the correct logging after minikube start +makes sure the audit log contains the correct logging after minikube start #### validateSoftStart -validateSoftStart validates that after minikube already started, a "minikube start" should not change the configs. +validates that after minikube already started, a "minikube start" should not change the configs. #### validateKubeContext -validateKubeContext asserts that kubectl is properly configured (race-condition prone!) +asserts that kubectl is properly configured (race-condition prone!) #### validateKubectlGetPods -validateKubectlGetPods asserts that `kubectl get pod -A` returns non-zero content +asserts that `kubectl get pod -A` returns non-zero content #### validateMinikubeKubectl -validateMinikubeKubectl validates that the `minikube kubectl` command returns content +validates that the `minikube kubectl` command returns content #### validateMinikubeKubectlDirectCall -validateMinikubeKubectlDirectCall validates that calling minikube's kubectl +validates that calling minikube's kubectl #### validateExtraConfig -validateExtraConfig verifies minikube with --extra-config works as expected +verifies minikube with --extra-config works as expected #### validateComponentHealth -validateComponentHealth asserts that all Kubernetes components are healthy +asserts that all Kubernetes components are healthy NOTE: It expects all components to be Ready, so it makes sense to run it close after only those tests that include '--wait=all' start flag #### validateStatusCmd -validateStatusCmd makes sure minikube status outputs correctly +makes sure minikube status outputs correctly #### validateDashboardCmd -validateDashboardCmd asserts that the dashboard command works +asserts that the dashboard command works #### validateDryRun -validateDryRun asserts that the dry-run mode quickly exits with the right code +asserts that the dry-run mode quickly exits with the right code #### validateCacheCmd -validateCacheCmd tests functionality of cache command (cache add, delete, list) +tests functionality of cache command (cache add, delete, list) #### validateConfigCmd -validateConfigCmd asserts basic "config" command functionality +asserts basic "config" command functionality #### validateLogsCmd -validateLogsCmd asserts basic "logs" command functionality +asserts basic "logs" command functionality #### validateLogsFileCmd -validateLogsFileCmd asserts "logs --file" command functionality +asserts "logs --file" command functionality #### validateProfileCmd -validateProfileCmd asserts "profile" command functionality +asserts "profile" command functionality #### validateServiceCmd -validateServiceCmd asserts basic "service" command functionality +asserts basic "service" command functionality #### validateAddonsCmd -validateAddonsCmd asserts basic "addon" command functionality +asserts basic "addon" command functionality #### validateSSHCmd -validateSSHCmd asserts basic "ssh" command functionality +asserts basic "ssh" command functionality #### validateCpCmd -validateCpCmd asserts basic "cp" command functionality +asserts basic "cp" command functionality #### validateMySQL -validateMySQL validates a minimalist MySQL deployment +validates a minimalist MySQL deployment #### validateFileSync -validateFileSync to check existence of the test file +to check existence of the test file #### validateCertSync -validateCertSync to check existence of the test certificate +to check existence of the test certificate #### validateUpdateContextCmd -validateUpdateContextCmd asserts basic "update-context" command functionality +asserts basic "update-context" command functionality #### validateMountCmd -validateMountCmd verifies the minikube mount command works properly +verifies the minikube mount command works properly #### validatePersistentVolumeClaim -validatePersistentVolumeClaim makes sure PVCs work properly +makes sure PVCs work properly #### validateTunnelCmd -validateTunnelCmd makes sure the minikube tunnel command works as expected +makes sure the minikube tunnel command works as expected #### validateTunnelStart -validateTunnelStart starts `minikube tunnel` +starts `minikube tunnel` #### validateServiceStable -validateServiceStable starts nginx pod, nginx service and waits nginx having loadbalancer ingress IP +starts nginx pod, nginx service and waits nginx having loadbalancer ingress IP #### validateAccessDirect -validateAccessDirect validates if the test service can be accessed with LoadBalancer IP from host +validates if the test service can be accessed with LoadBalancer IP from host #### validateDNSDig -validateDNSDig validates if the DNS forwarding works by dig command DNS lookup +validates if the DNS forwarding works by dig command DNS lookup NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental #### validateDNSDscacheutil -validateDNSDscacheutil validates if the DNS forwarding works by dscacheutil command DNS lookup +validates if the DNS forwarding works by dscacheutil command DNS lookup NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental #### validateAccessDNS -validateAccessDNS validates if the test service can be accessed with DNS forwarding from host +validates if the test service can be accessed with DNS forwarding from host NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental #### validateTunnelDelete -validateTunnelDelete stops `minikube tunnel` +stops `minikube tunnel` ## TestGuestEnvironment -TestGuestEnvironment verifies files and packges installed inside minikube ISO/Base image +verifies files and packges installed inside minikube ISO/Base image ## TestGvisorAddon -TestGvisorAddon tests the functionality of the gVisor addon +tests the functionality of the gVisor addon ## TestJSONOutput -TestJSONOutput makes sure json output works properly for the start, pause, unpause, and stop commands +makes sure json output works properly for the start, pause, unpause, and stop commands #### validateDistinctCurrentSteps validateDistinctCurrentSteps makes sure each step has a distinct step number #### validateIncreasingCurrentSteps -validateIncreasingCurrentSteps verifies that for a successful minikube start, 'current step' should be increasing +verifies that for a successful minikube start, 'current step' should be increasing ## TestErrorJSONOutput -TestErrorJSONOutput makes sure json output can print errors properly +makes sure json output can print errors properly ## TestKicCustomNetwork -TestKicCustomNetwork verifies the docker driver works with a custom network +verifies the docker driver works with a custom network ## TestKicExistingNetwork -TestKicExistingNetwork verifies the docker driver and run with an existing network +verifies the docker driver and run with an existing network ## TestingKicBaseImage -TestingKicBaseImage will return true if the integraiton test is running against a passed --base-image flag +will return true if the integraiton test is running against a passed --base-image flag ## TestMultiNode -TestMultiNode tests all multi node cluster functionality +tests all multi node cluster functionality #### validateMultiNodeStart -validateMultiNodeStart makes sure a 2 node cluster can start +makes sure a 2 node cluster can start #### validateAddNodeToMultiNode -validateAddNodeToMultiNode uses the minikube node add command to add a node to an existing cluster +uses the minikube node add command to add a node to an existing cluster #### validateProfileListWithMultiNode -validateProfileListWithMultiNode make sure minikube profile list outputs correct with multinode clusters +make sure minikube profile list outputs correct with multinode clusters #### validateStopRunningNode -validateStopRunningNode tests the minikube node stop command +tests the minikube node stop command #### validateStartNodeAfterStop -validateStartNodeAfterStop tests the minikube node start command on an existing stopped node +tests the minikube node start command on an existing stopped node #### validateStopMultiNodeCluster -validateStopMultiNodeCluster runs minikube stop on a multinode cluster +runs minikube stop on a multinode cluster #### validateRestartMultiNodeCluster -validateRestartMultiNodeCluster verifies a soft restart on a multinode cluster works +verifies a soft restart on a multinode cluster works #### validateDeleteNodeFromMultiNode -validateDeleteNodeFromMultiNode tests the minikube node delete command +tests the minikube node delete command #### validateNameConflict -validateNameConflict tests that the node name verification works as expected +tests that the node name verification works as expected #### validateDeployAppToMultiNode -validateDeployAppToMultiNode deploys an app to a multinode cluster and makes sure all nodes can serve traffic +deploys an app to a multinode cluster and makes sure all nodes can serve traffic ## TestNetworkPlugins -TestNetworkPlugins tests all supported CNI options +tests all supported CNI options Options tested: kubenet, bridge, flannel, kindnet, calico, cilium Flags tested: enable-default-cni (legacy), false (CNI off), auto-detection ## TestChangeNoneUser -TestChangeNoneUser tests to make sure the CHANGE_MINIKUBE_NONE_USER environemt variable is respected +tests to make sure the CHANGE_MINIKUBE_NONE_USER environemt variable is respected and changes the minikube file permissions from root to the correct user. ## TestPause -TestPause tests minikube pause functionality +tests minikube pause functionality #### validateFreshStart -validateFreshStart just starts a new minikube cluster +just starts a new minikube cluster #### validateStartNoReconfigure -validateStartNoReconfigure validates that starting a running cluster does not invoke reconfiguration +validates that starting a running cluster does not invoke reconfiguration #### validatePause -validatePause runs minikube pause +runs minikube pause #### validateUnpause -validateUnpause runs minikube unpause +runs minikube unpause #### validateDelete -validateDelete deletes the unpaused cluster +deletes the unpaused cluster #### validateVerifyDeleted -validateVerifyDeleted makes sure no left over left after deleting a profile such as containers or volumes +makes sure no left over left after deleting a profile such as containers or volumes #### validateStatus -validateStatus makes sure paused clusters show up in minikube status correctly +makes sure paused clusters show up in minikube status correctly ## TestDebPackageInstall TestPackageInstall tests installation of .deb packages with minikube itself and with kvm2 driver on various debian/ubuntu docker images ## TestPreload -TestPreload verifies the preload tarballs get pulled in properly by minikube +verifies the preload tarballs get pulled in properly by minikube ## TestScheduledStopWindows -TestScheduledStopWindows tests the schedule stop functionality on Windows +tests the schedule stop functionality on Windows ## TestScheduledStopUnix TestScheduledStopWindows tests the schedule stop functionality on Unix ## TestSkaffold -TestSkaffold makes sure skaffold run can be run with minikube +makes sure skaffold run can be run with minikube ## TestStartStop -TestStartStop tests starting, stopping and restarting a minikube clusters with various Kubernetes versions and configurations +tests starting, stopping and restarting a minikube clusters with various Kubernetes versions and configurations The oldest supported, newest supported and default Kubernetes versions are always tested. #### validateFirstStart -validateFirstStart runs the initial minikube start +runs the initial minikube start #### validateDeploying -validateDeploying deploys an app the minikube cluster +deploys an app the minikube cluster #### validateStop -validateStop tests minikube stop +tests minikube stop #### validateEnableAddonAfterStop -validateEnableAddonAfterStop makes sure addons can be enabled on a stopped cluster +makes sure addons can be enabled on a stopped cluster #### validateSecondStart -validateSecondStart verifies that starting a stopped cluster works +verifies that starting a stopped cluster works #### validateAppExistsAfterStop -validateAppExistsAfterStop verifies that a user's app will not vanish after a minikube stop +verifies that a user's app will not vanish after a minikube stop #### validateAddonAfterStop -validateAddonAfterStop validates that an addon which was enabled when minikube is stopped will be enabled and working.. +validates that an addon which was enabled when minikube is stopped will be enabled and working.. #### validateKubernetesImages -validateKubernetesImages verifies that a restarted cluster contains all the necessary images +verifies that a restarted cluster contains all the necessary images #### validatePauseAfterStart -validatePauseAfterStart verifies that minikube pause works +verifies that minikube pause works ## TestInsufficientStorage -TestInsufficientStorage makes sure minikube status displays the correct info if there is insufficient disk space on the machine +makes sure minikube status displays the correct info if there is insufficient disk space on the machine ## TestRunningBinaryUpgrade -TestRunningBinaryUpgrade upgrades a running legacy cluster to minikube at HEAD +upgrades a running legacy cluster to minikube at HEAD ## TestStoppedBinaryUpgrade -TestStoppedBinaryUpgrade starts a legacy minikube, stops it, and then upgrades to minikube at HEAD +starts a legacy minikube, stops it, and then upgrades to minikube at HEAD ## TestKubernetesUpgrade -TestKubernetesUpgrade upgrades Kubernetes from oldest to newest +upgrades Kubernetes from oldest to newest ## TestMissingContainerUpgrade -TestMissingContainerUpgrade tests a Docker upgrade where the underlying container is missing +tests a Docker upgrade where the underlying container is missing TEST COUNT: 114 diff --git a/translations/de.json b/translations/de.json index 604e386163..3ef9c92d16 100644 --- a/translations/de.json +++ b/translations/de.json @@ -273,6 +273,9 @@ "Found network options:": "Gefundene Netzwerkoptionen:", "Found {{.number}} invalid profile(s) ! ": "", "Generate command completion for a shell": "", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", "Generating certificates and keys ...": "", @@ -780,8 +783,8 @@ "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the Disk size for an exiting minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the Disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an exiting minikube cluster. Please first delete the cluster.": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Möglicherweise müssen Sie die VM \"{{.name}}\" manuell von Ihrem Hypervisor entfernen", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", "You must specify a service name": "", @@ -800,6 +803,7 @@ "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", "bash completion failed": "", + "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", @@ -827,6 +831,7 @@ "failed to save config": "", "failed to start node": "", "fish completion failed": "", + "fish completion.": "", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", @@ -873,6 +878,7 @@ "stat failed": "", "status json failure": "", "status text failure": "", + "test/integration": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", @@ -897,6 +903,7 @@ "version json failure": "", "version yaml failure": "", "zsh completion failed": "", + "zsh completion.": "", "{{ .name }}: {{ .rejection }}": "", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", "{{.count}} nodes stopped.": "", diff --git a/translations/es.json b/translations/es.json index 04d8973ad7..d567649bed 100644 --- a/translations/es.json +++ b/translations/es.json @@ -278,6 +278,9 @@ "Found network options:": "Se han encontrado las siguientes opciones de red:", "Found {{.number}} invalid profile(s) ! ": "", "Generate command completion for a shell": "", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", "Generating certificates and keys ...": "", @@ -785,8 +788,8 @@ "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the Disk size for an exiting minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the Disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an exiting minikube cluster. Please first delete the cluster.": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Puede que tengas que retirar manualmente la VM \"{{.name}}\" de tu hipervisor", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", "You must specify a service name": "", @@ -805,6 +808,7 @@ "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", "bash completion failed": "", + "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", @@ -832,6 +836,7 @@ "failed to save config": "", "failed to start node": "", "fish completion failed": "", + "fish completion.": "", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", @@ -878,6 +883,7 @@ "stat failed": "", "status json failure": "", "status text failure": "", + "test/integration": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", @@ -902,6 +908,7 @@ "version json failure": "", "version yaml failure": "", "zsh completion failed": "", + "zsh completion.": "", "{{ .name }}: {{ .rejection }}": "", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", "{{.count}} nodes stopped.": "", diff --git a/translations/fr.json b/translations/fr.json index 8626d71312..dc828aeb28 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -275,6 +275,9 @@ "Found network options:": "Options de réseau trouvées :", "Found {{.number}} invalid profile(s) ! ": "", "Generate command completion for a shell": "", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", "Generating certificates and keys ...": "Génération des certificats et des clés", @@ -786,8 +789,8 @@ "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the Disk size for an exiting minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the Disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an exiting minikube cluster. Please first delete the cluster.": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Vous devrez peut-être supprimer la VM \"{{.name}}\" manuellement de votre hyperviseur.", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", "You must specify a service name": "", @@ -806,6 +809,7 @@ "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", "bash completion failed": "", + "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", @@ -833,6 +837,7 @@ "failed to save config": "", "failed to start node": "", "fish completion failed": "", + "fish completion.": "", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", @@ -879,6 +884,7 @@ "stat failed": "stat en échec", "status json failure": "état du JSON en échec", "status text failure": "état du texte en échec", + "test/integration": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "toom tous les arguments ({{.ArgCount}}).\\nusage : jeu de configuration de minikube PROPERTY_NAME PROPERTY_VALUE", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "le tunnel crée une route vers les services déployés avec le type LoadBalancer et définit leur Ingress sur leur ClusterIP. Pour un exemple détaillé, voir https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", "unable to bind flags": "impossible de lier les configurations", @@ -904,6 +910,7 @@ "version json failure": "échec de la version du JSON", "version yaml failure": "échec de la version du YAML", "zsh completion failed": "complétion de zsh en échec", + "zsh completion.": "", "{{ .name }}: {{ .rejection }}": "{{ .name }} : {{ .rejection }}", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", "{{.count}} nodes stopped.": "{{.count}} nœud(s) arrêté(s).", diff --git a/translations/ja.json b/translations/ja.json index 1117096f08..822c628a98 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -263,6 +263,9 @@ "Found network options:": "ネットワーク オプションが見つかりました", "Found {{.number}} invalid profile(s) ! ": "", "Generate command completion for a shell": "シェルのコマンド補完コードを生成します", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", "Generating certificates and keys ...": "", @@ -784,8 +787,8 @@ "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the Disk size for an exiting minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the Disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an exiting minikube cluster. Please first delete the cluster.": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "ハイパーバイザから「{{.name}}」VM を手動で削除することが必要な可能性があります", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "Hyper-V マネージャを停止して、「 minikube delete 」を再実行する必要があるかもしれません ", "You must specify a service name": "サービスの名前を明示する必要があります", @@ -806,6 +809,7 @@ "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", "bash completion failed": "bash の補完が失敗しました", + "bash completion.": "", "call with cleanup=true to remove old tunnels": "cleanup=true で呼び出すことで、古い tunnel を削除することができます", "cancel any existing scheduled stop requests": "", "config modifies minikube config files using subcommands like \"minikube config set driver kvm\"\nConfigurable fields:\\n\\n": "config では以下のようにサブコマンドを使用して、minikube の設定ファイルを編集することができます。 \"minikube config set driver kvm\"\n設定可能なフィールドは以下です。\\n\\n", @@ -834,6 +838,7 @@ "failed to save config": "", "failed to start node": "", "fish completion failed": "", + "fish completion.": "", "if true, will embed the certs in kubeconfig.": "有効であれば、Kubernetes の設定ファイルに証明書を埋め込みます", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "minikube のプロフィールを作成する場合は、以下のコマンドで作成できます。 minikube start -p {{.profile_name}}", "initialization failed, will try again: {{.error}}": "初期化が失敗しました。再施行します。 {{.error}}", @@ -888,6 +893,7 @@ "stat failed": "stat が失敗しました", "status json failure": "ステータスは JSON エラーです", "status text failure": "ステータスはテキストエラーです", + "test/integration": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "引数の数({{.ArgCount}})が多すぎます。\\n使用方法: minikube config set PROPERTY_NAME PROPERTY_VALUE", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "tunnel によってタイプが LoadBalancer なサービスへのルーティングが作成され、Ingress をサービスの ClusterIP へと向けさせます。より詳細な例は以下を参照してください。https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", "tunnel makes services of type LoadBalancer accessible on localhost": "tunnel によってタイプが LoadBalancer なサービスが localhost からアクセス可能になります", @@ -914,6 +920,7 @@ "version json failure": "JSON でバージョンを表示するのに失敗しました", "version yaml failure": "YAML でバージョンを表示するのに失敗しました", "zsh completion failed": "zsh の補完が失敗しました", + "zsh completion.": "", "{{ .name }}: {{ .rejection }}": "{{ .name }}: {{ .rejection }}", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", "{{.cluster}} IP has been updated to point at {{.ip}}": "{{.cluster}} の IP アドレスは {{.ip}} へと更新されました", diff --git a/translations/ko.json b/translations/ko.json index e9505ffc69..adb0814e2b 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -296,6 +296,9 @@ "Found {{.number}} invalid profile(s) !": "{{.number}} 개의 무효한 프로필을 찾았습니다", "Found {{.number}} invalid profile(s) ! ": "", "Generate command completion for a shell": "", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", "Generating certificates and keys ...": "", @@ -788,8 +791,8 @@ "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the Disk size for an exiting minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the Disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an exiting minikube cluster. Please first delete the cluster.": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", "You must specify a service name": "service 이름을 명시해야 합니다", @@ -809,6 +812,7 @@ "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", "bash completion failed": "bash 자동 완성이 실패하였습니다", + "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "예정된 모든 중지 요청을 취소합니다", "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", @@ -838,6 +842,7 @@ "failed to save config": "", "failed to start node": "", "fish completion failed": "", + "fish completion.": "", "getting config": "컨피그 조회 중", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "프로필을 생성하려면 다음 명령어를 입력하세요: minikube start -p {{.profile_name}}\"", @@ -889,6 +894,7 @@ "stat failed": "", "status json failure": "", "status text failure": "", + "test/integration": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", @@ -914,6 +920,7 @@ "version json failure": "", "version yaml failure": "", "zsh completion failed": "zsh 완성이 실패하였습니다", + "zsh completion.": "", "{{ .name }}: {{ .rejection }}": "", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", "{{.count}} nodes stopped.": "{{.count}}개의 노드가 중지되었습니다.", diff --git a/translations/pl.json b/translations/pl.json index 46c82fb3b3..3aa1a5da82 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -283,6 +283,9 @@ "Found {{.number}} invalid profile(s) !": "Wykryto {{.number}} nieprawidłowych profili ! ", "Found {{.number}} invalid profile(s) ! ": "", "Generate command completion for a shell": "", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", "Generating certificates and keys ...": "", @@ -797,8 +800,8 @@ "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the Disk size for an exiting minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the Disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an exiting minikube cluster. Please first delete the cluster.": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", "You must specify a service name": "Musisz podać nazwę serwisu", @@ -817,6 +820,7 @@ "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", "bash completion failed": "", + "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", @@ -844,6 +848,7 @@ "failed to save config": "", "failed to start node": "", "fish completion failed": "", + "fish completion.": "", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", @@ -891,6 +896,7 @@ "stat failed": "", "status json failure": "", "status text failure": "", + "test/integration": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", @@ -916,6 +922,7 @@ "version json failure": "", "version yaml failure": "", "zsh completion failed": "", + "zsh completion.": "", "{{ .name }}: {{ .rejection }}": "", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", "{{.addonName}} was successfully enabled": "{{.addonName}} został aktywowany pomyślnie", diff --git a/translations/strings.txt b/translations/strings.txt index 3f8b308f78..644089beff 100644 --- a/translations/strings.txt +++ b/translations/strings.txt @@ -254,6 +254,9 @@ "Found network options:": "", "Found {{.number}} invalid profile(s) ! ": "", "Generate command completion for a shell": "", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", "Generating certificates and keys ...": "", @@ -725,8 +728,8 @@ "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the Disk size for an exiting minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the Disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an exiting minikube cluster. Please first delete the cluster.": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", "You must specify a service name": "", @@ -745,6 +748,7 @@ "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", "bash completion failed": "", + "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", @@ -772,6 +776,7 @@ "failed to save config": "", "failed to start node": "", "fish completion failed": "", + "fish completion.": "", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", @@ -818,6 +823,7 @@ "stat failed": "", "status json failure": "", "status text failure": "", + "test/integration": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", @@ -842,6 +848,7 @@ "version json failure": "", "version yaml failure": "", "zsh completion failed": "", + "zsh completion.": "", "{{ .name }}: {{ .rejection }}": "", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", "{{.count}} nodes stopped.": "", diff --git a/translations/zh-CN.json b/translations/zh-CN.json index c49e7fb82f..ee7b1c08d4 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -348,6 +348,9 @@ "Found {{.number}} invalid profile(s) !": "找到 {{.number}} 个无效的配置文件!", "Found {{.number}} invalid profile(s) ! ": "", "Generate command completion for a shell": "", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", "Generating certificates and keys ...": "", @@ -901,8 +904,8 @@ "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the Disk size for an exiting minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the Disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an exiting minikube cluster. Please first delete the cluster.": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "您可能需要从管理程序中手动移除“{{.name}}”虚拟机", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", "You must specify a service name": "", @@ -922,6 +925,7 @@ "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "auto-pause currently is only supported on docker runtime and amd64. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "", "bash completion failed": "", + "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", @@ -949,6 +953,7 @@ "failed to save config": "", "failed to start node": "", "fish completion failed": "", + "fish completion.": "", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", @@ -999,6 +1004,7 @@ "stat failed": "", "status json failure": "", "status text failure": "", + "test/integration": "", "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "tunnel makes services of type LoadBalancer accessible on localhost": "隧道使本地主机上可以访问 LoadBalancer 类型的服务", @@ -1024,6 +1030,7 @@ "version json failure": "", "version yaml failure": "", "zsh completion failed": "", + "zsh completion.": "", "{{ .name }}: {{ .rejection }}": "", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", "{{.count}} nodes stopped.": "",