{ "swagger": "2.0", "info": { "version": "1.0.0", "title": "ONAP VNFM Driver Development Related API", "description": "ONAP VNFM Driver Development Related Rest API.", "contact": { "name": "ONAP VFC team", "email": "onap-discuss@lists.onap.org", "url": "https://gerrit.onap.org/r/#/admin/projects/vfc/nfvo/lcm" } }, "basePath": "/api", "schemes": [ "http", "https" ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "paths": { "/{vnfmtype}/v1/{vnfmid}/vnfs": { "post": { "tags": [ "VnfmDriver" ], "summary": "vnf create&instantiate", "description": "VNF create&instantiate Rest API should be provided by the VNFM Driver", "operationId": "vnf_instantiate", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "required": true, "type": "string", "description": "The value of vnfmtype should be the SVNFM driver service name", "name": "vnfmtype", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfmid should be the VNFM Instantiate ID", "name": "vnfmid", "in": "path" }, { "in": "body", "name": "body", "description": "instantiate request param", "required": true, "schema": { "$ref": "#/definitions/VnfInstantiateRequest" } } ], "responses": { "201": { "description": "", "schema": { "$ref": "#/definitions/VnfInstantiateResponse" } } } } }, "/{vnfmtype}/v1/{vnfmid}/vnfs/{vnfInstanceId}/scale": { "post": { "tags": [ "VnfmDriver" ], "summary": "vnf Scale", "description": "VNF Scale Rest API should be provided by the VNFM Driver", "operationId": "vnf_scale", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "required": true, "type": "string", "description": "The value of vnfmtype should be the SVNFM driver service name", "name": "vnfmtype", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfmid should be the VNFM Instantiate ID", "name": "vnfmid", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfInstanceId should be the VNF Instantiate ID", "name": "vnfInstanceId", "in": "path" }, { "in": "body", "name": "body", "description": "instantiate request param", "required": true, "schema": { "$ref": "#/definitions/VnfScaleRequest" } } ], "responses": { "201": { "description": "", "schema": { "$ref": "#/definitions/JobInfo" } }, "404": { "description": "the VNF instance id is wrong" }, "500": { "description": "the url is invalid" } } } }, "/{vnfmtype}/v1/{vnfmid}/vnfs/{vnfInstanceId}/heal": { "post": { "tags": [ "VnfmDriver" ], "summary": "vnf heal", "description": "VNF Heal Rest API should be provided by the VNFM Driver", "operationId": "vnf_heal", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "required": true, "type": "string", "description": "The value of vnfmtype should be the SVNFM driver service name", "name": "vnfmtype", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfmid should be the VNFM Instantiate ID", "name": "vnfmid", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfInstanceId should be the VNF Instantiate ID", "name": "vnfInstanceId", "in": "path" }, { "in": "body", "name": "body", "description": "instantiate request param", "required": true, "schema": { "$ref": "#/definitions/VnfHealRequest" } } ], "responses": { "201": { "description": "", "schema": { "$ref": "#/definitions/JobInfo" } }, "404": { "description": "the VNF instance id is wrong" }, "500": { "description": "the url is invalid" } } } }, "/{vnfmtype}/v1/{vnfmid}/vnfs/{vnfInstanceId}/terminate": { "post": { "tags": [ "VnfmDriver" ], "summary": "terminate&delete vnf", "description": "VNF terminate&delete Rest API should be provided by the VNFM Driver", "operationId": "terminate_vnf", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "required": true, "type": "string", "description": "The value of vnfmtype should be the SVNFM driver service name", "name": "vnfmtype", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfmid should be the VNFM Instantiate ID", "name": "vnfmid", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfInstanceId should be the VNF Instantiate ID", "name": "vnfInstanceId", "in": "path" }, { "in": "body", "name": "body", "description": "instantiate request param", "required": true, "schema": { "$ref": "#/definitions/VnfTerminateRequest" } } ], "responses": { "204": { "description": "successful operation", "schema": { "$ref": "#/definitions/JobInfo" } }, "404": { "description": "the VNF instance id is wrong" }, "500": { "description": "the url is invalid" } } } }, "/{vnfmtype}/v1/{vnfmid}/vnfs/{vnfInstanceId}": { "get": { "tags": [ "VnfmDriver" ], "summary": "query the specified vnf info", "description": "", "operationId": "query_vnf", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "required": true, "type": "string", "description": "The value of vnfmtype should be the SVNFM driver service name", "name": "vnfmtype", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfmid should be the VNFM Instantiate ID", "name": "vnfmid", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfInstanceId should be the VNF Instantiate ID", "name": "vnfInstanceId", "in": "path" } ], "responses": { "200": { "description": "successful operation", "schema": { "$ref": "#/definitions/VnfInfo" } }, "404": { "description": "the vnf instance id is wrong" }, "500": { "description": "the url is invalid" } } } }, "/nslcm/v1/ns/grantvnf": { "post": { "tags": [ "Nslcm" ], "summary": "grantvnf", "description": "Grant VNF, provived by the Nslcm component", "operationId": "grantvnf", "parameters": [ { "in": "body", "name": "grantvnf", "description": "Grant VNF Request", "required": true, "schema": { "$ref": "#/definitions/GrantVNFRequest" } } ], "responses": { "202": { "description": "", "schema": { "$ref": "#/definitions/GrantVNFResponse" } }, "404": { "description": "URL not found" }, "500": { "description": "the url is invalid" } } } }, "/nslcm/v1/ns/{vnfmid}/vnfs/{vnfInstanceId}/Notify": { "post": { "tags": [ "Nslcm" ], "summary": "VNF LCM Notification", "description": "VNF LCM Notification API should be provided by Nslcm component", "operationId": "VNF_LCM_Notification", "parameters": [ { "required": true, "type": "string", "description": "VNFM Instance Id", "name": "vnfmid", "in": "path" }, { "required": true, "type": "string", "description": "VNF Instance Id", "name": "vnfInstanceId", "in": "path" }, { "in": "body", "name": "vnf Notification", "description": "VNF LCM Notification", "required": true, "schema": { "$ref": "#/definitions/VNFLCMNotification" } } ], "responses": { "202": { "description": "" }, "404": { "description": "URL not found" }, "500": { "description": "the url is invalid" } } } }, "/{vnfmid}/jobs/{jobid}": { "get": { "tags": [ "VnfmDriver" ], "summary": "jobstatus", "description": "Job Infomation API should be provided by VNFM Driver", "operationId": "get_jobstatus", "parameters": [ { "required": true, "type": "string", "description": "job Id", "name": "jobid", "in": "path" }, { "required": true, "type": "string", "description": "The value of vnfmid should be the VNFM Instantiate ID", "name": "vnfmid", "in": "path" }, { "required": true, "type": "string", "description": "job response message id", "name": "responseId", "in": "query" } ], "responses": { "202": { "description": "", "schema": { "$ref": "#/definitions/JobDetailInfo" } } } } }, "/catalog/v1/vnfpackages/{csarId}": { "get": { "tags": [ "Catalog" ], "summary": "query vnf package info", "description": "query one vnf package info via vnf package csarId", "operationId": "query_vnf_package", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "csarId", "in": "path", "description": "csar id of vnf package", "required": true, "type": "string" } ], "responses": { "200": { "description": "successful operation", "schema": { "$ref": "#/definitions/VnfPkgDetailInfo" } }, "500": { "description": "internal error" } } } }, "/nslcm/v1/vnfms/{vnfmid}":{ "get": { "tags": [ "Nslcm" ], "summary": "Query VNFM register info", "description": "query VNFM register info", "operationId": "query_vnfm_info", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "vnfmid", "in": "path", "description": "vnfm id", "required": true, "type": "string" } ], "responses": { "200": { "description": "successful operation", "schema": { "$ref": "#/definitions/VnfmInfo" } }, "404": { "description": "URL not found" }, "500": { "description": "internal error" } } } }, "/nslcm/v1/vims/{vimid}":{ "get": { "tags": [ "Nslcm" ], "summary": "Query VIM register info", "description": "query VIM register info", "operationId": "query_VIM_info", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "name": "vimid", "in": "path", "description": "vim id", "required": true, "type": "string" } ], "responses": { "200": { "description": "successful operation", "schema": { "$ref": "#/definitions/VimInfo" } }, "404": { "description": "URL not found" }, "500": { "description": "internal error" } } } } }, "definitions": { "jobResponseInfo": { "type": "object", "properties": { "status": { "type": "string" }, "progress": { "type": "string" }, "statusDescription": { "type": "string" }, "errorCode": { "type": "string" }, "responseId": { "type": "string" } } }, "JobStatus" : { "description": "The status of the job", "type": "string", "enum": [ "started", "processing", "finished", "error", "timeout" ] }, "JobDetailInfo": { "type": "object", "properties": { "jobId": { "type": "string" }, "responseDescriptor": { "type": "object", "properties": { "status": { "$ref": "#/definitions/JobStatus", "description": "The status of the job" }, "progress": { "type": "string", "description": "The progress of the job. Value between 0 and 100." }, "statusDescription": { "type": "string", "description": "The reason of the current status of the job." }, "errorCode": { "type": "string" }, "responseId": { "type": "string" }, "responseHistoryList": { "type": "array", "items": { "$ref": "#/definitions/jobResponseInfo" } } } } } }, "ChangeType" : { "description": "The type of the change", "type": "string", "enum": [ "VDU" ] }, "ResourceChange" : { "type": "object", "properties": { "type": { "$ref": "#/definitions/ChangeType", "description": "The type of the resource." }, "resourceDefinitionId": { "description": "The identifier of the resource within the grant request.", "type": "string" }, "vdu": { "description": "The identifier of the VDU.", "type": "string" } } }, "OperationType" : { "description": "The type of operation", "type": "string", "enum": [ "Terminal", "Instantiate", "Scalein", "Scaleout", "Scaledown", "Scaleup", "Heal" ] }, "GrantVNFRequest": { "type": "object", "properties": { "vnfInstanceId": { "type": "string" }, "vnfDescriptorId": { "type": "string" }, "lifecycleOperation": { "description" : "The type of the operation.", "$ref": "#/definitions/OperationType" }, "jobId": { "type": "string" }, "addResource": { "type": "array", "items": { "$ref": "#/definitions/ResourceChange" } }, "removeResource": { "type": "array", "items": { "$ref": "#/definitions/ResourceChange" } }, "additionalParam": { "type": "object", "description": "The data type is KeyValuePair. Additional parameters passed by the NFVO, specific to the VNF and the LCM operation." } } }, "GrantVNFResponse": { "type": "object", "properties": { "vim": { "type": "object", "properties": { "vimInfoId": { "type": "string" }, "vimId": { "type": "string", "description": "The identifier of the VIM" }, "vimid": { "type": "string", "description": "Same as vimId (backward incompatible API change https://jira.onap.org/browse/VFC-681)" }, "interfaceInfo": { "type": "object", "properties": { "vimType": { "type": "string", "description": "The vim Type value wil be openstack" }, "apiVersion": { "type": "string", "description": "The api Version Type value will be " }, "protocolType": { "type": "string", "description": "The protocol Type value will be http or https" } } }, "accessInfo": { "type": "object", "properties": { "tenant": { "type": "string", "description": "Tenant Name of tenant" }, "username": { "type": "string", "description": "Username for login" }, "password": { "type": "string", "description": "Password of login user" } } }, "accessinfo": { "type": "object", "properties": { "tenant": { "type": "string", "description": "Tenant Name of tenant" }, "username": { "type": "string", "description": "Username for login" }, "password": { "type": "string", "description": "Password of login user" } } }, "interfaceEndpoint": { "type": "string", "description": "Information about the interface endpoint. It is a URL" } } } } }, "VnfNotificationType": { "description": "The type of the notification", "type": "string", "enum": [ "added", "removed", "modified" ] }, "AffectedVnfc": { "type": "object", "properties": { "vnfcInstanceId": { "type": "string", "description": "Identifier of the VNFC instance" }, "vduId": { "type": "string", "description": "Identifier of the VDU in the VNFD" }, "changeType": { "$ref": "#/definitions/VnfNotificationType", "description": "The type of the change" }, "vimid": { "type": "string", "description": "Identifier of vim" }, "vmid": { "type": "string", "description": "Identifier of virtual machine" }, "vmname": { "type": "string", "description": "Name of virtual machine" } } }, "AffectedVirtualLinkType": { "description": "The type of the affected virtual link", "type": "string", "enum": [ "network", "port" ] }, "AffectedVirtualLink":{ "type": "object", "properties": { "vlInstanceId": { "type": "string", "description": "Identifier of the VL instance" }, "vldid": { "type": "string", "description": "Identifier of the VLD in the VNFD" }, "changeType": { "$ref": "#/definitions/VnfNotificationType", "description": "The type of the change" }, "networkResource": { "type": "object", "description": "network Resource", "properties": { "resourceType": { "$ref": "#/definitions/AffectedVirtualLinkType", "description": "Must be network" }, "resourceId": { "type": "string", "description": "Identifier of the resource in the scope of the VIM" } } } } }, "VnfCpNotificationType": { "description": "The type of the notification for connection points", "type": "string", "enum": [ "added", "removed", "changed" ] }, "AffectedCp": { "type": "object", "properties": { "virtualLinkInstanceId": { "type": "string", "description": "Identifier of the VL instance" }, "cpinstanceid": { "type": "string", "description": "Identifier of the connection point" }, "cpdid": { "type": "string", "description": "Identifier of the connection point in the VNFD" }, "ownerType": { "type": "string", "description": "The type of the owner." }, "ownerId": { "type": "string", "description": "Identifier of the owner. Mandatory if ownerType is specified." }, "changeType": { "$ref": "#/definitions/VnfCpNotificationType", "description": "The type of the change" }, "portResource": { "type": "object", "description": "port Resource", "properties": { "vimid": { "type": "string", "description": "Identifier of the VIM" }, "resourceid": { "type": "string", "description": "Identifier of the resource in the scope of the VIM" }, "resourceName": { "type": "string", "description": "Resource name in the vim" }, "tenant": { "type": "string", "description": "The identifier of the tenant" }, "ipAddress": { "type": "string", "description": "The IP address of the port" }, "macAddress": { "type": "string", "description": "The MAC address of the port" }, "instId": { "type": "string", "description": "The instance id of the server to which the port is attached to" } } } } }, "AffectedVirtualStorage" : { "type": "object" }, "VnfLcmNotificationStatus" : { "description": "The status of the operation", "type": "string", "enum": [ "result", "start" ] }, "VNFLCMNotification": { "type": "object", "properties": { "status": { "description" : "The status of the operation that triggered the LCN.", "$ref": "#/definitions/VnfLcmNotificationStatus" }, "vnfInstanceId": { "type": "string" }, "operation": { "description" : "The type of the operation that tiggered the LCN.", "$ref": "#/definitions/OperationType" }, "jobId": { "description" : "The identifier fo the job that triggered the LCN.", "type": "string" }, "affectedVnfc": { "type": "array", "description": "The affected VNFCs", "items": { "$ref": "#/definitions/AffectedVnfc" } }, "affectedCp": { "type": "array", "description": "The affected Connected Points", "items": { "$ref": "#/definitions/AffectedCp" } }, "affectedVl": { "type": "array", "description": "The affected virtual links", "items": { "$ref": "#/definitions/AffectedVirtualLink" } }, "affectedVirtualStorage": { "type": "array", "description": "The affected virtual storages. (Not supported)", "items": { "$ref": "#/definitions/AffectedVirtualStorage" } } } }, "VnfInstantiateRequest": { "type": "object", "properties": { "vnfInstanceName": { "type": "string" }, "vnfPackageId": { "type": "string" }, "vnfDescriptorId": { "type": "string" }, "vnfInstanceDescription": { "type": "string" }, "extVirtualLink": { "type": "array", "items": { "$ref": "#/definitions/extVirtualLinkInfo" } }, "additionalParam": { "type": "object" } } }, "extVirtualLinkInfo":{ "type": "object", "properties": { "resourceSubnetId": { "type": "string", "description": "The provider id of the subnet" }, "vlInstanceId": { "type": "string", "description" : "The identifier of the virtual link" }, "resourceId": { "type": "string", "description": "The provider id of the network" }, "cpdId": { "type": "string", "description": "The identifier of the connection point descriptor" }, "vim": { "type": "object", "properties": { "vimid": { "type": "string", "description": "The identifier of the VIM" } } } } }, "VnfInstantiateResponse": { "type": "object", "properties": { "vnfInstanceId": { "type": "string" }, "jobId": { "type": "string" } } }, "ScaleDirection" : { "description": "The direction of the scaling", "type": "string", "enum": [ "SCALE_IN", "SCALE_OUT" ] }, "VnfScaleRequest":{ "type": "object", "properties": { "type": { "description" : "The direction of the scaling.", "$ref": "#/definitions/ScaleDirection" }, "aspectId":{ "type": "string", "description": "Identifies the aspect of the VNF that is requested to be scaled" }, "numberOfSteps": { "type": "string", "description": "Number of scaling steps to be executed as part of this ScaleVnf operation. It shall be a positive number" }, "additionalParam":{ "type": "object", "description": "Additional parameters passed by the NFVO as input to the scaling process, specific to the VNF being scaled" } } }, "VnfHealRequest":{ "type": "object", "properties": { "action": { "type": "string" }, "affectedvm": { "type": "object", "properties": { "vimid":{ "type": "string" }, "vduid": { "type": "string" }, "vmname":{ "type": "string" } } } } }, "VnfTerminationType": { "description": "The type of the termination.", "type": "string", "enum": [ "graceful", "forceful" ] }, "VnfTerminateRequest":{ "type": "object", "properties": { "terminationType": { "description" : "The type of the termination", "$ref": "#/definitions/VnfTerminationType" }, "gracefulTerminationTimeout": { "description": "The time interval(second) to wait for the VNF to be taken out of service during graceful termination.", "type": "string" } } }, "JobInfo": { "type": "object", "properties": { "jobId": { "type": "string" } } }, "VnfInfo": { "type": "object", "properties": { "vnfInstanceId": { "type": "string" }, "vnfInstanceName": { "type": "string" }, "vnfInstanceDescription": { "type": "string" }, "vnfdId": { "type": "string" }, "vnfPackageId": { "type": "string" }, "version": { "type": "string" }, "vnfProvider": { "type": "string" }, "vnfType": { "type": "string" }, "vnfStatus": { "type": "string" } } }, "vimInfo": { "type": "object", "properties": { "vimInfoId": { "type": "string" }, "vimId": { "type": "string" }, "interfaceInfo": { "type": "object", "properties": { "vimType": { "type": "string", "description": "The vim Type value wil be openstack" }, "apiVersion": { "type": "string", "description": "The api Version Type value will be " }, "protocolType": { "type": "string", "description": "The protocol Type value will be http or https" } } }, "accessInfo": { "type": "object", "properties": { "tenant": { "type": "string", "description": "Tenant Name of tenant" }, "username": { "type": "string", "description": "Username for login" }, "password": { "type": "string", "description": "Password of login user" } } }, "interfaceEndpoint": { "type": "string", "description": "Information about the interface endpoint. It is a URL" } } }, "VnfPkgDetailInfo": { "type": "object", "properties": { "csarId": { "type": "string", "description": "vnf package id, UUID" }, "packageInfo": { "$ref": "#/definitions/VnfPkgInfo" }, "imageInfo": { "$ref": "#/definitions/VnfPkgImgListInfo" }, "vnfInstanceInfo": { "$ref": "#/definitions/VnfInstListInfo" } } }, "VnfPkgInfo": { "type": "object", "description": "vnf package infomation", "properties": { "vnfPackageId": { "type": "string", "description": "vnf package id (csarId)" }, "csarName": { "type": "string", "description": "The name of the csar" }, "vnfdId": { "type": "string", "description": "VNF descriptor ID" }, "vnfdProvider": { "type": "string", "description": "VNF descriptor vendor ID" }, "vnfdModel": { "type": "string", "description": "The model of the VNF (JSON) encoded to string" }, "vnfdVersion": { "type": "string", "description": "VNF descriptor version" }, "vnfVersion": { "type": "string", "description": "VNF Software version" }, "downloadUrl":{ "type": "string", "description": "The URL from which the VNF package can be downloaded" } } }, "VnfInstListInfo": { "type": "array", "items": { "$ref": "#/definitions/VnfInstInfo" } }, "VnfInstInfo": { "type": "object", "properties": { "vnfInstanceId": { "type": "string", "description": "VNF instance ID" }, "vnfInstanceName": { "type": "string", "description": "VNF instance name" } } }, "VnfPkgImgListInfo": { "type": "array", "items": { "$ref": "#/definitions/VnfPkgImgInfo" } }, "VnfPkgImgInfo": { "type": "object", "properties": { "fileName": { "type": "string", "description": "image file name" }, "imageUrl": { "type": "string", "description": "image file path in the csar or image url in external repository" } } }, "VnfmInfo": { "type": "object", "properties": { "vnfmId": { "type": "string", "description": "vnfm Id" }, "name": { "type": "string", "description": "vnfm name" }, "type": { "type": "string", "description": "vnfm type" }, "url": { "type": "string", "description": "vnfm url" }, "userName": { "type": "string", "description": "vnfm login username" }, "password": { "type": "string", "description": "vnfm login password" }, "vimId": { "type": "string", "description": "vim Id" }, "vendor": { "type": "string", "description": "vendor name" }, "version": { "type": "string", "description": "vnfm version" }, "description": { "type": "string", "description": "vnfm description" }, "certificateUrl": { "type": "string", "description": "vnfm certificate Url" }, "createTime": { "type": "string", "description": "vnfm info createTime" } } }, "VimInfo": { "type": "object", "properties": { "vimId": { "type": "string", "description": "vim Id" }, "name": { "type": "string", "description": "vim name" }, "type": { "type": "string", "description": "vim type" }, "url": { "type": "string", "description": "vim url" }, "userName": { "type": "string", "description": "vim login username" }, "password": { "type": "string", "description": "vim login password" }, "vendor": { "type": "string", "description": "vendor name" }, "domain": { "type": "string", "description": "domain" }, "version": { "type": "string", "description": "vim version" }, "description": { "type": "string", "description": "vim description" }, "createTime": { "type": "string", "description": "vim info createTime" }, "sslCacert": { "type": "string", "description": "The collection of trusted certificates towards the VIM connection." }, "sslInsecure": { "type": "string", "description": "Whether to verify VIM's certificate" }, "status": { "type": "string", "description": "The status of external system" } } } } }