mirror of
https://github.com/crazy-max/diun.git
synced 2025-04-28 04:32:25 +00:00
Skip analysis on locally built image
This commit is contained in:
parent
7a8b4677fc
commit
01cb602ed2
4 changed files with 42 additions and 23 deletions
|
@ -37,6 +37,14 @@ func (c *Client) listContainerImage(id string, elt model.PrdDocker) []model.Imag
|
|||
|
||||
var list []model.Image
|
||||
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)
|
||||
if err != nil {
|
||||
sublog.Error().Err(err).Msgf("Cannot get image from container %s", ctn.ID)
|
||||
|
|
|
@ -30,6 +30,14 @@ func (c *Client) listServiceImage(id string, elt model.PrdSwarm) []model.Image {
|
|||
|
||||
var list []model.Image
|
||||
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)
|
||||
if err != nil {
|
||||
sublog.Error().Err(err).Msgf("Cannot get image from service %s", svc.ID)
|
||||
|
|
|
@ -1,28 +1,10 @@
|
|||
package docker
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"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)
|
||||
// IsLocalImage checks if the image has been built locally
|
||||
func (c *Client) IsLocalImage(image string) (bool, error) {
|
||||
raw, _, err := c.API.ImageInspectWithRaw(c.ctx, image)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid image name %s: %v", imageStr, err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
img, err := ref.NewImage(ctx, c.sysCtx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return img, nil
|
||||
return len(raw.RepoDigests) == 0, nil
|
||||
}
|
||||
|
|
|
@ -2,8 +2,11 @@ package docker
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/image/docker"
|
||||
"github.com/containers/image/types"
|
||||
)
|
||||
|
||||
|
@ -56,3 +59,21 @@ func (c *RegistryClient) timeoutContext() (context.Context, context.CancelFunc)
|
|||
}
|
||||
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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue