2 Copyright 2018 Intel Corporation.
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software
8 distributed under the License is distributed on an "AS IS" BASIS,
9 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 See the License for the specific language governing permissions and
11 limitations under the License.
23 "github.com/gorilla/mux"
24 pkgerrors "github.com/pkg/errors"
30 // CheckEnvVariables checks for required Environment variables
31 func CheckEnvVariables() error {
32 envList := []string{"CSAR_DIR", "KUBE_CONFIG_DIR", "PLUGINS_DIR", "DATABASE_TYPE", "DATABASE_IP"}
33 for _, env := range envList {
34 if _, ok := os.LookupEnv(env); !ok {
35 return pkgerrors.New("environment variable " + env + " not set")
42 // CheckDatabaseConnection checks if the database is up and running and
43 // plugin can talk to it
44 func CheckDatabaseConnection() error {
45 err := db.CreateDBClient(os.Getenv("DATABASE_TYPE"))
47 return pkgerrors.Cause(err)
50 err = db.DBconn.InitializeDatabase()
52 return pkgerrors.Cause(err)
55 err = db.DBconn.CheckDatabase()
57 return pkgerrors.Cause(err)
62 // LoadPlugins loads all the compiled .so plugins
63 func LoadPlugins() error {
64 pluginsDir := os.Getenv("PLUGINS_DIR")
65 err := filepath.Walk(pluginsDir,
66 func(path string, info os.FileInfo, err error) error {
67 if strings.Contains(path, ".so") {
68 p, err := plugin.Open(path)
70 return pkgerrors.Cause(err)
73 krd.LoadedPlugins[info.Name()[:len(info.Name())-3]] = p
84 // CheckInitialSettings is used to check initial settings required to start api
85 func CheckInitialSettings() error {
86 err := CheckEnvVariables()
88 return pkgerrors.Cause(err)
91 err = CheckDatabaseConnection()
93 return pkgerrors.Cause(err)
98 return pkgerrors.Cause(err)
104 // NewRouter creates a router instance that serves the VNFInstance web methods
105 func NewRouter(kubeconfig string) *mux.Router {
106 router := mux.NewRouter()
108 vnfInstanceHandler := router.PathPrefix("/v1/vnf_instances").Subrouter()
109 vnfInstanceHandler.HandleFunc("/", CreateHandler).Methods("POST").Name("VNFCreation")
110 vnfInstanceHandler.HandleFunc("/{cloudRegionID}/{namespace}", ListHandler).Methods("GET")
111 vnfInstanceHandler.HandleFunc("/{cloudRegionID}/{namespace}/{externalVNFID}", DeleteHandler).Methods("DELETE")
112 vnfInstanceHandler.HandleFunc("/{cloudRegionID}/{namespace}/{externalVNFID}", GetHandler).Methods("GET")
114 vnfdRouter := router.PathPrefix("/v1/vnfd").Subrouter()
115 vh := vnfdHandler{vnfdClient: vnfd.GetVNFDClient()}
116 vnfdRouter.HandleFunc("", vh.vnfdCreateHandler).Methods("POST")
117 vnfdRouter.HandleFunc("/{vnfdID}/upload", vh.vnfdUploadHandler).Methods("POST")
118 vnfdRouter.HandleFunc("", vh.vnfdListHandler).Methods("GET")
119 vnfdRouter.HandleFunc("/{vnfdID}", vh.vnfdGetHandler).Methods("GET")
120 vnfdRouter.HandleFunc("/{vnfdID}", vh.vnfdDeleteHandler).Methods("DELETE")
122 // (TODO): Fix update method
123 // vnfInstanceHandler.HandleFunc("/{vnfInstanceId}", UpdateHandler).Methods("PUT")