mirror of
https://github.com/cuigh/swirl
synced 2024-12-29 07:12:11 +00:00
69 lines
1.2 KiB
Go
69 lines
1.2 KiB
Go
|
package docker
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"sync"
|
||
|
|
||
|
"github.com/cuigh/auxo/app/container"
|
||
|
"github.com/cuigh/auxo/log"
|
||
|
"github.com/cuigh/swirl/misc"
|
||
|
"github.com/docker/docker/api/types/swarm"
|
||
|
"github.com/docker/docker/client"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
defaultAPIVersion = "1.41"
|
||
|
)
|
||
|
|
||
|
func newVersion(v uint64) swarm.Version {
|
||
|
return swarm.Version{Index: v}
|
||
|
}
|
||
|
|
||
|
type Docker struct {
|
||
|
c *client.Client
|
||
|
locker sync.Mutex
|
||
|
logger log.Logger
|
||
|
}
|
||
|
|
||
|
func NewDocker() *Docker {
|
||
|
return &Docker{
|
||
|
logger: log.Get("docker"),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (d *Docker) call(fn func(c *client.Client) error) error {
|
||
|
c, err := d.client()
|
||
|
if err == nil {
|
||
|
err = fn(c)
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (d *Docker) client() (cli *client.Client, err error) {
|
||
|
if d.c == nil {
|
||
|
d.locker.Lock()
|
||
|
defer d.locker.Unlock()
|
||
|
|
||
|
if d.c == nil {
|
||
|
apiVersion := misc.Options.DockerAPIVersion
|
||
|
if apiVersion == "" {
|
||
|
apiVersion = defaultAPIVersion
|
||
|
}
|
||
|
if misc.Options.DockerEndpoint == "" {
|
||
|
_ = os.Setenv("DOCKER_API_VERSION", apiVersion)
|
||
|
d.c, err = client.NewClientWithOpts(client.FromEnv)
|
||
|
} else {
|
||
|
d.c, err = client.NewClientWithOpts(client.WithHost(misc.Options.DockerEndpoint), client.WithVersion(apiVersion))
|
||
|
}
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return d.c, nil
|
||
|
}
|
||
|
|
||
|
func init() {
|
||
|
container.Put(NewDocker)
|
||
|
}
|