diff options
10 files changed, 886 insertions, 4 deletions
diff --git a/nokia/vnfmdriver/vfcadaptorservice/deployment/src/main/release/README.txt b/nokia/vnfmdriver/vfcadaptorservice/deployment/src/main/release/README.txt index fa97d7e6..6681c16a 100644 --- a/nokia/vnfmdriver/vfcadaptorservice/deployment/src/main/release/README.txt +++ b/nokia/vnfmdriver/vfcadaptorservice/deployment/src/main/release/README.txt @@ -31,6 +31,8 @@ Configuration steps: - Update the VNFM address in 'application.properties' under webapps directory. - Update the Catalog address in 'application.properties' under webapps directory. - Update the NSLCM address in 'application.properties' under webapps directory. + - Update the MSB address in $PATH/etc/conf/restclient.json + - Update the vnfmadapter service ip address in $PATH/etc/adapterInfo/vnfmadapterinfo.json How to run? @@ -43,7 +45,7 @@ How to run? 'conf/server.xml' - Verify that 'Tomcat started.' is reported on the console. - Once service is started, please verify below details: - - from MSB service, verify that "nokiavnfm" is reported from GET request on "/openoapi/microservices/v1/services" + - from MSB service, verify that "nokia-vnfm-driver" is reported from GET request on "/openoapi/microservices/v1/services" - from this service, run one of the supported REST API mentioned in open-o NFVO wiki and verify that the expected response is returned. How to stop? diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/common/bo/AdaptorEnv.java b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/common/bo/AdaptorEnv.java index 93454329..343e517e 100644 --- a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/common/bo/AdaptorEnv.java +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/common/bo/AdaptorEnv.java @@ -23,16 +23,23 @@ import org.springframework.stereotype.Component; public class AdaptorEnv { @Value("${nslcmApiUriFront}") private String nslcmApiUriFront; + @Value("${catalogApiUriFront}") private String catalogApiUriFront; + @Value("${cbamApiUriFront}") private String cbamApiUriFront; + @Value("${msbApiUriFront}") + private String msbApiUriFront; + //for retrieving token from CBAM @Value("${grantType}") private String grantType; + @Value("${clientId}") private String clientId; + @Value("${clientSecret}") private String clientSecret; @@ -72,5 +79,11 @@ public class AdaptorEnv { public void setClientSecret(String clientSecret) { this.clientSecret = clientSecret; } + public String getMsbApiUriFront() { + return msbApiUriFront; + } + public void setMsbApiUriFront(String msbApiUriFront) { + this.msbApiUriFront = msbApiUriFront; + } } diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/constant/CommonConstants.java b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/constant/CommonConstants.java index c145e28c..22c06ef0 100644 --- a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/constant/CommonConstants.java +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/constant/CommonConstants.java @@ -57,4 +57,9 @@ public class CommonConstants { public static final String CBAM_OPERATION_STATUS_START = "start"; public static final String CBAM_OPERATION_STATUS_FINISH = "finished"; + + //MSB + public static final String MSB_REGISTER_SERVICE_PATH = "/api/microservices/v1/services"; +// public static final String MSB_REGISTER_SERVICE_PATH = "/api/microservices/v1/services/{serviceName}/version/{version}/nodes/{ip}/{port}"; + public static final String MSB_UNREGISTER_SERVICE_PATH = "/api/microservices/v1/services/%s/version/%s/nodes/%s/%s"; } diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/impl/MsbMgmrImpl.java b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/impl/MsbMgmrImpl.java new file mode 100644 index 00000000..ed85fcfc --- /dev/null +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/impl/MsbMgmrImpl.java @@ -0,0 +1,168 @@ +/* + * Copyright 2016-2017, Nokia Corporation + * + * 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 org.onap.vfc.nfvo.driver.vnfm.svnfm.msb.impl; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.http.client.ClientProtocolException; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.common.bo.AdaptorEnv; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonConstants; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.http.client.HttpRequestProcessor; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.msb.inf.IMsbMgmr; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.RequestMethod; + +@Component +public class MsbMgmrImpl implements IMsbMgmr { + private static final Logger logger = LogManager.getLogger("MsbMgmrImpl"); + @Autowired + private HttpClientBuilder httpClientBuilder; + + @Autowired + private AdaptorEnv adaptorEnv; + + @Value("${serviceName}") + private String serviceName; + + @Value("${version}") + private String version; + + @Value("${url}") + private String url; + + @Value("${protocol}") + private String protocol; + + @Value("${visualRange}") + private String visualRange; + + @Value("${ip}") + private String ip; + + @Value("${port}") + private String port; + + @Value("${ttl}") + private String ttl; + + @Override + public void register() { + String httpPath = CommonConstants.MSB_REGISTER_SERVICE_PATH; + RequestMethod method = RequestMethod.POST; + + try { + String jsonStr = readVfcAdaptorInfoFromJsonFile(); + String registerResponse = operateHttpTask(jsonStr, httpPath, method); + logger.info("registerResponse is ", registerResponse); + } catch (IOException e) { + logger.error("Failed to read vfcadaptor info! ", e); + } + + } + + public String readVfcAdaptorInfoFromJsonFile() throws IOException { + InputStream ins = null; + BufferedInputStream bins = null; + String fileContent = ""; + String fileName = getAppRoot() + "/etc/adapterInfo/vnfmadapterinfo.json"; + + try { + ins = new FileInputStream(fileName); + bins = new BufferedInputStream(ins); + + byte[] contentByte = new byte[ins.available()]; + int num = bins.read(contentByte); + + if(num > 0) { + fileContent = new String(contentByte); + } + } catch(FileNotFoundException e) { + logger.error(fileName + "is not found!", e); + } finally { + if(ins != null) { + ins.close(); + } + if(bins != null) { + bins.close(); + } + } + + return fileContent; + } + + @Override + public void unregister() { + String httpPath = String.format(CommonConstants.MSB_UNREGISTER_SERVICE_PATH, serviceName, version, ip, port); + RequestMethod method = RequestMethod.DELETE; + + try { + String jsonStr = readVfcAdaptorInfoFromJsonFile(); + String registerResponse = operateHttpTask(jsonStr, httpPath, method); + logger.info("unregisterResponse is ", registerResponse); + } catch (IOException e) { + logger.error("Failed to unregister! ", e); + } + + } + + public String operateHttpTask(String httpBodyObj, String httpPath, RequestMethod method) throws ClientProtocolException, IOException { + String url=adaptorEnv.getMsbApiUriFront() + httpPath; + HttpRequestProcessor processor = new HttpRequestProcessor(httpClientBuilder, method); + processor.addHdeader(CommonConstants.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); + + processor.addPostEntity(httpBodyObj); + + String responseStr = processor.process(url); + + return responseStr; + } + + public String getAppRoot() { + String appRoot = null; + appRoot = System.getProperty("catalina.base"); + if(appRoot != null) { + appRoot = getCanonicalPath(appRoot); + } + return appRoot; + } + + private String getCanonicalPath(final String inPath) { + String path = null; + try { + if(inPath != null) { + final File file = new File(inPath); + path = file.getCanonicalPath(); + } + } catch(final IOException e) { + logger.error("file.getCanonicalPath() IOException:", e); + } + return path; + } + +} diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/inf/IMsbMgmr.java b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/inf/IMsbMgmr.java new file mode 100644 index 00000000..aaabc3f2 --- /dev/null +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/inf/IMsbMgmr.java @@ -0,0 +1,22 @@ +/* + * Copyright 2016-2017, Nokia Corporation + * + * 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 org.onap.vfc.nfvo.driver.vnfm.svnfm.msb.inf; + +public interface IMsbMgmr { + public void register(); + public void unregister(); +} diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/service/MsgServiceRegister.java b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/service/MsgServiceRegister.java new file mode 100644 index 00000000..5f52297d --- /dev/null +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/msb/service/MsgServiceRegister.java @@ -0,0 +1,40 @@ +/* + * Copyright 2016-2017, Nokia Corporation + * + * 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 org.onap.vfc.nfvo.driver.vnfm.svnfm.msb.service; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.msb.inf.IMsbMgmr; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +@Component +public class MsgServiceRegister implements ApplicationRunner{ + private static final Logger logger = LogManager.getLogger("MsgServiceRegister"); + + @Autowired + private IMsbMgmr msbMgmr; + + @Override + public void run(ApplicationArguments arg0) { + msbMgmr.register(); + logger.info("nokia vnfm driver successfully registered on the MSB"); + } + +} diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/vnfmdriver/controller/VnfmDriverController.java b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/vnfmdriver/controller/VnfmDriverController.java index a3aee38e..39b6b3f6 100644 --- a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/vnfmdriver/controller/VnfmDriverController.java +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/vnfmdriver/controller/VnfmDriverController.java @@ -47,7 +47,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import com.google.gson.Gson; @Controller -@RequestMapping(value = "/nokiavnfm/v1") +@RequestMapping(value = "/api/nokiavnfmdriver/v1") public class VnfmDriverController { private static final Logger logger = LogManager.getLogger("VnfmDriverController"); diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/application.properties b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/application.properties index 0ae1288c..225b04ad 100644 --- a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/application.properties +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/application.properties @@ -35,8 +35,9 @@ logging.level.org.hibernate=ERROR ## common configuration for connections begin ## nslcmApiHttpFront=http://1.2.3.4:88 -catalogApiUriFront=http://1.2.6.7:88 -cbamApiUriFront=https://1.2.5.4:88 +catalogApiUriFront=http://2.2.3.4:88 +cbamApiUriFront=https://3.2.3.4:88 +msbApiUriFront=http://4.2.3.4:88 ## for retrieving token from CBAM ## grantType=grantType1 diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/register.properties b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/register.properties new file mode 100644 index 00000000..04929955 --- /dev/null +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/register.properties @@ -0,0 +1,23 @@ +############################################################################### +# Copyright 2016, Nokia Corporation +# +# 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. +############################################################################### +serviceName=nokia-vnfm-driver +version=v1 +url=/api/nokiavnfmdriver/v1 +protocol=HTTP +visualRange=1 +ip=135.251.208.57 +port=8988 +ttl=0
\ No newline at end of file diff --git a/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/swagger.json b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/swagger.json new file mode 100644 index 00000000..aeb6621c --- /dev/null +++ b/nokia/vnfmdriver/vfcadaptorservice/vfcadaptor/src/main/resources/swagger.json @@ -0,0 +1,608 @@ +{ + "swagger": "2.0", + "info": { + "title": "Nokia VNFM Driver API", + "description": "VNF service provider.", + "version": "1.0.0" + }, + "tags": [ + { + "name": "Nokia VNFM Driver services" + } + ], + "basePath": "/api", + "paths": { + "/{vnfmtype}/v1/{vnfmid}/vnfs": { + "post": { + "summary": "Instantiate VNF", + "description": "Add VNF", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "vnfmtype", + "in": "path", + "description": "vnfm type", + "required": true, + "type": "string" + }, + { + "name": "vnfmid", + "in": "path", + "description": "vnfm id", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "vnf", + "description": "Provide required properties of VNF.", + "required": true, + "schema": { + "$ref": "#/definitions/Vnf" + } + } + ], + "responses": { + "200": { + "description": "VNF Response", + "schema": { + "$ref": "#/definitions/VnfResponse" + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "VNF Not Found" + }, + "500": { + "description": "VNF service failed to process the request", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/{vnfmtype}/v1/{vnfmid}/vnfs/{vnfInstanceId}/terminate": { + "post": { + "summary": "Terminate VNF", + "description": "Delete VNF", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "vnfmtype", + "in": "path", + "description": "vnfm type", + "required": true, + "type": "string" + }, + { + "name": "vnfmid", + "in": "path", + "description": "vnfm id", + "required": true, + "type": "string" + }, + { + "name": "vnfInstanceId", + "in": "path", + "description": "vnfm instance id", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "vnfTerminate", + "description": "Provide required properties of VNF.", + "required": true, + "schema": { + "$ref": "#/definitions/VnfTerminate" + } + } + ], + "responses": { + "200": { + "description": "VNF Response", + "schema": { + "$ref": "#/definitions/VnfTerminateResponse" + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "VNF Not Found" + }, + "500": { + "description": "VNF service failed to process the request", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/{vnfmtype}/v1/{vnfmid}/vnfs/{vnfInstanceId}": { + "get": { + "summary": "Query VNF", + "description": "Get VNF Details", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "vnfmtype", + "in": "path", + "description": "vnfm type", + "required": true, + "type": "string" + }, + { + "name": "vnfmid", + "in": "path", + "description": "vnfm id", + "required": true, + "type": "string" + }, + { + "name": "vnfInstanceId", + "in": "path", + "description": "vnfm instance id", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "VNF Response", + "schema": { + "$ref": "#/definitions/VnfInfoResponse" + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "VNF Not Found" + }, + "500": { + "description": "VNF service failed to process the request", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/{vnfmtype}/v1/jobs/{jobid}": { + "get": { + "summary": "Get VNF operational status", + "description": "VNF operational status", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "vnfmtype", + "in": "path", + "description": "vnfm type", + "required": true, + "type": "string" + }, + { + "name": "jobid", + "in": "path", + "description": "jobid", + "required": true, + "type": "string" + }, + { + "name": "responseId", + "in": "query", + "description": "vnfm response id", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "VNF Response", + "schema": { + "$ref": "#/definitions/VnfStatusResponse" + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "VNF Not Found" + }, + "500": { + "description": "VNF service failed to process the request", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + } + }, + "definitions": { + "VnfStatusResponse": { + "type": "object", + "description": "Operational Status Response.", + "required": [ + "jobId", + "responseDescriptor", + "status", + "progress", + "statusDescription", + "errorCode", + "responseId", + "responseHistoryList" + ], + "properties": { + "jobId": { + "type": "string", + "description": "Job ID" + }, + "responseDescriptor": { + "type": "string", + "description": "Including vnfStatus, statusDescription, errorCode, progress, responseHistoryList, responseId." + }, + "status": { + "type": "string", + "description": "JOB status started processing finished error" + }, + "progress": { + "type": "integer", + "description": "Progress (1 - 100)" + }, + "statusDescription": { + "type": "string", + "description": "Progress Description" + }, + "errorCode": { + "type": "integer", + "description": "Errorcode" + }, + "responseId": { + "type": "integer", + "description": "Response Identifier" + }, + "responseHistoryList": { + "type": "array", + "items": { + "$ref": "#/definitions/HistoryDetails" + } + } + } + }, + "HistoryDetails": { + "type": "object", + "description": "InitiateVnfResponse.", + "required": [ + "vnfStatus", + "statusDescription", + "errorCode", + "progress", + "responseId" + ], + "properties": { + "vnfStatus": { + "type": "string", + "description": "Vnf Job Status." + }, + "statusDescription": { + "type": "string", + "description": "Progress Description." + }, + "errorCode": { + "type": "integer", + "description": "Error code." + }, + "progress": { + "type": "integer", + "description": "progress (1-100)." + }, + "responseId": { + "type": "integer", + "description": "Response Identifier." + } + } + }, + "VnfResponse": { + "type": "object", + "description": "InitiateVnfResponse.", + "required": [ + "jobId", + "vnfInstanceId" + ], + "properties": { + "jobId": { + "type": "string", + "description": "Identifier of the VNF lifecycle operation occurrence." + }, + "vnfInstanceId": { + "type": "string", + "description": "Identifier of the VNF instance." + } + } + }, + "VnfTerminateResponse": { + "type": "object", + "description": "TerminateVnfResponse.", + "required": [ + "jobId" + ], + "properties": { + "jobId": { + "type": "string", + "description": "Identifier of the VNF lifecycle operation occurrence." + } + } + }, + "VnfInfoResponse": { + "type": "object", + "description": "The information items about the selected VNF instance(s) that are returned..", + "required": [ + "VnfInfo" + ], + "properties": { + "VnfInfo": { + "$ref": "#/definitions/VnfInfo" + } + } + }, + "VnfInfo": { + "type": "object", + "description": "The information items about the selected VNF instance(s) that are returned..", + "required": [ + "vnfInstanceId", + "vnfInstanceName", + "vnfInstanceDescription", + "vnfdId", + "vnfPackageId", + "version", + "vnfProvider", + "vnfType", + "vnfStatus" + ], + "properties": { + "vnfInstanceId": { + "type": "string", + "description": "VNF instance identifier." + }, + "vnfInstanceName": { + "type": "string", + "description": "VNF instance name." + }, + "vnfInstanceDescription": { + "type": "string", + "description": "Human-readable description of the VNF instance." + }, + "vnfdId": { + "type": "string", + "description": "Identifier of the VNFD on which the VNF instance is based." + }, + "vnfPackageId": { + "type": "string", + "description": "Identifier of the VNF Package used to manage the lifecycle of the VNF instance." + }, + "version": { + "type": "string", + "description": "Version of the VNF." + }, + "vnfProvider": { + "type": "string", + "description": "Name of the person or company providing the VNF." + }, + "vnfType": { + "type": "string", + "description": "VNF Application Type." + }, + "vnfStatus": { + "default": "active", + "enum": [ + "inactive", + "active" + ], + "description": "The instantiation state of the VNF. Possible values:INACTIVE (Vnf is terminated or not instantiated ), ACTIVE (Vnf is instantiated). [instantiationState]." + } + } + }, + "VnfTerminate": { + "type": "object", + "description": "Terminate VNF.", + "required": [ + "terminationType", + "gracefulTerminationTimeout" + ], + "properties": { + "terminationType": { + "default": "forceful", + "enum": [ + "forceful", + "graceful" + ], + "description": "Signals whether forceful or graceful termination is requested.." + }, + "gracefulTerminationTimeout": { + "type": "integer", + "format": "int32", + "description": "The time interval (second) to wait for the VNF to be taken out of service during graceful termination, before shutting down the VNF and releasing the resources." + } + } + }, + "Vnf": { + "type": "object", + "description": "VNF encapsulate an external IP for the given project in a domain. Each property description is provided with 1. required 2. update allowed 3. format. whenever its needs to be mentioned explicitly.", + "required": [ + "vnfInstanceName", + "vnfPackageId", + "vnfDescriptorId", + "flavourId", + "vnfInstanceDescription", + "extVirtualLink" + ], + "properties": { + "vnfInstanceName": { + "type": "string", + "description": "Human-readable name of the VNF instance to be created.." + }, + "vnfPackageId": { + "type": "string", + "description": "VNF packageId." + }, + "vnfDescriptorId": { + "type": "string", + "description": "Information sufficient to identify the VNF Descriptor which defines the VNF to be created." + }, + "flavourId": { + "type": "string", + "description": "verify." + }, + "vnfInstanceDescription": { + "type": "string", + "description": "Human-readable description of the VNF instance to be created." + }, + "extVirtualLink": { + "$ref": "#/definitions/ExtVirtualLinkData" + } + } + }, + "ExtVirtualLinkData": { + "type": "object", + "description": "References to external virtual links to connect the VNF to.", + "required": [ + "vlInstanceId", + "vim", + "networkId", + "cpdId" + ], + "properties": { + "vlInstanceId": { + "type": "string", + "description": "Identifier of the VL instance." + }, + "vim": { + "$ref": "#/definitions/VimInfo" + }, + "networkId": { + "type": "string", + "description": "The network UUID of network" + }, + "cpdId": { + "type": "string", + "description": "Identifier of the external CPD in VNFD" + } + } + }, + "VimInfo": { + "type": "object", + "description": "Information about the VIM that manages this resource.", + "required": [ + "vimInfoId", + "vimId", + "interfaceInfo", + "accessInfo", + "interfaceEndpoint" + ], + "properties": { + "vimInfoId": { + "type": "string", + "description": "The identifier of this VimInfo instance, for the purpose of referencing it from other information elements." + }, + "vimId": { + "type": "string", + "description": "The identifier of the VIM.." + }, + "interfaceInfo": { + "$ref": "#/definitions/interfaceInfo" + }, + "accessInfo": { + "$ref": "#/definitions/accessInfo" + }, + "interfaceEndpoint": { + "type": "string", + "description": "Information about the interface endpoint. An example is a URL." + } + } + }, + "interfaceInfo": { + "type": "object", + "description": "Information about the interface to the VIM, including VIM provider type, API version, and protocol type..", + "required": [ + "vimType", + "apiVersion", + "protocolType" + ], + "properties": { + "vimType": { + "type": "string", + "description": "vim" + }, + "apiVersion": { + "type": "string", + "description": "api version" + }, + "protocolType": { + "type": "string", + "description": "Type of the protocol" + } + } + }, + "accessInfo": { + "type": "object", + "description": "Authentication credentials for accessing the VIM. Examples may include those to support different authentication schemes, e.g., OAuth, Token, etc..", + "required": [ + "tenant", + "username", + "password" + ], + "properties": { + "tenant": { + "type": "string", + "description": "Tenant Name of tenant" + }, + "username": { + "type": "string", + "description": "Username for login" + }, + "password": { + "type": "string", + "description": "Password of login user" + } + } + }, + "Error": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + } + } + } + } +}
\ No newline at end of file |