mirror of
https://github.com/crazy-max/diun.git
synced 2026-01-03 11:35:02 +01:00
Implement Swarm provider
This commit is contained in:
45
internal/provider/swarm/service.go
Normal file
45
internal/provider/swarm/service.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user