fix local diggest tag check
This commit is contained in:
parent
8a695bec95
commit
23e78f2afe
1 changed files with 24 additions and 17 deletions
41
go/main.go
41
go/main.go
|
@ -66,6 +66,13 @@ func extractDigest(s string) string {
|
|||
return s
|
||||
}
|
||||
|
||||
func normalizeImageTag(tag string) string {
|
||||
if !strings.Contains(tag, ":") {
|
||||
return tag + ":latest"
|
||||
}
|
||||
return tag
|
||||
}
|
||||
|
||||
func checkImageUpdates() {
|
||||
ctx := context.Background()
|
||||
cli, err := client.NewClientWithOpts(client.FromEnv)
|
||||
|
@ -77,7 +84,6 @@ func checkImageUpdates() {
|
|||
|
||||
rc := regclient.New()
|
||||
|
||||
// Nur laufende Container abrufen
|
||||
containers, err := cli.ContainerList(ctx, container.ListOptions{All: false})
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim ContainerList: %v", err)
|
||||
|
@ -90,25 +96,28 @@ func checkImageUpdates() {
|
|||
return
|
||||
}
|
||||
|
||||
// RepoTag → Digest map
|
||||
imageTagToDigest := make(map[string]string)
|
||||
for _, img := range images {
|
||||
for _, tag := range img.RepoTags {
|
||||
normalizedTag := normalizeImageTag(tag)
|
||||
if len(img.RepoDigests) > 0 {
|
||||
imageTagToDigest[tag] = extractDigest(img.RepoDigests[0])
|
||||
imageTagToDigest[normalizedTag] = extractDigest(img.RepoDigests[0])
|
||||
} else {
|
||||
imageTagToDigest[tag] = img.ID
|
||||
imageTagToDigest[normalizedTag] = img.ID
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for tag, digest := range imageTagToDigest {
|
||||
log.Printf("imageTagToDigest: %s -> %s\n", tag, digest)
|
||||
// Debug-Ausgabe aller bekannten imageTagToDigest
|
||||
fmt.Println("DEBUG: Alle bekannten imageTagToDigest:")
|
||||
for k, v := range imageTagToDigest {
|
||||
fmt.Printf(" %s -> %s\n", k, v)
|
||||
}
|
||||
|
||||
results := make([]ImageStatus, 0)
|
||||
for _, ctr := range containers {
|
||||
tag := ctr.Image
|
||||
rawTag := ctr.Image
|
||||
tag := normalizeImageTag(rawTag)
|
||||
|
||||
containerName := "unknown"
|
||||
if len(ctr.Names) > 0 {
|
||||
containerName = ctr.Names[0]
|
||||
|
@ -145,22 +154,21 @@ func checkImageUpdates() {
|
|||
containerName, tag, localDigest, remoteDigest)
|
||||
}
|
||||
|
||||
labelImg, labelTag := tag, "latest"
|
||||
imageName, imageTag := tag, "latest"
|
||||
if cp := strings.Split(tag, ":"); len(cp) == 2 {
|
||||
labelImg, labelTag = cp[0], cp[1]
|
||||
imageName, imageTag = cp[0], cp[1]
|
||||
}
|
||||
|
||||
results = append(results, ImageStatus{
|
||||
ContainerName: containerName,
|
||||
Image: labelImg,
|
||||
Tag: labelTag,
|
||||
Image: imageName,
|
||||
Tag: imageTag,
|
||||
UpdateAvailable: update,
|
||||
LocalDigest: localDigest,
|
||||
RemoteDigest: remoteDigest,
|
||||
})
|
||||
}
|
||||
|
||||
// Speichern in Cache
|
||||
cache.Lock()
|
||||
cache.Data = results
|
||||
cache.LastCheck = time.Now()
|
||||
|
@ -175,7 +183,7 @@ func newImageUpdateCollector() *imageUpdateCollector {
|
|||
return &imageUpdateCollector{
|
||||
metric: prometheus.NewDesc(
|
||||
"docker_image_update_available",
|
||||
"Ob Update für das lokale Docker-Image eines laufenden Containers verfügbar ist (1 = Update, 0 = aktuell)",
|
||||
"Ob ein Update für das verwendete Image eines laufenden Containers verfügbar ist (1 = Update)",
|
||||
[]string{"container_name", "image", "tag"},
|
||||
nil,
|
||||
),
|
||||
|
@ -198,16 +206,15 @@ func (c *imageUpdateCollector) Collect(ch chan<- prometheus.Metric) {
|
|||
}
|
||||
|
||||
func main() {
|
||||
log.Printf("🚀 Docker Image Update Exporter gestartet (Intervall = %v)", interval)
|
||||
log.Printf("🚀 Docker Image Update Exporter gestartet – Intervall: %v", interval)
|
||||
|
||||
// Hintergrundprozess zum Aktualisieren des Caches
|
||||
go func() {
|
||||
for {
|
||||
checkImageUpdates()
|
||||
time.Sleep(interval)
|
||||
}
|
||||
}()
|
||||
checkImageUpdates() // initial
|
||||
checkImageUpdates()
|
||||
|
||||
exporter := newImageUpdateCollector()
|
||||
prometheus.MustRegister(exporter)
|
||||
|
|
Loading…
Add table
Reference in a new issue