0
0
Fork 0
mirror of https://github.com/crazy-max/diun.git synced 2025-04-27 20:26:13 +00:00

Skip analysis on locally built image

This commit is contained in:
CrazyMax 2019-12-22 19:04:56 +01:00
parent 7a8b4677fc
commit 01cb602ed2
No known key found for this signature in database
GPG key ID: 3248E46B6BB8C7F7
4 changed files with 42 additions and 23 deletions
internal/provider
pkg/docker

View file

@ -37,6 +37,14 @@ func (c *Client) listContainerImage(id string, elt model.PrdDocker) []model.Imag
var list []model.Image var list []model.Image
for _, ctn := range ctns { 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)
continue
} else if local {
sublog.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, elt.WatchByDefault)
if err != nil { if err != nil {
sublog.Error().Err(err).Msgf("Cannot get image from container %s", ctn.ID) sublog.Error().Err(err).Msgf("Cannot get image from container %s", ctn.ID)

View file

@ -30,6 +30,14 @@ func (c *Client) listServiceImage(id string, elt model.PrdSwarm) []model.Image {
var list []model.Image var list []model.Image
for _, svc := range svcs { for _, svc := range svcs {
local, err := cli.IsLocalImage(svc.Spec.TaskTemplate.ContainerSpec.Image)
if err != nil {
sublog.Error().Err(err).Msgf("Cannot inspect image from service %s", svc.ID)
continue
} else if local {
sublog.Debug().Msgf("Skip locally built image for service %s", svc.ID)
continue
}
image, err := provider.ValidateContainerImage(svc.Spec.TaskTemplate.ContainerSpec.Image, svc.Spec.Labels, elt.WatchByDefault) image, err := provider.ValidateContainerImage(svc.Spec.TaskTemplate.ContainerSpec.Image, svc.Spec.Labels, elt.WatchByDefault)
if err != nil { if err != nil {
sublog.Error().Err(err).Msgf("Cannot get image from service %s", svc.ID) sublog.Error().Err(err).Msgf("Cannot get image from service %s", svc.ID)

View file

@ -1,28 +1,10 @@
package docker package docker
import ( // IsLocalImage checks if the image has been built locally
"context" func (c *Client) IsLocalImage(image string) (bool, error) {
"fmt" raw, _, err := c.API.ImageInspectWithRaw(c.ctx, image)
"strings"
"github.com/containers/image/docker"
"github.com/containers/image/types"
)
func (c *RegistryClient) newImage(ctx context.Context, imageStr string) (types.ImageCloser, error) {
if !strings.HasPrefix(imageStr, "//") {
imageStr = fmt.Sprintf("//%s", imageStr)
}
ref, err := docker.ParseReference(imageStr)
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid image name %s: %v", imageStr, err) return false, err
} }
return len(raw.RepoDigests) == 0, nil
img, err := ref.NewImage(ctx, c.sysCtx)
if err != nil {
return nil, err
}
return img, nil
} }

View file

@ -2,8 +2,11 @@ package docker
import ( import (
"context" "context"
"fmt"
"strings"
"time" "time"
"github.com/containers/image/docker"
"github.com/containers/image/types" "github.com/containers/image/types"
) )
@ -56,3 +59,21 @@ func (c *RegistryClient) timeoutContext() (context.Context, context.CancelFunc)
} }
return ctx, cancel return ctx, cancel
} }
func (c *RegistryClient) newImage(ctx context.Context, imageStr string) (types.ImageCloser, error) {
if !strings.HasPrefix(imageStr, "//") {
imageStr = fmt.Sprintf("//%s", imageStr)
}
ref, err := docker.ParseReference(imageStr)
if err != nil {
return nil, fmt.Errorf("invalid image name %s: %v", imageStr, err)
}
img, err := ref.NewImage(ctx, c.sysCtx)
if err != nil {
return nil, err
}
return img, nil
}