Remove support of multi Docker and Swarm providers

This commit is contained in:
CrazyMax
2020-05-25 23:20:30 +02:00
parent 6da156cd07
commit a6a231ac06
14 changed files with 204 additions and 208 deletions

View File

@@ -1,42 +1,36 @@
package docker
import (
"fmt"
"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) listContainerImage(id string, elt model.PrdDocker) []model.Image {
sublog := log.With().
Str("provider", fmt.Sprintf("docker-%s", id)).
Logger()
func (c *Client) listContainerImage() []model.Image {
cli, err := docker.New(docker.Options{
Endpoint: elt.Endpoint,
APIVersion: elt.APIVersion,
TLSCertPath: elt.TLSCertsPath,
TLSVerify: elt.TLSVerify,
Endpoint: c.config.Endpoint,
APIVersion: c.config.APIVersion,
TLSCertPath: c.config.TLSCertsPath,
TLSVerify: *c.config.TLSVerify,
})
if err != nil {
sublog.Error().Err(err).Msg("Cannot create Docker client")
c.logger.Error().Err(err).Msg("Cannot create Docker client")
return []model.Image{}
}
ctnFilter := filters.NewArgs()
ctnFilter.Add("status", "running")
if elt.WatchStopped {
if *c.config.WatchStopped {
ctnFilter.Add("status", "created")
ctnFilter.Add("status", "exited")
}
ctns, err := cli.ContainerList(ctnFilter)
if err != nil {
sublog.Error().Err(err).Msg("Cannot list Docker containers")
c.logger.Error().Err(err).Msg("Cannot list Docker containers")
return []model.Image{}
}
@@ -44,18 +38,18 @@ func (c *Client) listContainerImage(id string, elt model.PrdDocker) []model.Imag
for _, ctn := range ctns {
local, err := cli.IsLocalImage(ctn.Image)
if err != nil {
sublog.Error().Err(err).Msgf("Cannot inspect image from container %s", ctn.ID)
c.logger.Error().Err(err).Msgf("Cannot inspect image from container %s", ctn.ID)
continue
} else if local {
sublog.Debug().Msgf("Skip locally built image for container %s", ctn.ID)
c.logger.Debug().Msgf("Skip locally built image for container %s", ctn.ID)
continue
}
image, err := provider.ValidateContainerImage(ctn.Image, ctn.Labels, elt.WatchByDefault)
image, err := provider.ValidateContainerImage(ctn.Image, ctn.Labels, *c.config.WatchByDefault)
if err != nil {
sublog.Error().Err(err).Msgf("Cannot get image from container %s", ctn.ID)
c.logger.Error().Err(err).Msgf("Cannot get image from container %s", ctn.ID)
continue
} else if reflect.DeepEqual(image, model.Image{}) {
sublog.Debug().Msgf("Watch disabled for container %s", ctn.ID)
c.logger.Debug().Msgf("Watch disabled for container %s", ctn.ID)
continue
}
list = append(list, image)

View File

@@ -1,8 +1,6 @@
package docker
import (
"fmt"
"github.com/crazy-max/diun/internal/model"
"github.com/crazy-max/diun/internal/provider"
"github.com/rs/zerolog"
@@ -12,15 +10,15 @@ import (
// Client represents an active docker provider object
type Client struct {
*provider.Client
elts map[string]model.PrdDocker
config *model.PrdDocker
logger zerolog.Logger
}
// New creates new docker provider instance
func New(elts map[string]model.PrdDocker) *provider.Client {
func New(config *model.PrdDocker) *provider.Client {
return &provider.Client{
Handler: &Client{
elts: elts,
config: config,
logger: log.With().Str("provider", "docker").Logger(),
},
}
@@ -28,19 +26,22 @@ func New(elts map[string]model.PrdDocker) *provider.Client {
// ListJob returns job list to process
func (c *Client) ListJob() []model.Job {
if len(c.elts) == 0 {
if c.config == nil {
return []model.Job{}
}
c.logger.Info().Msgf("Found %d image(s) to analyze", len(c.elts))
images := c.listContainerImage()
if len(images) == 0 {
return []model.Job{}
}
c.logger.Info().Msgf("Found %d image(s) to analyze", len(images))
var list []model.Job
for id, elt := range c.elts {
for _, img := range c.listContainerImage(id, elt) {
list = append(list, model.Job{
Provider: fmt.Sprintf("docker-%s", id),
Image: img,
})
}
for _, image := range images {
list = append(list, model.Job{
Provider: "docker",
Image: image,
})
}
return list