forked from coop-cloud/abra
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
// Package client provides Docker client initiatialisation functions.
|
|
package client
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
contextPkg "coopcloud.tech/abra/pkg/context"
|
|
commandconnPkg "coopcloud.tech/abra/pkg/upstream/commandconn"
|
|
"github.com/docker/docker/client"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// New initiates a new Docker client.
|
|
func New(contextName string) (*client.Client, error) {
|
|
var clientOpts []client.Opt
|
|
|
|
if contextName != "default" {
|
|
context, err := GetContext(contextName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ctxEndpoint, err := contextPkg.GetContextEndpoint(context)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
helper, err := commandconnPkg.NewConnectionHelper(ctxEndpoint)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
httpClient := &http.Client{
|
|
// No tls, no proxy
|
|
Transport: &http.Transport{
|
|
DialContext: helper.Dialer,
|
|
IdleConnTimeout: 30 * time.Second,
|
|
},
|
|
}
|
|
|
|
clientOpts = append(clientOpts,
|
|
client.WithHTTPClient(httpClient),
|
|
client.WithHost(helper.Host),
|
|
client.WithDialContext(helper.Dialer),
|
|
)
|
|
}
|
|
|
|
version := os.Getenv("DOCKER_API_VERSION")
|
|
if version != "" {
|
|
clientOpts = append(clientOpts, client.WithVersion(version))
|
|
} else {
|
|
clientOpts = append(clientOpts, client.WithAPIVersionNegotiation())
|
|
}
|
|
|
|
cl, err := client.NewClientWithOpts(clientOpts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
logrus.Debugf("created client for %s", contextName)
|
|
|
|
return cl, nil
|
|
}
|