mirror of
https://github.com/crazy-max/diun.git
synced 2025-12-21 21:33:22 +01:00
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package provider
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/crazy-max/diun/v4/internal/model"
|
|
)
|
|
|
|
// ValidateContainerImage returns a standard image through Docker labels
|
|
func ValidateContainerImage(image string, labels map[string]string, watchByDef bool) (img model.Image, err error) {
|
|
if i := strings.Index(image, "@sha256:"); i > 0 {
|
|
image = image[:i]
|
|
}
|
|
img = model.Image{
|
|
Name: image,
|
|
}
|
|
|
|
if enableStr, ok := labels["diun.enable"]; ok {
|
|
enable, err := strconv.ParseBool(enableStr)
|
|
if err != nil {
|
|
return img, fmt.Errorf("cannot parse %s value of label diun.enable", enableStr)
|
|
}
|
|
if !enable {
|
|
return model.Image{}, nil
|
|
}
|
|
} else if !watchByDef {
|
|
return model.Image{}, nil
|
|
}
|
|
|
|
for key, value := range labels {
|
|
switch key {
|
|
case "diun.regopt":
|
|
img.RegOpt = value
|
|
case "diun.watch_repo":
|
|
if img.WatchRepo, err = strconv.ParseBool(value); err != nil {
|
|
return img, fmt.Errorf("cannot parse %s value of label %s", value, key)
|
|
}
|
|
case "diun.max_tags":
|
|
if img.MaxTags, err = strconv.Atoi(value); err != nil {
|
|
return img, fmt.Errorf("cannot parse %s value of label %s", value, key)
|
|
}
|
|
case "diun.include_tags":
|
|
img.IncludeTags = strings.Split(value, ";")
|
|
case "diun.exclude_tags":
|
|
img.ExcludeTags = strings.Split(value, ";")
|
|
case "diun.hub_tpl":
|
|
img.HubTpl = value
|
|
}
|
|
}
|
|
|
|
return img, nil
|
|
}
|