// satisfiesPodFilter returns true if the pod satisfies the filter. // The pod, manifest, filter must not be nil. func satisfiesPodFilter(pod v1alpha.Pod, manifest schema.PodManifest, filter v1alpha.PodFilter) bool { // Filter according to the ID. if len(filter.Ids) > 0 { s := set.NewString(filter.Ids...) if !s.Has(pod.Id) { return false } } // Filter according to the state. if len(filter.States) > 0 { foundState := false for _, state := range filter.States { if pod.State == state { foundState = true break } } if !foundState { return false } } // Filter according to the app names. if len(filter.AppNames) > 0 { s := set.NewString() for _, app := range pod.Apps { s.Insert(app.Name) } if !s.HasAll(filter.AppNames...) { return false } } // Filter according to the image IDs. if len(filter.ImageIds) > 0 { s := set.NewString() for _, app := range pod.Apps { s.Insert(app.Image.Id) } if !s.HasAll(filter.ImageIds...) { return false } } // Filter according to the network names. if len(filter.NetworkNames) > 0 { s := set.NewString() for _, network := range pod.Networks { s.Insert(network.Name) } if !s.HasAll(filter.NetworkNames...) { return false } } // Filter according to the annotations. if len(filter.Annotations) > 0 { if !containsAllKeyValues(manifest.Annotations, filter.Annotations) { return false } } return true }
// satisfiesImageFilter returns true if the image satisfies the filter. // The image, manifest, filter must not be nil. func satisfiesImageFilter(image v1alpha.Image, manifest schema.ImageManifest, filter v1alpha.ImageFilter) bool { // Filter according to the IDs. if len(filter.Ids) > 0 { s := set.NewString(filter.Ids...) if !s.Has(image.Id) { return false } } // Filter according to the image name prefixes. if len(filter.Prefixes) > 0 { s := set.NewString(filter.Prefixes...) if !s.ConditionalHas(isPrefixOf, image.Name) { return false } } // Filter according to the image base name. if len(filter.BaseNames) > 0 { s := set.NewString(filter.BaseNames...) if !s.ConditionalHas(isBaseNameOf, image.Name) { return false } } // Filter according to the image keywords. if len(filter.Keywords) > 0 { s := set.NewString(filter.Keywords...) if !s.ConditionalHas(isPartOf, image.Name) { return false } } // Filter according to the imported time. if filter.ImportedAfter > 0 { if image.ImportTimestamp <= filter.ImportedAfter { return false } } if filter.ImportedBefore > 0 { if image.ImportTimestamp >= filter.ImportedBefore { return false } } // Filter according to the image labels. if len(filter.Labels) > 0 { if !containsAllKeyValues(manifest.Labels, filter.Labels) { return false } } // Filter according to the annotations. if len(filter.Annotations) > 0 { if !containsAllKeyValues(manifest.Annotations, filter.Annotations) { return false } } return true }
// satisfiesPodFilter returns true if the pod satisfies the filter. // The pod, filter must not be nil. func satisfiesPodFilter(pod v1alpha.Pod, filter v1alpha.PodFilter) bool { // Filter according to the ID. if len(filter.Ids) > 0 { s := set.NewString(filter.Ids...) if !s.Has(pod.Id) { return false } } // Filter according to the state. if len(filter.States) > 0 { foundState := false for _, state := range filter.States { if pod.State == state { foundState = true break } } if !foundState { return false } } // Filter according to the app names. if len(filter.AppNames) > 0 { s := set.NewString() for _, app := range pod.Apps { s.Insert(app.Name) } if !s.HasAll(filter.AppNames...) { return false } } // Filter according to the image IDs. if len(filter.ImageIds) > 0 { s := set.NewString() for _, app := range pod.Apps { s.Insert(app.Image.Id) } if !s.HasAll(filter.ImageIds...) { return false } } // Filter according to the network names. if len(filter.NetworkNames) > 0 { s := set.NewString() for _, network := range pod.Networks { s.Insert(network.Name) } if !s.HasAll(filter.NetworkNames...) { return false } } // Filter according to the annotations. if len(filter.Annotations) > 0 { if !containsAllKeyValues(pod.Annotations, filter.Annotations) { return false } } // Filter according to the cgroup. if len(filter.Cgroups) > 0 { s := set.NewString(filter.Cgroups...) if !s.Has(pod.Cgroup) { return false } } // Filter if pod's cgroup is a prefix of the passed in cgroup if len(filter.PodSubCgroups) > 0 { matched := false if pod.Cgroup != "" { for _, cgroup := range filter.PodSubCgroups { if strings.HasPrefix(cgroup, pod.Cgroup) { matched = true break } } } if !matched { return false } } return true }