Implement Swarm provider

This commit is contained in:
CrazyMax
2019-12-14 03:55:58 +01:00
parent 827703aa72
commit 629f98af4e
12 changed files with 245 additions and 103 deletions

View File

@@ -0,0 +1,45 @@
package swarm
import (
"reflect"
"github.com/crazy-max/diun/internal/model"
"github.com/crazy-max/diun/internal/provider"
"github.com/crazy-max/diun/pkg/docker"
"github.com/docker/docker/api/types/filters"
"github.com/rs/zerolog/log"
)
func (c *Client) listServiceImage(elt model.PrdSwarm) []model.Image {
sublog := log.With().
Str("provider", "swarm").
Str("id", elt.ID).
Logger()
cli, err := docker.NewClient(elt.Endpoint, elt.ApiVersion, elt.TLSCertsPath, elt.TLSVerify)
if err != nil {
sublog.Error().Err(err).Msg("Cannot create Docker client")
return []model.Image{}
}
svcs, err := cli.ServiceList(filters.NewArgs())
if err != nil {
sublog.Error().Err(err).Msg("Cannot list Swarm services")
return []model.Image{}
}
var list []model.Image
for _, svc := range svcs {
image, err := provider.ValidateContainerImage(svc.Spec.TaskTemplate.ContainerSpec.Image, svc.Spec.Labels, elt.WatchByDefault)
if err != nil {
sublog.Error().Err(err).Msgf("Cannot get image from service %s", svc.ID)
continue
} else if reflect.DeepEqual(image, model.Image{}) {
sublog.Debug().Msgf("Watch disabled for service %s", svc.ID)
continue
}
list = append(list, image)
}
return list
}