Skip to content
This repository has been archived by the owner on May 9, 2019. It is now read-only.

Commit

Permalink
Watch for update image stream events (#29)
Browse files Browse the repository at this point in the history
  • Loading branch information
msenmurugan authored and jayunit100 committed Jan 29, 2018
1 parent db9d92f commit ee5e876
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 3 deletions.
13 changes: 13 additions & 0 deletions arbiter/pkg/arbiter/arbiter.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,19 @@ func (arb *Arbiter) addImage(ID string, Reference string) {
}
}

func (arb *Arbiter) RemoveImage(ID string, Reference string) {

arb.Lock()
defer arb.Unlock()

_, ok := arb.images[Reference]
if ok {
delete(arb.images, Reference)
log.Printf("Removed %s from map\n", Reference)
}

}

func (arb *Arbiter) queueImagesForNotification() {
for _, image := range arb.images {
log.Printf("Queuing image %s for notification check\n", image.digest)
Expand Down
46 changes: 43 additions & 3 deletions arbiter/pkg/arbiter/watcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ func (w *Watcher) Run() {
AddFunc: func(obj interface{}) {
w.ImageAdded(obj.(*imageapi.ImageStream))
},
UpdateFunc: func(oldobj, newobj interface{}) {
w.ImageUpdated(newobj.(*imageapi.ImageStream))
},
DeleteFunc: func(obj interface{}) {
w.ImageDeleted(obj.(*imageapi.ImageStream))
},
Expand Down Expand Up @@ -133,6 +136,35 @@ func (w *Watcher) ImageAdded(is *imageapi.ImageStream) {
}
}

func (w *Watcher) ImageUpdated(is *imageapi.ImageStream) {

tags := is.Status.Tags
if tags == nil {
log.Println("Image updated, but no tags")
return
}

digest := is.Spec.DockerImageRepository

log.Printf("ImageStream updated: %s\n", digest)

for _, events := range tags {
tagEvents := events.Items
if len(tagEvents) == 0 {
log.Printf("ImageStream %s has no associated image\n", digest)
return
}
ref := tagEvents[0].Image
image, err := w.openshiftClient.Images().Get(ref, metav1.GetOptions{})
if err != nil {
log.Printf("Error seeking updated image %s@%s: %s\n", digest, ref, err)
continue
}

w.arbiter.addImage(image.GetName(), image.DockerImageReference)
}
}

func (w *Watcher) ImageDeleted(is *imageapi.ImageStream) {

tags := is.Status.Tags
Expand All @@ -141,9 +173,17 @@ func (w *Watcher) ImageDeleted(is *imageapi.ImageStream) {
return
}

for tag, events := range tags {
digest := events.Items[0].Image
log.Printf("Image %s deleted with digest %s\n", tag, digest)
digest := is.Spec.DockerImageRepository

for _, events := range tags {
ref := events.Items[0].Image
image, err := w.openshiftClient.Images().Get(ref, metav1.GetOptions{})
if err != nil {
log.Printf("Error seeking deleted image %s@%s: %s\n", digest, ref, err)
continue
}

w.arbiter.RemoveImage(image.GetName(), image.DockerImageReference)
}
}

Expand Down

0 comments on commit ee5e876

Please sign in to comment.