(ctx context.Context, kubectlClient kubectl.Client)
| 112 | } |
| 113 | |
| 114 | func newDockerClientFromMinikube(ctx context.Context, kubectlClient kubectl.Client) (Client, error) { |
| 115 | if !kubectl.IsMinikubeKubernetes(kubectlClient) { |
| 116 | return nil, errNotMinikube |
| 117 | } |
| 118 | |
| 119 | env, err := GetMinikubeEnvironment(ctx, kubectlClient.CurrentContext()) |
| 120 | if err != nil { |
| 121 | return nil, errors.Errorf("can't retrieve minikube docker environment due to error: %v", err) |
| 122 | } |
| 123 | |
| 124 | var httpclient *http.Client |
| 125 | if dockerCertPath := env["DOCKER_CERT_PATH"]; dockerCertPath != "" { |
| 126 | options := tlsconfig.Options{ |
| 127 | CAFile: filepath.Join(dockerCertPath, "ca.pem"), |
| 128 | CertFile: filepath.Join(dockerCertPath, "cert.pem"), |
| 129 | KeyFile: filepath.Join(dockerCertPath, "key.pem"), |
| 130 | InsecureSkipVerify: env["DOCKER_TLS_VERIFY"] == "", |
| 131 | } |
| 132 | tlsc, err := tlsconfig.Client(options) |
| 133 | if err != nil { |
| 134 | return nil, err |
| 135 | } |
| 136 | |
| 137 | httpclient = &http.Client{ |
| 138 | Transport: &http.Transport{ |
| 139 | TLSClientConfig: tlsc, |
| 140 | }, |
| 141 | CheckRedirect: dockerclient.CheckRedirect, |
| 142 | } |
| 143 | } |
| 144 | |
| 145 | host := env["DOCKER_HOST"] |
| 146 | if host == "" { |
| 147 | host = dockerclient.DefaultDockerHost |
| 148 | } |
| 149 | |
| 150 | cli, err := dockerclient.NewClientWithOpts(dockerclient.WithHost(host), dockerclient.WithVersion(env["DOCKER_API_VERSION"]), dockerclient.WithHTTPClient(httpclient), dockerclient.WithHTTPHeaders(nil)) |
| 151 | if err != nil { |
| 152 | return nil, err |
| 153 | } |
| 154 | |
| 155 | return &client{ |
| 156 | APIClient: cli, |
| 157 | minikubeEnv: env, |
| 158 | }, nil |
| 159 | } |
| 160 | |
| 161 | func GetMinikubeEnvironment(ctx context.Context, kubeContext string) (map[string]string, error) { |
| 162 | out, err := command.Output(ctx, "", expand.ListEnviron(os.Environ()...), "minikube", "docker-env", "--shell", "none", "--profile", kubeContext) |
no test coverage detected