forked from toolshed/abra
.gitea
cli
cmd
pkg
app
autocomplete
catalogue
client
client.go
context.go
registry.go
secret.go
volumes.go
compose
config
container
context
dns
git
limit
recipe
secret
server
ssh
upstream
web
scripts
tests
.drone.yml
.envrc.sample
.gitignore
.goreleaser.yml
Makefile
README.md
go.mod
go.sum
renovate.json
62 lines
1.4 KiB
Go
62 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 := commandconnPkg.NewConnectionHelper(ctxEndpoint)
|
|
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
|
|
}
|