// V1 returns the v1 url as a type of string.
func V1() string { return "/v1" }
-// Onboard returns the onboard url as a type of string.
-func Onboard() string { return "/onboard/api/v1/charts" }
-
// IPS returns the ips url as a type of string.
func IPS() string { return "/ips" }
// Preparation returns the package url as s type of string.
func Preparation() string { return "/preparation" }
+
+// Download returns the chart download url as a type of string.
+func Download() string { return "/api/v1/charts/xApp/download/{xApp_name}/ver/{version}" }
+
+// Onboard returns the chart Onboard url as a type of string.
+func Onboard() string { return "/api/v1/custom-onboard" }
return
}
- chartPath, err := ipsAdapter.Preperation(configFile, schemaFile)
+ _, err := ipsAdapter.Preperation(configFile, schemaFile)
if err != nil {
utils.WriteError(c.Writer, err)
return
}
- utils.WriteSuccess(c.Writer, http.StatusCreated, []byte(chartPath))
+
+ utils.WriteSuccess(c.Writer, http.StatusCreated, nil)
}
+++ /dev/null
-/*
-==================================================================================
-
-Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==================================================================================
-*/
-
-package onboard
-
-import (
- "os"
-
- "gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/commons/logger"
-)
-
-//go:generate mockgen -source=client.go -destination=./mock/mock_client.go -package=mock
-type Command interface {
- Get(name string) error
- Download(name string, version string) (string, error)
-}
-
-type Executor struct {
- Command
-}
-
-var (
- onboarderIP string
- onboarderPort string
-)
-
-func init() {
- onboarderIP = os.Getenv("ONBOARDER_IP")
- onboarderPort = os.Getenv("ONBOARDER_PORT")
-}
-
-func (Executor) Get(name string) (err error) {
- logger.Logging(logger.DEBUG, "IN")
- defer logger.Logging(logger.DEBUG, "OUT")
-
- targetURL := buildURL(name, "")
-
- _, err = requestToOnboard(targetURL)
- if err != nil {
- return
- }
- return
-}
-
-func (Executor) Download(name string, version string) (path string, err error) {
- logger.Logging(logger.DEBUG, "IN")
- defer logger.Logging(logger.DEBUG, "OUT")
-
- targetURL := buildURL(name, version)
-
- path, err = fetchHelmPackageFromOnboard(targetURL)
- if err != nil {
- return
- }
- return
-}
--- /dev/null
+/*
+==================================================================================
+
+Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+==================================================================================
+*/
+
+package ricdms
+
+import (
+ "net/http"
+ "os"
+ "strconv"
+
+ "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"
+)
+
+//go:generate mockgen -source=client.go -destination=./mock/mock_client.go -package=mock
+type Command interface {
+ OnboardHelmChart(chartPath string) error
+ FetchHelmChart(name string) error
+ FetchHelmChartAndUntar(name string, version string) (string, error)
+}
+
+type Executor struct {
+ Command
+}
+
+var (
+ ricdmsIP string
+ ricdmsPort string
+)
+
+func init() {
+ ricdmsIP = os.Getenv("RIC_DMS_IP")
+ ricdmsPort = os.Getenv("RIC_DMS_PORT")
+}
+
+func (Executor) OnboardHelmChart(chartPath string) error {
+ logger.Logging(logger.DEBUG, "IN")
+ defer logger.Logging(logger.DEBUG, "OUT")
+
+ targetURL := buildURLforChartOnboard()
+
+ resp, err := onboardChartToRicdms(targetURL, chartPath)
+ if err != nil {
+ logger.Logging(logger.ERROR, err.Error())
+ }
+
+ if resp.StatusCode != http.StatusOK {
+ err = errors.InternalServerError{
+ Message: "ricdms return error, status code : " + strconv.Itoa(int(resp.StatusCode)),
+ }
+ logger.Logging(logger.ERROR, err.Error())
+ return err
+ }
+ return err
+}
+
+func (Executor) FetchHelmChart(name string) (err error) {
+ logger.Logging(logger.DEBUG, "IN")
+ defer logger.Logging(logger.DEBUG, "OUT")
+
+ targetURL, err := buildURLforChartFetch(name, "")
+ if err != nil {
+ return
+ }
+
+ _, err = getChartFromRicdms(targetURL)
+ if err != nil {
+ return
+ }
+ return
+}
+
+func (Executor) FetchHelmChartAndUntar(name string, version string) (path string, err error) {
+ logger.Logging(logger.DEBUG, "IN")
+ defer logger.Logging(logger.DEBUG, "OUT")
+
+ targetURL, err := buildURLforChartFetch(name, version)
+ if err != nil {
+ return
+ }
+
+ resp, err := getChartFromRicdms(targetURL)
+ if err != nil {
+ return
+ }
+ defer resp.Body.Close()
+
+ path = generateRandPath(pathLength)
+
+ err = Untar(path, resp.Body)
+
+ if err != nil {
+ return
+ }
+ return
+}
==================================================================================
*/
-package onboard
+package ricdms
import (
"archive/tar"
+ "bytes"
"compress/gzip"
"io"
"math/rand"
+ "mime/multipart"
"net/http"
netUrl "net/url"
"os"
randSrc = rand.NewSource(time.Now().UnixNano())
}
-func fetchHelmPackageFromOnboard(url string) (path string, err error) {
+func buildURLforChartOnboard() string {
logger.Logging(logger.DEBUG, "IN")
defer logger.Logging(logger.DEBUG, "OUT")
- resp, err := requestToOnboard(url)
- if err != nil {
- return
+ targetURL := netUrl.URL{
+ Scheme: "http",
+ Host: ricdmsIP + ":" + ricdmsPort,
+ Path: url.Onboard(),
}
- defer resp.Body.Close()
-
- path = generateRandPath(pathLength)
- err = Untar(path, resp.Body)
- if err != nil {
- return
- }
- return
+ return targetURL.String()
}
-func buildURL(name string, version string) string {
+func buildURLforChartFetch(name string, version string) (string, error) {
logger.Logging(logger.DEBUG, "IN")
defer logger.Logging(logger.DEBUG, "OUT")
targetURL := netUrl.URL{
Scheme: "http",
- Host: onboarderIP + ":" + onboarderPort,
- Path: url.Onboard(),
+ Host: ricdmsIP + ":" + ricdmsPort,
+ Path: url.Download(),
}
if name != "" {
- targetURL.Path += url.IPSName() + "/" + name
-
- if version != "" {
- targetURL.Path += url.Version() + "/" + version
+ targetURL.Path = strings.Replace(targetURL.Path, "{xApp_name}", name, -1)
+ } else {
+ return "", errors.InternalServerError{Message: "ifsv name is not given"}
+ }
- }
+ if version != "" {
+ targetURL.Path = strings.Replace(targetURL.Path, "{version}", version, -1)
+ } else {
+ return "", errors.InternalServerError{Message: "ifsv version is not given"}
}
- return targetURL.String()
+ return targetURL.String(), nil
}
-func requestToOnboard(url string) (*http.Response, error) {
+func getChartFromRicdms(url string) (*http.Response, error) {
logger.Logging(logger.DEBUG, "IN")
defer logger.Logging(logger.DEBUG, "OUT")
if resp.StatusCode != http.StatusOK {
err = errors.InternalServerError{
- Message: "onboard return error, status code : " + strconv.Itoa(int(resp.StatusCode)),
+ Message: "ricdms return error, status code : " + strconv.Itoa(int(resp.StatusCode)),
}
logger.Logging(logger.ERROR, err.Error())
return nil, err
return sb.String()
}
+
+func onboardChartToRicdms(targetURL string, chartPath string) (*http.Response, error) {
+ logger.Logging(logger.DEBUG, "IN")
+ defer logger.Logging(logger.DEBUG, "OUT")
+
+ chartFile, err := os.Open(chartPath)
+ if err != nil {
+ logger.Logging(logger.DEBUG, err.Error())
+ }
+ defer chartFile.Close()
+
+ body := &bytes.Buffer{}
+ writer := multipart.NewWriter(body)
+ fw, _ := writer.CreateFormFile("helmpkg", chartFile.Name())
+ io.Copy(fw, chartFile)
+ writer.Close()
+ req, err := http.NewRequest("POST", targetURL, body)
+ if err != nil {
+ return nil, err
+ }
+ req.Header.Add("Content-Type", writer.FormDataContentType())
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+
+ if err != nil {
+ return resp, errors.InternalServerError{Message: err.Error()}
+ }
+
+ if resp.StatusCode != http.StatusOK {
+ err = errors.InternalServerError{
+ Message: "ricdms return error, status code : " + strconv.Itoa(int(resp.StatusCode)),
+ }
+ logger.Logging(logger.ERROR, err.Error())
+ return resp, err
+ }
+ return resp, err
+}
"os"
"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/client/ricdms"
"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"
"gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/commons/types"
}
var kserveClient kserve.Command
-var onboardClient onboard.Command
+var ricdmsClient ricdms.Command
var removeFunc func(string) error
os.Exit(8)
}
- onboardClient = onboard.Executor{}
+ ricdmsClient = ricdms.Executor{}
removeFunc = func(path string) (err error) {
err = os.RemoveAll(path)
logger.Logging(logger.DEBUG, "IN")
defer logger.Logging(logger.DEBUG, "OUT")
- path, err := onboardClient.Download(name, version)
+ path, err := ricdmsClient.FetchHelmChartAndUntar(name, version)
if err != nil {
return
}
logger.Logging(logger.DEBUG, "IN")
defer logger.Logging(logger.DEBUG, "OUT")
- err = onboardClient.Get(name)
+ err = ricdmsClient.FetchHelmChart(name)
if err != nil {
err = errors.InvalidIPSName{
Message: err.Error(),
logger.Logging(logger.DEBUG, "IN")
defer logger.Logging(logger.DEBUG, "OUT")
- path, err := onboardClient.Download(name, version)
+ path, err := ricdmsClient.FetchHelmChartAndUntar(name, version)
if err != nil {
return
}
chartBuilder := helm.NewChartBuilder(configFile, schemaFile)
chartPath, err = chartBuilder.PackageChart()
+ if err != nil {
+ logger.Logging(logger.ERROR, err.Error())
+ return
+ }
+ ricdmsClient.OnboardHelmChart(chartPath)
if err != nil {
return
}
"github.com/kserve/kserve/pkg/apis/serving/v1beta1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ kservemock "gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/client/kserve/mock"
+ ricdmsmock "gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/client/ricdms/mock"
"gerrit.o-ran-sc.org/r/aiml-fw/aihp/ips/kserve-adapter/pkg/commons/errors"
)
ctrl := gomock.NewController(t)
defer ctrl.Finish()
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
workspace, _ := os.Getwd()
gomock.InOrder(
- onboardMockobj.EXPECT().Download(testName, testVersion).Return(workspace+invalidYAMLPath, nil),
+ ricdmsmockobj.EXPECT().FetchHelmChartAndUntar(testName, testVersion).Return(workspace+invalidYAMLPath, nil),
)
// pass mockObj to a real object.
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
ctrl := gomock.NewController(t)
defer ctrl.Finish()
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
workspace, _ := os.Getwd()
gomock.InOrder(
- onboardMockobj.EXPECT().Download(testName, testVersion).Return(workspace+invalidPath, nil),
+ ricdmsmockobj.EXPECT().FetchHelmChartAndUntar(testName, testVersion).Return(workspace+invalidPath, nil),
)
// pass mockObj to a real object.
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
defer ctrl.Finish()
kserveMockobj := kservemock.NewMockCommand(ctrl)
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
workspace, _ := os.Getwd()
gomock.InOrder(
- onboardMockobj.EXPECT().Download(testName, testVersion).Return(workspace+samplePath, nil),
+ ricdmsmockobj.EXPECT().FetchHelmChartAndUntar(testName, testVersion).Return(workspace+samplePath, nil),
kserveMockobj.EXPECT().Create(gomock.Any()),
)
// pass mockObj to a real object.
kserveClient = kserveMockobj
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
ctrl := gomock.NewController(t)
defer ctrl.Finish()
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
gomock.InOrder(
- onboardMockobj.EXPECT().Download(testName, testVersion).Return("", errors.InternalServerError{}),
+ ricdmsmockobj.EXPECT().FetchHelmChartAndUntar(testName, testVersion).Return("", errors.InternalServerError{}),
)
// pass mockObj to a real object.
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
defer ctrl.Finish()
kserveMockobj := kservemock.NewMockCommand(ctrl)
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
workspace, _ := os.Getwd()
gomock.InOrder(
- onboardMockobj.EXPECT().Download(testName, testVersion).Return(workspace+samplePath, nil),
+ ricdmsmockobj.EXPECT().FetchHelmChartAndUntar(testName, testVersion).Return(workspace+samplePath, nil),
kserveMockobj.EXPECT().Create(gomock.Any()).Return("", errors.InternalServerError{}),
)
// pass mockObj to a real object.
kserveClient = kserveMockobj
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
defer ctrl.Finish()
kserveMockobj := kservemock.NewMockCommand(ctrl)
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
gomock.InOrder(
- onboardMockobj.EXPECT().Get(testName).Return(nil),
+ ricdmsmockobj.EXPECT().FetchHelmChart(testName).Return(nil),
kserveMockobj.EXPECT().Delete(testName).Return(nil),
)
// pass mockObj to a real object.
kserveClient = kserveMockobj
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
ctrl := gomock.NewController(t)
defer ctrl.Finish()
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
gomock.InOrder(
- onboardMockobj.EXPECT().Get(testName).Return(errors.IOError{}),
+ ricdmsmockobj.EXPECT().FetchHelmChart(testName).Return(errors.IOError{}),
)
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
defer ctrl.Finish()
kserveMockobj := kservemock.NewMockCommand(ctrl)
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
gomock.InOrder(
- onboardMockobj.EXPECT().Get(testName).Return(nil),
+ ricdmsmockobj.EXPECT().FetchHelmChart(testName).Return(nil),
kserveMockobj.EXPECT().Delete(testName).Return(errors.InternalServerError{}),
)
kserveClient = kserveMockobj
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
defer ctrl.Finish()
kserveMockobj := kservemock.NewMockCommand(ctrl)
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
workspace, _ := os.Getwd()
gomock.InOrder(
- onboardMockobj.EXPECT().Download(testName, testVersion).Return(workspace+samplePath, nil),
+ ricdmsmockobj.EXPECT().FetchHelmChartAndUntar(testName, testVersion).Return(workspace+samplePath, nil),
kserveMockobj.EXPECT().Get(testName).Return(&sampleIFSV, nil),
kserveMockobj.EXPECT().Update(gomock.Any()),
)
// pass mockObj to a real object.
kserveClient = kserveMockobj
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
ctrl := gomock.NewController(t)
defer ctrl.Finish()
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
gomock.InOrder(
- onboardMockobj.EXPECT().Download(testName, testVersion).Return("", errors.InternalServerError{}),
+ ricdmsmockobj.EXPECT().FetchHelmChartAndUntar(testName, testVersion).Return("", errors.InternalServerError{}),
)
// pass mockObj to a real object.
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
defer ctrl.Finish()
kserveMockobj := kservemock.NewMockCommand(ctrl)
- onboardMockobj := onboardmock.NewMockCommand(ctrl)
+ ricdmsmockobj := ricdmsmock.NewMockCommand(ctrl)
workspace, _ := os.Getwd()
gomock.InOrder(
- onboardMockobj.EXPECT().Download(testName, testVersion).Return(workspace+samplePath, nil),
+ ricdmsmockobj.EXPECT().FetchHelmChartAndUntar(testName, testVersion).Return(workspace+samplePath, nil),
kserveMockobj.EXPECT().Get(testName).Return(&sampleIFSV, nil),
kserveMockobj.EXPECT().Update(gomock.Any()).Return("", errors.InternalServerError{}),
)
// pass mockObj to a real object.
kserveClient = kserveMockobj
- onboardClient = onboardMockobj
+ ricdmsClient = ricdmsmockobj
removeFunc = fakeRemoveFunc
exec := Executor{}
}
logger.Logging(logger.INFO, "result of helm lint : %s", string(output))
slice := strings.Split(string(output), " ")
- chartPath = slice[len(slice)-1]
+ chartPath = strings.TrimSuffix(slice[len(slice)-1], "\n")
return
}