From 736dc0ef10daa30e9267128062b66862f37a3a4d Mon Sep 17 00:00:00 2001 From: Youhwan Seol Date: Tue, 21 Feb 2023 14:01:05 +0900 Subject: [PATCH] Implementation of IPS delete/update flow Change-Id: Ifbebb860c12ad9a77a33b2b3302c7f652c0d1abe Signed-off-by: Youhwan Seol --- pkg/api/rest_server.go | 4 +-- pkg/api/v1/deployment/deployment.go | 46 +++++++++++++++++++++++++++++ pkg/client/kserve/client.go | 49 +++++++++++++++++++++++++++++++ pkg/controller/v1/adapter/controller.go | 51 +++++++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+), 2 deletions(-) diff --git a/pkg/api/rest_server.go b/pkg/api/rest_server.go index 51b6de1..6810d9d 100644 --- a/pkg/api/rest_server.go +++ b/pkg/api/rest_server.go @@ -41,8 +41,8 @@ func setupRouter() (router *gin.Engine) { deployment := v1.Group(url.IPS()) { deployment.POST("", deploymentExecutor.Deploy) - // deployment.PUT - // deployment.DELETE + deployment.DELETE("", deploymentExecutor.Delete) + deployment.PUT("", deploymentExecutor.Update) } healthcheck := v1.Group(url.Healthcheck()) diff --git a/pkg/api/v1/deployment/deployment.go b/pkg/api/v1/deployment/deployment.go index 68ff9a2..94d9ac2 100644 --- a/pkg/api/v1/deployment/deployment.go +++ b/pkg/api/v1/deployment/deployment.go @@ -32,6 +32,8 @@ import ( type Command interface { Deploy(c *gin.Context) + Delete(c *gin.Context) + Update(c *gin.Context) } type Executor struct { @@ -67,3 +69,47 @@ func (Executor) Deploy(c *gin.Context) { } utils.WriteSuccess(c.Writer, http.StatusCreated, nil) } + +func (Executor) Delete(c *gin.Context) { + logger.Logging(logger.DEBUG, "IN") + defer logger.Logging(logger.DEBUG, "OUT") + + name := c.Query("name") + if name == "" { + utils.WriteError(c.Writer, errors.InvalidIPSName{Message: "Empty Query"}) + return + } + + err := ipsAdapter.Delete(name) + if err != nil { + utils.WriteError(c.Writer, err) + return + } + + utils.WriteSuccess(c.Writer, http.StatusNoContent, nil) +} + +func (Executor) Update(c *gin.Context) { + logger.Logging(logger.DEBUG, "IN") + defer logger.Logging(logger.DEBUG, "OUT") + + name := c.Query("name") + if name == "" { + utils.WriteError(c.Writer, errors.InvalidIPSName{Message: "Empty Query"}) + return + } + + version := c.Query("version") + if version == "" { + utils.WriteError(c.Writer, errors.InvalidIPSName{Message: "Empty Query"}) + return + } + + _, err := ipsAdapter.Update(name, version) + if err != nil { + utils.WriteError(c.Writer, err) + return + } + + utils.WriteSuccess(c.Writer, http.StatusCreated, nil) +} diff --git a/pkg/client/kserve/client.go b/pkg/client/kserve/client.go index 4d52d9f..c485fa1 100644 --- a/pkg/client/kserve/client.go +++ b/pkg/client/kserve/client.go @@ -23,6 +23,7 @@ import ( api_v1beta1 "github.com/kserve/kserve/pkg/apis/serving/v1beta1" "github.com/kserve/kserve/pkg/client/clientset/versioned" client_v1beta1 "github.com/kserve/kserve/pkg/client/clientset/versioned/typed/serving/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/clientcmd" "gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/commons/errors" @@ -39,6 +40,9 @@ var ifsvGetter func(string) (client_v1beta1.InferenceServiceInterface, error) type Command interface { Init(kubeconfigPath string) error Create(values types.Values) (string, error) + Delete(name string) error + Get(name string) (*api_v1beta1.InferenceService, error) + Update(values types.Values) (string, error) } type Client struct { @@ -102,3 +106,48 @@ func (c *Client) Create(values types.Values) (revision string, err error) { } return } + +func (c *Client) Delete(name string) (err error) { + logger.Logging(logger.DEBUG, "IN") + defer logger.Logging(logger.DEBUG, "OUT") + + err = c.api.Delete(name, &v1.DeleteOptions{}) + if err != nil { + logger.Logging(logger.ERROR, err.Error()) + err = errors.NotFoundIPS{ + Message: err.Error(), + } + return + } + return +} + +func (c *Client) Get(name string) (ifsv *api_v1beta1.InferenceService, err error) { + logger.Logging(logger.DEBUG, "IN") + defer logger.Logging(logger.DEBUG, "OUT") + + ifsv, err = c.api.Get(name, v1.GetOptions{}) + if err != nil { + logger.Logging(logger.ERROR, err.Error()) + err = errors.NotFoundIPS{Message: err.Error()} + return + } + return +} + +func (c *Client) Update(values types.Values) (revision string, err error) { + logger.Logging(logger.DEBUG, "IN") + defer logger.Logging(logger.DEBUG, "OUT") + + info := convertValuesToInferenceService(values) + if err != nil { + return + } + + _, err = c.api.Update(&info) + if err != nil { + logger.Logging(logger.ERROR, err.Error()) + err = errors.NotFoundIPS{Message: err.Error()} + } + return +} diff --git a/pkg/controller/v1/adapter/controller.go b/pkg/controller/v1/adapter/controller.go index 1918763..0587c8a 100644 --- a/pkg/controller/v1/adapter/controller.go +++ b/pkg/controller/v1/adapter/controller.go @@ -24,11 +24,14 @@ import ( "gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/client/kserve" "gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/client/onboard" + "gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/commons/errors" "gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/commons/logger" ) type Command interface { Deploy(name string, version string) (string, error) + Delete(name string) error + Update(name string, version string) (string, error) } type Executor struct { @@ -79,3 +82,51 @@ func (Executor) Deploy(name string, version string) (revision string, err error) } return } + +func (Executor) Delete(name string) (err error) { + logger.Logging(logger.DEBUG, "IN") + defer logger.Logging(logger.DEBUG, "OUT") + + err = onboardClient.Get(name) + if err != nil { + err = errors.InvalidIPSName{ + Message: err.Error(), + } + return + } + + err = kserveClient.Delete(name) + if err != nil { + return + } + return +} + +func (Executor) Update(name string, version string) (revision string, err error) { + logger.Logging(logger.DEBUG, "IN") + defer logger.Logging(logger.DEBUG, "OUT") + + path, err := onboardClient.Download(name, version) + if err != nil { + return + } + defer removeFunc(path) + + values, err := valueParse(path) + if err != nil { + logger.Logging(logger.ERROR, err.Error()) + return + } + + ifsv, err := kserveClient.Get(name) + if err != nil { + return + } + values.ResourceVersion = ifsv.ResourceVersion + + revision, err = kserveClient.Update(values) + if err != nil { + return + } + return +} -- 2.16.6