diff --git a/interconnectedTestCases/SOL003/IC_TC_Keywords.robot b/interconnectedTestCases/SOL003/IC_TC_Keywords.robot index d77d6c81b2e44f69ade8bb0aa7e6834507a72eeb..f5d446e02625de5ec09639cda6db9b6c41045498 100644 --- a/interconnectedTestCases/SOL003/IC_TC_Keywords.robot +++ b/interconnectedTestCases/SOL003/IC_TC_Keywords.robot @@ -26,7 +26,7 @@ GET Individual VNF Package ... Test title: GET Individual VNF Package ... Test objective: The objective is to test the retrieval of an individual VNF package information perform a JSON schema validation of the collected data structure ... Pre-conditions: One or more VNF packages are onboarded in the NFVO. - ... Reference: Clause 10.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 10.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO ... Applicability: none ... Post-Conditions: none @@ -41,7 +41,7 @@ POST Create a new vnfInstance ... Test title: POST Create a new vnfInstance ... Test objective: The objective is to create a new VNF instance resource ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.2.3.1 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF instance created @@ -54,7 +54,7 @@ GET information about multiple VNF instances ... Test title: GET information about multiple VNF instances ... Test objective: The objective is to query information about multiple VNF instances ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -67,7 +67,7 @@ Get Information about an individual VNF Instance ... Test title: Get Information about an individual VNF Instance ... Test objective: The objective is to create a new VNF instance resource ... Pre-conditions: none - ... Reference: Clause 5.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -82,7 +82,7 @@ DELETE Individual VNFInstance ... Test title: DELETE Individual VNFInstance ... Test objective: The objective is to delete a VNF instance ... Pre-conditions: the VNF instance resource is existing - ... Reference: Clause 5.4.3.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.3.3.5 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNFInstance deleted @@ -94,7 +94,7 @@ PATCH Individual VNFInstance ... Test title: PATCH Individual VNFInstance ... Test objective: This method modifies an individual VNF instance resource ... Pre-conditions: an existing VNF instance resource - ... Reference: Clause 5.4.3.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.3.3.4 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNFInstance modified @@ -107,7 +107,7 @@ Instantiate a vnfInstance ... Test title: Post Instantiate Individual VNFInstance ... Test objective: The objective is to instantiate a VNF instance ... Pre-conditions: VNF instance resource is in NOT INSTANTIATED state - ... Reference: Clause 5.4.4.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.4.4.1 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -121,7 +121,7 @@ VNF Instantiation ... Test title: VNF Instantiation workflow ... Test objective: The objective is to test the workflow for the instantiation of a VNF instance ... Pre-conditions: VNF instance resources is already created. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.4.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.4 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: VNF instance in INSTANTIATED state @@ -129,9 +129,9 @@ VNF Instantiation Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location Check Operation Occurrence Id existence - Check Operation Notification For Instantiation STARTING - Check Operation Notification For Instantiation PROCESSING - Check Operation Notification For Instantiation COMPLETED + Check Operation Notification For STARTING + Check Operation Notification For PROCESSING + Check Operation Notification For COMPLETED Check Postcondition VNF Status INSTANTIATED POST Terminate a vnfInstance @@ -139,7 +139,7 @@ POST Terminate a vnfInstance ... Test title: POST Terminate a vnfInstance ... Test objective: The objective is to test that POST method terminate a VNF instance ... Pre-conditions: none - ... Reference: Clause 5.4.8.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.8.3.1 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -153,7 +153,7 @@ Terminate a VNF Instance ... Test title: Terminate a VNF Instance ... Test objective: The objective is to terminate a VNF instance. ... Pre-conditions: VNF instance in INSTANTIATED state - ... Reference: Clause 5.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.3.3 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM. ... Post-Conditions: VNF instance in NOT_INSTANTIATED state @@ -161,9 +161,9 @@ Terminate a VNF Instance Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location Check Operation Occurrence Id existence - Check Operation Notification For Terminate STARTING - Check Operation Notification For Terminate PROCESSING - Check Operation Notification For Terminate COMPLETED + Check Operation Notification For STARTING + Check Operation Notification For PROCESSING + Check Operation Notification For COMPLETED Check Postcondition VNF Terminate GET status information about multiple VNF LCM Operation OCC @@ -171,7 +171,7 @@ GET status information about multiple VNF LCM Operation OCC ... Test title: GET status information about multiple VNF LCM Operation OCC ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -184,7 +184,7 @@ Get Individual VNF LCM Operation occurrence ... Test title: Get Individual VNF LCM Operation occurrences ... Test objective: The objective is to test that this method retrieve information about a VNF lifecycle management operation occurrence ... Pre-conditions: none - ... Reference: Clause 5.4.13.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.13.3.2 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -198,7 +198,7 @@ POST Create a new subscription ... Test title: POST Create a new subscription ... Test objective: The POST method creates a new subscription ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: in response header Location shall not be null @@ -211,7 +211,7 @@ GET Subscriptions ... Test title: GET Subscriptions ... Test objective: The objective is Get the list of active subscriptions ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -224,7 +224,7 @@ GET Individual Subscription ... Test title: GET Individual Subscription ... Test objective: The objective is to test the Get individual subscription ... Pre-conditions: none - ... Reference: Clause 5.4.19.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.19.3.2 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -237,7 +237,7 @@ DELETE an individual subscription ... Test title: DELETE an individual subscription ... Test objective: The objective is to test that the individual subscription is succesfully deleted ... Pre-conditions: none - ... Reference: Clause 5.4.19.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: Clause 5.4.19.3.5 - ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: Subscription deleted from VNFM @@ -258,21 +258,115 @@ VNF Instance Scale Out Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location Check Operation Occurrence Id existence - Check Operation Notification For Scale STARTING - Check Operation Notification For Scale PROCESSING - Check Operation Notification For Scale COMPLETED + Check Operation Notification For STARTING + Check Operation Notification For PROCESSING + Check Operation Notification For COMPLETED Check Postcondition VNF SCALE_OUT +Post Retry operation task + [Documentation] Test ID: 7.3.1.13.1 + ... Test title: Post Retry operation task + ... Test objective: The objective is to test that POST method The POST method initiates retrying a VNF lifecycle operation if the operation is in FAILED_TEMP state + ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILEDGET status information about multiple VNF LCM Operation OCC_TEMP" state. + ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v5.1.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Post Retry operation + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +Post Rollback operation task + [Documentation] Test ID: 7.3.1.14.1 + ... Test title: Post Rollback operation task + ... Test objective: The objective is to test that POST method initiates rollback on a VNF lifecycle operation + ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. + ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v5.1.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Post Rollback operation + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + VNF Instance Scale In Send VNF Scale In Request Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location Check Operation Occurrence Id existence - Check Operation Notification For Scale STARTING - Check Operation Notification For Scale PROCESSING - Check Operation Notification For Scale COMPLETED + Check Operation Notification For STARTING + Check Operation Notification For PROCESSING + Check Operation Notification For COMPLETED Check Postcondition VNF SCALE_IN +VNF Instance Heal + Send Heal VNF Request + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Operation Occurrence Id existence + Check Operation Notification For STARTING + Check Operation Notification For PROCESSING + Check Operation Notification For COMPLETED + Check Postcondition VNF Heal + +Send Heal VNF Request + Log Trying to heal a VNF instance. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + ${body}= Get File jsons/healVnfRequest.json + Post ${VNFM}/${VNFM_API_ROOT}/${VNFM_API_NAME}/${VNFM_API_MAJOR_VERSION}/vnf_instances/${vnfid}/heal ${body} + ${output}= Output response + Set Global Variable ${response} ${output} + +Check Postcondition VNF Heal + Check resource Instantiated + +VNF Change External Connectivity + Send Change Ext Connectivity Request + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Operation Occurrence Id existence + Check Operation Notification For STARTING + Check Operation Notification For PROCESSING + Check Operation Notification For COMPLETED + Check Postcondition VNF Change Ext Connectivity + +Send Change Ext Connectivity Request + Log Trying to change the external connectivity of a VNF instance. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + ${body}= Get File jsons/changeExtVnfConnectivityRequest.json + Post ${VNFM}/${VNFM_API_ROOT}/${VNFM_API_NAME}/${VNFM_API_MAJOR_VERSION}/vnf_instances/${vnfInstanceId}/change_ext_conn ${body} + ${output}= Output response + Set Global Variable ${response} ${output} + +Get Vnf Ext Link Id + [Arguments] ${vnfInstanceId} + ${vnfInstance}= Get Vnf Instance ${vnfInstanceId} + [Return] ${vnfInstance.instantiatedVnfInfo.extVirtualLinkInfo.id} + +Get Vnf Instance + [Arguments] ${vnfInstanceId} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Get ${VNFM}/${VNFM_API_ROOT}/${VNFM_API_NAME}/${VNFM_API_MAJOR_VERSION}/vnf_instances/${vnfInstanceId} + ${body}= Output response body + [Return] ${body} + +Check Postcondition VNF Change Ext Connectivity + Check resource instantiated + ${extVLId}= Get Vnf Ext Link Id ${vnfid} + Should be Equal ${changeVnfExtConnectivityRequest["extVirtualLinks"][0]["id"]} ${extVLId} + +Check Operation Notification For Change Ext Connectivity + [Arguments] ${status} + Check Operation Notification VnfLcmOperationOccurrenceNotification ${status} + GET Individual VNF Package [keyword] Log Trying to get a VNF Package present in the NFVO Catalogue Set Headers {"Accept": "${ACCEPT_JSON}"} @@ -614,6 +708,7 @@ Configure Notification Forward Check Operation Notification [Arguments] ${element} ${status}="" + Log Checking Operation Notification ${element} ${status} ${json}= Get File schemas/${element}.schema.json ${req1}= Configure Notification Forward ${element} ${callback_endpoint} ${callback_endpoint_fwd} ${req2}= Configure Notification Status Handler ${callback_endpoint_fwd} ${status} @@ -630,9 +725,9 @@ Check VNF Instance Operation Notification Clear Requests ${callback_endpoint} Clear Requests ${callback_endpoint_fwd} -Check Operation Notification For Instantiation +Check Operation Notification For [Arguments] ${status} - Check Operation Notification VnfLcmOperationOccurrenceNotification ${status} + Run Keyword If ${SKIP_INTERMEDIATE_NOTIFICATION_CHECKS} == 0 or (${SKIP_INTERMEDIATE_NOTIFICATION_CHECKS} == 1 and '${status}' == 'COMPLETED') Check Operation Notification VnfLcmOperationOccurrenceNotification ${status} Check Postcondition VNF Status [Arguments] ${status} @@ -640,9 +735,9 @@ Check Postcondition VNF Status Check VNF Instance ${vnfid} Should Not Be Empty ${response} Check HTTP Response Status Code Is 200 - Should Be Equal ${response['body']['id']} ${vnfInstanceId} + Should Be Equal ${response['body']['id']} ${vnfid} Check HTTP Response Header Contains Content-Type - Check HTTP Response Body Json Schema Is vnfInstance.schema.json + Check HTTP Response Body Json Schema Is schemas/vnfInstance.schema.json Check VNF Status ${response['body']['instantiationState']} ${status} Check VNF Instance @@ -669,10 +764,6 @@ Send Terminate VNF Request ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} -Check Operation Notification For Terminate - [Arguments] ${status} - Check Operation Notification VnfLcmOperationOccurrenceNotification ${status} - Check Postcondition VNF Terminate Check resource not Instantiated @@ -805,10 +896,6 @@ Compare ScaleInfos END Run Keyword If ${type}==SCALE_OUT Should Be True ${old_level_value}<${new_level_value} ... ELSE Should Be True ${old_level_value}<${new_level_value} - -Check Operation Notification For Scale - [Arguments] ${status} - Check Operation Notification VnfLcmOperationOccurrenceNotification ${status} Check resource Instantiated Check VNF Instance ${vnfid} @@ -819,4 +906,30 @@ Get Vnf Scale Info [Arguments] ${vnfInstanceId} ${vnfInstance}= Check VNF Instance ${vnfid} ${scaleInfo}= Get Value From Json ${vnfInstance} $..scaleStatus - [Return] ${scaleInfo} \ No newline at end of file + [Return] ${scaleInfo} + +Check operation resource state is FAILED_TEMP + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Get ${VNFM_API_ROOT}/${VNFM_API_NAME}/${VNFM_API_MAJOR_VERSION}/vnf_lcm_op_occs/${globalVnfLcmOpOccId} + ${outputResponse}= Output response + ${state}= Set Variable ${outputResponse['body']['instantiationState']} + Log Current operation state: ${state} + Run Keyword If "${state}" != "FAILED_TEMP" + ... Pass Execution If True Skipping test: Operation state must be FAILED_TEMP but found ${state} + Log Operation resource state is FAILED_TEMP as expected + +Post Retry operation + Log Retry a VNF lifecycle operation if that operation has experienced a temporary failure + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Log Execute Query and validate response + Post ${VNFM_API_ROOT}/${VNFM_API_NAME}/${VNFM_API_MAJOR_VERSION}/vnf_lcm_op_occs/${globalVnfLcmOpOccId}/retry + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +Post Rollback operation + Log Rollback a VNF lifecycle operation if that operation has experienced a temporary failure + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Log Execute Query and validate response + Post ${VNFM_API_ROOT}/${VNFM_API_NAME}/${VNFM_API_MAJOR_VERSION}/vnf_lcm_op_occs/${globalVnfLcmOpOccId}/rollback + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/SubscriptionCreationAndQuery.robot b/interconnectedTestCases/SOL003/SubscriptionCreationAndQuery.robot index 1a9bc2c915d5b10fa9fb059eee057cf11ca0e7a0..171cfcd9cda856bf4b71458e0884e48ea64541f2 100644 --- a/interconnectedTestCases/SOL003/SubscriptionCreationAndQuery.robot +++ b/interconnectedTestCases/SOL003/SubscriptionCreationAndQuery.robot @@ -10,7 +10,7 @@ Create a new subscription and query information about multiple and individual su ... Test title: Create a new subscription and query information about multiple and individual subscription resources ... Test objective: The objective is to test the interconnected case of subscription resource creation and query multiple and individual resources ... Pre-conditions: None - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: None ... Post-conditions: None diff --git a/interconnectedTestCases/SOL003/SubscriptionDeletion.robot b/interconnectedTestCases/SOL003/SubscriptionDeletion.robot index 68ab3e21b6a60181b3378c1ec5e09632a710ff16..0e08107bdc6b540ee9c01411090f4f3afb60615a 100644 --- a/interconnectedTestCases/SOL003/SubscriptionDeletion.robot +++ b/interconnectedTestCases/SOL003/SubscriptionDeletion.robot @@ -10,7 +10,7 @@ Delete individual subscription ... Test title: Delete individual subscription ... Test objective: The objective is to test the interconnected case of subscription resource creation and deletion ... Pre-conditions: none - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: none ... Post-Conditions: Subscription deleted from VNFM diff --git a/interconnectedTestCases/SOL003/VNFInstanceChangeExtConn.robot b/interconnectedTestCases/SOL003/VNFInstanceChangeExtConn.robot new file mode 100644 index 0000000000000000000000000000000000000000..a71426f5d0f1704feaa55672c90d0f3aabede7a8 --- /dev/null +++ b/interconnectedTestCases/SOL003/VNFInstanceChangeExtConn.robot @@ -0,0 +1,22 @@ +*** Settings *** +Suite Setup Initialize System +Suite Teardown Terminate All Processes kill=true +Resource environment/variables.txt # Generic Parameters +Resource IC_TC_Keywords.robot +Library JSONLibrary + +*** Test Cases *** +VNF instance Change External Connectivity + [Documentation] Test ID: 11.3.1.12.1 + ... Test title: VNF instance Change External Connectivity + ... Test objective: The objective is to test the interconnected case of VNF instance resource creation, instantiation and change external connectivity + ... Pre-conditions: none + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 + ... Config ID: Config_prod_NFVO, Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET Individual VNF Package + POST Create a new vnfInstance + VNF Instantiation + Get Information about an individual VNF Instance + VNF Change External Connectivity \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/VNFInstanceCreationAndQuery.robot b/interconnectedTestCases/SOL003/VNFInstanceCreationAndQuery.robot index 933f3868d183bedc291aa8ef2e51d30f84afb357..07924995a14b0e4f60bdafc8ef0d51921952859d 100644 --- a/interconnectedTestCases/SOL003/VNFInstanceCreationAndQuery.robot +++ b/interconnectedTestCases/SOL003/VNFInstanceCreationAndQuery.robot @@ -10,7 +10,7 @@ Create a new VNF instance resource and query information about multiple and indi ... Test title: Create a new VNF instance resource and query information about multiple and individual VNF instance ... Test objective: The objective is to test the interconnected case of VNF instance resource creation and query multiple and individual resources ... Pre-conditions: None - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: None ... Post-conditions: None diff --git a/interconnectedTestCases/SOL003/VNFInstanceDeletion.robot b/interconnectedTestCases/SOL003/VNFInstanceDeletion.robot index 365d58b2ccd281045f977aede9afbfcc2b1ced8c..498f33f56057d92713e2bd8cfacf1654910531a5 100644 --- a/interconnectedTestCases/SOL003/VNFInstanceDeletion.robot +++ b/interconnectedTestCases/SOL003/VNFInstanceDeletion.robot @@ -11,7 +11,7 @@ Delete an individual VNF instance ... Test title: Delete an individual VNF instance ... Test objective: The objective is to test the interconnected case of VNF instance resource creation and deletion ... Pre-conditions: none - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: none ... Post-Conditions: none diff --git a/interconnectedTestCases/SOL003/VNFInstanceHeal.robot b/interconnectedTestCases/SOL003/VNFInstanceHeal.robot new file mode 100644 index 0000000000000000000000000000000000000000..a9defc733f2c00f36efd8ef67015258c1f7a14c7 --- /dev/null +++ b/interconnectedTestCases/SOL003/VNFInstanceHeal.robot @@ -0,0 +1,22 @@ +*** Settings *** +Suite Setup Initialize System +Suite Teardown Terminate All Processes kill=true +Resource environment/variables.txt # Generic Parameters +Resource IC_TC_Keywords.robot +Library JSONLibrary + +*** Test Cases *** +Heal a VNF instance + [Documentation] Test ID: 11.3.1.11.1 + ... Test title: Heal a VNF instance + ... Test objective: The objective is to test the interconnected case of VNF instance resource creation, instantiation and heal + ... Pre-conditions: none + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 + ... Config ID: Config_prod_NFVO, Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET Individual VNF Package + POST Create a new vnfInstance + VNF Instantiation + Get Information about an individual VNF Instance + VNF Instance Heal diff --git a/interconnectedTestCases/SOL003/VNFInstanceInstantiation.robot b/interconnectedTestCases/SOL003/VNFInstanceInstantiation.robot index e2a1d2eace0d76058bc5d7afc0a7828ff43635f2..923a642d95a4843f77f11b3c47008f767d70c009 100644 --- a/interconnectedTestCases/SOL003/VNFInstanceInstantiation.robot +++ b/interconnectedTestCases/SOL003/VNFInstanceInstantiation.robot @@ -11,7 +11,7 @@ Instantiate a VNF instance ... Test title: Instantiate a VNF instance ... Test objective: The objective is to test the interconnected case of VNF instance resource creation and instantiation ... Pre-conditions: none - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: none ... Post-Conditions: none diff --git a/interconnectedTestCases/SOL003/VNFInstanceModification.robot b/interconnectedTestCases/SOL003/VNFInstanceModification.robot index 40cc49cfd7a15ecf5d3770971f16b1bca51271a8..d722c03fb25e90b746e01919f08aa64b5fa9df55 100644 --- a/interconnectedTestCases/SOL003/VNFInstanceModification.robot +++ b/interconnectedTestCases/SOL003/VNFInstanceModification.robot @@ -9,7 +9,7 @@ Modify an individual VNF instance resource ... Test title: Modify an individual VNF instance resource ... Test objective: The objective is to test the interconnected case of VNF instance resource creation and modification ... Pre-conditions: none - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: none ... Post-Conditions: none diff --git a/interconnectedTestCases/SOL003/VNFInstanceOperationOccurrences.robot b/interconnectedTestCases/SOL003/VNFInstanceOperationOccurrences.robot index dd1ceb8655a95c33cee81deddef56a0c88effe5b..565eafa47eff232e005ca4f0158e6fadf4dbb37b 100644 --- a/interconnectedTestCases/SOL003/VNFInstanceOperationOccurrences.robot +++ b/interconnectedTestCases/SOL003/VNFInstanceOperationOccurrences.robot @@ -11,7 +11,7 @@ Retrieve VNF instance Operation Occurrences ... Test title: Retrieve VNF instance Operation Occurrences ... Test objective: The objective is to test the interconnected case of VNF instance resource creation, instantiation and retrieval of information about VNF lifecycle management operation occurrences ... Pre-conditions: none - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: none ... Post-Conditions: none diff --git a/interconnectedTestCases/SOL003/VNFInstanceScaleIn.robot b/interconnectedTestCases/SOL003/VNFInstanceScaleIn.robot index 1d155b28f655bfd2c8a64f27f63056fe3ef30255..b69969743054f3a0495cf623d0a5cd8e9a272fc6 100644 --- a/interconnectedTestCases/SOL003/VNFInstanceScaleIn.robot +++ b/interconnectedTestCases/SOL003/VNFInstanceScaleIn.robot @@ -11,7 +11,7 @@ Scale In a VNF instance ... Test title: Scale In a VNF instance ... Test objective: The objective is to test the interconnected case of VNF instance resource creation, instantiation and scale in ... Pre-conditions: none - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: none ... Post-Conditions: none diff --git a/interconnectedTestCases/SOL003/VNFInstanceScaleOut.robot b/interconnectedTestCases/SOL003/VNFInstanceScaleOut.robot index 5648508a0dbb50d6fa129ef2e74e64aaf7f0c513..c330565f9f500cc9fb0088d9be08fdc1354e7e12 100644 --- a/interconnectedTestCases/SOL003/VNFInstanceScaleOut.robot +++ b/interconnectedTestCases/SOL003/VNFInstanceScaleOut.robot @@ -11,7 +11,7 @@ Scale Out a VNF instance ... Test title: Scale Out a VNF instance ... Test objective: The objective is to test the interconnected case of VNF instance resource creation, instantiation and scale out ... Pre-conditions: none - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: none ... Post-Conditions: none diff --git a/interconnectedTestCases/SOL003/VNFInstanceTermination.robot b/interconnectedTestCases/SOL003/VNFInstanceTermination.robot index 1a734ca178c2485ea939700d9d8c7a169f8261fd..a0013a94fdc62c2b415c69b38fe93fee0eb84be5 100644 --- a/interconnectedTestCases/SOL003/VNFInstanceTermination.robot +++ b/interconnectedTestCases/SOL003/VNFInstanceTermination.robot @@ -11,7 +11,7 @@ Terminate a VNF instance ... Test title: Terminate a VNF instance ... Test objective: The objective is to test the interconnected case of VNF instance resource creation, instantiation and termination ... Pre-conditions: none - ... Reference: ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 ... Config ID: Config_prod_NFVO, Config_prod_VNFM ... Applicability: none ... Post-Conditions: none diff --git a/interconnectedTestCases/SOL003/VNFLCORetryingFailedTemp.robot b/interconnectedTestCases/SOL003/VNFLCORetryingFailedTemp.robot new file mode 100644 index 0000000000000000000000000000000000000000..28294bb360a0e6510ccc7dae0377642a5182b2e2 --- /dev/null +++ b/interconnectedTestCases/SOL003/VNFLCORetryingFailedTemp.robot @@ -0,0 +1,23 @@ +*** Settings *** +Suite Setup Initialize System +Suite Teardown Terminate All Processes kill=true +Resource environment/variables.txt # Generic Parameters +Resource IC_TC_Keywords.robot +Library JSONLibrary + +*** Test Cases *** +Test that POST method initiates retrying a VNF lifecycle operation if the operation is in FAILED_TEMP state + [Documentation] Test ID: 11.3.1.13.1 + ... Test title: Test that POST method initiates retrying a VNF lifecycle operation if the operation is in FAILED_TEMP state + ... Test objective: The objective is to test the interconnected case of VNF is to retry a VNF lifecycle operation if the operation is in FAILED_TEMP state. + ... Pre-conditions: none + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 + ... Config ID: Config_prod_NFVO, Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET Individual VNF Package + POST Create a new vnfInstance + VNF Instantiation + GET status information about multiple VNF LCM Operation OCC + Check operation resource state is FAILED_TEMP + Post Retry operation task \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/VNFLCORollback.robot b/interconnectedTestCases/SOL003/VNFLCORollback.robot new file mode 100644 index 0000000000000000000000000000000000000000..aadedc87f6c8580e7ecfdac64722689d86da8ab8 --- /dev/null +++ b/interconnectedTestCases/SOL003/VNFLCORollback.robot @@ -0,0 +1,22 @@ +*** Settings *** +Suite Setup Initialize System +Suite Teardown Terminate All Processes kill=true +Resource environment/variables.txt # Generic Parameters +Resource IC_TC_Keywords.robot +Library JSONLibrary + +*** Test Cases *** +Test that POST method initiates rollback on a VNF lifecycle operation + [Documentation] Test ID: 11.3.1.14.1 + ... Test title: Test that POST method initiates rollback on a VNF lifecycle operation + ... Test objective: The objective is to test the interconnected case of VNF is to rollback a VNF lifecycle operation. + ... Pre-conditions: none + ... Reference: ETSI GS NFV-SOL 003 [1] v5.1.1 + ... Config ID: Config_prod_NFVO, Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET Individual VNF Package + POST Create a new vnfInstance + VNF Instantiation + GET status information about multiple VNF LCM Operation OCC + Post Rollback operation task \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/descriptors/SOL001/VNFD/vnfd_SOL001.yaml b/interconnectedTestCases/SOL003/descriptors/SOL001/VNFD/vnfd_SOL001.yaml index 2ca16800d6f623974376efc2096a1ffb06392ce3..3288c19b71371b8c5aca7ae3913385a345e9bd87 100644 --- a/interconnectedTestCases/SOL003/descriptors/SOL001/VNFD/vnfd_SOL001.yaml +++ b/interconnectedTestCases/SOL003/descriptors/SOL001/VNFD/vnfd_SOL001.yaml @@ -2,7 +2,7 @@ tosca_definitions_version: tosca_simple_yaml_1_3 description: "TST010 reference VNF-B" imports: - - https://forge.etsi.org/rep/nfv/SOL001/raw/v4.4.1/etsi_nfv_sol001_vnfd_types.yaml + - https://forge.etsi.org/rep/nfv/SOL001/raw/v5.1.1/etsi_nfv_sol001_vnfd_types.yaml metadata: descriptor_id: "VNF-B" @@ -44,7 +44,7 @@ node_types: type: list entry_schema: type: string - default: [ 'etsivnfm:v4.5.1' ] + default: [ 'etsivnfm:v5.1.1' ] interfaces: Vnflcm: type: "tosca.interfaces.nfv.Vnflcm" @@ -153,7 +153,7 @@ topology_template: flavour_id: "VNF-B_flavor" flavour_description: "VNF-B flavor" vnfm_info: - - etsivnfm:v2.3.1 + - etsivnfm:v5.1.1 interfaces: Vnflcm: type: "tosca.interfaces.nfv.Vnflcm" diff --git a/interconnectedTestCases/SOL003/environment/variables.txt b/interconnectedTestCases/SOL003/environment/variables.txt index 2b71e62de0c829cbfd542d7b2a38d62f6291faf7..f5c7d4664541d5fa08c1b0799c690148e00a688e 100644 --- a/interconnectedTestCases/SOL003/environment/variables.txt +++ b/interconnectedTestCases/SOL003/environment/variables.txt @@ -9,13 +9,20 @@ ${VNFM_PORT} 3001 # Listening port of the VNFM ${VNFM_SCHEMA} http ${VNFM} ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT} +################################################################################################ +##### THIS VARIABLE BELOW ALLOWS TO SKIP INTERMEDIATE LIFEFYCLE OP OCC INTERMEDIATE CHECKS ##### +##### IT IS INTENDED TO BE A KNOWN DEVIATION FROM STANDARDS ##### + +${SKIP_INTERMEDIATE_NOTIFICATION_CHECKS} 1 + +################################################################################################ ${ACCEPT} application/json ${ACCEPT_JSON} application/json ${CONTENT_TYPE} application/json ${AUTHORIZATION_HEADER} Authorization ${AUTHORIZATION_TOKEN} Bearer 0b79bab50daca910b000d4f1a2b675d604257e42 -${AUTH_USAGE} 1 +${AUTH_USAGE} 0 ${CONTENT_TYPE_PATCH} application/merge-patch+json ${NFVO_API_ROOT} diff --git a/interconnectedTestCases/SOL003/jsons/changeExtVnfConnectivityRequest.json b/interconnectedTestCases/SOL003/jsons/changeExtVnfConnectivityRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..aee8e90f9d6c3d498703f66275f65216af4409ff --- /dev/null +++ b/interconnectedTestCases/SOL003/jsons/changeExtVnfConnectivityRequest.json @@ -0,0 +1,65 @@ +{{ + "extVirtualLinks": [ + { + "id": "string", + "vimConnectionId": "string", + "resourceProviderId": "string", + "resourceId": "string", + "extCps": [ + { + "cpdId": "string", + "cpConfig": [ + { + "cpInstanceId": "string", + "linkPortId": "string", + "cpProtocolData": [ + { + "layerProtocol": "IP_OVER_ETHERNET", + "ipOverEthernet": { + "macAddress": "string", + "ipAddresses": [ + { + "type": "IPV4", + "fixedAddresses": [ + "string" + ], + "numDynamicAddresses": 0, + "addressRange": { + "minAddress": "string", + "maxAddress": "string" + }, + "subnetId": "string" + } + ] + } + } + ] + } + ] + } + ], + "extLinkPorts": [ + { + "id": "string", + "resourceHandle": { + "vimConnectionId": "string", + "resourceProviderId": "string", + "resourceId": "string", + "vimLevelResourceType": "string" + } + } + ] + } + ], + "vimConnectionInfo": [ + { + "id": "string", + "vimId": "string", + "vimType": "string", + "interfaceInfo": {}, + "accessInfo": {}, + "extra": {} + } + ], + "additionalParams": {} +}} \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/jsons/healVnfRequest.json b/interconnectedTestCases/SOL003/jsons/healVnfRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..640cd60d96154eeca640ec825bc88defd6499ac2 --- /dev/null +++ b/interconnectedTestCases/SOL003/jsons/healVnfRequest.json @@ -0,0 +1,4 @@ +{{ + "cause": "{healingCause}", + "additionalParams": {{}} +}} \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/jsons/scaleVnfRequest.json b/interconnectedTestCases/SOL003/jsons/scaleVnfRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..142fad5a0c65a720df50cd44edf66dc3d9e08e39 --- /dev/null +++ b/interconnectedTestCases/SOL003/jsons/scaleVnfRequest.json @@ -0,0 +1,4 @@ +{{ + "type": "{scaletype}", + "aspectId": "{scaleAspectId}" +}} \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/schemas/Subscription.schema.json b/interconnectedTestCases/SOL003/schemas/Subscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..ab95aa1e4524d6e648791fc74311ba440203957c --- /dev/null +++ b/interconnectedTestCases/SOL003/schemas/Subscription.schema.json @@ -0,0 +1,197 @@ +{ + "description": "This type represents a subscription related to notifications about VNF lifecycle changes.\n", + "type": "object", + "required": ["id", "callbackUri", "verbosity", "_links"], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "filter": { + "description": "This type represents a subscription filter related to notifications about VNF lifecycle changes.\nAt a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\nNOTE:\tThe permitted values of the \"notificationTypes\" attribute are spelled exactly as the names of \n the notification types to facilitate automated code generation systems.\n", + "type": "object", + "properties": { + "vnfInstanceSubscriptionFilter": { + "description": "This type represents subscription filter criteria to match VNF instances. * NOTE 1:\tThe attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances\n that are based on certain VNFDs in a filter. They should not be used both in the same filter instance,\n but one alternative should be chosen.\n NOTE 2:\tThe attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF\n instances in a filter. They should not be used both in the same filter instance, but one alternative\n should be chosen.\n", + "type": "object", + "anyOf": [ + { + "oneOf": [ + { + "required": ["vnfdId"] + }, + { + "required": ["vnfProductsFromProviders"] + } + ] + }, + { + "oneOf": [ + { + "required": ["vnfInstanceIds"] + }, + { + "required": ["vnfInstanceNames"] + } + ] + } + ], + "properties": { + "vnfdIds": { + "description": "If present, match VNF instances that were created based on a VNFD identified by one of the vnfdId values listed in this attribute. See note 1.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + }, + "vnfProductsFromProviders": { + "description": "If present, match VNF instances that belong to VNF products from certain providers. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": ["vnfProvider"], + "properties": { + "vnfProvider": { + "description": "Name of the VNF provider to match.\n", + "type": "string" + }, + "vnfProducts": { + "description": "If present, match VNF instances that belong to VNF products with certain product names, from one particular provider.\n", + "type": "array", + "items": { + "type": "object", + "required": ["vnfProductName"], + "properties": { + "vnfProductName": { + "description": "Name of the VNF product to match.\n", + "type": "string" + }, + "versions": { + "description": "If present, match VNF instances that belong to VNF products with certain versions and a certain product name, from one particular provider.\n", + "type": "array", + "items": { + "type": "object", + "required": ["vnfSoftwareVersion"], + "properties": { + "vnfSoftwareVersion": { + "description": "A version.\n", + "type": "string" + }, + "vnfdVersions": { + "description": "If present, match VNF instances that belong to VNF products with certain VNFD versions, a certain software version and a certain product name, from one particular provider.\n", + "type": "array", + "items": { + "description": "A version.\n", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "vnfInstanceIds": { + "description": "If present, match VNF instances with an instance identifier listed in this attribute. See note 2.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + }, + "vnfInstanceNames": { + "description": "If present, match VNF instances with a VNF Instance Name listed in this attribute. See note 2.\n", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "notificationTypes": { + "description": "Match particular notification types. \nPermitted values: -\tVnfLcmOperationOccurrenceNotification -\tVnfIdentifierCreationNotification -\tVnfIdentifierDeletionNotification See note.\n", + "type": "array", + "items": { + "type": "string", + "enum": [ + "VnfLcmOperationOccurrenceNotification", + "VnfIdentifierCreationNotification", + "VnfIdentifierDeletionNotification" + ] + } + }, + "operationTypes": { + "description": "Match particular VNF lifecycle operation types for the notification of type VnfLcmOperationOccurrenceNotification. May be present if the \"notificationTypes\" attribute contains the value \"VnfLcmOperationOccurrenceNotification\", and shall be absent otherwise.\n", + "type": "array", + "items": { + "description": "The enumeration LcmOpType defines the permitted values to represent VNF lifecycle operation types in VNF lifecycle management operation occurrence resources and VNF lifecycle management operation occurrence notifications.\nValue | Description ------|------------ INSTANTIATE | Represents the \"Instantiate VNF\" LCM operation. SCALE | Represents the \"Scale VNF\" LCM operation. SCALE_TO_LEVEL | Represents the \"Scale VNF to Level\" LCM operation. CHANGE_FLAVOUR | Represents the \"Change VNF Flavour\" LCM operation. TERMINATE | Represents the \"Terminate VNF\" LCM operation. HEAL | Represents the \"Heal VNF\" LCM operation. OPERATE | Represents the \"Operate VNF\" LCM operation. CHANGE_EXT_CONN | Represents the \"Change external VNF connectivity\" LCM operation. MODIFY_INFO | Represents the \"Modify VNF Information\" LCM operation. CREATE_SNAPSHOT | Represents the \"Create VNF Snapshot\" LCM operation. REVERT_TO_SNAPSHOT | Represents the \"Revert-To VNF Snapshot\" LCM operation. CHANGE_VNFPKG | Represents the \"Change current VNF package\" LCM operation. SELECT_DEPL_MODS | Represents the \"Select VNF deployable modules\" LCM operation\n", + "type": "string", + "enum": [ + "INSTANTIATE", + "SCALE", + "SCALE_TO_LEVEL", + "CHANGE_FLAVOUR", + "TERMINATE", + "HEAL", + "OPERATE", + "CHANGE_EXT_CONN", + "MODIFY_INFO", + "CREATE_SNAPSHOT", + "REVERT_TO_SNAPSHOT", + "CHANGE_VNFPKG", + "SELECT_DEPL_MODS" + ] + } + }, + "operationStates": { + "description": "Match particular LCM operation state values as reported in notifications of type VnfLcmOperationOccurrenceNotification. May be present if the \"notificationTypes\" attribute contains the value \"VnfLcmOperationOccurrenceNotification\", and shall be absent otherwise.\n", + "type": "array", + "items": { + "description": "STARTING: The LCM operation is starting. PROCESSING: The LCM operation is currently in execution. COMPLETED: The LCM operation has been completed successfully. FAILED_TEMP: The LCM operation has failed and execution has stopped, but the execution of the operation is not considered to be closed. FAILED: The LCM operation has failed and it cannot be retried or rolled back, as it is determined that such action won't succeed. ROLLING_BACK: The LCM operation is currently being rolled back. ROLLED_BACK: The LCM operation has been successfully rolled back, i.e. The state of the VNF prior to the original operation invocation has been restored as closely as possible.\n", + "type": "string", + "enum": [ + "STARTING", + "PROCESSING", + "COMPLETED", + "FAILED_TEMP", + "FAILED", + "ROLLING_BACK", + "ROLLED_BACK" + ] + } + } + } + }, + "callbackUri": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + }, + "verbosity": { + "description": "The enumeration LcmOpOccNotificationVerbosityType provides values to control the verbosity of LCM operation occurrence notifications. * FULL: This signals a full notification which contains all change details. * SHORT: This signals a short notification which omits large-volume change details to reduce the size of data to\n be sent via the notification mechanism.\n", + "type": "string", + "enum": ["FULL", "SHORT"] + }, + "_links": { + "description": "Links to resources related to this resource.\n", + "type": "object", + "required": ["self"], + "properties": { + "self": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": ["href"], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/schemas/VnfLcmOpOccs.schema.json b/interconnectedTestCases/SOL003/schemas/VnfLcmOpOccs.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..0a95eb43cdf11dd5a1fdffc0e0d49ffcadc2237a --- /dev/null +++ b/interconnectedTestCases/SOL003/schemas/VnfLcmOpOccs.schema.json @@ -0,0 +1,1366 @@ +{ + "type": "array", + "items": { + "description": "This type represents a VNF lifecycle management operation occurrence.\nNOTE 1:\tThis allows the NFVO to obtain the information contained in the latest \n \"result\" notification if it has not received it due to an error or a \n wrongly configured subscription filter.\nNOTE 2:\tNot more than one of changedInfo and modificationsTriggeredByVnfPkgChange \n shall be present.\nNOTE 3:\tFor a particular affected VL, there shall be as many \"AffectedVirtualLink\" \n entries as needed for signalling the different types of changes, i.e. one \n per virtual link and change type. For instance, in the case of signaling \n affected VL instances involving the addition of a particular VL instance \n with links ports, one \"AffectedVirtualLink\" entry signals the addition of \n the VL by using the \"changeType\" attribute of \"AffectedVirtualLink\" structure \n equal to \"ADDED\", and another \"AffectedVirtualLink\" entry signals the addition \n of externally visible VNF link ports of the VL by using the \"changeType\" equal \n to \"LINK_PORT_ADDED\".\nNOTE 4:\tA coordination action has timed out if the VNFM has not been able to read the \n \"Individual coordination action\" resource within a timeout interval after requesting \n the coordination to be started or to be cancelled. The length of the timeout interval \n is defined by means outside the scope of the present document.\nNOTE 5: The list of rejected coordinations may be garbage collected if the LCM operation\n occurrence has reached a terminal state, i.e. one of \"COMPLETED\", \"FAILED\" and \"ROLLED_BACK\".\n", + "type": "object", + "oneOf": [ + { + "required": ["changedInfo"] + }, + { + "required": ["modificationsTriggeredByVnfPkgChange"] + } + ], + "required": [ + "id", + "operationState", + "stateEnteredTime", + "startTime", + "vnfInstanceId", + "operation", + "isAutomaticInvocation", + "isCancelPending" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "operationState": { + "description": "STARTING: The LCM operation is starting. PROCESSING: The LCM operation is currently in execution. COMPLETED: The LCM operation has been completed successfully. FAILED_TEMP: The LCM operation has failed and execution has stopped, but the execution of the operation is not considered to be closed. FAILED: The LCM operation has failed and it cannot be retried or rolled back, as it is determined that such action won't succeed. ROLLING_BACK: The LCM operation is currently being rolled back. ROLLED_BACK: The LCM operation has been successfully rolled back, i.e. The state of the VNF prior to the original operation invocation has been restored as closely as possible.\n", + "type": "string", + "enum": [ + "STARTING", + "PROCESSING", + "COMPLETED", + "FAILED_TEMP", + "FAILED", + "ROLLING_BACK", + "ROLLED_BACK" + ] + }, + "stateEnteredTime": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "vnfInstanceId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "grantId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "operation": { + "description": "The enumeration LcmOpType defines the permitted values to represent VNF lifecycle operation types in VNF lifecycle management operation occurrence resources and VNF lifecycle management operation occurrence notifications.\nValue | Description ------|------------ INSTANTIATE | Represents the \"Instantiate VNF\" LCM operation. SCALE | Represents the \"Scale VNF\" LCM operation. SCALE_TO_LEVEL | Represents the \"Scale VNF to Level\" LCM operation. CHANGE_FLAVOUR | Represents the \"Change VNF Flavour\" LCM operation. TERMINATE | Represents the \"Terminate VNF\" LCM operation. HEAL | Represents the \"Heal VNF\" LCM operation. OPERATE | Represents the \"Operate VNF\" LCM operation. CHANGE_EXT_CONN | Represents the \"Change external VNF connectivity\" LCM operation. MODIFY_INFO | Represents the \"Modify VNF Information\" LCM operation. CREATE_SNAPSHOT | Represents the \"Create VNF Snapshot\" LCM operation. REVERT_TO_SNAPSHOT | Represents the \"Revert-To VNF Snapshot\" LCM operation. CHANGE_VNFPKG | Represents the \"Change current VNF package\" LCM operation. SELECT_DEPL_MODS | Represents the \"Select VNF deployable modules\" LCM operation\n", + "type": "string", + "enum": [ + "INSTANTIATE", + "SCALE", + "SCALE_TO_LEVEL", + "CHANGE_FLAVOUR", + "TERMINATE", + "HEAL", + "OPERATE", + "CHANGE_EXT_CONN", + "MODIFY_INFO", + "CREATE_SNAPSHOT", + "REVERT_TO_SNAPSHOT", + "CHANGE_VNFPKG", + "SELECT_DEPL_MODS" + ] + }, + "isAutomaticInvocation": { + "description": "The Boolean is a data type having two values (true and false).\n", + "type": "boolean" + }, + "operationParams": { + "description": "Input parameters of the LCM operation. This attribute shall be formatted according to the request data type of the related LCM operation. In addition, the provisions in clause 5.7 shall apply. \nThe following mapping between operationType and the data type of this attribute shall apply: * INSTANTIATE: InstantiateVnfRequest * SCALE: ScaleVnfRequest * SCALE_TO_LEVEL: ScaleVnfToLevelRequest * CHANGE_FLAVOUR: ChangeVnfFlavourRequest * OPERATE: OperateVnfRequest * HEAL: HealVnfRequest * CHANGE_EXT_CONN: ChangeExtVnfConnectivityRequest * TERMINATE: TerminateVnfRequest * MODIFY_INFO: VnfInfoModifications * CREATE_SNAPSHOT: CreateVnfSnapshotRequest * REVERT_TO_SNAPSHOT: RevertToVnfSnapshotRequest * CHANGE_VNFPKG: ChangeCurrentVnfPkgRequest * SELECT_DEPL_MODS: SelectVnfDeployableModulesRequest\n", + "type": "object" + }, + "isCancelPending": { + "description": "The Boolean is a data type having two values (true and false).\n", + "type": "boolean" + }, + "cancelMode": { + "description": "Cancellation mode. GRACEFUL: If the VNF LCM operation occurrence is in \"PROCESSING\" or \"ROLLING_BACK\" state, the VNFM shall not start any new resource management operation and shall wait for the ongoing resource management operations in the underlying system, typically the VIM, to finish execution or to time out. After that, the VNFM shall put the operation occurrence into the FAILED_TEMP state. If the VNF LCM operation occurrence is in \"STARTING\" state, the VNFM shall not start any resource management operation and shall wait for the granting request to finish execution or time out. After that, the VNFM shall put the operation occurrence into the ROLLED_BACK state. FORCEFUL: If the VNF LCM operation occurrence is in \"PROCESSING\" or \"ROLLING_BACK\" state, the VNFM shall not start any new resource management operation, shall cancel the ongoing resource management operations in the underlying system, typically the VIM, and shall wait for the cancellation to finish or to time out. After that, the VNFM shall put the operation occurrence into the FAILED_TEMP state. If the VNF LCM operation occurrence is in \"STARTING\" state, the VNFM shall not start any resource management operation and put the operation occurrence into the ROLLED_BACK state.\n", + "type": "string", + "enum": ["GRACEFUL", "FORCEFUL"] + }, + "error": { + "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807, the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807.\n", + "type": "object", + "required": ["status", "detail"], + "properties": { + "type": { + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n", + "type": "string", + "format": "URI" + }, + "title": { + "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n", + "type": "string" + }, + "status": { + "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n", + "type": "integer" + }, + "detail": { + "description": "A human-readable explanation specific to this occurrence of the problem.\n", + "type": "string" + }, + "instance": { + "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n", + "type": "string", + "format": "URI" + } + } + }, + "resourceChanges": { + "description": "This attribute contains information about the cumulative changes to virtualised resources that were performed so far by the LCM operation since its start, if applicable.\n", + "type": "object", + "properties": { + "affectedVnfcs": { + "description": "Information about VNFC instances that were affected during the lifecycle operation. See note 1.\n", + "type": "array", + "items": { + "description": "This type provides information about added, deleted, modified and temporary VNFCs.\nNOTE:\tThe \"resourceDefinitionId\" attribute provides information to the API consumer \n (i.e. the NFVO) to assist in correlating the resource changes performed during \n the LCM operation with the granted resources in a specific Grant exchange, which \n is identified by the \"grantId\" available in the \"Individual VNF lifecycle management \n operation occurrence\" and the \"id\" in the \"Individual Grant\".\n", + "type": "object", + "required": ["id", "vduId", "changeType", "computeResource"], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "vduId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "changeType": { + "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY For a temporary resource, an AffectedVnfc structure exists as long as the temporary resource exists.\n", + "type": "string", + "enum": ["ADDED", "REMOVED", "MODIFIED", "TEMPORARY"] + }, + "computeResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "resourceDefinitionId": { + "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n", + "type": "string" + }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "affectedVnfcCpIds": { + "description": "Identifiers of CP(s) of the VNFC instance that were affected by the change. Shall be present for those affected CPs of the VNFC instance that are associated to an external CP of the VNF instance. May be present for further affected CPs of the VNFC instance.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } + }, + "addedStorageResourceIds": { + "description": "References to VirtualStorage resources that have been added. Each value refers to a VirtualStorageResourceInfo item in the VnfInstance that was added to the VNFC. It shall be provided if at least one storage resource was added to the VNFC.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } + }, + "removedStorageResourceIds": { + "description": "References to VirtualStorage resources that have been removed. The value contains the identifier of a VirtualStorageResourceInfo item that has been removed from the VNFC, and might no longer exist in the VnfInstance. It shall be provided if at least one storage resource was removed from the VNFC.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } + } + } + } + }, + "affectedVirtualLinks": { + "description": "Information about VL instances that were affected during the lifecycle operation. See notes 1 and 3.\n", + "type": "array", + "items": { + "description": "This type provides information about added, deleted, modified and temporary VLs, and added or removed VNF link ports.\nNOTE 1:\tWhen signalling the addition (LINK_PORT_ADDED) or removal (LINK_PORT_REMOVED) of VNF link ports, \n the \"networkResource\" and \"resourceDefinitionId\" attributes refer to the affected virtual link \n instance, not the link port instance. The resource handles of the affected VNF link ports can be \n found by dereferencing the identifiers in the \"vnfLinkPortIds\" attribute.\nNOTE 2:\tThe \"resourceDefinitionId\" attribute provides information to the API consumer (i.e. the NFVO) to \n assist in correlating the resource changes performed during the LCM operation with the granted \n resources in a specific Grant exchange, which is identified by the \"grantId\" available in the \n \"Individual VNF lifecycle management operation occurrence\" and the \"id\" in the \"Individual Grant\".\n", + "type": "object", + "required": [ + "id", + "vnfVirtualLinkDescId", + "changeType", + "networkResource" + ], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "vnfVirtualLinkDescId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "changeType": { + "description": "Signals the type of change.\nPermitted values: -\tADDED -\tREMOVED -\tMODIFIED -\tTEMPORARY -\tLINK_PORT_ADDED -\tLINK_PORT_REMOVED For a temporary resource, an AffectedVirtualLink structure exists as long as the temporary resource exists. See note 1.\n", + "type": "string", + "enum": [ + "ADDED", + "REMOVED", + "MODIFIED", + "TEMPORARY", + "LINK_PORT_ADDED", + "LINK_PORT_REMOVED" + ] + }, + "networkResource": { + "required": ["resourceId"], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "vnfLinkPortIds": { + "description": "Identifiers of the link ports of the affected VL related to the change. Each identifier references a \"VnfLinkPortInfo\" structure.\nShall be set when changeType is equal to \"LINK_PORT_ADDED\" or \"LINK_PORT_REMOVED\", and the related \"VnfLinkPortInfo\" structures are present (case \"added\") or have been present (case \"removed\") in the \"VnfVirtualLinkResourceInfo\" or \"ExtManagedVirtualLinkInfo\" structures that are represented by the \"vnfVirtualLinkResource┬¼Info\" or \"extManagedVirtualLinkInfo\" attribute in the \"VnfInstance\" structure. See note 1.\n", + "type": "array", + "items": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + } + }, + "resourceDefinitionId": { + "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n", + "type": "string" + }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "affectedExtLinkPorts": { + "description": "Information about external VNF link ports that were affected during the lifecycle operation. See note 1.\n", + "type": "array", + "items": { + "description": "This type provides information about added and deleted external link ports (link ports attached to external virtual links).\nNOTE:\tThe \"resourceDefinitionId\" attribute provides information to the API consumer (i.e. the NFVO) to assist in correlating \n the resource changes performed during the LCM operation with the granted resources in a specific Grant exchange, which \n is identified by the \"grantId\" available in the \"Individual VNF lifecycle management operation occurrence\" and the \"id\" \n in the \"Individual Grant\".\n", + "type": "object", + "required": [ + "id", + "changeType", + "extCpInstanceId", + "resourceHandle" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "changeType": { + "description": "Signals the type of change. Permitted values: -\tADDED - MODIFIED -\tREMOVED\n", + "type": "string", + "enum": ["ADDED", "MODIFIED", "REMOVED"] + }, + "extCpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "resourceHandle": { + "required": ["resourceId"], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "resourceDefinitionId": { + "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n", + "type": "string" + } + } + } + }, + "affectedVirtualStorages": { + "description": "Information about virtualised storage instances that were affected during the lifecycle operation. See note 1.\n", + "type": "array", + "items": { + "description": "This type provides information about added, deleted, modified and temporary virtual storage resources.\nNOTE:\tThe \"resourceDefinitionId\" attribute provides information to the API consumer (i.e. the NFVO) to \n assist in correlating the resource changes performed during the LCM operation with the granted \n resources in a specific Grant exchange, which is identified by the \"grantId\" available in the \n \"Individual VNF lifecycle management operation occurrence\" and the \"id\" in the \"Individual Grant\".\n", + "type": "object", + "required": [ + "id", + "virtualStorageDescId", + "changeType", + "storageResource" + ], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "virtualStorageDescId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "changeType": { + "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY For a temporary resource, an AffectedVirtualStorage structure exists as long as the temporary resource exists.\n", + "type": "string", + "enum": ["ADDED", "REMOVED", "MODIFIED", "TEMPORARY"] + }, + "storageResource": { + "required": ["resourceId"], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "resourceDefinitionId": { + "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n", + "type": "string" + }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, + "changedInfo": { + "description": "This type represents attribute modifications that were performed on an \"Individual VNF instance\" resource. The attributes that can be included consist of those requested to be modified explicitly in the \"VnfInfoModificationRequest\" data structure, and additional attributes of the \"VnfInstance\" data structure that were modified implicitly e.g. when modifying the referenced VNF package.\nNOTE:\tIf present, this attribute (which depends on the value of the \"vnfdId\" attribute) \n was modified implicitly following a request to modify the \"vnfdId\" attribute, by \n copying the value of this attribute from the VNFD in the VNF Package identified by \n the \"vnfdId\" attribute.\n", + "type": "object", + "properties": { + "vnfInstanceName": { + "description": "A string defined in IETF RFC 8259.\n", + "type": "string" + }, + "vnfInstanceDescription": { + "description": "A string defined in IETF RFC 8259.\n", + "type": "string" + }, + "vnfConfigurableProperties": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extensions": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "vimConnectionInfo": { + "description": "If present, this attribute signals modifications the \"vimConnectionInfo\" attribute array in \"VnfInstance\".\n", + "type": "object", + "additionalProperties": { + "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n* NOTE 3: ETSI GS NFV-SOL 009 specifies the means to configure into the VNFM applicable VIM connection\n information via the \"NFV-MANO Configuration and Information Management\" interface.\n* NOTE 4: Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of\n the present document, as well as in-band, by means specified in the present document, care should be taken to\n avoid unintended conflicts in the VNFM when managing such information.\n", + "type": "object", + "required": ["vimType"], + "properties": { + "vimId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vimType": { + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM., CISM, CIR or MCIOP repository. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM, CISM, CIR or MCIOP repository types. The structure of the registry is defined in annex C.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfProvider": { + "description": "A string defined in IETF RFC 8259.\n", + "type": "string" + }, + "vnfProductName": { + "description": "A string defined in IETF RFC 8259.\n", + "type": "string" + }, + "vnfSoftwareVersion": { + "description": "A version.\n", + "type": "string" + }, + "vnfdVersion": { + "description": "A version.\n", + "type": "string" + } + } + }, + "affectedVipCps": { + "description": "Information about virtual IP CP instances that were affected during the execution of the lifecycle management operation.\n", + "type": "array", + "items": { + "description": "This type provides information about added, deleted and modified virtual IP CP instances.\n", + "type": "object", + "required": ["cpInstanceId", "cpdId", "changeType"], + "properties": { + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "changeType": { + "description": "Signals the type of change. Permitted values: -\tADDED -\tREMOVED -\tMODIFIED\n", + "type": "string", + "enum": ["ADDED", "REMOVED", "MODIFIED"] + } + } + } + }, + "changedExtConnectivity": { + "description": "Information about changed external connectivity, if applicable. See note 1.\n", + "type": "array", + "items": { + "description": "This type represents information about an external VL.\nNOTE:\tThis attribute reflects the current configuration information that has resulted from merging into this attribute \n the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the \n most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" \n or \"ChangeCurrentVnfPkgRequest\", or in the Grant response. If applying such change results in an empty list of \n \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its \n parent data structure.\n", + "type": "object", + "required": ["id", "resourceHandle", "currentVnfExtCpData"], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceHandle": { + "required": ["resourceId"], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "extLinkPorts": { + "description": "Link ports of this VL.\n", + "type": "array", + "items": { + "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\nNOTE 1:\tThe use cases UC#4 and UC#5 in clause A.4 of ETSI GS NFV-IFA 007 provide examples for such a configuration. NOTE 2:\tThe value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\" attribute.\n", + "type": "object", + "required": [ + "id", + "resourceHandle" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceHandle": { + "required": ["resourceId"], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "secondaryCpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "trunkResourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + }, + "currentVnfExtCpData": { + "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. See note.\n", + "type": "array", + "items": { + "description": "This type represents configuration information for external CPs created. * NOTE 1: \tIn case this identifier refers to a CPD with trunking enabled, the external CP instances created\n from this CPD will represent ports in a trunk.\n* NOTE 2: \tWithin one VNF instance, all VNFC instances created from a particular VDU have the same external\n connectivity. Thus, given a particular value of the \"cpdId\" attribute, there shall be one\n \"cpConfig\" entry for each VNFC instance that has been or can be created from a VDU which includes\n a CPD identified by the \"cpdId\" attribute. If the cpConfig represents a subport in a trunk,\n all \"cpConfig\" entries in this list shall have the same segmentationId, which means they are\n connected to the same set of external VLs via the trunk.\n* NOTE 3: \tThe map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified\n by a particular key value from the map, i.e. for the disconnection of an existing external\n CP instance addressed by cpInstanceId in the deleted map entry from a particular external\n virtual link, and deletion of that instance in case it represents a subport. Deleting the\n last key from the map removes the affected instance of the \"VnfExtCpData\" structure from\n its parent data structure.\n* NOTE 4: If, as defined by the input parameters of a \"ChangeVnfFlavour\", \"ChangeExtVnfConnectivity\" or\n \"ChangeCurrentVnfPkg\" operation or as part of the Grant response for any of these operations, a cpConfig\n map entry identified by a particular map key value is moved into another \"ExtVirtualLinkData\" or\n \"VnfExtCpData\" structure, this particular cpConfig map entry may be used by an external CP instance\n different than the one that has used it before the operation, or by no external CP instance at all.\n Renaming a CPD identifier during the \"changeCurrentVnfPkg\" operation does not count as moving the related\n \"cpConfig\" map entries to a new \"extCpData\" structure.\n* NOTE 5: Subports need not be used for containerized VNFCs. The application container can send and receive IP \n packets with any VLAN tag as long as the network interface to connect to the secondary container cluster \n network has been configured appropriately. Thus, no individual cpConfig, except the one representing the \n trunk, need be modelled to allow traffic tagged with a particular VLAN through the connection point.\n* NOTE 6: In the case that the cloud native template included in the MCIOP describes the set of VNFC instances, for \n containerized VNFCs individual connection points need not be configured for each VNFC instance. It is only \n required to configure one cpConfig per cpdId, not per VNFC instance. The case of using, for a scalable VDU, a \n cloud native template in the MCIOP that describes one single VNFC instance is not specified in the present \n document version.\n", + "type": "object", + "required": ["cpdId"], + "properties": { + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "cpConfig": { + "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is of type \"IdentifierInVnf\" and is managed by the NFVO. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). See notes 2, 3, 4, 5, 6.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents an externally provided link port, or a network attachment definition resource of secondary container cluster network, or network address information per instance of an external connection point. In the case of VM-based deployment of the VNFC exposing the external CP:\n 1. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the\n external VL.\n 2. In case a link port is not provided, the VNFM shall create a link port on the external VL and use that link port\n to connect the external CP to the external VL.\nIn the case of container-based deployment of the VNFC exposing the external CP, the VNFM shall use the network attachment definition resource of secondary container cluster network when connecting the CP to the external VL.\n* NOTE 1: The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\" for an external CP\n instance connected or to be connected to a virtual network not categorized as secondary container cluster network:\n 1) Void.\n 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes shall be present for an external CP instance\n representing a subport that is to be created, or an external CP instance that is to be created by creating the\n corresponding VNFC or VNF instance during the current or a subsequent LCM operation, or for an existing\n external CP instance that is to be re-configured or added to a particular external virtual link.\n 3) If the \"linkPortId\" attribute is absent, the VNFM shall create a link port.\n 4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\" attribute shall be provided referencing a\n precreated link port, and the VNFM can use means outside the scope of the present document to obtain the\n pre-configured address information for the connection point from the resource representing the link port.\n 5) If both \"cpProtocolData\" and \"linkportId\" are provided, the NFVO shall ensure that the\n cpProtocolData can be used with the pre-created link port referenced by \"linkPortId\".\n\n* NOTE 2: The following conditions apply to the attributes \"netAttDefResourceId\" and \"cpProtocolData\" for an external CP\n instance connected or to be connected to a secondary container cluster network:\n 1) Void.\n 2) The \"netAttDefResourceId\" attribute shall be present and the \"cpProtocolData\" attribute may be present for\n a to-be-created external CP instance or an existing external CP instance.\n* NOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the external CP, e.g. to build a link\n redundant mated pair in SR-IOV cases. When more than one netAttDefResourceId is indicated, all shall belong\n to the same namespace as defined by the corresponding \"containerNamespace\" attribute in the \"resourceHandle\" a attribute in the\n \"NetAttDefResourceData\".\n* NOTE 4: Either linkPortId or netAttDefResourceId may be included, but not both.\n", + "anyOf": [ + { + "required": ["linkPortId"] + }, + { + "required": ["cpProtocolData"] + }, + { + "required": ["netAttDefResourceId"] + } + ], + "type": "object", + "properties": { + "parentCpConfigId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "linkPortId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "createExtLinkPort": { + "description": "Indicates to the VNFM the need to create a dedicated link port for the external CP. If set to True, the VNFM shall create a link port. If set to False, the VNFM shall not create a link port. This attribute is only applicable for external CP instances without a floating IP address that expose a VIP CP instance for which a dedicated IP address is allocated. It shall be present in that case and shall be absent otherwise.\n", + "type": "boolean" + }, + "netAttDefResourceId": { + "description": "Identifier of the \"NetAttDefResourceData\" structure that provides the specification of the interface to attach the external CP to a secondary container cluster network. It is only applicable if the external CP is connected or to be connected to a secondary container cluster network. It shall not be present if the external CP is related to a virtual network not categorized as secondary container cluster network. See notes 2, 3 and 4.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + }, + "cpProtocolData": { + "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. See notes 1 and 2.\n", + "type": "array", + "items": { + "description": "This type represents network protocol data. * NOTE:\tThis attribute allows to signal the addition of further types of layer and protocol\n in future versions of the present document in a backwards-compatible way. In the current\n version of the present document, only IP over Ethernet is supported.\n", + "type": "object", + "required": [ + "layerProtocol" + ], + "properties": { + "layerProtocol": { + "description": "Identifier of layer(s) and protocol(s). Permitted values:\n - IP_OVER_ETHERNET.\n - IP_FOR_VIRTUAL_CP\nSee note\n", + "type": "string", + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] + }, + "ipOverEthernet": { + "description": "This type represents network address data for IP over Ethernet. * NOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. * NOTE 2:\tExactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present. * NOTE 3:\tIf the CP instance represents a subport in a trunk, segmentationId shall be present.\n Otherwise it shall not be present.\n* NOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the actual\n network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header\n of the packets or it may be an identifier used between the application and the NFVI networking\n infrastructure to identify the network sub-interface of the trunk port in question. In the latter\n case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is\n actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationType": { + "description": "Specifies the encapsulation type for the traffics coming in and out of the trunk subport. Permitted values:\n -\tVLAN: the subport uses VLAN as encapsulation type.\n -\tINHERIT: the subport gets its segmentation type from the network it's connected to.\nThis attribute may be present for CP instances that represent subports in a trunk and shall be absent otherwise. If this attribute is not present for a subport CP instance, default value VLAN shall be used.\n", + "type": "string", + "enum": [ + "VLAN", + "INHERIT" + ] + }, + "segmentationId": { + "description": "Identification of the network segment to which the CP instance connects to. See note 3 and note 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "fixedAddresses" + ] + }, + { + "required": [ + "numDynamicAddresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "fixedAddresses": { + "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + }, + "numDynamicAddresses": { + "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "integer" + }, + "addressRange": { + "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + } + } + }, + "virtualCpAddress": { + "description": "This type represents network address data for a virtual CP.\n* NOTE 1: The loadBalancerIp and the loadBalancerSourceRanges attributes are only used if the CIS cluster is set up to be \n able to configure an external load balancer. Otherwise it shall be ignored.\n* NOTE 2: In case the cluster can configure an external load balancer but no loadBalancerIp is provided the container\n cluster will assign an IP address.\n* NOTE 3: The attribute is only relevant if the virtual CP is instantiated in a cluster that supports configuration of IP\n address pools for virtual CPs. Otherwise it shall be ignored. MetalLB is an example of a solution for\n Kubernetes┬« that supports configuration of address pools for load balancer services.\n* NOTE 4: The loadBalancerIp, addressPoolName and the externalIp attributes shall not be present at the same time. \n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "externalIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which the CIS cluster will assign an IP address to the virtual CP. See notes 3 and 4.\n", + "type": "string" + }, + "loadBalancerSourceRanges": { + "description": "List of client IP address ranges allowed to access an external load balancer. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "extNetAttDefResource": { + "description": "Network attachment definition resources that provide the specification of the interface to attach connection points to this VL.\n", + "type": "array", + "items": { + "description": "This type contains information related to a network attachment definition resource that provides the specification of the interface used to connect one or multiple connection points to a secondary container cluster network.\n", + "type": "object", + "required": [ + "netAttDefResourceInfoId", + "netAttDefResource" + ], + "properties": { + "netAttDefResourceInfoId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "netAttDefResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "associatedExtCpId": { + "description": "Identifier of the external CP associated to this network attachment definition resource. Shall be present when the network attachment definition resource is used for external connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } + }, + "associatedVnfcCpId": { + "description": "Identifier of the VNFC CP associated to this network attachment definition resource. May be present when the network attachment definition resource is used for internal connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } + } + } + } + } + } + } + }, + "modificationsTriggeredByVnfPkgChange": { + "description": "This type represents attribute modifications that were performed on an \"Individual VNF instance\" resource when changing the current VNF package. The attributes that can be included consist of those requested to be modified explicitly in the \"ChangeCurrentVnfPkgRequest\" data structure, and additional attributes of the \"VnfInstance\" data structure that were modified implicitly during the operation.\nNOTE 1:\tThis attribute represents the delta (semantics as per IETF RFC 7396, JSON Merge Patch) between the value \n of the attribute at the start of the \"Change current VNF package\" operation and the value of the attribute \n at its completion.\nNOTE 2:\tIf present, this attribute (which depends on the value of the \"vnfdId\" attribute) was modified implicitly \n during the related operation and contains a copy of the value of the related attribute from the VNFD in the \n VNF Package identified by the \"vnfdId\" attribute.\n", + "type": "object", + "properties": { + "vnfConfigurableProperties": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extensions": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfProvider": { + "description": "If present, this attribute signals the new value of the \"vnfProvider\" attribute in \"VnfInstance\". See note 2.\n", + "type": "string" + }, + "vnfProductName": { + "description": "If present, this attribute signals the new value of the \"vnfProductName\" attribute in \"VnfInstance\". See note 2.\n", + "type": "string" + }, + "vnfSoftwareVersion": { + "description": "A version.\n", + "type": "string" + }, + "vnfdVersion": { + "description": "A version.\n", + "type": "string" + }, + "vimConnectionInfo": { + "description": "If present, this attribute signals the changes to VIM connection info that were passed in the related \"ChangeCurrentVnfPkgRequest\" structure.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n* NOTE 3: ETSI GS NFV-SOL 009 specifies the means to configure into the VNFM applicable VIM connection\n information via the \"NFV-MANO Configuration and Information Management\" interface.\n* NOTE 4: Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of\n the present document, as well as in-band, by means specified in the present document, care should be taken to\n avoid unintended conflicts in the VNFM when managing such information.\n", + "type": "object", + "required": [ + "vimType" + ], + "properties": { + "vimId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vimType": { + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM., CISM, CIR or MCIOP repository. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM, CISM, CIR or MCIOP repository types. The structure of the registry is defined in annex C.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, + "vnfSnapshotInfoId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "lcmCoordinations": { + "description": "Information about LCM coordination actions (see clause 10 in ETSI GS NFV-SOL002) related to this LCM operation occurrence.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "coordinationActionName", + "startTime", + "endpointType" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "coordinationActionName": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "coordinationResult": { + "description": "The enumeration LcmCoordResultType defines the permitted values to represent the result of executing an LCM coordination action. The coordination result also implies the action to be performed by the VNFM as the follow-up to this coordination. Value | Description ------|------------ CONTINUE | The related LCM operation shall be continued, staying in the state \"PROCESSING\". ABORT | The related LCM operation shall be aborted by transitioning into the state \"FAILED_TEMP\". CANCELLED | The coordination action has been cancelled upon request of the API consumer, i.e. the VNFM. The related LCM operation shall be aborted by transitioning into the state \"FAILED_TEMP\".\n", + "type": "string", + "enum": [ + "CONTINUE", + "ABORT", + "CANCELLED" + ] + }, + "startTime": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "endTime": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "delay": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "endpointType": { + "description": "The endpoint type used by this coordination action. Valid values: •\tMGMT: coordination with other operation supporting management systems (e.g. EM) •\tVNF: coordination with the VNF instance\n", + "type": "string", + "enum": [ + "MGMT", + "VNF" + ] + } + } + } + }, + "rejectedLcmCoordinations": { + "description": "Information about LCM coordination actions (see clause 10 in ETSI GS NFV-SOL002) that were rejected by 503 error which means they can be tried again after a delay. See note 5.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "coordinationActionName", + "rejectionTime", + "endpointType", + "delay" + ], + "properties": { + "coordinationActionName": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "rejectionTime": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "delay": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "endpointType": { + "description": "The endpoint type used by this coordination action. Valid values: •\tMGMT: coordination with other operation supporting management systems (e.g. EM) •\tVNF: coordination with the VNF instance\n", + "type": "string", + "enum": [ + "MGMT", + "VNF" + ] + } + } + } + }, + "warnings": { + "description": "Warning messages that were generated while the operation was executing.\nIf the operation has included LCM coordination actions and these have resulted in warnings, such warnings should be added to this attribute.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "_links": { + "description": "Links to resources related to this resource.\n", + "type": "object", + "required": [ + "self", + "vnfInstance" + ], + "properties": { + "self": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "vnfInstance": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "grant": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "cancel": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "retry": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "rollback": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "fail": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "vnfSnapshot": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + } + } + } + } + } +} diff --git a/interconnectedTestCases/SOL003/schemas/vnfInstance.schema.json b/interconnectedTestCases/SOL003/schemas/vnfInstance.schema.json index 0fb54dee1e6d98c326af9c405c688de05f7173e9..ec18b531ee7858197e10c97e7ae19d2656c25a2b 100644 --- a/interconnectedTestCases/SOL003/schemas/vnfInstance.schema.json +++ b/interconnectedTestCases/SOL003/schemas/vnfInstance.schema.json @@ -1,239 +1,1811 @@ { - "description": "This type represents a VNF instance.\n", - "type": "object", - "required": [ - "id", - "vnfdId", - "vnfProvider", - "vnfProductName", - "vnfSoftwareVersion", - "vnfdVersion", - "instantiationState" - ], - "properties": { - "id": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "vnfInstanceName": { - "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n", - "type": "string" - }, - "vnfInstanceDescription": { - "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n", - "type": "string" - }, - "vnfdId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "vnfProvider": { - "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n", - "type": "string" - }, - "vnfProductName": { - "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n", - "type": "string" - }, - "vnfSoftwareVersion": { - "description": "A version.\n", - "type": "string" - }, - "vnfdVersion": { - "description": "A version.\n", - "type": "string" - }, - "vnfConfigurableProperties": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" - }, - "vimConnectionInfo": { - "description": "Information about VIM connections to be used for managing the resources for the VNF instance. This attribute shall only be supported and present if VNF-related resource management in direct mode is applicable. This attribute can be modified with the PATCH method.\n", - "type": "array", - "items": { - "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n", + "description": "This type represents a VNF instance.\n", + "type": "object", + "required": [ + "id", + "vnfdId", + "vnfProvider", + "vnfProductName", + "vnfSoftwareVersion", + "vnfdVersion", + "instantiationState", + "_links" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfInstanceName": { + "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n", + "type": "string" + }, + "vnfInstanceDescription": { + "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfProvider": { + "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n", + "type": "string" + }, + "vnfProductName": { + "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n", + "type": "string" + }, + "vnfSoftwareVersion": { + "description": "A version.\n", + "type": "string" + }, + "vnfdVersion": { + "description": "A version.\n", + "type": "string" + }, + "vnfConfigurableProperties": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "vimConnectionInfo": { + "description": "Information about VIM or CISM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if - the resources of at least of the VNFCs are managed by a VIM and VNF-related resource management in direct mode is applicable. - the resources of at least of the VNFCs are managed by a CISM. This attribute can be modified with the PATCH method. If VIM connection information is provisioned to the VNFM by means outside the scope of the present document, the information in the \"vimConnectionInfo\" attribute provides necessary information for binding the VnfInstance representing the \"Individual VNF instance\" to the applicable VIM connection information used to perform resource management for the VNF instance. See also the definition of the \"VimConnectionInfo\" in clause 4.4.1.6.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n* NOTE 3: ETSI GS NFV-SOL 009 specifies the means to configure into the VNFM applicable VIM connection\n information via the \"NFV-MANO Configuration and Information Management\" interface.\n* NOTE 4: Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of\n the present document, as well as in-band, by means specified in the present document, care should be taken to\n avoid unintended conflicts in the VNFM when managing such information.\n", + "type": "object", + "required": [ + "vimType" + ], + "properties": { + "vimId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vimType": { + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM., CISM, CIR or MCIOP repository. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM, CISM, CIR or MCIOP repository types. The structure of the registry is defined in annex C.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "cirConnectionInfo": { + "description": "Information about the CIR connection for managing OS container images for the VNF instance. Shall be present when all or part of the VNF is realized by a set of OS containers and shall be absent otherwise.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n* NOTE 3: ETSI GS NFV-SOL 009 specifies the means to configure into the VNFM applicable VIM connection\n information via the \"NFV-MANO Configuration and Information Management\" interface.\n* NOTE 4: Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of\n the present document, as well as in-band, by means specified in the present document, care should be taken to\n avoid unintended conflicts in the VNFM when managing such information.\n", + "type": "object", + "required": [ + "vimType" + ], + "properties": { + "vimId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vimType": { + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM., CISM, CIR or MCIOP repository. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM, CISM, CIR or MCIOP repository types. The structure of the registry is defined in annex C.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "mciopRepositoryInfo": { + "description": "Information about the MCIOP repository for the VNF instance. Shall be present when all or part of the VNF is realized by a set of OS containers and shall be absent otherwise. See note 1.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n* NOTE 3: ETSI GS NFV-SOL 009 specifies the means to configure into the VNFM applicable VIM connection\n information via the \"NFV-MANO Configuration and Information Management\" interface.\n* NOTE 4: Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of\n the present document, as well as in-band, by means specified in the present document, care should be taken to\n avoid unintended conflicts in the VNFM when managing such information.\n", + "type": "object", + "required": [ + "vimType" + ], + "properties": { + "vimId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vimType": { + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM., CISM, CIR or MCIOP repository. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM, CISM, CIR or MCIOP repository types. The structure of the registry is defined in annex C.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "certificateInfo": { + "description": "This type provides input information related to certificate and certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateConfigurationInfo": { + "description": "This type provides input information related to certificate management.\n", "type": "object", "required": [ - "id", - "vimType" + "securityPolicy" ], "properties": { - "id": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "vimId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "vimType": { - "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n", - "type": "string" + "certificateBaseProfile": { + "description": "Information for certificate profile.", + "type": "array", + "items": { + "description": "NOTE: At least one overriding attributes shall be present, otherwise shall be absent.\nThis type provides input information to override certificate base profile for certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "issuer": { + "description": "Issuer of certificates. See note.", + "type": "string" + }, + "issuerUniqueIdentifier": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "subject": { + "description": "This type provides input information related to the subject of the certificate.\nNOTE: At least one overriding attributes shall be present, otherwise shall be absent.\n", + "type": "object", + "properties": { + "commonName": { + "description": "Information of the certification target subject FQDN. Can be set empty when this certificate is used for encrypted communication using IP address. See note.\n", + "type": "string" + }, + "organization": { + "description": "Information of the certification target subject Organization. See note.", + "type": "string" + }, + "country": { + "description": "Information of the certification target subject Country. See note.", + "type": "string" + }, + "state": { + "description": "Information of the certification target subject State. See note.", + "type": "string" + }, + "locality": { + "description": "Information of the certification target subject Locality. See note.", + "type": "string" + }, + "emailAddress": { + "description": "Information of the certification contact email address. See note.", + "type": "string" + } + } + }, + "subjectUniqueIdentifier": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "basicConstraints": { + "description": "Basic constraints of certificates. See note.", + "type": "string" + }, + "issuerAltName": { + "description": "Alternative name of issuer of certificates in this NS. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "subjectAltName": { + "description": "Alternative name of subject of certificates. Shall be present when this certificate is used for encrypted communication using IP address and subjectAltName attribute of CertificateBaseProfile in CertificateDesc of VNFD is empty (see ETSI GS NFV-IFA 011 [14], clause 7.1.19.4). See note.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "nameConstraints": { + "description": "Name constraints of certificates. See note.", + "type": "array", + "items": { + "type": "string" + } + } + } + } }, - "interfaceInfo": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" + "securityPolicy": { + "description": "Information for security policy to be satisfied for certificate.", + "type": "array", + "items": { + "description": "This type provides input information related to security policy for certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "maxValidityPeriod": { + "description": "Allowed max validity period for certificates.", + "type": "number" + }, + "allowedAlgorithm": { + "description": "Allowed signature algorithm.", + "type": "string" + }, + "minimumKeyLength": { + "description": "Minimum key length for certificates.", + "type": "number" + } + } + } }, - "accessInfo": { + "delegationSupportedCertificateManagements": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" }, - "extra": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" + "cmfInfo": { + "description": "This type provides input information related to CMF for certificate management.\n", + "type": "object", + "required": [ + "id", + "endPoint", + "supportedProtocol" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "endPoint": { + "description": "End point of CMF instance.", + "type": "object", + "properties": { + "ipAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "link": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + } + } + }, + "supportedProtocol": { + "description": "Supported protocols by CMF instance.", + "type": "array", + "items": { + "description": "Supported protocol by CMF instance.", + "type": "string", + "enum": [ + "CMP", + "CMPv2", + "EST", + "SCEP" + ] + } + }, + "certificateChain": { + "description": "Certificate chain that this CMF provides.", + "type": "array", + "items": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, + "certificateContents": { + "description": "Information for contents of issued certificates. The information contained in this attribute may be updated over time during the VNF LCM, e.g., certificate(s) renewal.\n", + "type": "array", + "items": { + "description": "This type provides input information related to certificate content.\nNOTE: The CertificateDesc data type is defined in clause 7.1.19.2 of ETSI GS NFV IFA 011 [10].\n", + "type": "object", + "required": [ + "id", + "certificateDescId", + "certificateType" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateDescId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "certificateType": { + "description": "Type of this certificate.", + "type": "string", + "enum": [ + "VNFCI_CERT", + "VNFOAM_CERT" + ] + }, + "supportedCertificateManagements": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "version": { + "description": "A version.\n", + "type": "string" + }, + "serialNumber": { + "description": "Serial number of this certificate.", + "type": "integer" + }, + "signatureAlgorithm": { + "description": "Algorithm of this certificate's signature.", + "type": "string" + }, + "issuer": { + "description": "Issuer of this certificate.", + "type": "string" + }, + "notBefore": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "notAfter": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "subject": { + "description": "Subject of this certificate.", + "type": "string" + }, + "publicKeyAlgorithm": { + "description": "Algorithm of this certificate's public key.", + "type": "string" + }, + "publicKey": { + "description": "Public key of this certificate.", + "type": "string" + }, + "certificateExtensions": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } } } } - }, - "instantiationState": { - "description": "The instantiation state of the VNF.\n", - "type": "string", - "enum": [ - "NOT_INSTANTIATED", - "INSTANTIATED" - ] - }, - "instantiatedVnfInfo": { - "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n", - "type": "object", - "required": [ - "flavourId", - "vnfState" - ], - "properties": { - "flavourId": { + } + }, + "instantiationState": { + "description": "The instantiation state of the VNF. Permitted values: - NOT_INSTANTIATED: The VNF instance is terminated or not instantiated. - INSTANTIATED: The VNF instance is instantiated.\n", + "type": "string", + "enum": [ + "NOT_INSTANTIATED", + "INSTANTIATED" + ] + }, + "instantiatedVnfInfo": { + "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n", + "type": "object", + "required": [ + "flavourId", + "vnfState" + ], + "properties": { + "flavourId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfState": { + "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n", + "type": "string", + "enum": [ + "STARTED", + "STOPPED" + ] + }, + "scaleStatus": { + "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect.\nThis attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\nFor an aspect that has not been deployed because the related deployableModule has not been selected, it indicates the scale level that has been requested in the instantiation or in a scaling operation, or, if none has been requested in any of them, the scale level applicable to the aspect based on the default instantiation level. See note 8.\n", + "type": "array", + "items": { + "description": "This type represents the scale level of a VNF instance related to a scaling aspect.\n", + "type": "object", + "required": [ + "aspectId", + "scaleLevel" + ], + "properties": { + "aspectId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "scaleToLevel": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "maxScaleLevels": { + "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n", + "type": "array", + "items": { + "description": "This type represents the scale level of a VNF instance related to a scaling aspect.\n", + "type": "object", + "required": [ + "aspectId", + "scaleLevel" + ], + "properties": { + "aspectId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "scaleToLevel": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "selectedDeployableModule": { + "description": "References a currently selected deployable module, as defined in the VNFD, that has already completed the instantiation of its VNFCs.\n", + "type": "array", + "items": { "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" - }, - "vnfState": { - "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n", - "type": "string", - "enum": [ - "STARTED", - "STOPPED" - ] - }, - "scaleStatus": { - "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n", - "type": "array", - "items": { - "required": [ - "aspectId", - "scaleLevel" - ], - "type": "object", - "properties": { - "aspectId": { + } + }, + "resourceCapacityDefinition": { + "description": "Shows current values of VDU attributes related to resource capacity, if different to the default values from the VNFD, as indicated in the (one or more) request(s) of all completed VNF LCM operation(s) that contain this attribute. If an attribute value has been modified multiple times, only the last value is shown. The values indicated in this attribute are applicable to all VNFC instances based on the VDU to which the resourceCapacityDefinition is related.\n", + "type": "array", + "items": { + "description": "This type represents selected values for capacity related VDU attributes.\n* NOTE: Resource definitions not related to a VDU are not considered in this version of the present document.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "tag": { + "description": "Tag assigned by the issuer of a VNF LCM operation request that contains this data type with values to be applied to a VDU. It is used for tracking purposes.\nThe tag is preserved in the run time record as long as at least one value of the capacity related attributes associated with that tag is still valid, i.e., it has not been modified by a later VNF LCM operation request.\nAt most one tag can be included when the data type is used in a VNF LCM operation request.\nWhen the data type is used in the VnfInstance data type it may contain multiple tags, namely those provided in VNF LCM requests, if at least one of the values provided in that request associated to that tag is still applicable in the VNFCs created from this VDU, i.e., it has not been modified by a later request.\n", + "type": "array", + "items": { + "description": "A string defined in IETF RFC 8259.\n", + "type": "string" + } + }, + "type": { + "description": "Type of the resource definition referenced.\n", + "type": "string", + "enum": [ + "COMPUTE", + "STORAGE", + "OSCONTAINER" + ] + }, + "vduId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "osContainerDescData": { + "description": "Indicates values for resource capacity related attributes in an OsContainerDesc. It shall be present when the attribute 'type' indicates OSCONTAINER and absent otherwise.\n", + "type": "array", + "items": { + "description": "This type represents selected values for capacity related VDU attributes of an OsContainer resource.\n* NOTE: At least one of the attributes shall be present.\n", + "type": "object", + "required": [ + "resourceTemplateId" + ], + "oneOf": [ + { + "required": [ + "requestedCpuResources" + ] + }, + { + "required": [ + "requestedMemoryResources" + ] + }, + { + "required": [ + "requestedEphemeralStorageResources" + ] + }, + { + "required": [ + "extendedResourceRequests" + ] + }, + { + "required": [ + "cpuResourceLimit" + ] + }, + { + "required": [ + "memoryResourceLimit" + ] + }, + { + "required": [ + "ephemeralStorageResourceLimit" + ] + }, + { + "required": [ + "hugePageResources" + ] + } + ], + "properties": { + "resourceTemplateId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "requestedCpuResources": { + "description": "Number of CPU resources requested for the container in milli-CPU. See note.\n", + "type": "integer" + }, + "requestedMemoryResources": { + "description": "Amount of memory resources requested for the container expressed in the same units as specified in the requested_memory_resources_valid_values property in VNFD (clause 6.8.12 in ETSI GS NFV-SOL 001 [14]) for this container descriptor. See note.\n", + "type": "array", + "items": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + } + }, + "requestedEphemeralStorageResources": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "extendedResourceRequests": { + "description": "Map of the amount of extended resources of the type indicated in the key. The key is a string that identifies an extended resource indicated in the extended_resource_requests property in the VNFD (clause 6.8.12 in ETSI GS NFV-SOL 001 [14]) for this container descriptor. The value is an integer that indicates the required amount for a particular extended resource. See note.\n", + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "cpuResourceLimit": { + "description": "Number of CPU resources the container can maximally use in milli-CPU. See note.\n", + "type": "integer" + }, + "memoryResourceLimit": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "ephemeralStorageResourceLimit": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "hugePageResources": { + "description": "Map of the total size values required for all the hugepages of the size indicated in the key. The key is a string and corresponds to one of the values of the hugepage sizes indicated in the huge_pages_resources property in the VNFD (clause 6.8.12 in ETSI GS NFV-SOL 001 [14]) for this container descriptor. The value is a number that indicates the required total size expressed in the same units as in the huge_pages_resource property in the VNFD (clause 6.8.12 in ETSI GS NFV-SOL 001 [14]) that indicates the valid values for required total size for the particular hugepage size. See note.\n", + "type": "object", + "additionalProperties": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + } + } + } + } + }, + "virtualComputeDescData": { + "description": "This type represents selected values for capacity related VDU attributes of the virtual compute resource of a VM.\n* NOTE: At least one of the attributes shall be present.\n", + "type": "object", + "required": [ + "resourceTemplateId" + ], + "oneOf": [ + { + "required": [ + "numVirtualCpu" + ] + }, + { + "required": [ + "virtualMemSize" + ] + }, + { + "required": [ + "sizeOfVirtualDisk" + ] + }, + { + "required": [ + "hugePagesRequirements" + ] + } + ], + "properties": { + "resourceTemplateId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "numVirtualCpu": { + "description": "Number of virtual CPUs. See note.\n", + "type": "integer" + }, + "virtualMemSize": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "sizeOfVirtualDisk": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "hugePagesRequirements": { + "description": "Map of the total size values required for all the hugepages of the size indicated in the key. The key is a string and corresponds to one of the values of the hugepage sizes indicated in the huge_pages_requirements property in the VNFD (clause 6.2.7.2 in ETSI GS NFV-SOL 001 [14]) for this virtual compute descriptor. The value is a numberthat indicates the required total size expressed in the same units as in the huge_pages_requirements property in the VNFD (clause 6.2.7.2 in ETSI GS NFV-SOL 001 [14]) that indicates the valid vaues for required total size for the particular hugepage size. See note.\n", + "type": "object", + "additionalProperties": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + } + } + } + }, + "virtualStorageDescData": { + "description": "Indicates the value for the storage size related attribute in an VirtualStorageDesc. It shall be present when the attribute 'type' indicates STORAGE and absent otherwise.\n", + "type": "array", + "items": { + "description": "This type represents selected values for capacity related VDU attributes of the virtual storage resource.\n", + "type": "object", + "required": [ + "resourceTemplateId", + "sizeOfStorage" + ], + "properties": { + "resourceTemplateId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "sizeOfStorage": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + } + } + } + } + } + } + }, + "extCpInfo": { + "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.See note 7.\n", + "type": "array", + "items": { + "description": "This type represents information about an external CP of a VNF.\nNOTE 1:\tThe attributes \"associatedVnfcCpId\", \"associatedVipCpId\", \"associatedVirtualCpId\" and \n \"associatedVnfVirtualLinkId\" are mutually exclusive. Exactly one shall be present.\nNOTE 2:\tAn external CP instance is not associated to a link port in the cases indicated for the \n \"extLinkPorts\" attribute in clause 4.4.1.11.\nNOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network \n attachment definition resource is needed to fulfil the connectivity requirements of the external \n CP, e.g. to build a link redundant mated pair in SR-IOV cases.\nNOTE 4: When more than one netAttDefResourceId is indicated, all shall belong to the same namespace.\n", + "type": "object", + "required": [ + "id", + "cpdId", + "cpConfigId", + "cpProtocolInfo" + ], + "oneOf": [ + { + "required": [ + "associatedVnfcCpId" + ] + }, + { + "required": [ + "associatedVipCpId" + ] + }, + { + "required": [ + "associatedVnfVirtualLinkId" + ] + } + ], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "cpConfigId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "cpProtocolInfo": { + "description": "Network protocol information for this CP.\n", + "type": "array", + "items": { + "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", + "type": "object", + "required": [ + "layerProtocol" + ], + "properties": { + "layerProtocol": { + "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", + "type": "string", + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] + }, + "ipOverEthernet": { + "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationId": { + "description": "Identification of the network segment to which the Cp instance connects to. See notes 3 and 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "addresses": { + "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + }, + "isDynamic": { + "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n", + "type": "boolean" + }, + "addressRange": { + "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + } + } + }, + "virtualCpAddress": { + "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which an IP address is assigned to the virtual CP.\n", + "type": "string" + } + } + } + } + } + }, + "extLinkPortId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "associatedVnfcCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "associatedVipCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "associatedVirtualCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "associatedVnfVirtualLinkId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "netAttDefResourceId": { + "description": "Identifier of the \"NetAttDefResourceInfo\" structure that provides the specification of the interface to attach the connection point to a secondary container cluster network. See notes 3 and 4.\nIt shall be present if the external CP is associated to a VNFC realized by one or a set of OS containers and is connected to a secondary container cluster network. It shall not be present otherwise.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "vipCpInfo": { + "description": "VIP CPs that are part of the VNF instance. Shall be present when that particular VIP CP of the VNFC instance is associated to an external CP of the VNF instance. May be present otherwise.\n", + "type": "array", + "minItems": 1, + "items": { + "description": "This type provides information related to virtual IP (VIP) CP.\nNOTE 1:\tIt is possible that there is no associated VnfcCp because the VIP CP is available but not associated yet. NOTE 2: If only the value or the presence of this attribute is changed in the \"VipCpInfo\" structure by an LCM operation occurrence, this does not represent a change that requires including a related \"AffectedVipCp\" structure in the VNF LCM operation occurrence notifications or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", + "type": "object", + "required": [ + "cpInstanceId", + "cpdId" + ], + "properties": { + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfExtCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpProtocolInfo": { + "description": "Protocol information for this CP. There shall be one cpProtocolInfo for layer 3. There may be one cpProtocolInfo for layer 2.\n", + "type": "array", + "items": { + "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", + "type": "object", + "required": [ + "layerProtocol" + ], + "properties": { + "layerProtocol": { + "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", + "type": "string", + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] + }, + "ipOverEthernet": { + "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationId": { + "description": "Identification of the network segment to which the Cp instance connects to. See notes 3 and 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "addresses": { + "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + }, + "isDynamic": { + "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n", + "type": "boolean" + }, + "addressRange": { + "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + } + } + }, + "virtualCpAddress": { + "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which an IP address is assigned to the virtual CP.\n", + "type": "string" + } + } + } + } + } + }, + "associatedVnfcCpIds": { + "description": "Identifiers of the VnfcCps that share the virtual IP address allocated to the VIP CP instance. See note.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } + }, + "vnfLinkPortId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "virtualCpInfo": { + "description": "Virtual CPs that are part of the VNF instance. Shall be present when a particular Virtual CP is associated to an external CP of the VNF instance. May be present otherwise.\n", + "type": "array", + "items": { + "description": "This type provides information related to a virtual CP instance of a VNF.\nNOTE 1: A consumer of the VNF LCM interface can learn the actual VNFC instances implementing the service \n accessible via the virtual CP instance by querying the \"vnfcResourceInfo\" from the \"InstantiatedVnfInfo\" \n and filtering by corresponding \"vduIds\" values.\nNOTE 2: The information can be omitted because it is already available as part of the external CP information in the \n VnfExtCpInfo structure.\n", + "type": "object", + "required": [ + "cpInstanceId", + "cpdId", + "resourceHandle", + "vduIds" + ], + "properties": { + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "resourceHandle": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "vnfExtCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpProtocolInfo": { + "description": "Protocol information for this CP. There shall be one cpProtocolInfo for each layer protocol supported. This attribute may be omitted if the virtual CP is exposed as an external CP. See note 2.\n", + "type": "array", + "items": { + "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", + "type": "object", + "required": [ + "layerProtocol" + ], + "properties": { + "layerProtocol": { + "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", + "type": "string", + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] + }, + "ipOverEthernet": { + "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationId": { + "description": "Identification of the network segment to which the Cp instance connects to. See notes 3 and 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "addresses": { + "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + }, + "isDynamic": { + "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n", + "type": "boolean" + }, + "addressRange": { + "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + } + } + }, + "virtualCpAddress": { + "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which an IP address is assigned to the virtual CP.\n", + "type": "string" + } + } + } + } + } + }, + "vduIds": { + "description": "Reference to the VDU(s) which implement the service accessible via the virtual CP instance. See note 1.\n", + "type": "array", + "minItems": 1, + "items": { "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" - }, - "scaleLevel": { - "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n", - "type": "integer" } + }, + "additionalServiceInfo": { + "description": "Additional service identification information of the virtual CP instance.\n", + "type": "array", + "items": { + "description": "This type provides additional service information of the virtual CP instance used to expose properties of the virtual CP to NFV-MANO.\nNOTE: This attribute shall only be present if additional information is needed to identify the service \n termination within the VNF, such as for example a URL path information in an HTTP request required \n to allow a single virtual CP IP address to be used for several HTTP based services that use the \n same port number.\n", + "type": "object", + "required": [ + "portInfo" + ], + "properties": { + "portInfo": { + "description": "Service port numbers exposed by the virtual CP instance.\n", + "minItems": 1, + "type": "array", + "items": { + "description": "This type describes the service identifying port properties exposed by the virtual CP instance.\n", + "type": "object", + "required": [ + "name", + "port", + "portConfigurable" + ], + "properties": { + "name": { + "description": "The name of the port exposed by the virtual CP instance.\n", + "type": "string" + }, + "protocol": { + "description": "The L4 protocol for this port exposed by the virtual CP instance.\nPermitted values: - TCP - UDP - SCTP\n", + "type": "string", + "enum": [ + "TCP", + "UDP", + "SCTP" + ] + }, + "port": { + "description": "The L4 port number exposed by the virtual CP instance.\n", + "type": "integer" + }, + "portConfigurable": { + "description": "The Boolean is a data type having two values (true and false).\n", + "type": "boolean" + } + } + } + }, + "serviceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" } } - }, - "extCpInfo": { - "description": "Information about the external CPs exposed by the VNF instance.\n", - "type": "array", - "minItems": 1, - "items": { - "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n", - "type": "object", - "required": [ - "id", - "cpdId", - "cpProtocolInfo" - ], - "properties": { - "id": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" - }, - "cpdId": { - "description": "An identifier that is unique within a VNF descriptor.\n", - "type": "string" - }, - "cpProtocolInfo": { - "description": "Network protocol information for this CP.\n", - "type": "array", - "items": { - "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n", - "required": [ - "layerProtocol" - ], + } + }, + "extVirtualLinkInfo": { + "description": "Information about the external VLs the VNF instance is connected to.\n", + "type": "array", + "items": { + "description": "This type represents information about an external VL.\nNOTE:\tThis attribute reflects the current configuration information that has resulted from merging into this attribute \n the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the \n most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" \n or \"ChangeCurrentVnfPkgRequest\", or in the Grant response. If applying such change results in an empty list of \n \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its \n parent data structure.\n", + "type": "object", + "required": [ + "id", + "resourceHandle", + "currentVnfExtCpData" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceHandle": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", "properties": { - "layerProtocol": { - "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n", - "type": "string", - "enum": [ - "IP_OVER_ETHERNET" - ] + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" }, - "ipOverEthernet": { - "description": "This type represents information about a network address that has been assigned.\n", + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "extLinkPorts": { + "description": "Link ports of this VL.\n", + "type": "array", + "items": { + "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\nNOTE 1:\tThe use cases UC#4 and UC#5 in clause A.4 of ETSI GS NFV-IFA 007 provide examples for such a configuration. NOTE 2:\tThe value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\" attribute.\n", + "type": "object", + "required": [ + "id", + "resourceHandle" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceHandle": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "secondaryCpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "trunkResourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + }, + "currentVnfExtCpData": { + "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. See note.\n", + "type": "array", + "items": { + "description": "This type represents configuration information for external CPs created. * NOTE 1: \tIn case this identifier refers to a CPD with trunking enabled, the external CP instances created\n from this CPD will represent ports in a trunk.\n* NOTE 2: \tWithin one VNF instance, all VNFC instances created from a particular VDU have the same external\n connectivity. Thus, given a particular value of the \"cpdId\" attribute, there shall be one\n \"cpConfig\" entry for each VNFC instance that has been or can be created from a VDU which includes\n a CPD identified by the \"cpdId\" attribute. If the cpConfig represents a subport in a trunk,\n all \"cpConfig\" entries in this list shall have the same segmentationId, which means they are\n connected to the same set of external VLs via the trunk.\n* NOTE 3: \tThe map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified\n by a particular key value from the map, i.e. for the disconnection of an existing external\n CP instance addressed by cpInstanceId in the deleted map entry from a particular external\n virtual link, and deletion of that instance in case it represents a subport. Deleting the\n last key from the map removes the affected instance of the \"VnfExtCpData\" structure from\n its parent data structure.\n* NOTE 4: If, as defined by the input parameters of a \"ChangeVnfFlavour\", \"ChangeExtVnfConnectivity\" or\n \"ChangeCurrentVnfPkg\" operation or as part of the Grant response for any of these operations, a cpConfig\n map entry identified by a particular map key value is moved into another \"ExtVirtualLinkData\" or\n \"VnfExtCpData\" structure, this particular cpConfig map entry may be used by an external CP instance\n different than the one that has used it before the operation, or by no external CP instance at all.\n Renaming a CPD identifier during the \"changeCurrentVnfPkg\" operation does not count as moving the related\n \"cpConfig\" map entries to a new \"extCpData\" structure.\n* NOTE 5: Subports need not be used for containerized VNFCs. The application container can send and receive IP \n packets with any VLAN tag as long as the network interface to connect to the secondary container cluster \n network has been configured appropriately. Thus, no individual cpConfig, except the one representing the \n trunk, need be modelled to allow traffic tagged with a particular VLAN through the connection point.\n* NOTE 6: In the case that the cloud native template included in the MCIOP describes the set of VNFC instances, for \n containerized VNFCs individual connection points need not be configured for each VNFC instance. It is only \n required to configure one cpConfig per cpdId, not per VNFC instance. The case of using, for a scalable VDU, a \n cloud native template in the MCIOP that describes one single VNFC instance is not specified in the present \n document version.\n", + "type": "object", + "required": [ + "cpdId" + ], + "properties": { + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "cpConfig": { + "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is of type \"IdentifierInVnf\" and is managed by the NFVO. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). See notes 2, 3, 4, 5, 6.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents an externally provided link port, or a network attachment definition resource of secondary container cluster network, or network address information per instance of an external connection point. In the case of VM-based deployment of the VNFC exposing the external CP:\n 1. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the\n external VL.\n 2. In case a link port is not provided, the VNFM shall create a link port on the external VL and use that link port\n to connect the external CP to the external VL.\nIn the case of container-based deployment of the VNFC exposing the external CP, the VNFM shall use the network attachment definition resource of secondary container cluster network when connecting the CP to the external VL.\n* NOTE 1: The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\" for an external CP\n instance connected or to be connected to a virtual network not categorized as secondary container cluster network:\n 1) Void.\n 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes shall be present for an external CP instance\n representing a subport that is to be created, or an external CP instance that is to be created by creating the\n corresponding VNFC or VNF instance during the current or a subsequent LCM operation, or for an existing\n external CP instance that is to be re-configured or added to a particular external virtual link.\n 3) If the \"linkPortId\" attribute is absent, the VNFM shall create a link port.\n 4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\" attribute shall be provided referencing a\n precreated link port, and the VNFM can use means outside the scope of the present document to obtain the\n pre-configured address information for the connection point from the resource representing the link port.\n 5) If both \"cpProtocolData\" and \"linkportId\" are provided, the NFVO shall ensure that the\n cpProtocolData can be used with the pre-created link port referenced by \"linkPortId\".\n\n* NOTE 2: The following conditions apply to the attributes \"netAttDefResourceId\" and \"cpProtocolData\" for an external CP\n instance connected or to be connected to a secondary container cluster network:\n 1) Void.\n 2) The \"netAttDefResourceId\" attribute shall be present and the \"cpProtocolData\" attribute may be present for\n a to-be-created external CP instance or an existing external CP instance.\n* NOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the external CP, e.g. to build a link\n redundant mated pair in SR-IOV cases. When more than one netAttDefResourceId is indicated, all shall belong\n to the same namespace as defined by the corresponding \"containerNamespace\" attribute in the \"resourceHandle\" a attribute in the\n \"NetAttDefResourceData\".\n* NOTE 4: Either linkPortId or netAttDefResourceId may be included, but not both.\n", + "anyOf": [ + { + "required": [ + "linkPortId" + ] + }, + { + "required": [ + "cpProtocolData" + ] + }, + { + "required": [ + "netAttDefResourceId" + ] + } + ], "type": "object", "properties": { - "macAddress": { - "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", - "type": "string", - "format": "MAC" + "parentCpConfigId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "linkPortId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "createExtLinkPort": { + "description": "Indicates to the VNFM the need to create a dedicated link port for the external CP. If set to True, the VNFM shall create a link port. If set to False, the VNFM shall not create a link port. This attribute is only applicable for external CP instances without a floating IP address that expose a VIP CP instance for which a dedicated IP address is allocated. It shall be present in that case and shall be absent otherwise.\n", + "type": "boolean" + }, + "netAttDefResourceId": { + "description": "Identifier of the \"NetAttDefResourceData\" structure that provides the specification of the interface to attach the external CP to a secondary container cluster network. It is only applicable if the external CP is connected or to be connected to a secondary container cluster network. It shall not be present if the external CP is related to a virtual network not categorized as secondary container cluster network. See notes 2, 3 and 4.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } }, - "ipAddresses": { - "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet.\n", + "cpProtocolData": { + "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. See notes 1 and 2.\n", "type": "array", "items": { + "description": "This type represents network protocol data. * NOTE:\tThis attribute allows to signal the addition of further types of layer and protocol\n in future versions of the present document in a backwards-compatible way. In the current\n version of the present document, only IP over Ethernet is supported.\n", "type": "object", "required": [ - "type" + "layerProtocol" ], "properties": { - "type": { - "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "layerProtocol": { + "description": "Identifier of layer(s) and protocol(s). Permitted values:\n - IP_OVER_ETHERNET.\n - IP_FOR_VIRTUAL_CP\nSee note\n", "type": "string", "enum": [ - "IPV4", - "IPV6" + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" ] }, - "addresses": { - "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n", - "type": "array", - "items": { - "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", - "type": "string", - "format": "IP" + "ipOverEthernet": { + "description": "This type represents network address data for IP over Ethernet. * NOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. * NOTE 2:\tExactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present. * NOTE 3:\tIf the CP instance represents a subport in a trunk, segmentationId shall be present.\n Otherwise it shall not be present.\n* NOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the actual\n network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header\n of the packets or it may be an identifier used between the application and the NFVI networking\n infrastructure to identify the network sub-interface of the trunk port in question. In the latter\n case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is\n actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationType": { + "description": "Specifies the encapsulation type for the traffics coming in and out of the trunk subport. Permitted values:\n -\tVLAN: the subport uses VLAN as encapsulation type.\n -\tINHERIT: the subport gets its segmentation type from the network it's connected to.\nThis attribute may be present for CP instances that represent subports in a trunk and shall be absent otherwise. If this attribute is not present for a subport CP instance, default value VLAN shall be used.\n", + "type": "string", + "enum": [ + "VLAN", + "INHERIT" + ] + }, + "segmentationId": { + "description": "Identification of the network segment to which the CP instance connects to. See note 3 and note 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "fixedAddresses" + ] + }, + { + "required": [ + "numDynamicAddresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "fixedAddresses": { + "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + }, + "numDynamicAddresses": { + "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "integer" + }, + "addressRange": { + "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + } } }, - "isDynamic": { - "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n", - "type": "boolean" - }, - "addressRange": { - "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n", + "virtualCpAddress": { + "description": "This type represents network address data for a virtual CP.\n* NOTE 1: The loadBalancerIp and the loadBalancerSourceRanges attributes are only used if the CIS cluster is set up to be \n able to configure an external load balancer. Otherwise it shall be ignored.\n* NOTE 2: In case the cluster can configure an external load balancer but no loadBalancerIp is provided the container\n cluster will assign an IP address.\n* NOTE 3: The attribute is only relevant if the virtual CP is instantiated in a cluster that supports configuration of IP\n address pools for virtual CPs. Otherwise it shall be ignored. MetalLB is an example of a solution for\n Kubernetes┬« that supports configuration of address pools for load balancer services.\n* NOTE 4: The loadBalancerIp, addressPoolName and the externalIp attributes shall not be present at the same time. \n", "type": "object", "required": [ - "minAddress", - "maxAddress" + "type" ], "properties": { - "minAddress": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", "type": "string", "format": "IP" }, - "maxAddress": { + "externalIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", "type": "string", "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which the CIS cluster will assign an IP address to the virtual CP. See notes 3 and 4.\n", + "type": "string" + }, + "loadBalancerSourceRanges": { + "description": "List of client IP address ranges allowed to access an external load balancer. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + } } } - }, - "subnetId": { - "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", - "type": "string", - "format": "IP" } } } @@ -242,751 +1814,1234 @@ } } } - }, - "extLinkPortId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "metadata": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" - }, - "associatedVnfcCpId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "associatedVnfVirtualLinkId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" } - } - } - }, - "extVirtualLinkInfo": { - "description": "Information about the external VLs the VNF instance is connected to.\n", - "type": "array", - "items": { - "type": "object", - "required": [ - "id", - "resourceHandle" - ], - "properties": { - "id": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "resourceHandle": { + }, + "extNetAttDefResource": { + "description": "Network attachment definition resources that provide the specification of the interface to attach connection points to this VL.\n", + "type": "array", + "items": { + "description": "This type contains information related to a network attachment definition resource that provides the specification of the interface used to connect one or multiple connection points to a secondary container cluster network.\n", + "type": "object", "required": [ - "vimConnectionId", - "resourceId" + "netAttDefResourceInfoId", + "netAttDefResource" ], - "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", "properties": { - "vimConnectionId": { + "netAttDefResourceInfoId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, - "resourceProviderId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" + "netAttDefResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } }, - "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", - "type": "string" + "associatedExtCpId": { + "description": "Identifier of the external CP associated to this network attachment definition resource. Shall be present when the network attachment definition resource is used for external connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } }, - "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", - "type": "string" + "associatedVnfcCpId": { + "description": "Identifier of the VNFC CP associated to this network attachment definition resource. May be present when the network attachment definition resource is used for internal connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } } } - }, - "extLinkPorts": { - "description": "Link ports of this VL.\n", - "type": "array", - "items": { - "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n", + } + } + } + } + }, + "extManagedVirtualLinkInfo": { + "description": "Information about the externally-managed internal VLs of the VNF instance. See notes 5 and 6.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "vnfVirtualLinkDescId", + "networkResource" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfVirtualLinkDescId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "networkResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", "type": "object", - "required": [ - "id", - "resourceHandle" - ], "properties": { - "id": { - "description": "An identifier with the intention of being globally unique.\n", + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", "type": "string" }, - "resourceHandle": { - "required": [ - "vimConnectionId", - "resourceId" - ], - "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", - "properties": { - "vimConnectionId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "resourceProviderId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", - "type": "string" - }, - "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", - "type": "string" + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "vnfLinkPorts": { + "description": "Link ports of this VL.\n", + "type": "array", + "items": { + "description": "This type represents a link port of an internal VL of a VNF.\nNOTE 1: Either cpInstanceId with cpInstanceType set to \"EXT_CP\" or any combination of cpInstanceId\n with cpInstanceType set to \"VNFC_CP\" and vipCpInstanceId (i.e. one or both of them) shall be \n present for a VnfLinkPortInfo. In case both cpInstanceId with cpInstanceType set to \"VNFC_CP\" \n and vipCpInstanceId are present, the two different CP instances share the linkport.\nNOTE 2: Annex A.4 of ETSI GS NFV-IFA 007 provides examples for configurations where both vipCpInstanceId\n and vnfcCpInstanceId are present (UC#5 and UC#5-b), only vnfcCpInstanceId is present (UC#2), or \n only vipCpInstanceId is present (UC6 and UC#6-b).\nNOTE 3: The value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\"\n attribute.\n", + "type": "object", + "required": [ + "id", + "resourceHandle" + ], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "resourceHandle": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" } - }, - "cpInstanceId": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" } + }, + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpInstanceType": { + "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present and shall be absent otherwise.\nPermitted values: - VNFC_CP: The link port is connected to a VNFC CP. -\tEXT_CP: The link port is associated to an external CP. See note 1.\n", + "type": "string", + "enum": [ + "VNFC_CP", + "EXT_CP" + ] + }, + "vipCpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "trunkResourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" } } } - } - } - }, - "extManagedVirtualLinkInfo": { - "description": "External virtual links the VNF instance is connected to.\n", - "type": "array", - "items": { - "type": "object", - "required": [ - "id", - "vnfVirtualLinkDescId" - ], - "properties": { - "id": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "vnfVirtualLinkDescId": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" - }, - "networkResource": { + }, + "vnfNetAttDefResource": { + "description": "Network attachment definition resources that provide the specification of the interface to attach connection points to this VL.\n", + "type": "array", + "items": { + "description": "This type contains information related to a network attachment definition resource that provides the specification of the interface used to connect one or multiple connection points to a secondary container cluster network.\n", + "type": "object", "required": [ - "vimConnectionId", - "resourceId" + "netAttDefResourceInfoId", + "netAttDefResource" ], - "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", "properties": { - "vimConnectionId": { + "netAttDefResourceInfoId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, - "resourceProviderId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" + "netAttDefResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } }, - "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", - "type": "string" + "associatedExtCpId": { + "description": "Identifier of the external CP associated to this network attachment definition resource. Shall be present when the network attachment definition resource is used for external connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } }, - "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", - "type": "string" + "associatedVnfcCpId": { + "description": "Identifier of the VNFC CP associated to this network attachment definition resource. May be present when the network attachment definition resource is used for internal connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } } } - }, - "vnfLinkPorts": { - "description": "Link ports of this VL.\n", - "type": "array", - "items": { + } + }, + "extManagedMultisiteVirtualLinkId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "monitoringParameters": { + "description": "Active monitoring parameters.\n", + "type": "array", + "items": { + "description": "This type represents a monitoring parameter that is tracked by the VNFM,\n", + "type": "object", + "required": [ + "id", + "performanceMetric" + ], + "properties": { + "id": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "name": { + "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n", + "type": "string" + }, + "performanceMetric": { + "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n", + "type": "string" + } + } + } + }, + "localizationLanguage": { + "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n", + "type": "string" + }, + "vnfcResourceInfo": { + "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n", + "type": "array", + "items": { + "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance. Depending on the form of virtualisation container of the VNFC:\n - For a VNFC based on VM, a reference to the corresponding VirtualCompute shall be provided, and\n - For a VNFC based on OS container(s), a reference to the Compute MCIO shall be provided. Hence, exposure of\n information by the VNFM to the NFVO is at the MCIO level.\nIn addition, the references to the storage resources depend on the form of the VNFC:\n a) For a VNFC based on VM, storage resource identifiers shall refer to VirtualStorage resources, and\n b) For a VNFC based on OS container(s), storage resource identifiers shall refer to Storage MCIOs.\n\nNOTE 1:\tETSI GS NFV-SOL 001 specifies the structure and format of the VNFD based on \n TOSCA specifications.\nNOTE 2:\tA VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an \n internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external \n CP if it is connected directly to an external VL.\nNOTE 3:\tThe information can be omitted because it is already available as part of the \n external CP information.\nNOTE 4: If only the value or the presence of this attribute is changed in the \"VnfcResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires\n including a related \"AffectedVnfc\" structure in the VNF LCM operation occurrence notifications\n or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\nNOTE 5: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the internal CP, e.g. to build a link\n redundant mated pair in SR-IOV cases. \nNOTE 6: When more than one netAttDefResourceId is indicated, all shall belong to the same namespace. NOTE 7: Subports need not be used for containerized VNFCs. The application container can send and receive IP \n packets with any VLAN tag as long as the network interface to connect to the secondary container cluster \n network has been configured appropriately. Thus, no individual vnfcCpInfo, except the one representing the \n trunk, need be modelled to allow traffic tagged with a particular VLAN through the connection point.\n", + "type": "object", + "required": [ + "id", + "vduId", + "computeResource" + ], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "vduId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "computeResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", "type": "object", - "required": [ - "id", - "resourceHandle" - ], "properties": { - "id": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", "type": "string" }, - "resourceHandle": { - "required": [ - "vimConnectionId", - "resourceId" - ], - "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", - "properties": { - "vimConnectionId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "resourceProviderId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", - "type": "string" - }, - "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", - "type": "string" - } - } - }, - "cpInstanceId": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", "type": "string" }, - "cpInstanceType": { - "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n", - "type": "string", - "enum": [ - "VNFC_CP", - "EXT_CP" - ] + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" } } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" } } - } - } - }, - "monitoringParameters": { - "description": "Active monitoring parameters.\n", - "type": "array", - "items": { - "type": "object", - "required": [ - "id", - "performanceMetric" - ], - "properties": { - "id": { - "description": "An identifier that is unique within a VNF descriptor.\n", - "type": "string" - }, - "name": { - "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n", - "type": "string" - }, - "performanceMetric": { - "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n", - "type": "string" - } - } - } - }, - "localizationLanguage": { - "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n", - "type": "string" - }, - "vnfcResourceInfo": { - "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n", - "type": "array", - "items": { - "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n", - "type": "object", - "required": [ - "id", - "vduId", - "computeResource" - ], - "properties": { - "id": { + }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "storageResourceIds": { + "description": "References to the VirtualStorage resources or references to Storage MCIOs. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n", + "type": "array", + "items": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" - }, - "vduId": { - "description": "An identifier that is unique within a VNF descriptor.\n", - "type": "string" - }, - "computeResource": { + } + }, + "reservationId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfcCpInfo": { + "description": "CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. See note 2. May be present otherwise. See note 7.\n", + "type": "array", + "items": { + "type": "object", "required": [ - "vimConnectionId", - "resourceId" + "id", + "cpdId" ], - "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", "properties": { - "vimConnectionId": { - "description": "An identifier with the intention of being globally unique.\n", + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, - "resourceProviderId": { - "description": "An identifier with the intention of being globally unique.\n", + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" }, - "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "vnfExtCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, - "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", - "type": "string" - } - } - }, - "storageResourceIds": { - "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n", - "type": "array", - "items": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" - } - }, - "reservationId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "vnfcCpInfo": { - "description": "CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is associated to an external CP of the VNF instance. May be present otherwise.\n", - "type": "array", - "items": { - "type": "object", - "required": [ - "id", - "cpdId" - ], - "properties": { - "id": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" - }, - "cpdId": { - "description": "An identifier that is unique within a VNF descriptor.\n", - "type": "string" - }, - "vnfExtCpId": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" - }, - "cpProtocolInfo": { - "description": "Network protocol information for this CP.\n", - "type": "array", - "items": { - "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n", - "required": [ - "layerProtocol" - ], - "properties": { - "layerProtocol": { - "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n", - "type": "string", - "enum": [ - "IP_OVER_ETHERNET" - ] - }, - "ipOverEthernet": { - "description": "This type represents information about a network address that has been assigned.\n", - "type": "object", - "properties": { - "macAddress": { - "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", - "type": "string", - "format": "MAC" - }, - "ipAddresses": { - "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet.\n", - "type": "array", - "items": { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "cpProtocolInfo": { + "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. See note 3.\n", + "type": "array", + "items": { + "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", + "type": "object", + "required": [ + "layerProtocol" + ], + "properties": { + "layerProtocol": { + "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", + "type": "string", + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] + }, + "ipOverEthernet": { + "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationId": { + "description": "Identification of the network segment to which the Cp instance connects to. See notes 3 and 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "addresses": { + "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", "type": "string", - "enum": [ - "IPV4", - "IPV6" - ] - }, - "addresses": { - "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n", - "type": "array", - "items": { + "format": "IP" + } + }, + "isDynamic": { + "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n", + "type": "boolean" + }, + "addressRange": { + "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", "type": "string", "format": "IP" } - }, - "isDynamic": { - "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n", - "type": "boolean" - }, - "addressRange": { - "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n", - "type": "object", - "required": [ - "minAddress", - "maxAddress" - ], - "properties": { - "minAddress": { - "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", - "type": "string", - "format": "IP" - }, - "maxAddress": { - "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", - "type": "string", - "format": "IP" - } - } - }, - "subnetId": { - "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", - "type": "string", - "format": "IP" } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" } } } } } + }, + "virtualCpAddress": { + "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which an IP address is assigned to the virtual CP.\n", + "type": "string" + } + } } } - }, - "vnfLinkPortId": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" - }, - "metadata": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" } - } - } - }, - "metadata": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" - } - } - } - }, - "virtualLinkResourceInfo": { - "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n", - "type": "array", - "items": { - "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n", - "type": "object", - "required": [ - "id", - "vnfVirtualLinkDescId", - "networkResource" - ], - "properties": { - "id": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" - }, - "vnfVirtualLinkDescId": { - "description": "An identifier that is unique within a VNF descriptor.\n", - "type": "string" - }, - "networkResource": { - "required": [ - "vimConnectionId", - "resourceId" - ], - "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", - "properties": { - "vimConnectionId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" }, - "resourceProviderId": { - "description": "An identifier with the intention of being globally unique.\n", + "vnfLinkPortId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, - "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "parentCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, - "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "netAttDefResourceId": { + "description": "Identifier of the \"NetAttDefResourceInfo\" structure that provides the specification of the interface to attach the connection point to a secondary container cluster network. See notes 5 and 6. It shall be present if the internal CP is associated to a VNFC realized by one or a set of OS containers and is connected to a secondary container cluster network. It shall not be present otherwise.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", "type": "string" } } - }, - "reservationId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "vnfLinkPorts": { - "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n", - "type": "array", - "items": { + } + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "vnfVirtualLinkResourceInfo": { + "description": "Information about the virtualised network resources used by the VLs of the VNF instance. See note 6.\n", + "type": "array", + "items": { + "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\nNote: If only the value or the presence of this attribute is changed in the \"VnfVirtualLinkResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires including\n a related \"AffectedVirtualLink\" structure in the VNF LCM operation occurrence notifications or the\n \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", + "type": "object", + "required": [ + "id", + "vnfVirtualLinkDescId", + "networkResource" + ], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "vnfVirtualLinkDescId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "networkResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", "type": "object", - "required": [ - "id", - "resourceHandle" - ], "properties": { - "id": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", "type": "string" }, - "resourceHandle": { - "required": [ - "vimConnectionId", - "resourceId" - ], - "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", - "properties": { - "vimConnectionId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "resourceProviderId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", - "type": "string" - }, - "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", - "type": "string" - } - } - }, - "cpInstanceId": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", "type": "string" }, - "cpInstanceType": { - "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n", - "type": "string", - "enum": [ - "VNFC_CP", - "EXT_CP" - ] + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" } } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" } - }, - "metadata": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" } - } - } - }, - "virtualStorageResourceInfo": { - "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n", - "type": "array", - "items": { - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n", - "type": "object", - "required": [ - "id", - "virtualStorageDescId", - "storageResource" - ], - "properties": { - "id": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" - }, - "virtualStorageDescId": { - "description": "An identifier that is unique within a VNF descriptor.\n", - "type": "string" - }, - "storageResource": { + }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "reservationId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfLinkPorts": { + "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n", + "type": "array", + "items": { + "description": "This type represents a link port of an internal VL of a VNF.\nNOTE 1: Either cpInstanceId with cpInstanceType set to \"EXT_CP\" or any combination of cpInstanceId\n with cpInstanceType set to \"VNFC_CP\" and vipCpInstanceId (i.e. one or both of them) shall be \n present for a VnfLinkPortInfo. In case both cpInstanceId with cpInstanceType set to \"VNFC_CP\" \n and vipCpInstanceId are present, the two different CP instances share the linkport.\nNOTE 2: Annex A.4 of ETSI GS NFV-IFA 007 provides examples for configurations where both vipCpInstanceId\n and vnfcCpInstanceId are present (UC#5 and UC#5-b), only vnfcCpInstanceId is present (UC#2), or \n only vipCpInstanceId is present (UC6 and UC#6-b).\nNOTE 3: The value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\"\n attribute.\n", + "type": "object", "required": [ - "vimConnectionId", - "resourceId" + "id", + "resourceHandle" ], - "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", "properties": { - "vimConnectionId": { - "description": "An identifier with the intention of being globally unique.\n", + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, - "resourceProviderId": { - "description": "An identifier with the intention of being globally unique.\n", + "resourceHandle": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, - "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "cpInstanceType": { + "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present and shall be absent otherwise.\nPermitted values: - VNFC_CP: The link port is connected to a VNFC CP. -\tEXT_CP: The link port is associated to an external CP. See note 1.\n", + "type": "string", + "enum": [ + "VNFC_CP", + "EXT_CP" + ] + }, + "vipCpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, - "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "trunkResourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" } } - }, - "reservationId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "metadata": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" } + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" } } } - } - }, - "metadata": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" - }, - "extensions": { - "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", - "type": "object" - }, - "_links": { - "description": "Links to resources related to this resource.\n", - "type": "object", - "required": [ - "self" - ], - "properties": { - "self": { - "description": "This type represents a link to a resource using an absolute URI.\n", + }, + "virtualStorageResourceInfo": { + "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n", + "type": "array", + "items": { + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\nNote: If only the value or the presence of this attribute is changed in the \"VirtualStorageResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires\n including a related \"AffectedVirtualStorage\" structure in the VNF LCM operation occurrence\n notifications or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", "required": [ - "href" + "id", + "virtualStorageDescId", + "storageResource" ], "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" - } - } - }, - "indicators": { - "description": "This type represents a link to a resource using an absolute URI.\n", - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + }, + "virtualStorageDescId": { + "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" - } - } - }, - "instantiate": { - "description": "This type represents a link to a resource using an absolute URI.\n", - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", "type": "string" - } - } - }, - "terminate": { - "description": "This type represents a link to a resource using an absolute URI.\n", - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + }, + "storageResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", "type": "string" - } - } - }, - "scale": { - "description": "This type represents a link to a resource using an absolute URI.\n", - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + }, + "reservationId": { + "description": "An identifier with the intention of being globally unique.\n", "type": "string" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" } } - }, - "scaleToLevel": { - "description": "This type represents a link to a resource using an absolute URI.\n", + } + }, + "mcioInfo": { + "description": "Information on the MCIO(s) representing VNFC instance(s) realized by one or a set of OS containers and created from the same VDU for the VNF instance.\n", + "type": "array", + "items": { + "description": "This type provides information about an MCIO representing the set of VNFC instances realized by one or a set of OS containers which have been created based on the same VDU. Within the CISM, an MCIO controller monitors the actual state of an MCIO representing the set of VNFC instances realized by one or a set of OS containers and compare it to the desired state For an MCIO related to a VDU that has the attribute isNumOfInstancesClusterBased set to FALSE the desired state is specified in the respective declarative descriptor. For an MCIO related to a VDU that has the attribute isNumOfInstancesClusterBased set to TRUE, the desired state is determined by the number of CIS-nodes in the cluster that fulfil the VDU requirements.as specified in the respective declarative descriptor. It triggers actions toward the CIS to align the actual to the desired state. Monitoring the actual state includes monitoring the number of MCIO instances available at any specific point in time. In addition, an MCIO controller maintains properties and runtime information on the MCIO instances which have been created based on the same VDU. The McioInfo data structure provides the runtime information on the MCIOs obtained from the MCIO controller.\nNOTE: There are different types of MCIOs. The set of VNFC instances based on the same VDU is represented \n by one MCIO, e.g. of type Deployment. Each individual VNFC instance is represented by another type \n of MCIO, e.g. a POD.\n\nRuntime information of the set of OS containers realizing an individual VNFC instance is not part of the McioInfo data structure; such runtime information is provided in the ResourceHandle data structure referenced from the VnfcResourceInfo. The McioInfo does not provide runtime information of a constituent VNFC instance created based on a specific VDU.\nNOTE 1: The type of MCIO as specified in the declarative descriptor of the MCIO, and that can be read from \n the CISM. EXAMPLE: In case of MCIOs managed by Kubernetes┬«, the type of MCIO corresponds to the \n \"kind\" property of the declarative descriptor.\nNOTE 2: If the attribute additionalInfo is present, it may contain runtime information on the actual and \n desired state of the MCIO(s). \nNOTE 3: When the container infrastructure service is a Kubernetes┬« instance, the mcioId is the combined \n values from the kind and name fields of the Kubernetes resource object, separated by a slash. \n Example: \"Deployment/abcd\". \nNOTE 4: When the container infrastructure service is a Kubernetes┬« instance, the mcioName is the name \n field of the resource object. \n", "type": "object", "required": [ - "href" + "mcioId", + "mcioName", + "mcioNamespace", + "vduId", + "cismId", + "mcioType", + "desiredInstances", + "availableInstances" ], "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + "mcioId": { + "description": "An identifier with the intention of being globally unique.\n", "type": "string" - } - } - }, - "changeFlavour": { - "description": "This type represents a link to a resource using an absolute URI.\n", - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + }, + "mcioName": { + "description": "Human readable name of this MCIO. See note 4.\n", "type": "string" - } - } - }, - "heal": { - "description": "This type represents a link to a resource using an absolute URI.\n", - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + }, + "mcioNamespace": { + "description": "Namespace of this MCIO.\n", "type": "string" - } - } - }, - "operate": { - "description": "This type represents a link to a resource using an absolute URI.\n", - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + }, + "vduId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "cismId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "mcioType": { + "description": "The type of MCIO. Specific values, their semantics and associated MCIO types are defined in clause 5.5.4.9. Additional values are also permitted. See note 1.\n", + "type": "string", + "enum": [ + "Deployment", + "Statefulset", + "DaemonSet" + ] + }, + "desiredInstances": { + "description": "Number of desired MCIO instances.\n", + "type": "integer" + }, + "availableInstances": { + "description": "Number of available MCIO instances.\n", + "type": "integer" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", "type": "string" } } - }, - "changeExtConn": { - "description": "This type represents a link to a resource using an absolute URI.\n", + } + }, + "vnfPaasServiceInfo": { + "description": "Information on the PaaS Services assigned and used by the VNF instance.\n", + "type": "array", + "items": { + "description": "This type provides input information about a PaaS Service that is used by a VNF instance. The PaasServiceInfo is comprised of various sets of information. Some information comes from the VNFD, other information comes from the PaaS Service assets provided by the NFVO to the VNFM, and other information is provided at runtime information about the usage of the PaaS Service.\n", "type": "object", "required": [ - "href" + "id", + "paasServiceId", + "paasServiceType", + "paasServiceRequestId", + "paasServiceHandle" ], "properties": { - "href": { - "description": "String formatted according to IETF RFC 3986.\n", + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "paasServiceId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "paasServiceType": { + "description": "The type of PaaS Service. The value of this attribute is expected to be matched against values of the registered PaaS Services in the PSR.", + "type": "string" + }, + "paasServiceVersion": { + "description": "A version.\n", + "type": "string" + }, + "paasServiceRequestId": { + "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" + }, + "paasServiceHandle": { + "description": "This type provides information enabling the access and use of the PaaS Service by the VNF instance. The type and format of the handle depends on the form that the PaaS Service is formed.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" } } } } } + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extensions": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "_links": { + "description": "Links to resources related to this resource.\n", + "type": "object", + "required": [ + "self" + ], + "properties": { + "self": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "indicators": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "instantiate": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "terminate": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "scale": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "scaleToLevel": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "changeFlavour": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "heal": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "operate": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "changeExtConn": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "createSnapshot": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "revertToSnapshot": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "changeCurrentVnfPkg": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + } + } } - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/schemas/vnfInstances.schema.json b/interconnectedTestCases/SOL003/schemas/vnfInstances.schema.json index ae54b054fa3f008c040726087d63ef3a262221f6..e802aa462bdc862452bf7bbafbd9dbb1e45198ec 100644 --- a/interconnectedTestCases/SOL003/schemas/vnfInstances.schema.json +++ b/interconnectedTestCases/SOL003/schemas/vnfInstances.schema.json @@ -1,7 +1,7 @@ { "type": "array", "items": { - "description": "This type represents a VNF instance.\n", + "description": "This type represents a VNF instance.\nNOTE:\tClause B.3.2 provides examples illustrating the relationship among the different run-time \n information elements (CP, VL and link ports) used to represent the connectivity of a VNF.\n\nNOTE 1:\tModifying the value of this attribute shall not be performed when conflicts exist between \n the previous and the newly referred VNF package, i.e. when the new VNFD is changed with \n respect to the previous VNFD in other aspects than merely referencing to other VNF software \n images. In order to avoid misalignment of the VnfInstance with the current VNF's on-boarded \n VNF Package, the values of attributes in the VnfInstance that have corresponding attributes \n in the VNFD shall be kept in sync with the values in the VNFD.\nNOTE 2:\tETSI GS NFV-SOL 001 [14] specifies the structure and format of the VNFD based on TOSCA specifications. NOTE 3:\tVNF configurable properties are sometimes also referred to as configuration parameters applicable \n to a VNF. Some of these are set prior to instantiation and cannot be modified if the VNF is instantiated, \n some are set prior to instantiation (are part of initial configuration) and can be modified later, \n and others can be set only after instantiation. The applicability of certain configuration may \n depend on the VNF and the required operation of the VNF at a certain point in time.\nNOTE 4:\tUpon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes \n of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined \n initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", \n obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \n \"metadata\" and \"extensions\" that have no defined initial value shall not be created, in order to be \n consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null \n values as deletion request.\nNOTE 5:\tIt is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a \n multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same \n VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed \n multi-site VL instance (refer to clause 5.5.3.3).\nNOTE 6:\tEven though externally-managed internal VLs are also used for VNF-internal connectivity, they shall \n not be listed in the \"vnfVirtualLinkResourceInfo\" attribute as this would be redundant.\nNOTE 7: Subports need not be used for containerized VNFCs. The application container can send and receive IP \n packets with any VLAN tag as long as the network interface to connect to the secondary container cluster \n network has been configured appropriately. Thus, no individual vnfcCpInfo, except the one representing \n the trunk, need be modelled to allow traffic tagged with a particular VLAN through the connection point.\nNOTE 8: For a scaling aspect whose related VNFCs have not been instantiated due to the selection of deployable \n modules, the \"scaleStatus\" indicates the scale level that would be applicable to the aspect if a VNF LCM \n operation changes the selected deployable modules and the related VNFCs are instantiated, unless the \n VNF LCM operation explicitly indicates the scale level for the aspect.\n", "type": "object", "required": [ "id", @@ -10,7 +10,8 @@ "vnfProductName", "vnfSoftwareVersion", "vnfdVersion", - "instantiationState" + "instantiationState", + "_links" ], "properties": { "id": { @@ -50,26 +51,87 @@ "type": "object" }, "vimConnectionInfo": { - "description": "Information about VIM connections to be used for managing the resources for the VNF instance. This attribute shall only be supported and present if VNF-related resource management in direct mode is applicable. This attribute can be modified with the PATCH method.\n", - "type": "array", - "items": { - "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n", + "description": "Information about VIM or CISM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if - the resources of at least of the VNFCs are managed by a VIM and VNF-related resource management in direct mode is applicable. - the resources of at least of the VNFCs are managed by a CISM. This attribute can be modified with the PATCH method. If VIM connection information is provisioned to the VNFM by means outside the scope of the present document, the information in the \"vimConnectionInfo\" attribute provides necessary information for binding the VnfInstance representing the \"Individual VNF instance\" to the applicable VIM connection information used to perform resource management for the VNF instance. See also the definition of the \"VimConnectionInfo\" in clause 4.4.1.6.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n* NOTE 3: ETSI GS NFV-SOL 009 specifies the means to configure into the VNFM applicable VIM connection\n information via the \"NFV-MANO Configuration and Information Management\" interface.\n* NOTE 4: Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of\n the present document, as well as in-band, by means specified in the present document, care should be taken to\n avoid unintended conflicts in the VNFM when managing such information.\n", + "type": "object", + "required": [ + "vimType" + ], + "properties": { + "vimId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vimType": { + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM., CISM, CIR or MCIOP repository. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM, CISM, CIR or MCIOP repository types. The structure of the registry is defined in annex C.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "cirConnectionInfo": { + "description": "Information about the CIR connection for managing OS container images for the VNF instance. Shall be present when all or part of the VNF is realized by a set of OS containers and shall be absent otherwise.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n* NOTE 3: ETSI GS NFV-SOL 009 specifies the means to configure into the VNFM applicable VIM connection\n information via the \"NFV-MANO Configuration and Information Management\" interface.\n* NOTE 4: Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of\n the present document, as well as in-band, by means specified in the present document, care should be taken to\n avoid unintended conflicts in the VNFM when managing such information.\n", "type": "object", "required": [ - "id", "vimType" ], "properties": { - "id": { + "vimId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, + "vimType": { + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM., CISM, CIR or MCIOP repository. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM, CISM, CIR or MCIOP repository types. The structure of the registry is defined in annex C.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + }, + "mciopRepositoryInfo": { + "description": "Information about the MCIOP repository for the VNF instance. Shall be present when all or part of the VNF is realized by a set of OS containers and shall be absent otherwise. See note 1.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n* NOTE 3: ETSI GS NFV-SOL 009 specifies the means to configure into the VNFM applicable VIM connection\n information via the \"NFV-MANO Configuration and Information Management\" interface.\n* NOTE 4: Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of\n the present document, as well as in-band, by means specified in the present document, care should be taken to\n avoid unintended conflicts in the VNFM when managing such information.\n", + "type": "object", + "required": [ + "vimType" + ], + "properties": { "vimId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "vimType": { - "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n", + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM., CISM, CIR or MCIOP repository. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM, CISM, CIR or MCIOP repository types. The structure of the registry is defined in annex C.\n", "type": "string" }, "interfaceInfo": { @@ -84,72 +146,1019 @@ "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" } - } - } - }, - "instantiationState": { - "description": "The instantiation state of the VNF.\n", - "type": "string", - "enum": [ - "NOT_INSTANTIATED", - "INSTANTIATED" - ] - }, - "instantiatedVnfInfo": { - "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n", - "type": "object", - "required": [ - "flavourId", - "vnfState" - ], - "properties": { - "flavourId": { - "description": "An identifier that is unique within a VNF descriptor.\n", - "type": "string" - }, - "vnfState": { - "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n", - "type": "string", - "enum": [ - "STARTED", - "STOPPED" - ] + } + } + }, + "certificateInfo": { + "description": "This type provides input information related to certificate and certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateConfigurationInfo": { + "description": "This type provides input information related to certificate management.\n", + "type": "object", + "required": [ + "securityPolicy" + ], + "properties": { + "certificateBaseProfile": { + "description": "Information for certificate profile.", + "type": "array", + "items": { + "description": "NOTE: At least one overriding attributes shall be present, otherwise shall be absent.\nThis type provides input information to override certificate base profile for certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "issuer": { + "description": "Issuer of certificates. See note.", + "type": "string" + }, + "issuerUniqueIdentifier": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "subject": { + "description": "This type provides input information related to the subject of the certificate.\nNOTE: At least one overriding attributes shall be present, otherwise shall be absent.\n", + "type": "object", + "properties": { + "commonName": { + "description": "Information of the certification target subject FQDN. Can be set empty when this certificate is used for encrypted communication using IP address. See note.\n", + "type": "string" + }, + "organization": { + "description": "Information of the certification target subject Organization. See note.", + "type": "string" + }, + "country": { + "description": "Information of the certification target subject Country. See note.", + "type": "string" + }, + "state": { + "description": "Information of the certification target subject State. See note.", + "type": "string" + }, + "locality": { + "description": "Information of the certification target subject Locality. See note.", + "type": "string" + }, + "emailAddress": { + "description": "Information of the certification contact email address. See note.", + "type": "string" + } + } + }, + "subjectUniqueIdentifier": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "basicConstraints": { + "description": "Basic constraints of certificates. See note.", + "type": "string" + }, + "issuerAltName": { + "description": "Alternative name of issuer of certificates in this NS. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "subjectAltName": { + "description": "Alternative name of subject of certificates. Shall be present when this certificate is used for encrypted communication using IP address and subjectAltName attribute of CertificateBaseProfile in CertificateDesc of VNFD is empty (see ETSI GS NFV-IFA 011 [14], clause 7.1.19.4). See note.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "nameConstraints": { + "description": "Name constraints of certificates. See note.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "securityPolicy": { + "description": "Information for security policy to be satisfied for certificate.", + "type": "array", + "items": { + "description": "This type provides input information related to security policy for certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "maxValidityPeriod": { + "description": "Allowed max validity period for certificates.", + "type": "number" + }, + "allowedAlgorithm": { + "description": "Allowed signature algorithm.", + "type": "string" + }, + "minimumKeyLength": { + "description": "Minimum key length for certificates.", + "type": "number" + } + } + } + }, + "delegationSupportedCertificateManagements": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "cmfInfo": { + "description": "This type provides input information related to CMF for certificate management.\n", + "type": "object", + "required": [ + "id", + "endPoint", + "supportedProtocol" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "endPoint": { + "description": "End point of CMF instance.", + "type": "object", + "properties": { + "ipAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "link": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + } + } + }, + "supportedProtocol": { + "description": "Supported protocols by CMF instance.", + "type": "array", + "items": { + "description": "Supported protocol by CMF instance.", + "type": "string", + "enum": [ + "CMP", + "CMPv2", + "EST", + "SCEP" + ] + } + }, + "certificateChain": { + "description": "Certificate chain that this CMF provides.", + "type": "array", + "items": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, + "certificateContents": { + "description": "Information for contents of issued certificates. The information contained in this attribute may be updated over time during the VNF LCM, e.g., certificate(s) renewal.\n", + "type": "array", + "items": { + "description": "This type provides input information related to certificate content.\nNOTE: The CertificateDesc data type is defined in clause 7.1.19.2 of ETSI GS NFV IFA 011 [10].\n", + "type": "object", + "required": [ + "id", + "certificateDescId", + "certificateType" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateDescId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "certificateType": { + "description": "Type of this certificate.", + "type": "string", + "enum": [ + "VNFCI_CERT", + "VNFOAM_CERT" + ] + }, + "supportedCertificateManagements": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "version": { + "description": "A version.\n", + "type": "string" + }, + "serialNumber": { + "description": "Serial number of this certificate.", + "type": "integer" + }, + "signatureAlgorithm": { + "description": "Algorithm of this certificate's signature.", + "type": "string" + }, + "issuer": { + "description": "Issuer of this certificate.", + "type": "string" + }, + "notBefore": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "notAfter": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "subject": { + "description": "Subject of this certificate.", + "type": "string" + }, + "publicKeyAlgorithm": { + "description": "Algorithm of this certificate's public key.", + "type": "string" + }, + "publicKey": { + "description": "Public key of this certificate.", + "type": "string" + }, + "certificateExtensions": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, + "instantiationState": { + "description": "The instantiation state of the VNF. Permitted values: - NOT_INSTANTIATED: The VNF instance is terminated or not instantiated. - INSTANTIATED: The VNF instance is instantiated.\n", + "type": "string", + "enum": [ + "NOT_INSTANTIATED", + "INSTANTIATED" + ] + }, + "instantiatedVnfInfo": { + "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n", + "type": "object", + "required": [ + "flavourId", + "vnfState" + ], + "properties": { + "flavourId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfState": { + "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n", + "type": "string", + "enum": [ + "STARTED", + "STOPPED" + ] + }, + "scaleStatus": { + "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect.\nThis attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\nFor an aspect that has not been deployed because the related deployableModule has not been selected, it indicates the scale level that has been requested in the instantiation or in a scaling operation, or, if none has been requested in any of them, the scale level applicable to the aspect based on the default instantiation level. See note 8.\n", + "type": "array", + "items": { + "description": "This type represents the scale level of a VNF instance related to a scaling aspect.\n", + "type": "object", + "required": [ + "aspectId", + "scaleLevel" + ], + "properties": { + "aspectId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "scaleToLevel": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "maxScaleLevels": { + "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n", + "type": "array", + "items": { + "description": "This type represents the scale level of a VNF instance related to a scaling aspect.\n", + "type": "object", + "required": [ + "aspectId", + "scaleLevel" + ], + "properties": { + "aspectId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "scaleToLevel": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "selectedDeployableModule": { + "description": "References a currently selected deployable module, as defined in the VNFD, that has already completed the instantiation of its VNFCs.\n", + "type": "array", + "items": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + } + }, + "resourceCapacityDefinition": { + "description": "Shows current values of VDU attributes related to resource capacity, if different to the default values from the VNFD, as indicated in the (one or more) request(s) of all completed VNF LCM operation(s) that contain this attribute. If an attribute value has been modified multiple times, only the last value is shown. The values indicated in this attribute are applicable to all VNFC instances based on the VDU to which the resourceCapacityDefinition is related.\n", + "type": "array", + "items": { + "description": "This type represents selected values for capacity related VDU attributes.\n* NOTE: Resource definitions not related to a VDU are not considered in this version of the present document.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "tag": { + "description": "Tag assigned by the issuer of a VNF LCM operation request that contains this data type with values to be applied to a VDU. It is used for tracking purposes.\nThe tag is preserved in the run time record as long as at least one value of the capacity related attributes associated with that tag is still valid, i.e., it has not been modified by a later VNF LCM operation request.\nAt most one tag can be included when the data type is used in a VNF LCM operation request.\nWhen the data type is used in the VnfInstance data type it may contain multiple tags, namely those provided in VNF LCM requests, if at least one of the values provided in that request associated to that tag is still applicable in the VNFCs created from this VDU, i.e., it has not been modified by a later request.\n", + "type": "array", + "items": { + "description": "A string defined in IETF RFC 8259.\n", + "type": "string" + } + }, + "type": { + "description": "Type of the resource definition referenced.\n", + "type": "string", + "enum": [ + "COMPUTE", + "STORAGE", + "OSCONTAINER" + ] + }, + "vduId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "osContainerDescData": { + "description": "Indicates values for resource capacity related attributes in an OsContainerDesc. It shall be present when the attribute 'type' indicates OSCONTAINER and absent otherwise.\n", + "type": "array", + "items": { + "description": "This type represents selected values for capacity related VDU attributes of an OsContainer resource.\n* NOTE: At least one of the attributes shall be present.\n", + "type": "object", + "required": [ + "resourceTemplateId" + ], + "oneOf": [ + { + "required": [ + "requestedCpuResources" + ] + }, + { + "required": [ + "requestedMemoryResources" + ] + }, + { + "required": [ + "requestedEphemeralStorageResources" + ] + }, + { + "required": [ + "extendedResourceRequests" + ] + }, + { + "required": [ + "cpuResourceLimit" + ] + }, + { + "required": [ + "memoryResourceLimit" + ] + }, + { + "required": [ + "ephemeralStorageResourceLimit" + ] + }, + { + "required": [ + "hugePageResources" + ] + } + ], + "properties": { + "resourceTemplateId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "requestedCpuResources": { + "description": "Number of CPU resources requested for the container in milli-CPU. See note.\n", + "type": "integer" + }, + "requestedMemoryResources": { + "description": "Amount of memory resources requested for the container expressed in the same units as specified in the requested_memory_resources_valid_values property in VNFD (clause 6.8.12 in ETSI GS NFV-SOL 001 [14]) for this container descriptor. See note.\n", + "type": "array", + "items": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + } + }, + "requestedEphemeralStorageResources": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "extendedResourceRequests": { + "description": "Map of the amount of extended resources of the type indicated in the key. The key is a string that identifies an extended resource indicated in the extended_resource_requests property in the VNFD (clause 6.8.12 in ETSI GS NFV-SOL 001 [14]) for this container descriptor. The value is an integer that indicates the required amount for a particular extended resource. See note.\n", + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "cpuResourceLimit": { + "description": "Number of CPU resources the container can maximally use in milli-CPU. See note.\n", + "type": "integer" + }, + "memoryResourceLimit": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "ephemeralStorageResourceLimit": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "hugePageResources": { + "description": "Map of the total size values required for all the hugepages of the size indicated in the key. The key is a string and corresponds to one of the values of the hugepage sizes indicated in the huge_pages_resources property in the VNFD (clause 6.8.12 in ETSI GS NFV-SOL 001 [14]) for this container descriptor. The value is a number that indicates the required total size expressed in the same units as in the huge_pages_resource property in the VNFD (clause 6.8.12 in ETSI GS NFV-SOL 001 [14]) that indicates the valid values for required total size for the particular hugepage size. See note.\n", + "type": "object", + "additionalProperties": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + } + } + } + } + }, + "virtualComputeDescData": { + "description": "This type represents selected values for capacity related VDU attributes of the virtual compute resource of a VM.\n* NOTE: At least one of the attributes shall be present.\n", + "type": "object", + "required": [ + "resourceTemplateId" + ], + "oneOf": [ + { + "required": [ + "numVirtualCpu" + ] + }, + { + "required": [ + "virtualMemSize" + ] + }, + { + "required": [ + "sizeOfVirtualDisk" + ] + }, + { + "required": [ + "hugePagesRequirements" + ] + } + ], + "properties": { + "resourceTemplateId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "numVirtualCpu": { + "description": "Number of virtual CPUs. See note.\n", + "type": "integer" + }, + "virtualMemSize": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "sizeOfVirtualDisk": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + }, + "hugePagesRequirements": { + "description": "Map of the total size values required for all the hugepages of the size indicated in the key. The key is a string and corresponds to one of the values of the hugepage sizes indicated in the huge_pages_requirements property in the VNFD (clause 6.2.7.2 in ETSI GS NFV-SOL 001 [14]) for this virtual compute descriptor. The value is a numberthat indicates the required total size expressed in the same units as in the huge_pages_requirements property in the VNFD (clause 6.2.7.2 in ETSI GS NFV-SOL 001 [14]) that indicates the valid vaues for required total size for the particular hugepage size. See note.\n", + "type": "object", + "additionalProperties": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + } + } + } + }, + "virtualStorageDescData": { + "description": "Indicates the value for the storage size related attribute in an VirtualStorageDesc. It shall be present when the attribute 'type' indicates STORAGE and absent otherwise.\n", + "type": "array", + "items": { + "description": "This type represents selected values for capacity related VDU attributes of the virtual storage resource.\n", + "type": "object", + "required": [ + "resourceTemplateId", + "sizeOfStorage" + ], + "properties": { + "resourceTemplateId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "sizeOfStorage": { + "description": "A number defined in IETF RFC 8259.\n", + "type": "number" + } + } + } + } + } + } + }, + "extCpInfo": { + "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.See note 7.\n", + "type": "array", + "items": { + "description": "This type represents information about an external CP of a VNF.\nNOTE 1:\tThe attributes \"associatedVnfcCpId\", \"associatedVipCpId\", \"associatedVirtualCpId\" and \n \"associatedVnfVirtualLinkId\" are mutually exclusive. Exactly one shall be present.\nNOTE 2:\tAn external CP instance is not associated to a link port in the cases indicated for the \n \"extLinkPorts\" attribute in clause 4.4.1.11.\nNOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network \n attachment definition resource is needed to fulfil the connectivity requirements of the external \n CP, e.g. to build a link redundant mated pair in SR-IOV cases.\nNOTE 4: When more than one netAttDefResourceId is indicated, all shall belong to the same namespace.\n", + "type": "object", + "required": [ + "id", + "cpdId", + "cpConfigId", + "cpProtocolInfo" + ], + "oneOf": [ + { + "required": [ + "associatedVnfcCpId" + ] + }, + { + "required": [ + "associatedVipCpId" + ] + }, + { + "required": [ + "associatedVnfVirtualLinkId" + ] + } + ], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "cpConfigId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "cpProtocolInfo": { + "description": "Network protocol information for this CP.\n", + "type": "array", + "items": { + "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", + "type": "object", + "required": [ + "layerProtocol" + ], + "properties": { + "layerProtocol": { + "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", + "type": "string", + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] + }, + "ipOverEthernet": { + "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationId": { + "description": "Identification of the network segment to which the Cp instance connects to. See notes 3 and 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "addresses": { + "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + }, + "isDynamic": { + "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n", + "type": "boolean" + }, + "addressRange": { + "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + } + } + }, + "virtualCpAddress": { + "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which an IP address is assigned to the virtual CP.\n", + "type": "string" + } + } + } + } + } + }, + "extLinkPortId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "associatedVnfcCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "associatedVipCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "associatedVirtualCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "associatedVnfVirtualLinkId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "netAttDefResourceId": { + "description": "Identifier of the \"NetAttDefResourceInfo\" structure that provides the specification of the interface to attach the connection point to a secondary container cluster network. See notes 3 and 4.\nIt shall be present if the external CP is associated to a VNFC realized by one or a set of OS containers and is connected to a secondary container cluster network. It shall not be present otherwise.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } }, - "scaleStatus": { - "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n", + "vipCpInfo": { + "description": "VIP CPs that are part of the VNF instance. Shall be present when that particular VIP CP of the VNFC instance is associated to an external CP of the VNF instance. May be present otherwise.\n", "type": "array", + "minItems": 1, "items": { + "description": "This type provides information related to virtual IP (VIP) CP.\nNOTE 1:\tIt is possible that there is no associated VnfcCp because the VIP CP is available but not associated yet. NOTE 2: If only the value or the presence of this attribute is changed in the \"VipCpInfo\" structure by an LCM operation occurrence, this does not represent a change that requires including a related \"AffectedVipCp\" structure in the VNF LCM operation occurrence notifications or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", + "type": "object", "required": [ - "aspectId", - "scaleLevel" + "cpInstanceId", + "cpdId" ], - "type": "object", "properties": { - "aspectId": { + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpdId": { "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" }, - "scaleLevel": { - "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n", - "type": "integer" + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "vnfExtCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpProtocolInfo": { + "description": "Protocol information for this CP. There shall be one cpProtocolInfo for layer 3. There may be one cpProtocolInfo for layer 2.\n", + "type": "array", + "items": { + "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", + "type": "object", + "required": [ + "layerProtocol" + ], + "properties": { + "layerProtocol": { + "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", + "type": "string", + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] + }, + "ipOverEthernet": { + "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationId": { + "description": "Identification of the network segment to which the Cp instance connects to. See notes 3 and 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "addresses": { + "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + }, + "isDynamic": { + "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n", + "type": "boolean" + }, + "addressRange": { + "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + } + } + }, + "virtualCpAddress": { + "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which an IP address is assigned to the virtual CP.\n", + "type": "string" + } + } + } + } + } + }, + "associatedVnfcCpIds": { + "description": "Identifiers of the VnfcCps that share the virtual IP address allocated to the VIP CP instance. See note.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } + }, + "vnfLinkPortId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "metadata": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" } } } }, - "extCpInfo": { - "description": "Information about the external CPs exposed by the VNF instance.\n", + "virtualCpInfo": { + "description": "Virtual CPs that are part of the VNF instance. Shall be present when a particular Virtual CP is associated to an external CP of the VNF instance. May be present otherwise.\n", "type": "array", - "minItems": 1, "items": { - "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n", + "description": "This type provides information related to a virtual CP instance of a VNF.\nNOTE 1: A consumer of the VNF LCM interface can learn the actual VNFC instances implementing the service \n accessible via the virtual CP instance by querying the \"vnfcResourceInfo\" from the \"InstantiatedVnfInfo\" \n and filtering by corresponding \"vduIds\" values.\nNOTE 2: The information can be omitted because it is already available as part of the external CP information in the \n VnfExtCpInfo structure.\n", "type": "object", "required": [ - "id", + "cpInstanceId", "cpdId", - "cpProtocolInfo" + "resourceHandle", + "vduIds" ], "properties": { - "id": { + "cpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, @@ -157,39 +1166,120 @@ "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" }, + "resourceHandle": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "vnfExtCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, "cpProtocolInfo": { - "description": "Network protocol information for this CP.\n", + "description": "Protocol information for this CP. There shall be one cpProtocolInfo for each layer protocol supported. This attribute may be omitted if the virtual CP is exposed as an external CP. See note 2.\n", "type": "array", "items": { - "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n", + "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", + "type": "object", "required": [ "layerProtocol" ], "properties": { "layerProtocol": { - "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n", + "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", "enum": [ - "IP_OVER_ETHERNET" + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" ] }, "ipOverEthernet": { - "description": "This type represents information about a network address that has been assigned.\n", + "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI's transport technology.\n", "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], "properties": { "macAddress": { "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", "type": "string", "format": "MAC" }, + "segmentationId": { + "description": "Identification of the network segment to which the Cp instance connects to. See notes 3 and 4.\n", + "type": "string" + }, "ipAddresses": { - "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet.\n", + "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. See note 1.\n", "type": "array", "items": { "type": "object", "required": [ "type" ], + "oneOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", @@ -200,7 +1290,7 @@ ] }, "addresses": { - "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n", + "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", "type": "array", "items": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -213,7 +1303,7 @@ "type": "boolean" }, "addressRange": { - "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n", + "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", "required": [ "minAddress", @@ -232,34 +1322,110 @@ } } }, - "subnetId": { - "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", - "type": "string", - "format": "IP" + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" } } } } } + }, + "virtualCpAddress": { + "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which an IP address is assigned to the virtual CP.\n", + "type": "string" + } + } } } } }, - "extLinkPortId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" + "vduIds": { + "description": "Reference to the VDU(s) which implement the service accessible via the virtual CP instance. See note 1.\n", + "type": "array", + "minItems": 1, + "items": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + } + }, + "additionalServiceInfo": { + "description": "Additional service identification information of the virtual CP instance.\n", + "type": "array", + "items": { + "description": "This type provides additional service information of the virtual CP instance used to expose properties of the virtual CP to NFV-MANO.\nNOTE: This attribute shall only be present if additional information is needed to identify the service \n termination within the VNF, such as for example a URL path information in an HTTP request required \n to allow a single virtual CP IP address to be used for several HTTP based services that use the \n same port number.\n", + "type": "object", + "required": [ + "portInfo" + ], + "properties": { + "portInfo": { + "description": "Service port numbers exposed by the virtual CP instance.\n", + "minItems": 1, + "type": "array", + "items": { + "description": "This type describes the service identifying port properties exposed by the virtual CP instance.\n", + "type": "object", + "required": [ + "name", + "port", + "portConfigurable" + ], + "properties": { + "name": { + "description": "The name of the port exposed by the virtual CP instance.\n", + "type": "string" + }, + "protocol": { + "description": "The L4 protocol for this port exposed by the virtual CP instance.\nPermitted values: - TCP - UDP - SCTP\n", + "type": "string", + "enum": [ + "TCP", + "UDP", + "SCTP" + ] + }, + "port": { + "description": "The L4 port number exposed by the virtual CP instance.\n", + "type": "integer" + }, + "portConfigurable": { + "description": "The Boolean is a data type having two values (true and false).\n", + "type": "boolean" + } + } + } + }, + "serviceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } }, "metadata": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" - }, - "associatedVnfcCpId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" - }, - "associatedVnfVirtualLinkId": { - "description": "An identifier with the intention of being globally unique.\n", - "type": "string" } } } @@ -268,10 +1434,12 @@ "description": "Information about the external VLs the VNF instance is connected to.\n", "type": "array", "items": { + "description": "This type represents information about an external VL.\nNOTE:\tThis attribute reflects the current configuration information that has resulted from merging into this attribute \n the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the \n most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" \n or \"ChangeCurrentVnfPkgRequest\", or in the Grant response. If applying such change results in an empty list of \n \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its \n parent data structure.\n", "type": "object", "required": [ "id", - "resourceHandle" + "resourceHandle", + "currentVnfExtCpData" ], "properties": { "id": { @@ -280,11 +1448,10 @@ }, "resourceHandle": { "required": [ - "vimConnectionId", "resourceId" ], "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", "properties": { "vimConnectionId": { "description": "An identifier with the intention of being globally unique.\n", @@ -295,11 +1462,33 @@ "type": "string" }, "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" }, "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", "type": "string" } } @@ -308,7 +1497,7 @@ "description": "Link ports of this VL.\n", "type": "array", "items": { - "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n", + "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\nNOTE 1:\tThe use cases UC#4 and UC#5 in clause A.4 of ETSI GS NFV-IFA 007 provide examples for such a configuration. NOTE 2:\tThe value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\" attribute.\n", "type": "object", "required": [ "id", @@ -321,11 +1510,10 @@ }, "resourceHandle": { "required": [ - "vimConnectionId", "resourceId" ], "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", "properties": { "vimConnectionId": { "description": "An identifier with the intention of being globally unique.\n", @@ -336,11 +1524,33 @@ "type": "string" }, "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" }, "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", "type": "string" } } @@ -348,6 +1558,343 @@ "cpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" + }, + "secondaryCpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "trunkResourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + }, + "currentVnfExtCpData": { + "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. See note.\n", + "type": "array", + "items": { + "description": "This type represents configuration information for external CPs created. * NOTE 1: \tIn case this identifier refers to a CPD with trunking enabled, the external CP instances created\n from this CPD will represent ports in a trunk.\n* NOTE 2: \tWithin one VNF instance, all VNFC instances created from a particular VDU have the same external\n connectivity. Thus, given a particular value of the \"cpdId\" attribute, there shall be one\n \"cpConfig\" entry for each VNFC instance that has been or can be created from a VDU which includes\n a CPD identified by the \"cpdId\" attribute. If the cpConfig represents a subport in a trunk,\n all \"cpConfig\" entries in this list shall have the same segmentationId, which means they are\n connected to the same set of external VLs via the trunk.\n* NOTE 3: \tThe map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified\n by a particular key value from the map, i.e. for the disconnection of an existing external\n CP instance addressed by cpInstanceId in the deleted map entry from a particular external\n virtual link, and deletion of that instance in case it represents a subport. Deleting the\n last key from the map removes the affected instance of the \"VnfExtCpData\" structure from\n its parent data structure.\n* NOTE 4: If, as defined by the input parameters of a \"ChangeVnfFlavour\", \"ChangeExtVnfConnectivity\" or\n \"ChangeCurrentVnfPkg\" operation or as part of the Grant response for any of these operations, a cpConfig\n map entry identified by a particular map key value is moved into another \"ExtVirtualLinkData\" or\n \"VnfExtCpData\" structure, this particular cpConfig map entry may be used by an external CP instance\n different than the one that has used it before the operation, or by no external CP instance at all.\n Renaming a CPD identifier during the \"changeCurrentVnfPkg\" operation does not count as moving the related\n \"cpConfig\" map entries to a new \"extCpData\" structure.\n* NOTE 5: Subports need not be used for containerized VNFCs. The application container can send and receive IP \n packets with any VLAN tag as long as the network interface to connect to the secondary container cluster \n network has been configured appropriately. Thus, no individual cpConfig, except the one representing the \n trunk, need be modelled to allow traffic tagged with a particular VLAN through the connection point.\n* NOTE 6: In the case that the cloud native template included in the MCIOP describes the set of VNFC instances, for \n containerized VNFCs individual connection points need not be configured for each VNFC instance. It is only \n required to configure one cpConfig per cpdId, not per VNFC instance. The case of using, for a scalable VDU, a \n cloud native template in the MCIOP that describes one single VNFC instance is not specified in the present \n document version.\n", + "type": "object", + "required": [ + "cpdId" + ], + "properties": { + "cpdId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "cpConfig": { + "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is of type \"IdentifierInVnf\" and is managed by the NFVO. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). See notes 2, 3, 4, 5, 6.\n", + "type": "object", + "additionalProperties": { + "description": "This type represents an externally provided link port, or a network attachment definition resource of secondary container cluster network, or network address information per instance of an external connection point. In the case of VM-based deployment of the VNFC exposing the external CP:\n 1. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the\n external VL.\n 2. In case a link port is not provided, the VNFM shall create a link port on the external VL and use that link port\n to connect the external CP to the external VL.\nIn the case of container-based deployment of the VNFC exposing the external CP, the VNFM shall use the network attachment definition resource of secondary container cluster network when connecting the CP to the external VL.\n* NOTE 1: The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\" for an external CP\n instance connected or to be connected to a virtual network not categorized as secondary container cluster network:\n 1) Void.\n 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes shall be present for an external CP instance\n representing a subport that is to be created, or an external CP instance that is to be created by creating the\n corresponding VNFC or VNF instance during the current or a subsequent LCM operation, or for an existing\n external CP instance that is to be re-configured or added to a particular external virtual link.\n 3) If the \"linkPortId\" attribute is absent, the VNFM shall create a link port.\n 4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\" attribute shall be provided referencing a\n precreated link port, and the VNFM can use means outside the scope of the present document to obtain the\n pre-configured address information for the connection point from the resource representing the link port.\n 5) If both \"cpProtocolData\" and \"linkportId\" are provided, the NFVO shall ensure that the\n cpProtocolData can be used with the pre-created link port referenced by \"linkPortId\".\n\n* NOTE 2: The following conditions apply to the attributes \"netAttDefResourceId\" and \"cpProtocolData\" for an external CP\n instance connected or to be connected to a secondary container cluster network:\n 1) Void.\n 2) The \"netAttDefResourceId\" attribute shall be present and the \"cpProtocolData\" attribute may be present for\n a to-be-created external CP instance or an existing external CP instance.\n* NOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the external CP, e.g. to build a link\n redundant mated pair in SR-IOV cases. When more than one netAttDefResourceId is indicated, all shall belong\n to the same namespace as defined by the corresponding \"containerNamespace\" attribute in the \"resourceHandle\" a attribute in the\n \"NetAttDefResourceData\".\n* NOTE 4: Either linkPortId or netAttDefResourceId may be included, but not both.\n", + "anyOf": [ + { + "required": [ + "linkPortId" + ] + }, + { + "required": [ + "cpProtocolData" + ] + }, + { + "required": [ + "netAttDefResourceId" + ] + } + ], + "type": "object", + "properties": { + "parentCpConfigId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "linkPortId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "createExtLinkPort": { + "description": "Indicates to the VNFM the need to create a dedicated link port for the external CP. If set to True, the VNFM shall create a link port. If set to False, the VNFM shall not create a link port. This attribute is only applicable for external CP instances without a floating IP address that expose a VIP CP instance for which a dedicated IP address is allocated. It shall be present in that case and shall be absent otherwise.\n", + "type": "boolean" + }, + "netAttDefResourceId": { + "description": "Identifier of the \"NetAttDefResourceData\" structure that provides the specification of the interface to attach the external CP to a secondary container cluster network. It is only applicable if the external CP is connected or to be connected to a secondary container cluster network. It shall not be present if the external CP is related to a virtual network not categorized as secondary container cluster network. See notes 2, 3 and 4.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + }, + "cpProtocolData": { + "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. See notes 1 and 2.\n", + "type": "array", + "items": { + "description": "This type represents network protocol data. * NOTE:\tThis attribute allows to signal the addition of further types of layer and protocol\n in future versions of the present document in a backwards-compatible way. In the current\n version of the present document, only IP over Ethernet is supported.\n", + "type": "object", + "required": [ + "layerProtocol" + ], + "properties": { + "layerProtocol": { + "description": "Identifier of layer(s) and protocol(s). Permitted values:\n - IP_OVER_ETHERNET.\n - IP_FOR_VIRTUAL_CP\nSee note\n", + "type": "string", + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] + }, + "ipOverEthernet": { + "description": "This type represents network address data for IP over Ethernet. * NOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. * NOTE 2:\tExactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present. * NOTE 3:\tIf the CP instance represents a subport in a trunk, segmentationId shall be present.\n Otherwise it shall not be present.\n* NOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the actual\n network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header\n of the packets or it may be an identifier used between the application and the NFVI networking\n infrastructure to identify the network sub-interface of the trunk port in question. In the latter\n case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is\n actually used by the NFVI's transport technology.\n", + "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], + "properties": { + "macAddress": { + "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", + "type": "string", + "format": "MAC" + }, + "segmentationType": { + "description": "Specifies the encapsulation type for the traffics coming in and out of the trunk subport. Permitted values:\n -\tVLAN: the subport uses VLAN as encapsulation type.\n -\tINHERIT: the subport gets its segmentation type from the network it's connected to.\nThis attribute may be present for CP instances that represent subports in a trunk and shall be absent otherwise. If this attribute is not present for a subport CP instance, default value VLAN shall be used.\n", + "type": "string", + "enum": [ + "VLAN", + "INHERIT" + ] + }, + "segmentationId": { + "description": "Identification of the network segment to which the CP instance connects to. See note 3 and note 4.\n", + "type": "string" + }, + "ipAddresses": { + "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "oneOf": [ + { + "required": [ + "fixedAddresses" + ] + }, + { + "required": [ + "numDynamicAddresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "fixedAddresses": { + "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "array", + "items": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + }, + "numDynamicAddresses": { + "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). See note 2.\n", + "type": "integer" + }, + "addressRange": { + "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used. See note 2.\n", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + }, + "subnetId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + } + } + }, + "virtualCpAddress": { + "description": "This type represents network address data for a virtual CP.\n* NOTE 1: The loadBalancerIp and the loadBalancerSourceRanges attributes are only used if the CIS cluster is set up to be \n able to configure an external load balancer. Otherwise it shall be ignored.\n* NOTE 2: In case the cluster can configure an external load balancer but no loadBalancerIp is provided the container\n cluster will assign an IP address.\n* NOTE 3: The attribute is only relevant if the virtual CP is instantiated in a cluster that supports configuration of IP\n address pools for virtual CPs. Otherwise it shall be ignored. MetalLB is an example of a solution for\n Kubernetes┬« that supports configuration of address pools for load balancer services.\n* NOTE 4: The loadBalancerIp, addressPoolName and the externalIp attributes shall not be present at the same time. \n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "externalIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which the CIS cluster will assign an IP address to the virtual CP. See notes 3 and 4.\n", + "type": "string" + }, + "loadBalancerSourceRanges": { + "description": "List of client IP address ranges allowed to access an external load balancer. See note 1.\n", + "type": "array", + "items": { + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "maxAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "extNetAttDefResource": { + "description": "Network attachment definition resources that provide the specification of the interface to attach connection points to this VL.\n", + "type": "array", + "items": { + "description": "This type contains information related to a network attachment definition resource that provides the specification of the interface used to connect one or multiple connection points to a secondary container cluster network.\n", + "type": "object", + "required": [ + "netAttDefResourceInfoId", + "netAttDefResource" + ], + "properties": { + "netAttDefResourceInfoId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "netAttDefResource": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "associatedExtCpId": { + "description": "Identifier of the external CP associated to this network attachment definition resource. Shall be present when the network attachment definition resource is used for external connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } + }, + "associatedVnfcCpId": { + "description": "Identifier of the VNFC CP associated to this network attachment definition resource. May be present when the network attachment definition resource is used for internal connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } } } } @@ -356,13 +1903,14 @@ } }, "extManagedVirtualLinkInfo": { - "description": "External virtual links the VNF instance is connected to.\n", + "description": "Information about the externally-managed internal VLs of the VNF instance. See notes 5 and 6.\n", "type": "array", "items": { "type": "object", "required": [ "id", - "vnfVirtualLinkDescId" + "vnfVirtualLinkDescId", + "networkResource" ], "properties": { "id": { @@ -373,13 +1921,16 @@ "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, "networkResource": { "required": [ - "vimConnectionId", "resourceId" ], "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", "properties": { "vimConnectionId": { "description": "An identifier with the intention of being globally unique.\n", @@ -390,36 +1941,143 @@ "type": "string" }, "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" }, "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", "type": "string" } } }, - "vnfLinkPorts": { - "description": "Link ports of this VL.\n", + "vnfLinkPorts": { + "description": "Link ports of this VL.\n", + "type": "array", + "items": { + "description": "This type represents a link port of an internal VL of a VNF.\nNOTE 1: Either cpInstanceId with cpInstanceType set to \"EXT_CP\" or any combination of cpInstanceId\n with cpInstanceType set to \"VNFC_CP\" and vipCpInstanceId (i.e. one or both of them) shall be \n present for a VnfLinkPortInfo. In case both cpInstanceId with cpInstanceType set to \"VNFC_CP\" \n and vipCpInstanceId are present, the two different CP instances share the linkport.\nNOTE 2: Annex A.4 of ETSI GS NFV-IFA 007 provides examples for configurations where both vipCpInstanceId\n and vnfcCpInstanceId are present (UC#5 and UC#5-b), only vnfcCpInstanceId is present (UC#2), or \n only vipCpInstanceId is present (UC6 and UC#6-b).\nNOTE 3: The value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\"\n attribute.\n", + "type": "object", + "required": [ + "id", + "resourceHandle" + ], + "properties": { + "id": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "resourceHandle": { + "required": [ + "resourceId" + ], + "type": "object", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", + "properties": { + "vimConnectionId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceProviderId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "resourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", + "type": "string" + } + } + }, + "cpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "cpInstanceType": { + "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present and shall be absent otherwise.\nPermitted values: - VNFC_CP: The link port is connected to a VNFC CP. -\tEXT_CP: The link port is associated to an external CP. See note 1.\n", + "type": "string", + "enum": [ + "VNFC_CP", + "EXT_CP" + ] + }, + "vipCpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "trunkResourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" + } + } + } + }, + "vnfNetAttDefResource": { + "description": "Network attachment definition resources that provide the specification of the interface to attach connection points to this VL.\n", "type": "array", "items": { + "description": "This type contains information related to a network attachment definition resource that provides the specification of the interface used to connect one or multiple connection points to a secondary container cluster network.\n", "type": "object", "required": [ - "id", - "resourceHandle" + "netAttDefResourceInfoId", + "netAttDefResource" ], "properties": { - "id": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "netAttDefResourceInfoId": { + "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, - "resourceHandle": { + "netAttDefResource": { "required": [ - "vimConnectionId", "resourceId" ], "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", "properties": { "vimConnectionId": { "description": "An identifier with the intention of being globally unique.\n", @@ -430,29 +2088,59 @@ "type": "string" }, "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" }, "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", "type": "string" } } }, - "cpInstanceId": { - "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", - "type": "string" + "associatedExtCpId": { + "description": "Identifier of the external CP associated to this network attachment definition resource. Shall be present when the network attachment definition resource is used for external connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } }, - "cpInstanceType": { - "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n", - "type": "string", - "enum": [ - "VNFC_CP", - "EXT_CP" - ] + "associatedVnfcCpId": { + "description": "Identifier of the VNFC CP associated to this network attachment definition resource. May be present when the network attachment definition resource is used for internal connectivity by the VNF.\n", + "type": "array", + "items": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + } } } } + }, + "extManagedMultisiteVirtualLinkId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } @@ -461,6 +2149,7 @@ "description": "Active monitoring parameters.\n", "type": "array", "items": { + "description": "This type represents a monitoring parameter that is tracked by the VNFM,\n", "type": "object", "required": [ "id", @@ -471,6 +2160,10 @@ "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, "name": { "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n", "type": "string" @@ -490,7 +2183,7 @@ "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n", "type": "array", "items": { - "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n", + "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance. Depending on the form of virtualisation container of the VNFC:\n - For a VNFC based on VM, a reference to the corresponding VirtualCompute shall be provided, and\n - For a VNFC based on OS container(s), a reference to the Compute MCIO shall be provided. Hence, exposure of\n information by the VNFM to the NFVO is at the MCIO level.\nIn addition, the references to the storage resources depend on the form of the VNFC:\n a) For a VNFC based on VM, storage resource identifiers shall refer to VirtualStorage resources, and\n b) For a VNFC based on OS container(s), storage resource identifiers shall refer to Storage MCIOs.\n\nNOTE 1:\tETSI GS NFV-SOL 001 specifies the structure and format of the VNFD based on \n TOSCA specifications.\nNOTE 2:\tA VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an \n internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external \n CP if it is connected directly to an external VL.\nNOTE 3:\tThe information can be omitted because it is already available as part of the \n external CP information.\nNOTE 4: If only the value or the presence of this attribute is changed in the \"VnfcResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires\n including a related \"AffectedVnfc\" structure in the VNF LCM operation occurrence notifications\n or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\nNOTE 5: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the internal CP, e.g. to build a link\n redundant mated pair in SR-IOV cases. \nNOTE 6: When more than one netAttDefResourceId is indicated, all shall belong to the same namespace. NOTE 7: Subports need not be used for containerized VNFCs. The application container can send and receive IP \n packets with any VLAN tag as long as the network interface to connect to the secondary container cluster \n network has been configured appropriately. Thus, no individual vnfcCpInfo, except the one representing the \n trunk, need be modelled to allow traffic tagged with a particular VLAN through the connection point.\n", "type": "object", "required": [ "id", @@ -506,13 +2199,16 @@ "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, "computeResource": { "required": [ - "vimConnectionId", "resourceId" ], "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", "properties": { "vimConnectionId": { "description": "An identifier with the intention of being globally unique.\n", @@ -523,17 +2219,43 @@ "type": "string" }, "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" }, "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", "type": "string" } } }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, "storageResourceIds": { - "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n", + "description": "References to the VirtualStorage resources or references to Storage MCIOs. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n", "type": "array", "items": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -545,7 +2267,7 @@ "type": "string" }, "vnfcCpInfo": { - "description": "CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is associated to an external CP of the VNF instance. May be present otherwise.\n", + "description": "CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. See note 2. May be present otherwise. See note 7.\n", "type": "array", "items": { "type": "object", @@ -567,38 +2289,68 @@ "type": "string" }, "cpProtocolInfo": { - "description": "Network protocol information for this CP.\n", + "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. See note 3.\n", "type": "array", "items": { - "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n", + "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", + "type": "object", "required": [ "layerProtocol" ], "properties": { "layerProtocol": { - "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n", + "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", "enum": [ - "IP_OVER_ETHERNET" + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" ] }, "ipOverEthernet": { - "description": "This type represents information about a network address that has been assigned.\n", + "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI's transport technology.\n", "type": "object", + "anyOf": [ + { + "required": [ + "macAddress" + ] + }, + { + "required": [ + "ipAddresses" + ] + } + ], "properties": { "macAddress": { "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n", "type": "string", "format": "MAC" }, + "segmentationId": { + "description": "Identification of the network segment to which the Cp instance connects to. See notes 3 and 4.\n", + "type": "string" + }, "ipAddresses": { - "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet.\n", + "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. See note 1.\n", "type": "array", "items": { "type": "object", "required": [ "type" ], + "oneOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressRange" + ] + } + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", @@ -609,7 +2361,7 @@ ] }, "addresses": { - "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n", + "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", "type": "array", "items": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -622,7 +2374,7 @@ "type": "boolean" }, "addressRange": { - "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n", + "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", "required": [ "minAddress", @@ -642,14 +2394,39 @@ } }, "subnetId": { - "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", - "type": "string", - "format": "IP" + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" } } } } } + }, + "virtualCpAddress": { + "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "loadBalancerIp": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "addressPoolName": { + "description": "Name of an address pool from which an IP address is assigned to the virtual CP.\n", + "type": "string" + } + } } } } @@ -658,9 +2435,25 @@ "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, + "parentCpId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "netAttDefResourceId": { + "description": "Identifier of the \"NetAttDefResourceInfo\" structure that provides the specification of the interface to attach the connection point to a secondary container cluster network. See notes 5 and 6. It shall be present if the internal CP is associated to a VNFC realized by one or a set of OS containers and is connected to a secondary container cluster network. It shall not be present otherwise.\n", + "type": "array", + "items": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + }, "metadata": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } @@ -668,15 +2461,19 @@ "metadata": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } }, - "virtualLinkResourceInfo": { - "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n", + "vnfVirtualLinkResourceInfo": { + "description": "Information about the virtualised network resources used by the VLs of the VNF instance. See note 6.\n", "type": "array", "items": { - "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\nNote: If only the value or the presence of this attribute is changed in the \"VnfVirtualLinkResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires including\n a related \"AffectedVirtualLink\" structure in the VNF LCM operation occurrence notifications or the\n \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", "required": [ "id", @@ -692,13 +2489,16 @@ "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, "networkResource": { "required": [ - "vimConnectionId", "resourceId" ], "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", "properties": { "vimConnectionId": { "description": "An identifier with the intention of being globally unique.\n", @@ -709,15 +2509,41 @@ "type": "string" }, "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" }, "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", "type": "string" } } }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, "reservationId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" @@ -726,6 +2552,7 @@ "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n", "type": "array", "items": { + "description": "This type represents a link port of an internal VL of a VNF.\nNOTE 1: Either cpInstanceId with cpInstanceType set to \"EXT_CP\" or any combination of cpInstanceId\n with cpInstanceType set to \"VNFC_CP\" and vipCpInstanceId (i.e. one or both of them) shall be \n present for a VnfLinkPortInfo. In case both cpInstanceId with cpInstanceType set to \"VNFC_CP\" \n and vipCpInstanceId are present, the two different CP instances share the linkport.\nNOTE 2: Annex A.4 of ETSI GS NFV-IFA 007 provides examples for configurations where both vipCpInstanceId\n and vnfcCpInstanceId are present (UC#5 and UC#5-b), only vnfcCpInstanceId is present (UC#2), or \n only vipCpInstanceId is present (UC6 and UC#6-b).\nNOTE 3: The value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\"\n attribute.\n", "type": "object", "required": [ "id", @@ -738,11 +2565,10 @@ }, "resourceHandle": { "required": [ - "vimConnectionId", "resourceId" ], "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", "properties": { "vimConnectionId": { "description": "An identifier with the intention of being globally unique.\n", @@ -753,11 +2579,33 @@ "type": "string" }, "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" }, "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", "type": "string" } } @@ -767,12 +2615,20 @@ "type": "string" }, "cpInstanceType": { - "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n", + "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present and shall be absent otherwise.\nPermitted values: - VNFC_CP: The link port is connected to a VNFC CP. -\tEXT_CP: The link port is associated to an external CP. See note 1.\n", "type": "string", "enum": [ "VNFC_CP", "EXT_CP" ] + }, + "vipCpInstanceId": { + "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", + "type": "string" + }, + "trunkResourceId": { + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", + "type": "string" } } } @@ -788,7 +2644,7 @@ "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n", "type": "array", "items": { - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\nNote: If only the value or the presence of this attribute is changed in the \"VirtualStorageResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires\n including a related \"AffectedVirtualStorage\" structure in the VNF LCM operation occurrence\n notifications or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", "required": [ "id", @@ -804,13 +2660,16 @@ "description": "An identifier that is unique within a VNF descriptor.\n", "type": "string" }, + "vnfdId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, "storageResource": { "required": [ - "vimConnectionId", "resourceId" ], "type": "object", - "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n", + "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes┬« instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes┬« manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes┬« instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes┬« assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes┬« manifest, or a compound name built by \n Kubernetes┬« if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes┬« manifest.\n", "properties": { "vimConnectionId": { "description": "An identifier with the intention of being globally unique.\n", @@ -821,15 +2680,41 @@ "type": "string" }, "resourceId": { - "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n", + "description": "An identifier maintained by the VIM or the CISM or other resource provider. It is expected to be unique within the VIM instance.\n", "type": "string" }, "vimLevelResourceType": { - "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n", + "description": "Type of the resource in the scope of the VIM or the CISM or the resource provider. See note 1.\n", + "type": "string" + }, + "vimLevelAdditionalResourceInfo": { + "description": "This type represents additional resource information which resource and resource type specific, and which is available from the VIM or the CISM or the resource provider.\n* NOTE: At least one attribute shall be present.\n", + "type": "object", + "properties": { + "hostName": { + "description": "Name of the host where the resource is allocated. It shall be present for compute resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "persistentVolume": { + "description": "Name of the persistent volume to which the persistent volume claim representing the storage resource is bound. It may be present for storage resources in the scope of the CISM and shall be absent otherwise. See note.\n", + "type": "string" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "containerNamespace": { + "description": "The value of the namespace in which the MCIO corresponding to the resource is deployed. This attribute shall be present if the resource is managed by a CISM and it shall be absent otherwise.\n", "type": "string" } } }, + "zoneId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, "reservationId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" @@ -840,6 +2725,137 @@ } } } + }, + "mcioInfo": { + "description": "Information on the MCIO(s) representing VNFC instance(s) realized by one or a set of OS containers and created from the same VDU for the VNF instance.\n", + "type": "array", + "items": { + "description": "This type provides information about an MCIO representing the set of VNFC instances realized by one or a set of OS containers which have been created based on the same VDU. Within the CISM, an MCIO controller monitors the actual state of an MCIO representing the set of VNFC instances realized by one or a set of OS containers and compare it to the desired state For an MCIO related to a VDU that has the attribute isNumOfInstancesClusterBased set to FALSE the desired state is specified in the respective declarative descriptor. For an MCIO related to a VDU that has the attribute isNumOfInstancesClusterBased set to TRUE, the desired state is determined by the number of CIS-nodes in the cluster that fulfil the VDU requirements.as specified in the respective declarative descriptor. It triggers actions toward the CIS to align the actual to the desired state. Monitoring the actual state includes monitoring the number of MCIO instances available at any specific point in time. In addition, an MCIO controller maintains properties and runtime information on the MCIO instances which have been created based on the same VDU. The McioInfo data structure provides the runtime information on the MCIOs obtained from the MCIO controller.\nNOTE: There are different types of MCIOs. The set of VNFC instances based on the same VDU is represented \n by one MCIO, e.g. of type Deployment. Each individual VNFC instance is represented by another type \n of MCIO, e.g. a POD.\n\nRuntime information of the set of OS containers realizing an individual VNFC instance is not part of the McioInfo data structure; such runtime information is provided in the ResourceHandle data structure referenced from the VnfcResourceInfo. The McioInfo does not provide runtime information of a constituent VNFC instance created based on a specific VDU.\nNOTE 1: The type of MCIO as specified in the declarative descriptor of the MCIO, and that can be read from \n the CISM. EXAMPLE: In case of MCIOs managed by Kubernetes┬«, the type of MCIO corresponds to the \n \"kind\" property of the declarative descriptor.\nNOTE 2: If the attribute additionalInfo is present, it may contain runtime information on the actual and \n desired state of the MCIO(s). \nNOTE 3: When the container infrastructure service is a Kubernetes┬« instance, the mcioId is the combined \n values from the kind and name fields of the Kubernetes resource object, separated by a slash. \n Example: \"Deployment/abcd\". \nNOTE 4: When the container infrastructure service is a Kubernetes┬« instance, the mcioName is the name \n field of the resource object. \n", + "type": "object", + "required": [ + "mcioId", + "mcioName", + "mcioNamespace", + "vduId", + "cismId", + "mcioType", + "desiredInstances", + "availableInstances" + ], + "properties": { + "mcioId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "mcioName": { + "description": "Human readable name of this MCIO. See note 4.\n", + "type": "string" + }, + "mcioNamespace": { + "description": "Namespace of this MCIO.\n", + "type": "string" + }, + "vduId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "cismId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "mcioType": { + "description": "The type of MCIO. Specific values, their semantics and associated MCIO types are defined in clause 5.5.4.9. Additional values are also permitted. See note 1.\n", + "type": "string", + "enum": [ + "Deployment", + "Statefulset", + "DaemonSet" + ] + }, + "desiredInstances": { + "description": "Number of desired MCIO instances.\n", + "type": "integer" + }, + "availableInstances": { + "description": "Number of available MCIO instances.\n", + "type": "integer" + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "vnfPaasServiceInfo": { + "description": "Information on the PaaS Services assigned and used by the VNF instance.\n", + "type": "array", + "items": { + "description": "This type provides input information about a PaaS Service that is used by a VNF instance. The PaasServiceInfo is comprised of various sets of information. Some information comes from the VNFD, other information comes from the PaaS Service assets provided by the NFVO to the VNFM, and other information is provided at runtime information about the usage of the PaaS Service.\n", + "type": "object", + "required": [ + "id", + "paasServiceId", + "paasServiceType", + "paasServiceRequestId", + "paasServiceHandle" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "paasServiceId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "paasServiceType": { + "description": "The type of PaaS Service. The value of this attribute is expected to be matched against values of the registered PaaS Services in the PSR.", + "type": "string" + }, + "paasServiceVersion": { + "description": "A version.\n", + "type": "string" + }, + "paasServiceRequestId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "paasServiceHandle": { + "description": "This type provides information enabling the access and use of the PaaS Service by the VNF instance. The type and format of the handle depends on the form that the PaaS Service is formed.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } } } }, @@ -987,9 +3003,49 @@ "type": "string" } } + }, + "createSnapshot": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "revertToSnapshot": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + }, + "changeCurrentVnfPkg": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } } } } } + } } \ No newline at end of file diff --git a/interconnectedTestCases/SOL003/schemas/vnfPkgInfo.schema.json b/interconnectedTestCases/SOL003/schemas/vnfPkgInfo.schema.json index d8327b4595f4e4c092e90707d9cfc8e9f3a7e1ee..bd6edd29304dce5364142c5938a228fdfa4fd294 100644 --- a/interconnectedTestCases/SOL003/schemas/vnfPkgInfo.schema.json +++ b/interconnectedTestCases/SOL003/schemas/vnfPkgInfo.schema.json @@ -63,7 +63,7 @@ "description": "Information about VNF package artifacts that are software images. This attribute shall not be present before the VNF package content is on-boarded. Otherwise, this attribute shall be present unless it has been requested to be excluded per attribute selector.\n", "type": "array", "items": { - "description": "This type represents an artifact contained in or external to a VNF package which represents a software image..\n* NOTE 1:\tThe list of permitted values was taken from \"Container formats\" in OpenStack® documentation: \"Disk and container formats for images\"\n (Available at https://docs.openstack.org/glance/pike/user/formats.html).\n* NOTE 2:\tThe list of permitted values was adapted from \"Disk formats\" in OpenStack® documentation: \"Disk and container formats for images\"\n (Available at https://docs.openstack.org/glance/pike/user/formats.html).\n* NOTE 3: The attribute shall be present for VM-based software images referenced from a Vdu, and shall be absent\n otherwise.\n* NOTE 4: The attribute shall be present for software images referenced from a VirtualStorageDesc, and shall be absent\n otherwise.\n", + "description": "This type represents an artifact contained in or external to a VNF package which represents a software image..\n* NOTE 1:\tThe list of permitted values was taken from \"Container formats\" in OpenStack┬« documentation: \"Disk and container formats for images\"\n (Available at https://docs.openstack.org/glance/pike/user/formats.html).\n* NOTE 2:\tThe list of permitted values was adapted from \"Disk formats\" in OpenStack┬« documentation: \"Disk and container formats for images\"\n (Available at https://docs.openstack.org/glance/pike/user/formats.html).\n* NOTE 3: The attribute shall be present for VM-based software images referenced from a Vdu, and shall be absent\n otherwise.\n* NOTE 4: The attribute shall be present for software images referenced from a VirtualStorageDesc, and shall be absent\n otherwise.\n", "type": "object", "required": [ "id", @@ -104,7 +104,15 @@ "containerFormat": { "description": "Container format indicates whether the software image is in a file format that also contains metadata about the actual software. Permitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - BARE: the image does not have a container or metadata envelope - DOCKER: docker container format - OVA: OVF package in a tarfile - OVF: OVF container format See note 1.\n", "type": "string", - "enum": ["AKI", "AMI", "ARI", "BARE", "DOCKER", "OVA", "OVF"] + "enum": [ + "AKI", + "AMI", + "ARI", + "BARE", + "DOCKER", + "OVA", + "OVF" + ] }, "diskFormat": { "description": "Disk format of a software image is the format of the underlying disk image. Permitted values:\n - AKI: a kernel image format\n - AMI: a machine image format\n - ARI: a ramdisk image format\n - ISO: an archive format for the data contents of an optical disc,\n such as CD-ROM\n - QCOW2: a common disk image format, which can expand dynamically\n and supports copy on write\n - RAW: an unstructured disk image format\n - VDI: a common disk image format\n - VHD: a common disk image format\n - VHDX: enhanced version of VHD format\n - VMDK: a common disk image format\nSee notes 2 and 3.\n", @@ -157,7 +165,7 @@ "description": "Information about VNF package artifacts contained in the VNF package that are not software images. Every local and external artifact declared in the manifest shall be included, except the software images and the files that make up the parts of the VNFD (see clause 10.4.4.3.2). Signature files and certificate files are not considered as artifacts, however, the content of the \"Licenses\" and \"Testing\" directories in the VNF package is. This attribute shall not be present before the VNF package content is on-boarded. Otherwise, this attribute shall be present if the VNF package contains additional artifacts.\n", "type": "array", "items": { - "description": "This type represents an artifact other than a software image which is contained in or external to a VNF package.\n", + "description": "This type represents an artifact other than a software image which is contained in or external to a VNF package.\n* NOTE: The attribute name \"artifactURI\" does not comply with the naming convention defined in clause 4.3 in ETSI GS NFV-SOL 015. This is to maintain the backward compatibility.\n", "type": "object", "required": ["artifactPath", "checksum", "isEncrypted"], "properties": { @@ -166,7 +174,7 @@ "type": "string" }, "artifactURI": { - "description": "URI of the artifact as defined in the VNF package manifest. Shall be present if the artifact is external to the package and shall be absent otherwise.\nEXAMPLE: https://example.com/m%40ster.sh\n", + "description": "URI of the artifact as defined in the VNF package manifest. Shall be present if the artifact is external to the package and shall be absent otherwise. EXAMPLE:https://example.com/m%40ster.sh See note.\n", "type": "array", "items": { "description": "String formatted according to IETF RFC 3986.\n", @@ -200,7 +208,13 @@ "onboardingState": { "description": "CREATED: The \"Individual VNF package\" resource has been created. UPLOADING: The associated VNF package content is being uploaded. PROCESSING: The associated VNF package content is being processed, e.g.,\n validation.\nONBOARDED: The associated VNF package content has been on-boarded successfully. ERROR: There was an error during upload of the VNF package content or external\n artifacts, or during VNF package processing.\n", "type": "string", - "enum": ["CREATED", "UPLOADING", "PROCESSING", "ONBOARDED", "ERROR"] + "enum": [ + "CREATED", + "UPLOADING", + "PROCESSING", + "ONBOARDED", + "ERROR" + ] }, "operationalState": { "description": "- ENABLED: The VNF package is enabled, i.e. it can be used for\n the creation of new \"Individual VNF instance\" resources.\n- DISABLED: The VNF package is disabled, i.e. it shall not be used for\n the creation of further \"Individual VNF instance\" resources\n (unless and until the VNF package is re-enabled).\n", @@ -290,4 +304,4 @@ } } } -} +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 7df57b4fb4c908c9134096955e5c3921183d3b01..2c07a8c9f73b9a3aa28bb19de29f724c0a7b29ae 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ robotframework-jsonschemalibrary==1.0 robotframework-mockserver==0.0.7 robotframework-requests==0.7.1 PyJWT==2.9.0 +setuptools==75.5.0 \ No newline at end of file