Bladeren bron

Merge pull request #10675 from brahmaroutu/events_filterbyimage_10645

Allow use of just image name without the tag
Phil Estes 10 jaren geleden
bovenliggende
commit
c94eb28af0
2 gewijzigde bestanden met toevoegingen van 51 en 0 verwijderingen
  1. 7 0
      events/events.go
  2. 44 0
      integration-cli/docker_cli_events_test.go

+ 7 - 0
events/events.go

@@ -2,6 +2,7 @@ package events
 
 import (
 	"encoding/json"
+	"strings"
 	"sync"
 	"time"
 
@@ -112,6 +113,12 @@ func writeEvent(job *engine.Job, event *utils.JSONMessage, eventFilters filters.
 			if v == field {
 				return false
 			}
+			if strings.Contains(field, ":") {
+				image := strings.Split(field, ":")
+				if image[0] == v {
+					return false
+				}
+			}
 		}
 		return true
 	}

+ 44 - 0
integration-cli/docker_cli_events_test.go

@@ -248,3 +248,47 @@ func TestEventsFilters(t *testing.T) {
 
 	logDone("events - filters")
 }
+
+func TestEventsFilterImageName(t *testing.T) {
+	since := time.Now().Unix()
+	defer deleteAllContainers()
+
+	out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "run", "--name", "container_1", "-d", "busybox", "true"))
+	if err != nil {
+		t.Fatal(out, err)
+	}
+	container1 := stripTrailingCharacters(out)
+	out, _, err = runCommandWithOutput(exec.Command(dockerBinary, "run", "--name", "container_2", "-d", "busybox", "true"))
+	if err != nil {
+		t.Fatal(out, err)
+	}
+	container2 := stripTrailingCharacters(out)
+
+	for _, s := range []string{"busybox", "busybox:latest"} {
+		eventsCmd := exec.Command(dockerBinary, "events", fmt.Sprintf("--since=%d", since), fmt.Sprintf("--until=%d", time.Now().Unix()), "--filter", fmt.Sprintf("image=%s", s))
+		out, _, err := runCommandWithOutput(eventsCmd)
+		if err != nil {
+			t.Fatalf("Failed to get events, error: %s(%s)", err, out)
+		}
+		events := strings.Split(out, "\n")
+		events = events[:len(events)-1]
+		if len(events) == 0 {
+			t.Fatalf("Expected events but found none for the image busybox:latest")
+		}
+		count1 := 0
+		count2 := 0
+		for _, e := range events {
+			if strings.Contains(e, container1) {
+				count1++
+			} else if strings.Contains(e, container2) {
+				count2++
+			}
+		}
+		if count1 == 0 || count2 == 0 {
+			t.Fatalf("Expected events from each container but got %d from %s and %d from %s", count1, container1, count2, container2)
+		}
+	}
+
+	logDone("events - filters using image")
+
+}