1
0
mirror of https://github.com/amir20/dozzle.git synced 2025-12-21 21:33:18 +01:00
Files
dozzle/internal/support/cli/clients.go

64 lines
2.1 KiB
Go

package cli
import (
"embed"
"github.com/amir20/dozzle/internal/agent"
"github.com/amir20/dozzle/internal/docker"
docker_support "github.com/amir20/dozzle/internal/support/docker"
log "github.com/sirupsen/logrus"
)
func CreateMultiHostService(embededCerts embed.FS, args Args) *docker_support.MultiHostService {
var clients []docker_support.ClientService
for _, remoteHost := range args.RemoteHost {
host, err := docker.ParseConnection(remoteHost)
if err != nil {
log.Fatalf("Could not parse remote host %s: %s", remoteHost, err)
}
log.Debugf("creating remote client for %s with %+v", host.Name, host)
log.Infof("Creating client for %s with %s", host.Name, host.URL.String())
if client, err := docker.NewRemoteClient(args.Filter, host); err == nil {
if _, err := client.ListContainers(); err == nil {
log.Debugf("connected to local Docker Engine")
clients = append(clients, docker_support.NewDockerClientService(client))
} else {
log.Warnf("Could not connect to remote host %s: %s", host.ID, err)
}
} else {
log.Warnf("Could not create client for %s: %s", host.ID, err)
}
}
certs, err := ReadCertificates(embededCerts)
if err != nil {
log.Fatalf("Could not read certificates: %v", err)
}
for _, remoteAgent := range args.RemoteAgent {
client, err := agent.NewClient(remoteAgent, certs)
if err != nil {
log.Warnf("Could not connect to remote agent %s: %s", remoteAgent, err)
continue
}
clients = append(clients, docker_support.NewAgentService(client))
}
localClient, err := docker.NewLocalClient(args.Filter, args.Hostname)
if err == nil {
_, err := localClient.ListContainers()
if err != nil {
log.Debugf("could not connect to local Docker Engine: %s", err)
if !args.NoAnalytics {
go StartEvent(version, args.Mode, args.RemoteAgent, args.RemoteHost, nil, "")
}
} else {
log.Debugf("connected to local Docker Engine")
if !args.NoAnalytics {
go StartEvent(version, args.Mode, args.RemoteAgent, args.RemoteHost, localClient, "")
}
clients = append(clients, docker_support.NewDockerClientService(localClient))
}
}
return docker_support.NewMultiHostService(clients)
}