Namespace keys used by client for uncompressed Signed-off-by: Derek McGowan <derek@mcgstyle.net>
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package metadata
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/containerd/containerd/containers"
 | 
						|
	"github.com/containerd/containerd/content"
 | 
						|
	"github.com/containerd/containerd/filters"
 | 
						|
	"github.com/containerd/containerd/images"
 | 
						|
)
 | 
						|
 | 
						|
func adaptImage(o interface{}) filters.Adaptor {
 | 
						|
	obj := o.(images.Image)
 | 
						|
	return filters.AdapterFunc(func(fieldpath []string) (string, bool) {
 | 
						|
		if len(fieldpath) == 0 {
 | 
						|
			return "", false
 | 
						|
		}
 | 
						|
 | 
						|
		switch fieldpath[0] {
 | 
						|
		case "name":
 | 
						|
			return obj.Name, len(obj.Name) > 0
 | 
						|
		case "target":
 | 
						|
			if len(fieldpath) < 2 {
 | 
						|
				return "", false
 | 
						|
			}
 | 
						|
 | 
						|
			switch fieldpath[1] {
 | 
						|
			case "digest":
 | 
						|
				return obj.Target.Digest.String(), len(obj.Target.Digest) > 0
 | 
						|
			case "mediatype":
 | 
						|
				return obj.Target.MediaType, len(obj.Target.MediaType) > 0
 | 
						|
			}
 | 
						|
		case "labels":
 | 
						|
			return checkMap(fieldpath[1:], obj.Labels)
 | 
						|
			// TODO(stevvooe): Greater/Less than filters would be awesome for
 | 
						|
			// size. Let's do it!
 | 
						|
		}
 | 
						|
 | 
						|
		return "", false
 | 
						|
	})
 | 
						|
}
 | 
						|
func adaptContainer(o interface{}) filters.Adaptor {
 | 
						|
	obj := o.(containers.Container)
 | 
						|
	return filters.AdapterFunc(func(fieldpath []string) (string, bool) {
 | 
						|
		if len(fieldpath) == 0 {
 | 
						|
			return "", false
 | 
						|
		}
 | 
						|
 | 
						|
		switch fieldpath[0] {
 | 
						|
		case "id":
 | 
						|
			return obj.ID, len(obj.ID) > 0
 | 
						|
		case "runtime":
 | 
						|
			if len(fieldpath) <= 1 {
 | 
						|
				return "", false
 | 
						|
			}
 | 
						|
 | 
						|
			switch fieldpath[1] {
 | 
						|
			case "name":
 | 
						|
				return obj.Runtime.Name, len(obj.Runtime.Name) > 0
 | 
						|
			default:
 | 
						|
				return "", false
 | 
						|
			}
 | 
						|
		case "image":
 | 
						|
			return obj.Image, len(obj.Image) > 0
 | 
						|
		case "labels":
 | 
						|
			return checkMap(fieldpath[1:], obj.Labels)
 | 
						|
		}
 | 
						|
 | 
						|
		return "", false
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func adaptContentInfo(info content.Info) filters.Adaptor {
 | 
						|
	return filters.AdapterFunc(func(fieldpath []string) (string, bool) {
 | 
						|
		if len(fieldpath) == 0 {
 | 
						|
			return "", false
 | 
						|
		}
 | 
						|
 | 
						|
		switch fieldpath[0] {
 | 
						|
		case "digest":
 | 
						|
			return info.Digest.String(), true
 | 
						|
		case "size":
 | 
						|
			// TODO: support size based filtering
 | 
						|
		case "labels":
 | 
						|
			return checkMap(fieldpath[1:], info.Labels)
 | 
						|
		}
 | 
						|
 | 
						|
		return "", false
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func adaptContentStatus(status content.Status) filters.Adaptor {
 | 
						|
	return filters.AdapterFunc(func(fieldpath []string) (string, bool) {
 | 
						|
		if len(fieldpath) == 0 {
 | 
						|
			return "", false
 | 
						|
		}
 | 
						|
		switch fieldpath[0] {
 | 
						|
		case "ref":
 | 
						|
			return status.Ref, true
 | 
						|
		}
 | 
						|
 | 
						|
		return "", false
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func checkMap(fieldpath []string, m map[string]string) (string, bool) {
 | 
						|
	if len(m) == 0 {
 | 
						|
		return "", false
 | 
						|
	}
 | 
						|
 | 
						|
	value, ok := m[strings.Join(fieldpath, ".")]
 | 
						|
	return value, ok
 | 
						|
}
 |