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:
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
|
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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue