Add 'kpod images' and 'kpod rmi' commands

'kpod images' lists all images on a system.  'kpod rmi' removes
one or more images from a system.  The images will not be removed
if they are associated with a running container, unless the -f
option is used

Signed-off-by: Ryan Cole <rcyoalne@gmail.com>
This commit is contained in:
Ryan Cole 2017-06-16 13:24:00 -04:00
parent 7fb772b7d1
commit a040f20a76
11 changed files with 1708 additions and 8 deletions

View file

@ -1,7 +1,11 @@
package main
import (
"encoding/json"
"fmt"
"io"
"strings"
"time"
cp "github.com/containers/image/copy"
is "github.com/containers/image/storage"
@ -11,10 +15,21 @@ import (
"github.com/urfave/cli"
)
type imageMetadata struct {
Tag string `json:"tag"`
CreatedTime time.Time `json:"created-time"`
ID string `json:"id"`
Blobs []types.BlobInfo `json:"blob-list"`
Layers map[string][]string `json:"layers"`
SignatureSizes []string `json:"signature-sizes"`
}
func getStore(c *cli.Context) (storage.Store, error) {
options := storage.DefaultStoreOptions
if c.GlobalIsSet("root") || c.GlobalIsSet("runroot") {
if c.GlobalIsSet("root") {
options.GraphRoot = c.GlobalString("root")
}
if c.GlobalIsSet("runroot") {
options.RunRoot = c.GlobalString("runroot")
}
@ -67,3 +82,34 @@ func getSystemContext(signaturePolicyPath string) *types.SystemContext {
}
return sc
}
func parseMetadata(image storage.Image) (imageMetadata, error) {
var im imageMetadata
dec := json.NewDecoder(strings.NewReader(image.Metadata))
if err := dec.Decode(&im); err != nil {
return imageMetadata{}, err
}
return im, nil
}
func getSize(image storage.Image, store storage.Store) (int64, error) {
is.Transport.SetStore(store)
storeRef, err := is.Transport.ParseStoreReference(store, "@"+image.ID)
if err != nil {
fmt.Println(err)
return -1, err
}
img, err := storeRef.NewImage(nil)
if err != nil {
fmt.Println("Error with NewImage")
return -1, err
}
imgSize, err := img.Size()
if err != nil {
fmt.Println("Error getting size")
return -1, err
}
return imgSize, nil
}