X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=cmd%2Fbpa-restapi-agent%2Finternal%2Fapp%2Fimage.go;h=1b0021b5cd9afb000bffd2f79928cfd0f6d2a161;hb=refs%2Fchanges%2F31%2F1431%2F2;hp=a1beed80267573c770cce037336cbb917db9dc29;hpb=5d1bed68416b18efb2fa59ab6f70a15225caafa3;p=icn.git diff --git a/cmd/bpa-restapi-agent/internal/app/image.go b/cmd/bpa-restapi-agent/internal/app/image.go index a1beed8..1b0021b 100644 --- a/cmd/bpa-restapi-agent/internal/app/image.go +++ b/cmd/bpa-restapi-agent/internal/app/image.go @@ -3,6 +3,9 @@ package app import ( //"encoding/base64" "encoding/json" + "os" + "os/user" + "path" //"io/ioutil" "bpa-restapi-agent/internal/db" @@ -16,7 +19,6 @@ type Image struct { ClusterName string `json:"cluster_name"` Type string `json:"type"` ImageName string `json:"image_name"` - Config string `json:"config"` ImageOffset *int `json:"image_offset"` ImageLength int `json:"image_length"` UploadComplete *bool `json:"upload_complete"` @@ -29,8 +31,6 @@ type ImageRecordList struct { // ImageKey is the key structure that is used in the database type ImageKey struct { - // Owner string `json:"owner"` - // ClusterName string `json:"cluster_name"` ImageName string `json:"image_name"` } @@ -52,6 +52,7 @@ type ImageManager interface { Delete(imageName string) error Update(imageName string, c Image) (Image, error) GetImageRecordByName(imgname, imageName string) (map[string]string, error) + GetDirPath(imageName string) (string, string, error) } // ImageClient implements the ImageManager @@ -66,21 +67,21 @@ type ImageClient struct { // which implements the ImageManager func NewBinaryImageClient() *ImageClient { return &ImageClient{ - storeName: "binary_image", + storeName: "binary_images", tagMeta: "metadata", } } func NewContainerImageClient() *ImageClient { return &ImageClient{ - storeName: "container_image", + storeName: "container_images", tagMeta: "metadata", } } func NewOSImageClient() *ImageClient { return &ImageClient{ - storeName: "os_image", + storeName: "os_images", tagMeta: "metadata", } } @@ -90,8 +91,6 @@ func (v *ImageClient) Create(c Image) (Image, error) { //Construct composite key consisting of name key := ImageKey{ - // Owner: c.Owner, - // ClusterName: c.ClusterName, ImageName: c.ImageName, } @@ -106,9 +105,39 @@ func (v *ImageClient) Create(c Image) (Image, error) { return Image{}, pkgerrors.Wrap(err, "Creating DB Entry") } + //Create file + err = v.CreateFile(v.storeName, c) + if err != nil { + return Image{}, pkgerrors.Wrap(err, "Creating File in FS") + } + return c, nil } + +// Create file + +func (v *ImageClient) CreateFile(dirName string, c Image) error { + + filePath, dirPath, err := v.GetDirPath(c.ImageName) + if err != nil { + return pkgerrors.Wrap(err, "Get file path") + } + err = os.MkdirAll(dirPath, 0744) + if err != nil { + return pkgerrors.Wrap(err, "Make image directory") + } + file1, err := os.Create(filePath) + if err != nil { + return pkgerrors.Wrap(err, "Create image file") + } + + defer file1.Close() + + + return nil +} + // Get returns Image for corresponding to name func (v *ImageClient) Get(imageName string) (Image, error) { @@ -154,19 +183,39 @@ func (v *ImageClient) GetImageRecordByName(imgName string, return nil, pkgerrors.New("Image record " + imageRecordName + " not found") } +func (v *ImageClient) GetDirPath(imageName string) (string, string, error) { + u, err := user.Current() + if err != nil { + return "", "", pkgerrors.Wrap(err, "Current user") + } + home := u.HomeDir + dirPath := path.Join(home, "images", v.storeName) + filePath := path.Join(dirPath, imageName) + + return filePath, dirPath, err +} + // Delete the Image from database func (v *ImageClient) Delete(imageName string) error { //Construct the composite key to select the entry key := ImageKey{ - // Owner: ownerName, - // ClusterName: clusterName, ImageName: imageName, } err := db.DBconn.Delete(v.storeName, key, v.tagMeta) if err != nil { return pkgerrors.Wrap(err, "Delete Image") } + //Delete image from FS + filePath, _, err := v.GetDirPath(imageName) + if err != nil { + return pkgerrors.Wrap(err, "Get file path") + } + err = os.Remove(filePath) + if err != nil { + return pkgerrors.Wrap(err, "Delete image file") + } + return nil }