Implement MinIO as cloud storage for RESTAPI agent
[icn.git] / cmd / bpa-restapi-agent / api / api.go
1 // api/api_images.go
2
3
4 package api
5
6 import (
7         "log"
8
9         image "bpa-restapi-agent/internal/app"
10         minio "bpa-restapi-agent/internal/storage"
11
12         "github.com/gorilla/mux"
13 )
14
15 // NewRouter creates a router that registers the various urls that are supported
16 func NewRouter(binaryClient image.ImageManager,
17                                                          containerClient image.ImageManager,
18                                                          osClient image.ImageManager) *mux.Router {
19
20         router := mux.NewRouter()
21
22         minioInfo, err := minio.Initialize()
23         if err != nil {
24                 log.Println("Error while initialize minio client: %s", err)
25         }
26
27         //Setup the image uploaad api handler here
28         if binaryClient == nil {
29                 binaryClient = image.NewBinaryImageClient()
30         }
31         binaryHandler := imageHandler{client: binaryClient, minioI: minioInfo, storeName: "binary"}
32         imgRouter := router.PathPrefix("/v1").Subrouter()
33         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/binary_images", binaryHandler.createHandler).Methods("POST")
34         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/binary_images/{imgname}", binaryHandler.getHandler).Methods("GET")
35         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/binary_images/{imgname}", binaryHandler.deleteHandler).Methods("DELETE")
36         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/binary_images/{imgname}", binaryHandler.updateHandler).Methods("PUT")
37         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/binary_images/{imgname}", binaryHandler.patchHandler).Methods("PATCH")
38
39         //Setup the _image upload api handler here
40         if containerClient == nil {
41                 containerClient = image.NewContainerImageClient()
42         }
43         containerHandler := imageHandler{client: containerClient, minioI: minioInfo, storeName: "container"}
44         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/container_images", containerHandler.createHandler).Methods("POST")
45         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/container_images/{imgname}", containerHandler.getHandler).Methods("GET")
46         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/container_images/{imgname}", containerHandler.deleteHandler).Methods("DELETE")
47         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/container_images/{imgname}", containerHandler.updateHandler).Methods("PUT")
48         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/container_images/{imgname}", containerHandler.patchHandler).Methods("PATCH")
49
50         //Setup the os_image upload api handler here
51         if osClient == nil {
52                 osClient = image.NewOSImageClient()
53         }
54         osHandler := imageHandler{client: osClient, minioI: minioInfo, storeName: "operatingsystem"}
55         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/os_images", osHandler.createHandler).Methods("POST")
56         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/os_images/{imgname}", osHandler.getHandler).Methods("GET")
57         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/os_images/{imgname}", osHandler.deleteHandler).Methods("DELETE")
58         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/os_images/{imgname}", osHandler.updateHandler).Methods("PUT")
59         imgRouter.HandleFunc("/baremetalcluster/{owner}/{clustername}/os_images/{imgname}", osHandler.patchHandler).Methods("PATCH")
60
61         return router
62 }