diff --git a/doc/requirements.txt b/doc/requirements.txt index c2637226..778ad9c0 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -3,9 +3,6 @@ # process, which may cause wedges in the gate later. sphinx>=2.0.0,!=2.1.0 # BSD openstackdocstheme>=2.2.1 # Apache-2.0 -pillow===9.5.0 +pillow===11.0.0 sphinxcontrib-actdiag # BSD -sphinxcontrib-blockdiag # BSD -sphinxcontrib-nwdiag # BSD -sphinxcontrib-seqdiag # BSD sphinxcontrib-mermaid # BSD diff --git a/doc/source/conf.py b/doc/source/conf.py index eca4f8f3..1a8effbf 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -28,10 +28,6 @@ import datetime extensions = [ 'sphinx.ext.todo', 'sphinx.ext.viewcode', - 'sphinxcontrib.blockdiag', - 'sphinxcontrib.actdiag', - 'sphinxcontrib.seqdiag', - 'sphinxcontrib.nwdiag', 'sphinxcontrib.mermaid', 'openstackdocstheme', ] diff --git a/specs/2023.1/add-sample-coordination.rst b/specs/2023.1/add-sample-coordination.rst index 24048916..3d0e31ef 100644 --- a/specs/2023.1/add-sample-coordination.rst +++ b/specs/2023.1/add-sample-coordination.rst @@ -405,59 +405,7 @@ The following diagram shows the rolling update using coordinateVNF script. Sequence for Rolling update operation -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "InfraDriver" - "CoordinateVNF script" - "VIM (OpenStack)" - "VNF" - "EM" - - "Client" -> "Tacker-server" - [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; - "Client" <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" ->> "Tacker-conductor" - [label = "2. ChangeCurrentVNFPackage"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "change_vnfpkg"]; - "VnfLcmDriver" -> "InfraDriver" - [label = "3. change_vnfpkg_process"]; - "InfraDriver" -> "VIM (OpenStack)" - [label = "4. Get stack resource to update"]; - "InfraDriver" <-- "VIM (OpenStack)" - [label = ""]; - "InfraDriver" -> "VIM (OpenStack)" - [label = "5. update_stack"]; - "InfraDriver" <-- "VIM (OpenStack)" - [label = ""]; - "InfraDriver" -> "CoordinateVNF script" - [label = "6. CoordinateVNF"]; - "CoordinateVNF script" -> "VNF" - [label = "7. Coordinate resource"]; - "CoordinateVNF script" <-- "VNF" - [label = ""]; - "CoordinateVNF script" -> "EM" - [label = "8. Coordination request"]; - "CoordinateVNF script" <-- "EM" - [label = "Coordination result"]; - "InfraDriver" <-- "CoordinateVNF script" - [label = ""]; - "InfraDriver" -> "InfraDriver" - [label = "9. Repeat steps 5 through 8 for each VNFC"]; - "VnfLcmDriver" <-- "InfraDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./add-sample-coordination/01.png #. The Client sends a ChangeCurrentVNFPackage request to the "Individual VNF instance" resource. diff --git a/specs/2023.1/add-sample-coordination/01.diag b/specs/2023.1/add-sample-coordination/01.diag new file mode 100644 index 00000000..cc3bd717 --- /dev/null +++ b/specs/2023.1/add-sample-coordination/01.diag @@ -0,0 +1,52 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "InfraDriver" + "CoordinateVNF script" + "VIM (OpenStack)" + "VNF" + "EM" + + "Client" -> "Tacker-server" + [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; + "Client" <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" ->> "Tacker-conductor" + [label = "2. ChangeCurrentVNFPackage"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "change_vnfpkg"]; + "VnfLcmDriver" -> "InfraDriver" + [label = "3. change_vnfpkg_process"]; + "InfraDriver" -> "VIM (OpenStack)" + [label = "4. Get stack resource to update"]; + "InfraDriver" <-- "VIM (OpenStack)" + [label = ""]; + "InfraDriver" -> "VIM (OpenStack)" + [label = "5. update_stack"]; + "InfraDriver" <-- "VIM (OpenStack)" + [label = ""]; + "InfraDriver" -> "CoordinateVNF script" + [label = "6. CoordinateVNF"]; + "CoordinateVNF script" -> "VNF" + [label = "7. Coordinate resource"]; + "CoordinateVNF script" <-- "VNF" + [label = ""]; + "CoordinateVNF script" -> "EM" + [label = "8. Coordination request"]; + "CoordinateVNF script" <-- "EM" + [label = "Coordination result"]; + "InfraDriver" <-- "CoordinateVNF script" + [label = ""]; + "InfraDriver" -> "InfraDriver" + [label = "9. Repeat steps 5 through 8 for each VNFC"]; + "VnfLcmDriver" <-- "InfraDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/2023.1/add-sample-coordination/01.png b/specs/2023.1/add-sample-coordination/01.png new file mode 100644 index 00000000..103ce04a Binary files /dev/null and b/specs/2023.1/add-sample-coordination/01.png differ diff --git a/specs/2023.1/enhance-tacker-policy.rst b/specs/2023.1/enhance-tacker-policy.rst index 88ed82b3..3dae0d81 100644 --- a/specs/2023.1/enhance-tacker-policy.rst +++ b/specs/2023.1/enhance-tacker-policy.rst @@ -84,23 +84,7 @@ pass them to policy checker when calling. The flow of a policy check in API process to support enhanced Tacker policy. -.. seqdiag:: - - seqdiag { - Client -> Keystonemiddleware [label = "request"]; - Keystonemiddleware -> "API Process" [label = "1. Request with user info"]; - "API Process" -> TackerDB [label = "2. Get the accessed \nresources from the TackerDB"] - "API Process" <-- TackerDB [label = "return the accessed\n resources"]; - "API Process" -> "API Process" [label = "3. Get required \nresource \nattributes \nfrom accessed \nresources"]; - "API Process" -> Context [label = "4. Invoke policy check function with accessed resource\n attributes"]; - Context -> Context [label = "5. Convert special \nroles to user\n attributes"]; - Context -> oslo.policy [label = "6. Invoke policy enforcer\n with resource attributes\n and user attributes"]; - Context <-- oslo.policy; - "API Process" <-- Context; - === 7. Operate the accessed resource. === - Keystonemiddleware <-- "API Process" [label = "response"]; - Client <-- Keystonemiddleware [label = "response"]; - } +.. image:: ./enhance-tacker-policy/01.png Step 3 is specialized and needs to be implemented by each API process by itself. The other steps are common or already exist for all API processes to be changed: @@ -275,22 +259,7 @@ list operation. The flow of a policy filter in API process to support enhanced Tacker policy. -.. seqdiag:: - - seqdiag { - Client -> Keystonemiddleware [label = "request"]; - Keystonemiddleware -> "API Process" [label = "1. Request with user info"]; - "API Process" -> Context [label = "2. Invoke policy check\n function without resource \nattributes"]; - "API Process" <-- Context; - "API Process" -> TackerDB [label = "3. Get the accessed resources from the database"]; - "API Process" <-- TackerDB [label = "return accessed resources"]; - "API Process" -> Context [label = "4. Get user attributes"]; - Context -> Context [label = "5. Convert special \nroles to user\n attributes"]; - "API Process" <-- Context [label = "return user attributes"]; - "API Process" -> "API Process" [label = "6. Filter the list\n operation results \nbased on policy\n rules"]; - Keystonemiddleware <-- "API Process" [label = "7. Return the filtered\n result to user"]; - Client <-- Keystonemiddleware [label = "response"]; - } +.. image:: ./enhance-tacker-policy/02.png Step 6 is specialized and needs to be implemented by each API process by itself. The other steps are common or already exist steps for all API processes to be diff --git a/specs/2023.1/enhance-tacker-policy/01.diag b/specs/2023.1/enhance-tacker-policy/01.diag new file mode 100644 index 00000000..b49b8536 --- /dev/null +++ b/specs/2023.1/enhance-tacker-policy/01.diag @@ -0,0 +1,16 @@ + + seqdiag { + Client -> Keystonemiddleware [label = "request"]; + Keystonemiddleware -> "API Process" [label = "1. Request with user info"]; + "API Process" -> TackerDB [label = "2. Get the accessed \nresources from the TackerDB"] + "API Process" <-- TackerDB [label = "return the accessed\n resources"]; + "API Process" -> "API Process" [label = "3. Get required \nresource \nattributes \nfrom accessed \nresources"]; + "API Process" -> Context [label = "4. Invoke policy check function with accessed resource\n attributes"]; + Context -> Context [label = "5. Convert special \nroles to user\n attributes"]; + Context -> oslo.policy [label = "6. Invoke policy enforcer\n with resource attributes\n and user attributes"]; + Context <-- oslo.policy; + "API Process" <-- Context; + === 7. Operate the accessed resource. === + Keystonemiddleware <-- "API Process" [label = "response"]; + Client <-- Keystonemiddleware [label = "response"]; + } diff --git a/specs/2023.1/enhance-tacker-policy/01.png b/specs/2023.1/enhance-tacker-policy/01.png new file mode 100644 index 00000000..ecd4a124 Binary files /dev/null and b/specs/2023.1/enhance-tacker-policy/01.png differ diff --git a/specs/2023.1/enhance-tacker-policy/02.diag b/specs/2023.1/enhance-tacker-policy/02.diag new file mode 100644 index 00000000..11dd4e28 --- /dev/null +++ b/specs/2023.1/enhance-tacker-policy/02.diag @@ -0,0 +1,15 @@ + + seqdiag { + Client -> Keystonemiddleware [label = "request"]; + Keystonemiddleware -> "API Process" [label = "1. Request with user info"]; + "API Process" -> Context [label = "2. Invoke policy check\n function without resource \nattributes"]; + "API Process" <-- Context; + "API Process" -> TackerDB [label = "3. Get the accessed resources from the database"]; + "API Process" <-- TackerDB [label = "return accessed resources"]; + "API Process" -> Context [label = "4. Get user attributes"]; + Context -> Context [label = "5. Convert special \nroles to user\n attributes"]; + "API Process" <-- Context [label = "return user attributes"]; + "API Process" -> "API Process" [label = "6. Filter the list\n operation results \nbased on policy\n rules"]; + Keystonemiddleware <-- "API Process" [label = "7. Return the filtered\n result to user"]; + Client <-- Keystonemiddleware [label = "response"]; + } diff --git a/specs/2023.1/enhance-tacker-policy/02.png b/specs/2023.1/enhance-tacker-policy/02.png new file mode 100644 index 00000000..03bf7610 Binary files /dev/null and b/specs/2023.1/enhance-tacker-policy/02.png differ diff --git a/specs/2023.1/enhance_placement_process.rst b/specs/2023.1/enhance_placement_process.rst index 8d52656b..ada4814a 100644 --- a/specs/2023.1/enhance_placement_process.rst +++ b/specs/2023.1/enhance_placement_process.rst @@ -86,34 +86,7 @@ until there are no more candidates. 1) Flowchart of availability zone reselection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. blockdiag:: - - blockdiag { - orientation = portrait; - edge_layout = flowchart; - - create [shape=flowchart.condition,label='stack create/update']; - start [shape=beginpoint]; - lin [shape=flowchart.loopin,label='stack create/update\nin other AZ']; - recreate [shape=flowchart.condition,label='stack create/update']; - lout [shape=flowchart.loopout,label='no more AZ\ncandidates']; - failure [shape=endpoint,label='end']; - success [shape=endpoint,label='end']; - - class none [shape=none]; - n [class=none]; - - start -> create [label='NFVO AZ'] - create -> lin [label=error] - lin -> recreate [label='other AZ'] - recreate -> lout [label='error'] - lout -> failure [label='failure']; - - create -> success; - - recreate -> n [dir=none] - n -> success [label='success']; - } +.. image:: ./enhance_placement_process/01.png The procedure consists of the following steps as illustrated in above flow: diff --git a/specs/2023.1/enhance_placement_process/01.diag b/specs/2023.1/enhance_placement_process/01.diag new file mode 100644 index 00000000..adbaff85 --- /dev/null +++ b/specs/2023.1/enhance_placement_process/01.diag @@ -0,0 +1,27 @@ + + blockdiag { + orientation = portrait; + edge_layout = flowchart; + + create [shape=flowchart.condition,label='stack create/update']; + start [shape=beginpoint]; + lin [shape=flowchart.loopin,label='stack create/update\nin other AZ']; + recreate [shape=flowchart.condition,label='stack create/update']; + lout [shape=flowchart.loopout,label='no more AZ\ncandidates']; + failure [shape=endpoint,label='end']; + success [shape=endpoint,label='end']; + + class none [shape=none]; + n [class=none]; + + start -> create [label='NFVO AZ'] + create -> lin [label=error] + lin -> recreate [label='other AZ'] + recreate -> lout [label='error'] + lout -> failure [label='failure']; + + create -> success; + + recreate -> n [dir=none] + n -> success [label='success']; + } diff --git a/specs/2023.1/enhance_placement_process/01.png b/specs/2023.1/enhance_placement_process/01.png new file mode 100644 index 00000000..8268cf56 Binary files /dev/null and b/specs/2023.1/enhance_placement_process/01.png differ diff --git a/specs/2023.1/support-multi-conductors-onboarding.rst b/specs/2023.1/support-multi-conductors-onboarding.rst index dedbf012..af92be01 100644 --- a/specs/2023.1/support-multi-conductors-onboarding.rst +++ b/specs/2023.1/support-multi-conductors-onboarding.rst @@ -36,53 +36,7 @@ In current implementation, onboarding process are as follows. The sequence of the process is as follows. -.. seqdiag:: - - seqdiag { - node_width = 80; edge_length = 100; - - "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" - - Client -> "Tacker-server" - [label = "1. PUT /vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content"]; - - "Tacker-server" -> "DB" - [label = "2. Update onboardingState to UPLOADING"] - - "Tacker-server" <- "DB" - [label = ""] - - "Tacker-server" -> "Backend Storage" - [label = "3. Upload CSAR file"] - - "Tacker-server" <- "Backend Storage" - [label = ""] - - "Tacker-server" -> "Messaging Queue" - [label = "4. Send a rpc message of 'Upload VNF Package from content' with fanout=False"] - - Client <- "Tacker-server" - [label = "response 202 Accepted"] - - "Messaging Queue" -> "Tacker-conductor 1" - [label = ""] - - "Tacker-conductor 1" -> "Backend Storage" - [label = "5. Send a request to download the CSAR file"] - - "Tacker-conductor 1" <- "Backend Storage" - [label = "Download the CSAR file from Backend Storage to the local file system"] - - "Tacker-conductor 1" -> "DB" - [label = "6. Update onboardingState to ONBOARDED"] - - "Tacker-conductor 1" <- "DB" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 1" - [label = ""] - - } +.. image:: ./support-multi-conductors-onboarding/01.png - when receiving the "POST /vnfpkgm/v1/vnf_packages/{vnf_package_id} /package_content/upload_from_uri" request. @@ -106,53 +60,7 @@ The sequence of the process is as follows. The sequence of the process is as follows. -.. seqdiag:: - - seqdiag { - node_width = 80; edge_length = 100; - - "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" - - Client -> "Tacker-server" - [label = "1. POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content/upload_from_uri"]; - - "Tacker-server" -> "DB" - [label = "2. Update onboardingState to UPLOADING"] - - "Tacker-server" <- "DB" - [label = ""] - - "Tacker-server" -> "Messaging Queue" - [label = "3. Send a rpc message of 'Upload VNF Package from uri' with fanout=False"] - - Client <- "Tacker-server" - [label = "response 202 Accepted"] - - "Messaging Queue" -> "Tacker-conductor 1" - [label = ""] - - "Tacker-conductor 1" -> "Backend Storage" - [label = "4. Upload CSAR file"] - - "Tacker-conductor 1" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 1" -> "Backend Storage" - [label = "5. Send a request to download the CSAR file"] - - "Tacker-conductor 1" <- "Backend Storage" - [label = "Download the CSAR file from Backend Storage to the local file system"] - - "Tacker-conductor 1" -> "DB" - [label = "6. Update onboardingState to ONBOARDED"] - - "Tacker-conductor 1" <- "DB" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 1" - [label = ""] - - } +.. image:: ./support-multi-conductors-onboarding/02.png .. note:: Configurations of a backend storage are defined in ``[glance_store]`` section in ``tacker.conf``. @@ -211,89 +119,7 @@ We would change the process of onboarding as follows. #. The Tacker-conductor that sends a message to all Tacker-conductors updates the onboardingState to "ONBOARDED". -.. seqdiag:: - - seqdiag { - node_width = 80; edge_length = 100; - - "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" - - Client -> "Tacker-server" - [label = "1. PUT /vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content"]; - - "Tacker-server" -> "DB" - [label = "2. Update onboardingState to UPLOADING"] - - "Tacker-server" <- "DB" - [label = ""] - - "Tacker-server" -> "Backend Storage" - [label = "3. Upload CSAR file"] - - "Tacker-server" <- "Backend Storage" - [label = ""] - - "Tacker-server" -> "Messaging Queue" - [label = "4. Send a rpc message of 'Upload VNF Package from content' with fanout=False"] - - Client <- "Tacker-server" - [label = "response 202 Accepted"] - - "Messaging Queue" -> "Tacker-conductor 1" - [label = ""] - - "Tacker-conductor 1" -> "Messaging Queue" - [label = "5. sends a rpc message to download the CSAR file with fanout=True"] - - "Messaging Queue" -> "Tacker-conductor 1" - [label = ""] - - "Messaging Queue" -> "Tacker-conductor 2" - [label = ""] - - "Messaging Queue" -> "Tacker-conductor 3" - [label = ""] - - "Tacker-conductor 1" -> "Backend Storage" - [label = "6. Download the CSAR file to local file system"] - - "Tacker-conductor 1" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 2" -> "Backend Storage" - [label = "6. Download the CSAR file to local file system"] - - "Tacker-conductor 2" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 3" -> "Backend Storage" - [label = "6. Download the CSAR file to local file system"] - - "Tacker-conductor 3" <- "Backend Storage" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 1" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 2" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 3" - [label = ""] - - "Tacker-conductor 1" <- "Messaging Queue" - [label = ""] - - "Tacker-conductor 1" -> "DB" - [label = "7. Update onboardingState to ONBOARDED"] - - "Tacker-conductor 1" <- "DB" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 1" - [label = ""] - - } +.. image:: ./support-multi-conductors-onboarding/03.png - when receiving the "POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/ package_content/upload_from_uri" request. @@ -318,89 +144,7 @@ We would change the process of onboarding as follows. #. The Tacker-conductor that sends a message to all Tacker-conductors updates the onboardingState to "ONBOARDED". -.. seqdiag:: - - seqdiag { - node_width = 80; edge_length = 100; - - "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" - - Client -> "Tacker-server" - [label = "1. POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content/upload_from_uri"]; - - "Tacker-server" -> "DB" - [label = "2. Update onboardingState to UPLOADING"] - - "Tacker-server" <- "DB" - [label = ""] - - "Tacker-server" -> "Messaging Queue" - [label = "3. Send a rpc message of 'Upload VNF Package from uri' with fanout=False"] - - Client <- "Tacker-server" - [label = "response 202 Accepted"] - - "Messaging Queue" -> "Tacker-conductor 1" - [label = ""] - - "Tacker-conductor 1" -> "Backend Storage" - [label = "4. Upload CSAR file"] - - "Tacker-conductor 1" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 1" -> "Messaging Queue" - [label = "5. sends a rpc message to download the CSAR file with fanout=True"] - - "Messaging Queue" -> "Tacker-conductor 1" - [label = ""] - - "Messaging Queue" -> "Tacker-conductor 2" - [label = ""] - - "Messaging Queue" -> "Tacker-conductor 3" - [label = ""] - - "Tacker-conductor 1" -> "Backend Storage" - [label = "6. Download the CSAR file to local file system"] - - "Tacker-conductor 1" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 2" -> "Backend Storage" - [label = "6. Download the CSAR file to local file system"] - - "Tacker-conductor 2" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 3" -> "Backend Storage" - [label = "6. Download the CSAR file to local file system"] - - "Tacker-conductor 3" <- "Backend Storage" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 1" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 2" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 3" - [label = ""] - - "Tacker-conductor 1" <- "Messaging Queue" - [label = ""] - - "Tacker-conductor 1" -> "DB" - [label = "7. Update onboardingState to ONBOARDED"] - - "Tacker-conductor 1" <- "DB" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 1" - [label = ""] - - } +.. image:: ./support-multi-conductors-onboarding/04.png .. note:: If even one of the Tacker-conductor fails to download CSAR file, the ``onboardingState`` is not being updated to "ONBOARDED". @@ -430,83 +174,7 @@ We would change the process of deleting VNF packages as follows. #. All Tacker-conductors that get the message delete the file from their local file system and return a result via rpc. -.. seqdiag:: - - seqdiag { - node_width = 80; edge_length = 100; - - "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" - - Client -> "Tacker-server" - [label = "1. DELETE /vnfpkgm/v1/vnf_packages/{vnf_package_id}"]; - - "Tacker-server" -> "DB" - [label = "2. Update the deleted flag to 1"] - - "Tacker-server" <- "DB" - [label = ""] - - "Tacker-server" -> "Messaging Queue" - [label = "3. Send a rpc message of 'Delete VNF Package' with fanout=False"] - - Client <- "Tacker-server" - [label = "response 204 No Content"] - - "Messaging Queue" -> "Tacker-conductor 1" - [label = ""] - - "Tacker-conductor 1" -> "Backend Storage" - [label = "4. Delete CSAR file"] - - "Tacker-conductor 1" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 1" -> "Messaging Queue" - [label = "5. sends a rpc message to delete the file from local file system with fanout=True"] - - "Messaging Queue" -> "Tacker-conductor 1" - [label = ""] - - "Messaging Queue" -> "Tacker-conductor 2" - [label = ""] - - "Messaging Queue" -> "Tacker-conductor 3" - [label = ""] - - "Tacker-conductor 1" -> "Backend Storage" - [label = "6. Delete the CSAR file from local file system"] - - "Tacker-conductor 1" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 2" -> "Backend Storage" - [label = "6. Delete the CSAR file from local file system"] - - "Tacker-conductor 2" <- "Backend Storage" - [label = ""] - - "Tacker-conductor 3" -> "Backend Storage" - [label = "6. Delete the CSAR file from local file system"] - - "Tacker-conductor 3" <- "Backend Storage" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 1" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 2" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 3" - [label = ""] - - "Tacker-conductor 1" <- "Messaging Queue" - [label = ""] - - "Messaging Queue" <- "Tacker-conductor 1" - [label = ""] - - } +.. image:: ./support-multi-conductors-onboarding/05.png If a Tacker-conductor is newly added to the cluster, diff --git a/specs/2023.1/support-multi-conductors-onboarding/01.diag b/specs/2023.1/support-multi-conductors-onboarding/01.diag new file mode 100644 index 00000000..e26d2bc3 --- /dev/null +++ b/specs/2023.1/support-multi-conductors-onboarding/01.diag @@ -0,0 +1,46 @@ + + seqdiag { + node_width = 80; edge_length = 100; + + "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" + + Client -> "Tacker-server" + [label = "1. PUT /vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content"]; + + "Tacker-server" -> "DB" + [label = "2. Update onboardingState to UPLOADING"] + + "Tacker-server" <- "DB" + [label = ""] + + "Tacker-server" -> "Backend Storage" + [label = "3. Upload CSAR file"] + + "Tacker-server" <- "Backend Storage" + [label = ""] + + "Tacker-server" -> "Messaging Queue" + [label = "4. Send a rpc message of 'Upload VNF Package from content' with fanout=False"] + + Client <- "Tacker-server" + [label = "response 202 Accepted"] + + "Messaging Queue" -> "Tacker-conductor 1" + [label = ""] + + "Tacker-conductor 1" -> "Backend Storage" + [label = "5. Send a request to download the CSAR file"] + + "Tacker-conductor 1" <- "Backend Storage" + [label = "Download the CSAR file from Backend Storage to the local file system"] + + "Tacker-conductor 1" -> "DB" + [label = "6. Update onboardingState to ONBOARDED"] + + "Tacker-conductor 1" <- "DB" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 1" + [label = ""] + + } diff --git a/specs/2023.1/support-multi-conductors-onboarding/01.png b/specs/2023.1/support-multi-conductors-onboarding/01.png new file mode 100644 index 00000000..36d5513b Binary files /dev/null and b/specs/2023.1/support-multi-conductors-onboarding/01.png differ diff --git a/specs/2023.1/support-multi-conductors-onboarding/02.diag b/specs/2023.1/support-multi-conductors-onboarding/02.diag new file mode 100644 index 00000000..19357cc8 --- /dev/null +++ b/specs/2023.1/support-multi-conductors-onboarding/02.diag @@ -0,0 +1,46 @@ + + seqdiag { + node_width = 80; edge_length = 100; + + "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" + + Client -> "Tacker-server" + [label = "1. POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content/upload_from_uri"]; + + "Tacker-server" -> "DB" + [label = "2. Update onboardingState to UPLOADING"] + + "Tacker-server" <- "DB" + [label = ""] + + "Tacker-server" -> "Messaging Queue" + [label = "3. Send a rpc message of 'Upload VNF Package from uri' with fanout=False"] + + Client <- "Tacker-server" + [label = "response 202 Accepted"] + + "Messaging Queue" -> "Tacker-conductor 1" + [label = ""] + + "Tacker-conductor 1" -> "Backend Storage" + [label = "4. Upload CSAR file"] + + "Tacker-conductor 1" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 1" -> "Backend Storage" + [label = "5. Send a request to download the CSAR file"] + + "Tacker-conductor 1" <- "Backend Storage" + [label = "Download the CSAR file from Backend Storage to the local file system"] + + "Tacker-conductor 1" -> "DB" + [label = "6. Update onboardingState to ONBOARDED"] + + "Tacker-conductor 1" <- "DB" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 1" + [label = ""] + + } diff --git a/specs/2023.1/support-multi-conductors-onboarding/02.png b/specs/2023.1/support-multi-conductors-onboarding/02.png new file mode 100644 index 00000000..5d979d0a Binary files /dev/null and b/specs/2023.1/support-multi-conductors-onboarding/02.png differ diff --git a/specs/2023.1/support-multi-conductors-onboarding/03.diag b/specs/2023.1/support-multi-conductors-onboarding/03.diag new file mode 100644 index 00000000..1cde5d92 --- /dev/null +++ b/specs/2023.1/support-multi-conductors-onboarding/03.diag @@ -0,0 +1,82 @@ + + seqdiag { + node_width = 80; edge_length = 100; + + "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" + + Client -> "Tacker-server" + [label = "1. PUT /vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content"]; + + "Tacker-server" -> "DB" + [label = "2. Update onboardingState to UPLOADING"] + + "Tacker-server" <- "DB" + [label = ""] + + "Tacker-server" -> "Backend Storage" + [label = "3. Upload CSAR file"] + + "Tacker-server" <- "Backend Storage" + [label = ""] + + "Tacker-server" -> "Messaging Queue" + [label = "4. Send a rpc message of 'Upload VNF Package from content' with fanout=False"] + + Client <- "Tacker-server" + [label = "response 202 Accepted"] + + "Messaging Queue" -> "Tacker-conductor 1" + [label = ""] + + "Tacker-conductor 1" -> "Messaging Queue" + [label = "5. sends a rpc message to download the CSAR file with fanout=True"] + + "Messaging Queue" -> "Tacker-conductor 1" + [label = ""] + + "Messaging Queue" -> "Tacker-conductor 2" + [label = ""] + + "Messaging Queue" -> "Tacker-conductor 3" + [label = ""] + + "Tacker-conductor 1" -> "Backend Storage" + [label = "6. Download the CSAR file to local file system"] + + "Tacker-conductor 1" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 2" -> "Backend Storage" + [label = "6. Download the CSAR file to local file system"] + + "Tacker-conductor 2" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 3" -> "Backend Storage" + [label = "6. Download the CSAR file to local file system"] + + "Tacker-conductor 3" <- "Backend Storage" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 1" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 2" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 3" + [label = ""] + + "Tacker-conductor 1" <- "Messaging Queue" + [label = ""] + + "Tacker-conductor 1" -> "DB" + [label = "7. Update onboardingState to ONBOARDED"] + + "Tacker-conductor 1" <- "DB" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 1" + [label = ""] + + } diff --git a/specs/2023.1/support-multi-conductors-onboarding/03.png b/specs/2023.1/support-multi-conductors-onboarding/03.png new file mode 100644 index 00000000..6539541d Binary files /dev/null and b/specs/2023.1/support-multi-conductors-onboarding/03.png differ diff --git a/specs/2023.1/support-multi-conductors-onboarding/04.diag b/specs/2023.1/support-multi-conductors-onboarding/04.diag new file mode 100644 index 00000000..864822f3 --- /dev/null +++ b/specs/2023.1/support-multi-conductors-onboarding/04.diag @@ -0,0 +1,82 @@ + + seqdiag { + node_width = 80; edge_length = 100; + + "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" + + Client -> "Tacker-server" + [label = "1. POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content/upload_from_uri"]; + + "Tacker-server" -> "DB" + [label = "2. Update onboardingState to UPLOADING"] + + "Tacker-server" <- "DB" + [label = ""] + + "Tacker-server" -> "Messaging Queue" + [label = "3. Send a rpc message of 'Upload VNF Package from uri' with fanout=False"] + + Client <- "Tacker-server" + [label = "response 202 Accepted"] + + "Messaging Queue" -> "Tacker-conductor 1" + [label = ""] + + "Tacker-conductor 1" -> "Backend Storage" + [label = "4. Upload CSAR file"] + + "Tacker-conductor 1" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 1" -> "Messaging Queue" + [label = "5. sends a rpc message to download the CSAR file with fanout=True"] + + "Messaging Queue" -> "Tacker-conductor 1" + [label = ""] + + "Messaging Queue" -> "Tacker-conductor 2" + [label = ""] + + "Messaging Queue" -> "Tacker-conductor 3" + [label = ""] + + "Tacker-conductor 1" -> "Backend Storage" + [label = "6. Download the CSAR file to local file system"] + + "Tacker-conductor 1" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 2" -> "Backend Storage" + [label = "6. Download the CSAR file to local file system"] + + "Tacker-conductor 2" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 3" -> "Backend Storage" + [label = "6. Download the CSAR file to local file system"] + + "Tacker-conductor 3" <- "Backend Storage" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 1" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 2" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 3" + [label = ""] + + "Tacker-conductor 1" <- "Messaging Queue" + [label = ""] + + "Tacker-conductor 1" -> "DB" + [label = "7. Update onboardingState to ONBOARDED"] + + "Tacker-conductor 1" <- "DB" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 1" + [label = ""] + + } diff --git a/specs/2023.1/support-multi-conductors-onboarding/04.png b/specs/2023.1/support-multi-conductors-onboarding/04.png new file mode 100644 index 00000000..a1e27c77 Binary files /dev/null and b/specs/2023.1/support-multi-conductors-onboarding/04.png differ diff --git a/specs/2023.1/support-multi-conductors-onboarding/05.diag b/specs/2023.1/support-multi-conductors-onboarding/05.diag new file mode 100644 index 00000000..81779655 --- /dev/null +++ b/specs/2023.1/support-multi-conductors-onboarding/05.diag @@ -0,0 +1,76 @@ + + seqdiag { + node_width = 80; edge_length = 100; + + "Client" "DB" "Tacker-server" "Backend Storage" "Messaging Queue" "Tacker-conductor 1" "Tacker-conductor 2" "Tacker-conductor 3" + + Client -> "Tacker-server" + [label = "1. DELETE /vnfpkgm/v1/vnf_packages/{vnf_package_id}"]; + + "Tacker-server" -> "DB" + [label = "2. Update the deleted flag to 1"] + + "Tacker-server" <- "DB" + [label = ""] + + "Tacker-server" -> "Messaging Queue" + [label = "3. Send a rpc message of 'Delete VNF Package' with fanout=False"] + + Client <- "Tacker-server" + [label = "response 204 No Content"] + + "Messaging Queue" -> "Tacker-conductor 1" + [label = ""] + + "Tacker-conductor 1" -> "Backend Storage" + [label = "4. Delete CSAR file"] + + "Tacker-conductor 1" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 1" -> "Messaging Queue" + [label = "5. sends a rpc message to delete the file from local file system with fanout=True"] + + "Messaging Queue" -> "Tacker-conductor 1" + [label = ""] + + "Messaging Queue" -> "Tacker-conductor 2" + [label = ""] + + "Messaging Queue" -> "Tacker-conductor 3" + [label = ""] + + "Tacker-conductor 1" -> "Backend Storage" + [label = "6. Delete the CSAR file from local file system"] + + "Tacker-conductor 1" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 2" -> "Backend Storage" + [label = "6. Delete the CSAR file from local file system"] + + "Tacker-conductor 2" <- "Backend Storage" + [label = ""] + + "Tacker-conductor 3" -> "Backend Storage" + [label = "6. Delete the CSAR file from local file system"] + + "Tacker-conductor 3" <- "Backend Storage" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 1" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 2" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 3" + [label = ""] + + "Tacker-conductor 1" <- "Messaging Queue" + [label = ""] + + "Messaging Queue" <- "Tacker-conductor 1" + [label = ""] + + } diff --git a/specs/2023.1/support-multi-conductors-onboarding/05.png b/specs/2023.1/support-multi-conductors-onboarding/05.png new file mode 100644 index 00000000..18cb59bf Binary files /dev/null and b/specs/2023.1/support-multi-conductors-onboarding/05.png differ diff --git a/specs/2023.1/support-tacker-db-manage-postgresql.rst b/specs/2023.1/support-tacker-db-manage-postgresql.rst index b6d7140d..8cc779b0 100644 --- a/specs/2023.1/support-tacker-db-manage-postgresql.rst +++ b/specs/2023.1/support-tacker-db-manage-postgresql.rst @@ -137,34 +137,7 @@ Flow of initializing PostgreSQL as Tacker DB backend The following sequence diagram describes initializing PostgreSQL as Tacker DB backend. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker" - "tacker-db-manage" - "PostgreSQL" - - "Client" -> "PostgreSQL" - [label = "1. Creates Tacker DB and user"]; - "Client" <-- "PostgreSQL" - [label = "Created"]; - "Client" -> "Tacker" - [label = "2. Request to execute tacker-db-manage"]; - "Tacker" -> "tacker-db-manage" - [label = "3. Execute tacker-db-manage"]; - "tacker-db-manage" -> "PostgreSQL" - [label = "4. Update Tacker DB for PostgreSQL"]; - "PostgreSQL" --> "tacker-db-manage" - [label = "Updated"]; - "tacker-db-manage" --> "Tacker" - [label = ""]; - "Tacker" --> "Client" - [label = "Succeeded"]; - } +.. image:: ./support-tacker-db-manage-postgresql/01.png #. The Client creates Tacker DB and user in PostgreSQL. #. The Client requests Tacker to execute tacker-db-manage diff --git a/specs/2023.1/support-tacker-db-manage-postgresql/01.diag b/specs/2023.1/support-tacker-db-manage-postgresql/01.diag new file mode 100644 index 00000000..a6b3d0db --- /dev/null +++ b/specs/2023.1/support-tacker-db-manage-postgresql/01.diag @@ -0,0 +1,27 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker" + "tacker-db-manage" + "PostgreSQL" + + "Client" -> "PostgreSQL" + [label = "1. Creates Tacker DB and user"]; + "Client" <-- "PostgreSQL" + [label = "Created"]; + "Client" -> "Tacker" + [label = "2. Request to execute tacker-db-manage"]; + "Tacker" -> "tacker-db-manage" + [label = "3. Execute tacker-db-manage"]; + "tacker-db-manage" -> "PostgreSQL" + [label = "4. Update Tacker DB for PostgreSQL"]; + "PostgreSQL" --> "tacker-db-manage" + [label = "Updated"]; + "tacker-db-manage" --> "Tacker" + [label = ""]; + "Tacker" --> "Client" + [label = "Succeeded"]; + } diff --git a/specs/2023.1/support-tacker-db-manage-postgresql/01.png b/specs/2023.1/support-tacker-db-manage-postgresql/01.png new file mode 100644 index 00000000..f1a7c242 Binary files /dev/null and b/specs/2023.1/support-tacker-db-manage-postgresql/01.png differ diff --git a/specs/2023.1/support-threshold-pm-interface.rst b/specs/2023.1/support-threshold-pm-interface.rst index f73440b0..4338df62 100644 --- a/specs/2023.1/support-threshold-pm-interface.rst +++ b/specs/2023.1/support-threshold-pm-interface.rst @@ -236,72 +236,7 @@ The following sequence diagrams describes the Client's processing flow for Tacker to AutoScale by PM threshold. -.. seqdiag:: - - seqdiag { - node_width = 90; - edge_length = 100; - - "Client" - "External Monitoring Tool" - "Prometheus-Plugin" - "Tacker-server" - "Tacker-conductor" - "VnfPmDriverV2" - "Tacker DB" - - "Client" -> "Tacker-server" - [label = "1. Create a threshold"]; - "Tacker-server" -> "Tacker-server" - [label = "Get the callback_uri in the threshold"]; - "Tacker-server" -> "Client" - [label = "Send a GET request to the callback_uri in the Client."]; - "Tacker-server" <-- "Client" - [label = "Response 204 No Content"]; - "Tacker-server" -> "Tacker DB" - [label = "Save the subscription to DB"]; - "Tacker-server" <-- "Tacker DB" - "Tacker-server" -> "Prometheus-Plugin" - [label = "2. Set a threshold to Prometheus-Plugin"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "Convert to Prometheus format"]; - "Prometheus-Plugin" -> "External Monitoring Tool" - [label = "Set a threshold"]; - "Prometheus-Plugin" <-- "External Monitoring Tool" - "Tacker-server" <-- "Prometheus-Plugin" - "Tacker-server" -> "Tacker DB" - [label = "Save a threshold to DB"]; - "Tacker-server" <-- "Tacker DB" - "Client" <-- "Tacker-server" - [label = "Response 201 Created"]; - "External Monitoring Tool" -> "Prometheus-Plugin" - [label = "3. Send event to the specified URI"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "4. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; - "Prometheus-Plugin" -> "Tacker DB" - [label = "5. Find the corresponding resource from the DB"]; - "Prometheus-Plugin" <-- "Tacker DB" - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "6. Evaluate a threshold crossing condition.", note = "If it does not match, the processing ends"]; - "Prometheus-Plugin" -> "Tacker DB" - [label = "Update the corresponding resource from the DB"]; - "Prometheus-Plugin" <-- "Tacker DB" - "Prometheus-Plugin" -> "VnfPmDriverV2" - [label = "7. execute VnfPmDriverV2"]; - "VnfPmDriverV2" -> "Client" - [label = "8. Send a Notify Threshold event request to the Client"]; - "VnfPmDriverV2" <-- "Client" - [label = "Response 204 No Content"]; - "Prometheus-Plugin" <-- "VnfPmDriverV2" - "Client" -> "Client" - [label = "9. Get VNFC information from the notification.", note = "If no information is returned, the processing is over"]; - "Client" -> "Tacker-server" - [label = "10. Scale"]; - "Tacker-server" -> "Tacker-conductor" - [label = "11. Trigger asynchronous task", note = "The same with the default scale operation"]; - "Client" <-- "Tacker-server" - [label = "Response 202 Accepted"]; - } +.. image:: ./support-threshold-pm-interface/01.png #. The Client sends a request to create a threshold to the Tacker. After Tacker receives the threshold, it will get the callback_uri in it. diff --git a/specs/2023.1/support-threshold-pm-interface/01.diag b/specs/2023.1/support-threshold-pm-interface/01.diag new file mode 100644 index 00000000..95e289c0 --- /dev/null +++ b/specs/2023.1/support-threshold-pm-interface/01.diag @@ -0,0 +1,65 @@ + + seqdiag { + node_width = 90; + edge_length = 100; + + "Client" + "External Monitoring Tool" + "Prometheus-Plugin" + "Tacker-server" + "Tacker-conductor" + "VnfPmDriverV2" + "Tacker DB" + + "Client" -> "Tacker-server" + [label = "1. Create a threshold"]; + "Tacker-server" -> "Tacker-server" + [label = "Get the callback_uri in the threshold"]; + "Tacker-server" -> "Client" + [label = "Send a GET request to the callback_uri in the Client."]; + "Tacker-server" <-- "Client" + [label = "Response 204 No Content"]; + "Tacker-server" -> "Tacker DB" + [label = "Save the subscription to DB"]; + "Tacker-server" <-- "Tacker DB" + "Tacker-server" -> "Prometheus-Plugin" + [label = "2. Set a threshold to Prometheus-Plugin"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "Convert to Prometheus format"]; + "Prometheus-Plugin" -> "External Monitoring Tool" + [label = "Set a threshold"]; + "Prometheus-Plugin" <-- "External Monitoring Tool" + "Tacker-server" <-- "Prometheus-Plugin" + "Tacker-server" -> "Tacker DB" + [label = "Save a threshold to DB"]; + "Tacker-server" <-- "Tacker DB" + "Client" <-- "Tacker-server" + [label = "Response 201 Created"]; + "External Monitoring Tool" -> "Prometheus-Plugin" + [label = "3. Send event to the specified URI"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "4. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; + "Prometheus-Plugin" -> "Tacker DB" + [label = "5. Find the corresponding resource from the DB"]; + "Prometheus-Plugin" <-- "Tacker DB" + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "6. Evaluate a threshold crossing condition.", note = "If it does not match, the processing ends"]; + "Prometheus-Plugin" -> "Tacker DB" + [label = "Update the corresponding resource from the DB"]; + "Prometheus-Plugin" <-- "Tacker DB" + "Prometheus-Plugin" -> "VnfPmDriverV2" + [label = "7. execute VnfPmDriverV2"]; + "VnfPmDriverV2" -> "Client" + [label = "8. Send a Notify Threshold event request to the Client"]; + "VnfPmDriverV2" <-- "Client" + [label = "Response 204 No Content"]; + "Prometheus-Plugin" <-- "VnfPmDriverV2" + "Client" -> "Client" + [label = "9. Get VNFC information from the notification.", note = "If no information is returned, the processing is over"]; + "Client" -> "Tacker-server" + [label = "10. Scale"]; + "Tacker-server" -> "Tacker-conductor" + [label = "11. Trigger asynchronous task", note = "The same with the default scale operation"]; + "Client" <-- "Tacker-server" + [label = "Response 202 Accepted"]; + } diff --git a/specs/2023.1/support-threshold-pm-interface/01.png b/specs/2023.1/support-threshold-pm-interface/01.png new file mode 100644 index 00000000..579b4418 Binary files /dev/null and b/specs/2023.1/support-threshold-pm-interface/01.png differ diff --git a/specs/2023.1/vnfm-autoheal-and-autoscale.rst b/specs/2023.1/vnfm-autoheal-and-autoscale.rst index ddef3cc8..50bcb7a5 100644 --- a/specs/2023.1/vnfm-autoheal-and-autoscale.rst +++ b/specs/2023.1/vnfm-autoheal-and-autoscale.rst @@ -154,43 +154,7 @@ Sequence for operation The following describes the processing flow of the Tacker after the External Monitoring Tool sends the alert. -.. seqdiag:: - - seqdiag { - node_width = 150; - edge_length = 160; - - "External Monitoring Tool" - "Prometheus Plugin" - "Vnflcm Controller" - "Vnflcm Driver" - "Tacker DB" - - "External Monitoring Tool" -> "Prometheus Plugin" - [label = "1. POST /alert/auto_healing"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "2. Check if this API is enabled in Prometheus Plugin"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "3. Check the status of the received alert"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "4. Check if this alert is for AutoHeal"]; - "Prometheus Plugin" -> "Tacker DB" - [label = "5. Find the corresponding resource from the DB"]; - "Prometheus Plugin" <-- "Tacker DB" - [label = "vnf_instance"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "6. Check whether the resource has AutoHeal enabled"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "7. Check vnfc_info_id in vnf_instance"]; - "Prometheus Plugin" -> "Vnflcm Controller" - [label = "8. Call the internal Heal function"]; - "Vnflcm Controller" -> "Vnflcm Driver" - [label = "9. Trigger asynchronous task", note = "The same with the default Heal operation"]; - "Prometheus Plugin" <-- "Vnflcm Controller" - [label = "Response 202 Accepted"]; - "External Monitoring Tool" <-- "Prometheus Plugin" - [label = "Response 204 No Content"]; - } +.. image:: ./vnfm-autoheal-and-autoscale/01.png #. As an External Monitoring Tool, Prometheus monitors specified resources through user-defined rules. When the data monitored by Prometheus matches @@ -330,45 +294,7 @@ Sequence for operation The following describes the processing flow of the Tacker after the External Monitoring Tool sends the alert. -.. seqdiag:: - - seqdiag { - node_width = 150; - edge_length = 160; - - "External Monitoring Tool" - "Prometheus Plugin" - "Vnflcm Controller" - "Vnflcm Driver" - "Tacker DB" - - "External Monitoring Tool" -> "Prometheus Plugin" - [label = "1. POST /alert/auto_scaling"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "2. Check if this API is enabled in Prometheus Plugin"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "3. Check the status of the received alert"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "4. Check if this alert is for AutoScale"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "5. Check that the received alert contains a valid type of Scale"]; - "Prometheus Plugin" -> "Tacker DB" - [label = "6. Find the corresponding resource from the DB"]; - "Prometheus Plugin" <-- "Tacker DB" - [label = "vnf_instance"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "7. Check whether the resource has AutoScale enabled"]; - "Prometheus Plugin" -> "Prometheus Plugin" - [label = "8. Check aspect_id in vnf_instance"]; - "Prometheus Plugin" -> "Vnflcm Controller" - [label = "9. Call the internal Scale function"]; - "Vnflcm Controller" -> "Vnflcm Driver" - [label = "10. Trigger asynchronous task", note = "The same with the default Scale operation"]; - "Prometheus Plugin" <-- "Vnflcm Controller" - [label = "Response 202 Accepted"]; - "External Monitoring Tool" <-- "Prometheus Plugin" - [label = "Response 204 No Content"]; - } +.. image:: ./vnfm-autoheal-and-autoscale/02.png #. As an External Monitoring Tool, Prometheus monitors specified resources through user-defined rules. When the data monitored by Prometheus matches diff --git a/specs/2023.1/vnfm-autoheal-and-autoscale/01.diag b/specs/2023.1/vnfm-autoheal-and-autoscale/01.diag new file mode 100644 index 00000000..67b85f87 --- /dev/null +++ b/specs/2023.1/vnfm-autoheal-and-autoscale/01.diag @@ -0,0 +1,36 @@ + + seqdiag { + node_width = 150; + edge_length = 160; + + "External Monitoring Tool" + "Prometheus Plugin" + "Vnflcm Controller" + "Vnflcm Driver" + "Tacker DB" + + "External Monitoring Tool" -> "Prometheus Plugin" + [label = "1. POST /alert/auto_healing"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "2. Check if this API is enabled in Prometheus Plugin"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "3. Check the status of the received alert"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "4. Check if this alert is for AutoHeal"]; + "Prometheus Plugin" -> "Tacker DB" + [label = "5. Find the corresponding resource from the DB"]; + "Prometheus Plugin" <-- "Tacker DB" + [label = "vnf_instance"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "6. Check whether the resource has AutoHeal enabled"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "7. Check vnfc_info_id in vnf_instance"]; + "Prometheus Plugin" -> "Vnflcm Controller" + [label = "8. Call the internal Heal function"]; + "Vnflcm Controller" -> "Vnflcm Driver" + [label = "9. Trigger asynchronous task", note = "The same with the default Heal operation"]; + "Prometheus Plugin" <-- "Vnflcm Controller" + [label = "Response 202 Accepted"]; + "External Monitoring Tool" <-- "Prometheus Plugin" + [label = "Response 204 No Content"]; + } diff --git a/specs/2023.1/vnfm-autoheal-and-autoscale/01.png b/specs/2023.1/vnfm-autoheal-and-autoscale/01.png new file mode 100644 index 00000000..8ae15232 Binary files /dev/null and b/specs/2023.1/vnfm-autoheal-and-autoscale/01.png differ diff --git a/specs/2023.1/vnfm-autoheal-and-autoscale/02.diag b/specs/2023.1/vnfm-autoheal-and-autoscale/02.diag new file mode 100644 index 00000000..226d7439 --- /dev/null +++ b/specs/2023.1/vnfm-autoheal-and-autoscale/02.diag @@ -0,0 +1,38 @@ + + seqdiag { + node_width = 150; + edge_length = 160; + + "External Monitoring Tool" + "Prometheus Plugin" + "Vnflcm Controller" + "Vnflcm Driver" + "Tacker DB" + + "External Monitoring Tool" -> "Prometheus Plugin" + [label = "1. POST /alert/auto_scaling"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "2. Check if this API is enabled in Prometheus Plugin"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "3. Check the status of the received alert"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "4. Check if this alert is for AutoScale"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "5. Check that the received alert contains a valid type of Scale"]; + "Prometheus Plugin" -> "Tacker DB" + [label = "6. Find the corresponding resource from the DB"]; + "Prometheus Plugin" <-- "Tacker DB" + [label = "vnf_instance"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "7. Check whether the resource has AutoScale enabled"]; + "Prometheus Plugin" -> "Prometheus Plugin" + [label = "8. Check aspect_id in vnf_instance"]; + "Prometheus Plugin" -> "Vnflcm Controller" + [label = "9. Call the internal Scale function"]; + "Vnflcm Controller" -> "Vnflcm Driver" + [label = "10. Trigger asynchronous task", note = "The same with the default Scale operation"]; + "Prometheus Plugin" <-- "Vnflcm Controller" + [label = "Response 202 Accepted"]; + "External Monitoring Tool" <-- "Prometheus Plugin" + [label = "Response 204 No Content"]; + } diff --git a/specs/2023.1/vnfm-autoheal-and-autoscale/02.png b/specs/2023.1/vnfm-autoheal-and-autoscale/02.png new file mode 100644 index 00000000..a5e0c8eb Binary files /dev/null and b/specs/2023.1/vnfm-autoheal-and-autoscale/02.png differ diff --git a/specs/2023.2/support-external-keymanager.rst b/specs/2023.2/support-external-keymanager.rst index 74f67ee4..5606d66d 100644 --- a/specs/2023.2/support-external-keymanager.rst +++ b/specs/2023.2/support-external-keymanager.rst @@ -125,55 +125,13 @@ of authentication credentials in VNF LCM operations under consideration. The following is a flow of Instantiation of a VNF instance with barbican under consideration. -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; TackerDB; Barbican; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "tacker-server" [label = "202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trigger asynchronous task"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" -> "tacker-conductor" [label = "encrypt auth credentials"]; - "tacker-conductor" -> "Barbican" [label = "register the encryption key"]; - "tacker-conductor" <-- "Barbican" [label = "200 Successful Request"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "TackerDB" [label = "store encrypted auth credentials"]; - "tacker-conductor" <-- "TackerDB" [label = ""]; - - } +.. image:: ./support-external-keymanager/01.png The following is a flow of Termination of a VNF instance with barbican. -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; TackerDB; Barbican; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/terminate"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trigger asynchronous task"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" -> "TackerDB" [label = "load encrypted auth credentials"]; - "tacker-conductor" <-- "TackerDB" [label = ""]; - "tacker-conductor" -> "Barbican" [label = "get the encryption key"]; - "tacker-conductor" <-- "Barbican" [label = "200 Successful Request"]; - "tacker-conductor" -> "tacker-conductor" [label = "decrypt the encrypted auth credentials"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "Barbican" [label = "delete the encryption key"]; - "tacker-conductor" <-- "Barbican" [label = "204 No Content"]; - - } +.. image:: ./support-external-keymanager/02.png Add configuration options diff --git a/specs/2023.2/support-external-keymanager/01.diag b/specs/2023.2/support-external-keymanager/01.diag new file mode 100644 index 00000000..3c26b776 --- /dev/null +++ b/specs/2023.2/support-external-keymanager/01.diag @@ -0,0 +1,20 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; TackerDB; Barbican; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "tacker-server" [label = "202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trigger asynchronous task"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" -> "tacker-conductor" [label = "encrypt auth credentials"]; + "tacker-conductor" -> "Barbican" [label = "register the encryption key"]; + "tacker-conductor" <-- "Barbican" [label = "200 Successful Request"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "TackerDB" [label = "store encrypted auth credentials"]; + "tacker-conductor" <-- "TackerDB" [label = ""]; + + } diff --git a/specs/2023.2/support-external-keymanager/01.png b/specs/2023.2/support-external-keymanager/01.png new file mode 100644 index 00000000..545f9ffa Binary files /dev/null and b/specs/2023.2/support-external-keymanager/01.png differ diff --git a/specs/2023.2/support-external-keymanager/02.diag b/specs/2023.2/support-external-keymanager/02.diag new file mode 100644 index 00000000..f78cc39b --- /dev/null +++ b/specs/2023.2/support-external-keymanager/02.diag @@ -0,0 +1,22 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; TackerDB; Barbican; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/terminate"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trigger asynchronous task"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" -> "TackerDB" [label = "load encrypted auth credentials"]; + "tacker-conductor" <-- "TackerDB" [label = ""]; + "tacker-conductor" -> "Barbican" [label = "get the encryption key"]; + "tacker-conductor" <-- "Barbican" [label = "200 Successful Request"]; + "tacker-conductor" -> "tacker-conductor" [label = "decrypt the encrypted auth credentials"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "Barbican" [label = "delete the encryption key"]; + "tacker-conductor" <-- "Barbican" [label = "204 No Content"]; + + } diff --git a/specs/2023.2/support-external-keymanager/02.png b/specs/2023.2/support-external-keymanager/02.png new file mode 100644 index 00000000..ff12d172 Binary files /dev/null and b/specs/2023.2/support-external-keymanager/02.png differ diff --git a/specs/pike/mistral_vim_monitor.rst b/specs/pike/mistral_vim_monitor.rst index 8f6441aa..bddd4d40 100644 --- a/specs/pike/mistral_vim_monitor.rst +++ b/specs/pike/mistral_vim_monitor.rst @@ -83,47 +83,17 @@ with the conductor via the following interface VimMonitor: sequence diagram for register vim: -.. seqdiag:: - - seqdiag { - user -> nfvoplugin [label = "register_vim"]; - nfvoplugin -> nfvoplugin [label = "generate workflow with auto generated action id"]; - nfvoplugin -> nfvoplugin [label = "update vim with monitor action id"]; - nfvoplugin -> mistral [label = "run the workflow"]; - mistral_vim_monitor_action -> conductor [label = "update_vim"] - } +.. image:: ./mistral_vim_monitor/01.png sequence diagram for de-register vim: -.. seqdiag:: - - seqdiag { - user -> nfvoplugin [label = "de_register_vim"]; - nfvoplugin -> nfvoplugin [label = "remove monitor workflow"]; - nfvoplugin -> nfvoplugin [label = "remove vim from db"]; - mistral_vim_monitor_action -> conductor [label = "update_vim"]; - mistral_vim_monitor_action <-- conductor [label = "replies with bad_action"]; - mistral_vim_monitor_action -> mistral_vim_monitor_action [label = "exit"]; - } +.. image:: ./mistral_vim_monitor/02.png sequence diagram for update vim with auth url change: -.. seqdiag:: - - seqdiag { - user -> nfvoplugin [label = "update_vim"]; - nfvoplugin -> nfvoplugin [label = "remove old monitor workflow"]; - nfvoplugin -> nfvoplugin [label = "generate workflow with auto generated action uuid"]; - nfvoplugin -> nfvoplugin [label = "update vim with monitor action uuid"]; - nfvoplugin -> mistral [label = "run the workflow"]; - new_mistral_vim_monitor_action -> conductor [label = "update_vim"] - new_mistral_vim_monitor_action <-- conductor - old_mistral_vim_monitor_action -> conductor [label = "update_vim"] - old_mistral_vim_monitor_action <-- conductor [label = "replies with bad_action"]; - old_mistral_vim_monitor_action -> old_mistral_vim_monitor_action [label = "exit"]; - } +.. image:: ./mistral_vim_monitor/03.png Alternatives diff --git a/specs/pike/mistral_vim_monitor/01.diag b/specs/pike/mistral_vim_monitor/01.diag new file mode 100644 index 00000000..bfadb770 --- /dev/null +++ b/specs/pike/mistral_vim_monitor/01.diag @@ -0,0 +1,8 @@ + + seqdiag { + user -> nfvoplugin [label = "register_vim"]; + nfvoplugin -> nfvoplugin [label = "generate workflow with auto generated action id"]; + nfvoplugin -> nfvoplugin [label = "update vim with monitor action id"]; + nfvoplugin -> mistral [label = "run the workflow"]; + mistral_vim_monitor_action -> conductor [label = "update_vim"] + } diff --git a/specs/pike/mistral_vim_monitor/01.png b/specs/pike/mistral_vim_monitor/01.png new file mode 100644 index 00000000..58734e6f Binary files /dev/null and b/specs/pike/mistral_vim_monitor/01.png differ diff --git a/specs/pike/mistral_vim_monitor/02.diag b/specs/pike/mistral_vim_monitor/02.diag new file mode 100644 index 00000000..45459a0b --- /dev/null +++ b/specs/pike/mistral_vim_monitor/02.diag @@ -0,0 +1,9 @@ + + seqdiag { + user -> nfvoplugin [label = "de_register_vim"]; + nfvoplugin -> nfvoplugin [label = "remove monitor workflow"]; + nfvoplugin -> nfvoplugin [label = "remove vim from db"]; + mistral_vim_monitor_action -> conductor [label = "update_vim"]; + mistral_vim_monitor_action <-- conductor [label = "replies with bad_action"]; + mistral_vim_monitor_action -> mistral_vim_monitor_action [label = "exit"]; + } diff --git a/specs/pike/mistral_vim_monitor/02.png b/specs/pike/mistral_vim_monitor/02.png new file mode 100644 index 00000000..38d3cfdd Binary files /dev/null and b/specs/pike/mistral_vim_monitor/02.png differ diff --git a/specs/pike/mistral_vim_monitor/03.diag b/specs/pike/mistral_vim_monitor/03.diag new file mode 100644 index 00000000..ed847f22 --- /dev/null +++ b/specs/pike/mistral_vim_monitor/03.diag @@ -0,0 +1,13 @@ + + seqdiag { + user -> nfvoplugin [label = "update_vim"]; + nfvoplugin -> nfvoplugin [label = "remove old monitor workflow"]; + nfvoplugin -> nfvoplugin [label = "generate workflow with auto generated action uuid"]; + nfvoplugin -> nfvoplugin [label = "update vim with monitor action uuid"]; + nfvoplugin -> mistral [label = "run the workflow"]; + new_mistral_vim_monitor_action -> conductor [label = "update_vim"] + new_mistral_vim_monitor_action <-- conductor + old_mistral_vim_monitor_action -> conductor [label = "update_vim"] + old_mistral_vim_monitor_action <-- conductor [label = "replies with bad_action"]; + old_mistral_vim_monitor_action -> old_mistral_vim_monitor_action [label = "exit"]; + } diff --git a/specs/pike/mistral_vim_monitor/03.png b/specs/pike/mistral_vim_monitor/03.png new file mode 100644 index 00000000..d20ea9ee Binary files /dev/null and b/specs/pike/mistral_vim_monitor/03.png differ diff --git a/specs/pike/mistral_vnf_monitor_policies.rst b/specs/pike/mistral_vnf_monitor_policies.rst index 316521c0..ced04498 100644 --- a/specs/pike/mistral_vnf_monitor_policies.rst +++ b/specs/pike/mistral_vnf_monitor_policies.rst @@ -112,14 +112,7 @@ happened on the monitored vnf, for example the VNF was scaled, and was respawned Sequence diagram for create VNF: -.. seqdiag:: - - seqdiag { - user -> vnfmplugin [label = "create_vnf with monitor_policies property"]; - vnfmplugin -> vnfmplugin [label = "generate workflow with auto generated action id"]; - vnfmplugin -> vnfmplugin [label = "update vnf with monitor action id"]; - vnfmplugin -> mistral [label = "run the workflow to start vnf_policy_monitor"]; - } +.. image:: ./mistral_vnf_monitor_policies/01.png Monitor policy is divided into two parts: policy monitor and policy action. Policy monitor, such as ping and http_ping is implemented as mistral task action. Policy action will @@ -128,13 +121,7 @@ be run in tacker conductor. Each VNF with monitor policies will have a workflow generated, and will be kept as meta information of VNF instance so that they can be managed. -.. seqdiag:: - - seqdiag { - === loop according to monitor policy === - vnf_policy_monitor -> conductor [label = "execute_policy_action"] - conductor -> policy_action [label = "execute_action" ] - } +.. image:: ./mistral_vnf_monitor_policies/02.png The mistral workflow action will be run once the workflow is started. The action will do its job according to monitor policy. When policy action is needed, the monitor action will @@ -146,11 +133,7 @@ such as respawn, log etc. If the policy action needs to update the vnf_policy_monitor, it will notify vnf_policy_monitor the change. -.. seqdiag:: - - seqdiag { - conductor -> vnf_policy_monitor [label = "update action job via RPC"] - } +.. image:: ./mistral_vnf_monitor_policies/03.png If conductor finds the action is obsolete, it will return bad_action to vnf_policy_monitor, then the vnf_policy_monitor will exit. @@ -164,25 +147,12 @@ VDUs. Sequence diagram for deleting VNF: -.. seqdiag:: - - seqdiag { - user -> vnfmplugin [label = "delete_vnf with monitor_policies property"]; - vnfmplugin -> vnfmplugin [label = "get workflow with action id for the VNF"]; - vnfmplugin -> mistral [label = "delete workflow and its execution"]; - vnfmplugin -> vnf_policy_monitor [label = "kill action job via RPC"] - } +.. image:: ./mistral_vnf_monitor_policies/04.png Sequence diagram for scale VNF: -.. seqdiag:: - - seqdiag { - user -> vnfmplugin [label = "scale_vnf with monitor_policies property"]; - vnfmplugin -> vnfmplugin [label = "get workflow with action id for the VNF"]; - vnfmplugin -> vnf_policy_monitor [label = "update action job via RPC"] - } +.. image:: ./mistral_vnf_monitor_policies/05.png Alternatives diff --git a/specs/pike/mistral_vnf_monitor_policies/01.diag b/specs/pike/mistral_vnf_monitor_policies/01.diag new file mode 100644 index 00000000..7e8c6395 --- /dev/null +++ b/specs/pike/mistral_vnf_monitor_policies/01.diag @@ -0,0 +1,7 @@ + + seqdiag { + user -> vnfmplugin [label = "create_vnf with monitor_policies property"]; + vnfmplugin -> vnfmplugin [label = "generate workflow with auto generated action id"]; + vnfmplugin -> vnfmplugin [label = "update vnf with monitor action id"]; + vnfmplugin -> mistral [label = "run the workflow to start vnf_policy_monitor"]; + } diff --git a/specs/pike/mistral_vnf_monitor_policies/01.png b/specs/pike/mistral_vnf_monitor_policies/01.png new file mode 100644 index 00000000..fa5fd227 Binary files /dev/null and b/specs/pike/mistral_vnf_monitor_policies/01.png differ diff --git a/specs/pike/mistral_vnf_monitor_policies/02.diag b/specs/pike/mistral_vnf_monitor_policies/02.diag new file mode 100644 index 00000000..a1f811ca --- /dev/null +++ b/specs/pike/mistral_vnf_monitor_policies/02.diag @@ -0,0 +1,6 @@ + + seqdiag { + === loop according to monitor policy === + vnf_policy_monitor -> conductor [label = "execute_policy_action"] + conductor -> policy_action [label = "execute_action" ] + } diff --git a/specs/pike/mistral_vnf_monitor_policies/02.png b/specs/pike/mistral_vnf_monitor_policies/02.png new file mode 100644 index 00000000..fd88a1ca Binary files /dev/null and b/specs/pike/mistral_vnf_monitor_policies/02.png differ diff --git a/specs/pike/mistral_vnf_monitor_policies/03.diag b/specs/pike/mistral_vnf_monitor_policies/03.diag new file mode 100644 index 00000000..3dad822a --- /dev/null +++ b/specs/pike/mistral_vnf_monitor_policies/03.diag @@ -0,0 +1,4 @@ + + seqdiag { + conductor -> vnf_policy_monitor [label = "update action job via RPC"] + } diff --git a/specs/pike/mistral_vnf_monitor_policies/03.png b/specs/pike/mistral_vnf_monitor_policies/03.png new file mode 100644 index 00000000..498650d4 Binary files /dev/null and b/specs/pike/mistral_vnf_monitor_policies/03.png differ diff --git a/specs/pike/mistral_vnf_monitor_policies/04.diag b/specs/pike/mistral_vnf_monitor_policies/04.diag new file mode 100644 index 00000000..cc9a4fca --- /dev/null +++ b/specs/pike/mistral_vnf_monitor_policies/04.diag @@ -0,0 +1,7 @@ + + seqdiag { + user -> vnfmplugin [label = "delete_vnf with monitor_policies property"]; + vnfmplugin -> vnfmplugin [label = "get workflow with action id for the VNF"]; + vnfmplugin -> mistral [label = "delete workflow and its execution"]; + vnfmplugin -> vnf_policy_monitor [label = "kill action job via RPC"] + } diff --git a/specs/pike/mistral_vnf_monitor_policies/04.png b/specs/pike/mistral_vnf_monitor_policies/04.png new file mode 100644 index 00000000..4bce2a17 Binary files /dev/null and b/specs/pike/mistral_vnf_monitor_policies/04.png differ diff --git a/specs/pike/mistral_vnf_monitor_policies/05.diag b/specs/pike/mistral_vnf_monitor_policies/05.diag new file mode 100644 index 00000000..45eb84ce --- /dev/null +++ b/specs/pike/mistral_vnf_monitor_policies/05.diag @@ -0,0 +1,6 @@ + + seqdiag { + user -> vnfmplugin [label = "scale_vnf with monitor_policies property"]; + vnfmplugin -> vnfmplugin [label = "get workflow with action id for the VNF"]; + vnfmplugin -> vnf_policy_monitor [label = "update action job via RPC"] + } diff --git a/specs/pike/mistral_vnf_monitor_policies/05.png b/specs/pike/mistral_vnf_monitor_policies/05.png new file mode 100644 index 00000000..7611f448 Binary files /dev/null and b/specs/pike/mistral_vnf_monitor_policies/05.png differ diff --git a/specs/template.rst b/specs/template.rst index 1cfba6e3..3655bf48 100644 --- a/specs/template.rst +++ b/specs/template.rst @@ -36,7 +36,7 @@ Some notes about using this template: * If you would like to provide a diagram with your spec, text representations are preferred. http://asciiflow.com/ is a very nice tool to assist with - making ascii diagrams. blockdiag and mermaid are another tools. + making ascii diagrams. mermaid is another tools. These are described below. If you require an image (screenshot) for your BP, attaching that to the BP and checking it in is also accepted. However, text representations are @@ -51,63 +51,6 @@ asciiflow:: | +-----+ +--------+ | +----------+ +-----------+ +----------+ -blockdiag - -.. blockdiag:: - - blockdiag sample { - a -> b -> c; - } - -actdiag - -.. actdiag:: - - actdiag { - write -> convert -> image - lane user { - label = "User" - write [label = "Writing reST"]; - image [label = "Get diagram IMAGE"]; - } - lane actdiag { - convert [label = "Convert reST to Image"]; - } - } - -nwdiag - -.. nwdiag:: - - nwdiag { - network dmz { - address = "210.x.x.x/24" - - web01 [address = "210.x.x.1"]; - web02 [address = "210.x.x.2"]; - } - network internal { - address = "172.x.x.x/24"; - - web01 [address = "172.x.x.1"]; - web02 [address = "172.x.x.2"]; - db01; - db02; - } - } - -seqdiag - -.. seqdiag:: - - seqdiag { - browser -> webserver [label = "GET /index.html"]; - browser <-- webserver; - browser -> webserver [label = "POST /blog/comment"]; - webserver -> database [label = "INSERT comment"]; - webserver <-- database; - browser <-- webserver; - } mermaid Flowchart diff --git a/specs/train/vnf_package_support.rst b/specs/train/vnf_package_support.rst index 33fd68df..b190c586 100644 --- a/specs/train/vnf_package_support.rst +++ b/specs/train/vnf_package_support.rst @@ -168,19 +168,7 @@ transions of these three states. Flow of uploading of VNF package content ---------------------------------------- -.. seqdiag:: - - seqdiag { - Consumer -> NFVO [label = "1. PUT .../vnf_packages/{vnfPkgId} package_content (VNF Package file)"]; - NFVO -> tosca-parser [label = "Parse the CSAR zip file"] - NFVO <- tosca-parser [label = "Parsed CSAR successfully"] - Consumer <- NFVO [label = "2. 202 Accepted"]; - NFVO -> NFVO [label = "NFVO continues processing VNF package"] - NFVO -> NFVO [label = "Set VNF package - onboardingState=ONBOARDED, - operationalState=ENABLED and - usageState=NOT_IN_USE"] - } +.. image:: ./vnf_package_support/01.png Precondition: The individual VNF package resource has been created with the value of "onboardingState" attribute equals to "CREATED". diff --git a/specs/train/vnf_package_support/01.diag b/specs/train/vnf_package_support/01.diag new file mode 100644 index 00000000..a075dc05 --- /dev/null +++ b/specs/train/vnf_package_support/01.diag @@ -0,0 +1,12 @@ + + seqdiag { + Consumer -> NFVO [label = "1. PUT .../vnf_packages/{vnfPkgId} package_content (VNF Package file)"]; + NFVO -> tosca-parser [label = "Parse the CSAR zip file"] + NFVO <- tosca-parser [label = "Parsed CSAR successfully"] + Consumer <- NFVO [label = "2. 202 Accepted"]; + NFVO -> NFVO [label = "NFVO continues processing VNF package"] + NFVO -> NFVO [label = "Set VNF package + onboardingState=ONBOARDED, + operationalState=ENABLED and + usageState=NOT_IN_USE"] + } diff --git a/specs/train/vnf_package_support/01.png b/specs/train/vnf_package_support/01.png new file mode 100644 index 00000000..bbf7c888 Binary files /dev/null and b/specs/train/vnf_package_support/01.png differ diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment.rst b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment.rst index 9903c000..2dbeb6ff 100644 --- a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment.rst +++ b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment.rst @@ -57,13 +57,7 @@ The operations provided through this interface are: 1) Flow of creation of a VNF instance resource ---------------------------------------------- -.. seqdiag:: - - seqdiag { - Consumer -> VNFM [label = "1. POST .../vnf_instances"]; - VNFM -->> VNFM [label = "2. Create VNF instance resource"]; - Consumer <- VNFM [label = "3. 201 Created"]; - } +.. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -89,42 +83,7 @@ been created in "NOT_INSTANTIATED" state. 2) Flow of Instantiation of a VNF instance ------------------------------------------ -.. seqdiag:: - - seqdiag { - Client -> WSGIMiddleware [label = "instantiate VNF"]; - WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; - Client <-- WSGIMiddleware [label = "202 Accepted"]; - WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; - TackerConductor --> VnfLcmDriver [label = "instantiate_vnf(vnf_instance, - instantiate_vnf_request)"]; - VnfLcmDriver --> ToscaParser [label = "read csar"]; - VnfLcmDriver <-- ToscaParser [label = "tosca object"]; - VnfLcmDriver -->> VnfLcmDriver [label = "get VNFD, prepare resource request"]; - VnfLcmDriver --> OpenstackDriver [label = "1. pre_instantiate_vnf(resources)"]; - OpenstackDriver --> Glance [label = "createImage"] - OpenstackDriver <-- Glance [label = "image created"] - VnfLcmDriver <-- OpenstackDriver [label = " resource created"]; - VnfLcmDriver --> OpenstackDriver [label = "instantiate_vnf(vnf_instance, - instantiate_vnf_request, vnfd_dict, resource_list)"]; - OpenstackDriver --> HeatClient [label = "create Heat Client"]; - OpenstackDriver <-- HeatClient [label = "Heat Client"]; - - OpenstackDriver --> TranslateTemplate [label = "convert Tosca to HOT"]; - TranslateTemplate --> ToscaParser [label = "get tosca template"]; - TranslateTemplate <-- ToscaParser [label = "tosca template"]; - TranslateTemplate --> HeatTranslator [label = "Tosca to HOT"]; - TranslateTemplate <-- HeatTranslator [label = "HOT"]; - TranslateTemplate --> ToscaUtil [label = "post processing HOT using - resource info and instantiateVnf request"]; - TranslateTemplate <-- ToscaUtil [label = "HOT"]; - OpenstackDriver <-- TranslateTemplate [label = "HOT"]; - OpenstackDriver --> Heat [label = "2. create stack"]; - OpenstackDriver <-- Heat [label = "stack created"]; - VnfLcmDriver <-- OpenstackDriver [label = "return stack id"]; - VnfLcmDriver -->> VnfLcmDriver [label = "3 update DB"]; - TackerConductor <-- VnfLcmDriver [label = "instantiation completed"]; - } +.. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/02.png The procedure consists of the following steps as illustrated in above sequence: @@ -151,28 +110,7 @@ The procedure consists of the following steps as illustrated in above sequence: Precondition: VNF instance in "INSTANTIATED" state. -.. seqdiag:: - - seqdiag { - Client -> WSGIMiddleware [label = "1. HEAL VNF"]; - WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; - Client <-- WSGIMiddleware [label = "202 Accepted"]; - WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; - TackerConductor --> VnfLcmDriver [label = "heal_vnf(vnf_instance, heal_vnf_request)"]; - VnfLcmDriver --> OpenstackDriver [label = "heal_vnf(vnf_instance, vim_connection_info,heal_vnf_request)"]; - OpenstackDriver --> Heat [label = "2. Mark resource unhealthy"]; - OpenstackDriver <-- Heat; - OpenstackDriver --> Heat [label = "3. update stack"]; - OpenstackDriver <-- Heat [label = "stack updated"]; - VnfLcmDriver <-- OpenstackDriver; - VnfLcmDriver --> OpenstackDriver [label = "post_heal_vnf(vnf_instance, vim_connection_info,heal_vnf_request)"]; - OpenstackDriver --> Heat [label = "4. get updated resource data"]; - OpenstackDriver <-- Heat [label = "resources"]; - VnfLcmDriver <-- OpenstackDriver; - VnfLcmDriver -->> VnfLcmDriver [label = "5. update DB"]; - TackerConductor <-- VnfLcmDriver [label = "request successfully completed"]; - - } +.. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/03.png The procedure consists of the following steps as illustrated in above sequence: @@ -188,23 +126,7 @@ Postcondition: VNF instance in "INSTANTIATED" state, and healed. 4) Flow of Termination of a VNF instance ---------------------------------------- -.. seqdiag:: - - seqdiag { - Client -> WSGIMiddleware [label = "Terminate VNF"]; - WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; - Client <-- WSGIMiddleware [label = "202 Accepted"]; - WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; - TackerConductor --> VnfLcmDriver [label = "terminate_vnf(vnf_instance, terminate_vnf_request)"]; - VnfLcmDriver --> OpenstackDriver [label = "terminate_vnf(vnf_instance, terminate_vnf_request, resource_list)"]; - OpenstackDriver --> Heat [label = "1. delete stack"]; - OpenstackDriver <-- Heat [label = "stack deleted"]; - OpenstackDriver --> Glance [label = "2. delete images"] - OpenstackDriver <-- Glance [label = "images deleted"] - VnfLcmDriver <-- OpenstackDriver [label = "resources removed"]; - TackerConductor <-- VnfLcmDriver [label = "request successfully completed"]; - TackerConductor -->> TackerConductor [label = "update DB"]; - } +.. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/04.png The procedure consists of the following steps as illustrated in above sequence: @@ -220,13 +142,7 @@ Postcondition: "instantiationState" should be set to "NOT_INSTANTIATED". Precondition: VNF instance in NOT_INSTANTIATED state. -.. seqdiag:: - - seqdiag { - Consumer -> VNFM [label = "1.DELETE .../vnf_instances/{vnfInstanceId}"]; - VNFM -->> VNFM [label = "2. Delete VNF instance resource"]; - Consumer <- VNFM [label = "3. 204 No content"]; - } +.. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/05.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/01.diag b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/01.diag new file mode 100644 index 00000000..e299333d --- /dev/null +++ b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/01.diag @@ -0,0 +1,6 @@ + + seqdiag { + Consumer -> VNFM [label = "1. POST .../vnf_instances"]; + VNFM -->> VNFM [label = "2. Create VNF instance resource"]; + Consumer <- VNFM [label = "3. 201 Created"]; + } diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/01.png b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/01.png new file mode 100644 index 00000000..c6d57232 Binary files /dev/null and b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/01.png differ diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/02.diag b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/02.diag new file mode 100644 index 00000000..93c8868c --- /dev/null +++ b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/02.diag @@ -0,0 +1,35 @@ + + seqdiag { + Client -> WSGIMiddleware [label = "instantiate VNF"]; + WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; + Client <-- WSGIMiddleware [label = "202 Accepted"]; + WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; + TackerConductor --> VnfLcmDriver [label = "instantiate_vnf(vnf_instance, + instantiate_vnf_request)"]; + VnfLcmDriver --> ToscaParser [label = "read csar"]; + VnfLcmDriver <-- ToscaParser [label = "tosca object"]; + VnfLcmDriver -->> VnfLcmDriver [label = "get VNFD, prepare resource request"]; + VnfLcmDriver --> OpenstackDriver [label = "1. pre_instantiate_vnf(resources)"]; + OpenstackDriver --> Glance [label = "createImage"] + OpenstackDriver <-- Glance [label = "image created"] + VnfLcmDriver <-- OpenstackDriver [label = " resource created"]; + VnfLcmDriver --> OpenstackDriver [label = "instantiate_vnf(vnf_instance, + instantiate_vnf_request, vnfd_dict, resource_list)"]; + OpenstackDriver --> HeatClient [label = "create Heat Client"]; + OpenstackDriver <-- HeatClient [label = "Heat Client"]; + + OpenstackDriver --> TranslateTemplate [label = "convert Tosca to HOT"]; + TranslateTemplate --> ToscaParser [label = "get tosca template"]; + TranslateTemplate <-- ToscaParser [label = "tosca template"]; + TranslateTemplate --> HeatTranslator [label = "Tosca to HOT"]; + TranslateTemplate <-- HeatTranslator [label = "HOT"]; + TranslateTemplate --> ToscaUtil [label = "post processing HOT using + resource info and instantiateVnf request"]; + TranslateTemplate <-- ToscaUtil [label = "HOT"]; + OpenstackDriver <-- TranslateTemplate [label = "HOT"]; + OpenstackDriver --> Heat [label = "2. create stack"]; + OpenstackDriver <-- Heat [label = "stack created"]; + VnfLcmDriver <-- OpenstackDriver [label = "return stack id"]; + VnfLcmDriver -->> VnfLcmDriver [label = "3 update DB"]; + TackerConductor <-- VnfLcmDriver [label = "instantiation completed"]; + } diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/02.png b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/02.png new file mode 100644 index 00000000..84ab2196 Binary files /dev/null and b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/02.png differ diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/03.diag b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/03.diag new file mode 100644 index 00000000..f4e01b4d --- /dev/null +++ b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/03.diag @@ -0,0 +1,21 @@ + + seqdiag { + Client -> WSGIMiddleware [label = "1. HEAL VNF"]; + WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; + Client <-- WSGIMiddleware [label = "202 Accepted"]; + WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; + TackerConductor --> VnfLcmDriver [label = "heal_vnf(vnf_instance, heal_vnf_request)"]; + VnfLcmDriver --> OpenstackDriver [label = "heal_vnf(vnf_instance, vim_connection_info,heal_vnf_request)"]; + OpenstackDriver --> Heat [label = "2. Mark resource unhealthy"]; + OpenstackDriver <-- Heat; + OpenstackDriver --> Heat [label = "3. update stack"]; + OpenstackDriver <-- Heat [label = "stack updated"]; + VnfLcmDriver <-- OpenstackDriver; + VnfLcmDriver --> OpenstackDriver [label = "post_heal_vnf(vnf_instance, vim_connection_info,heal_vnf_request)"]; + OpenstackDriver --> Heat [label = "4. get updated resource data"]; + OpenstackDriver <-- Heat [label = "resources"]; + VnfLcmDriver <-- OpenstackDriver; + VnfLcmDriver -->> VnfLcmDriver [label = "5. update DB"]; + TackerConductor <-- VnfLcmDriver [label = "request successfully completed"]; + + } diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/03.png b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/03.png new file mode 100644 index 00000000..1f142621 Binary files /dev/null and b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/03.png differ diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/04.diag b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/04.diag new file mode 100644 index 00000000..45091ceb --- /dev/null +++ b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/04.diag @@ -0,0 +1,16 @@ + + seqdiag { + Client -> WSGIMiddleware [label = "Terminate VNF"]; + WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; + Client <-- WSGIMiddleware [label = "202 Accepted"]; + WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; + TackerConductor --> VnfLcmDriver [label = "terminate_vnf(vnf_instance, terminate_vnf_request)"]; + VnfLcmDriver --> OpenstackDriver [label = "terminate_vnf(vnf_instance, terminate_vnf_request, resource_list)"]; + OpenstackDriver --> Heat [label = "1. delete stack"]; + OpenstackDriver <-- Heat [label = "stack deleted"]; + OpenstackDriver --> Glance [label = "2. delete images"] + OpenstackDriver <-- Glance [label = "images deleted"] + VnfLcmDriver <-- OpenstackDriver [label = "resources removed"]; + TackerConductor <-- VnfLcmDriver [label = "request successfully completed"]; + TackerConductor -->> TackerConductor [label = "update DB"]; + } diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/04.png b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/04.png new file mode 100644 index 00000000..d4404520 Binary files /dev/null and b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/04.png differ diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/05.diag b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/05.diag new file mode 100644 index 00000000..9e157620 --- /dev/null +++ b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/05.diag @@ -0,0 +1,6 @@ + + seqdiag { + Consumer -> VNFM [label = "1.DELETE .../vnf_instances/{vnfInstanceId}"]; + VNFM -->> VNFM [label = "2. Delete VNF instance resource"]; + Consumer <- VNFM [label = "3. 204 No content"]; + } diff --git a/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/05.png b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/05.png new file mode 100644 index 00000000..57052f30 Binary files /dev/null and b/specs/ussuri/etsi-nfv-sol-rest-api-for-VNF-deployment/05.png differ diff --git a/specs/ussuri/lcm-operation-with-lcm-operation-user-data.rst b/specs/ussuri/lcm-operation-with-lcm-operation-user-data.rst index 9c934407..0741dac4 100644 --- a/specs/ussuri/lcm-operation-with-lcm-operation-user-data.rst +++ b/specs/ussuri/lcm-operation-with-lcm-operation-user-data.rst @@ -55,23 +55,7 @@ Instantiation procedure with LCM operation user data As an example, VNF instantiation procedure using LCM operation user data is described below. -.. seqdiag:: - - seqdiag { - Client -> VNFMplugin [label = "Request InstantiateVNF"]; - VNFMplugin -> VNFMplugin [label = "Decide instantiation method"]; - VNFMplugin -> NFVOplugin [label = "Get VNF package"]; - VNFMplugin <<- NFVOplugin [label = "VNFD, baseHOT, - LCM operation user data"]; - VNFMplugin -> Glance [label = "Create image"]; - VNFMplugin <<- Glance [label = "ImageId"]; - VNFMplugin -> LCMOperationUserData [label = "Call LCM operation user data"]; - VNFMplugin <<- LCMOperationUserData [label = "key-value parameters"]; - VNFMplugin -> Heat [label = "Create stack with key-value - parameters and baseHOT"]; - VNFMplugin <<- Heat; - Client <<- VNFMplugin; - } +.. image:: ./lcm-operation-with-lcm-operation-user-data/01.png Instantiating VNF, as illustrated in above sequence diagram, consists of following steps. diff --git a/specs/ussuri/lcm-operation-with-lcm-operation-user-data/01.diag b/specs/ussuri/lcm-operation-with-lcm-operation-user-data/01.diag new file mode 100644 index 00000000..482796eb --- /dev/null +++ b/specs/ussuri/lcm-operation-with-lcm-operation-user-data/01.diag @@ -0,0 +1,16 @@ + + seqdiag { + Client -> VNFMplugin [label = "Request InstantiateVNF"]; + VNFMplugin -> VNFMplugin [label = "Decide instantiation method"]; + VNFMplugin -> NFVOplugin [label = "Get VNF package"]; + VNFMplugin <<- NFVOplugin [label = "VNFD, baseHOT, + LCM operation user data"]; + VNFMplugin -> Glance [label = "Create image"]; + VNFMplugin <<- Glance [label = "ImageId"]; + VNFMplugin -> LCMOperationUserData [label = "Call LCM operation user data"]; + VNFMplugin <<- LCMOperationUserData [label = "key-value parameters"]; + VNFMplugin -> Heat [label = "Create stack with key-value + parameters and baseHOT"]; + VNFMplugin <<- Heat; + Client <<- VNFMplugin; + } diff --git a/specs/ussuri/lcm-operation-with-lcm-operation-user-data/01.png b/specs/ussuri/lcm-operation-with-lcm-operation-user-data/01.png new file mode 100644 index 00000000..1d0eda13 Binary files /dev/null and b/specs/ussuri/lcm-operation-with-lcm-operation-user-data/01.png differ diff --git a/specs/victoria/container-network-function.rst b/specs/victoria/container-network-function.rst index 60818f65..acb948bd 100644 --- a/specs/victoria/container-network-function.rst +++ b/specs/victoria/container-network-function.rst @@ -293,47 +293,7 @@ dependency. Following sequence diagram describes the components involved and the flow of CNF instantiation: -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 115; - - Client -> WSGIMiddleware [label = - "POST /vnflcm/v1/vnf_instances"]; - Client <-- WSGIMiddleware [label = "200 Success"]; - Client -> WSGIMiddleware [label = - "POST /vnflcm/v1/vnf_instances/{id}/instantiate"]; - WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; - Client <-- WSGIMiddleware [label = "202 Accepted"]; - - NFVOPlugin; - WSGIMiddleware -> VnfLcmDriver [label = "Trigger asynchronous task "]; - VnfLcmDriver --> NFVOPlugin [label = "get VNF Package"]; - VnfLcmDriver <-- NFVOPlugin; - VnfLcmDriver -->> VnfLcmDriver [label = "create VIM connection object"]; - - VnfLcmDriver -> KubernetesDriver [label = "pre_instantiation_vnf()"]; - KubernetesDriver -->> KubernetesDriver [label = "No Action"]; - VnfLcmDriver <-- KubernetesDriver; - - VnfLcmDriver --> KubernetesDriver [label = - "instantiate_vnf()"]; - KubernetesDriver --> KubernetesDriver [label = "1 create()"] - VnfLcmDriver <-- KubernetesDriver [label = "instance_id"]; - VnfLcmDriver --> KubernetesDriver [label ="create_wait()"]; - KubernetesDriver -> KubernetesPythonClient [label = - "check deployment status"]; - KubernetesPythonClient -> Kubernetes [label = "get deployment status"]; - KubernetesPythonClient <-- Kubernetes [label = "status"]; - KubernetesDriver <-- KubernetesPythonClient; - VnfLcmDriver <-- KubernetesDriver; - - VnfLcmDriver -> KubernetesDriver [label = "post_vnf_instantiation()"]; - KubernetesDriver -->> KubernetesDriver[label = - "2. Update DB for VNFC resources[TBD]"]; - VnfLcmDriver <-- KubernetesDriver; - } +.. image:: ./container-network-function/01.png #. ``create()`` method will get instantiation request and VNF package path as @@ -354,25 +314,7 @@ CNF instantiation: Following sequence diagram shows operation of ``create()`` method in Kubernetes infra driver: -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 115; - - KubernetesDriver --> KubernetesUtil [label = - "1. cnf_to_kube_objects(\ncnf_def_dict)"]; - KubernetesDriver <-- KubernetesUtil [label = - "Kubernetes model\nobjects"]; - KubernetesDriver --> KubernetesPythonClient [label = - "2. call client APIs for each\nmodel object"]; - KubernetesPythonClient --> Kubernetes [label = - "deploy kubernetes\nobjects"]; - KubernetesPythonClient <-- Kubernetes [label = "deployed objects info"]; - KubernetesDriver <-- KubernetesPythonClient [label = - "3. deployed objects info"]; - KubernetesDriver -->> KubernetesDriver [label = "prepare\ninstance id"]; - } +.. image:: ./container-network-function/02.png #. Definitions extracted from Kubernetes object YAML files will be translated into Kubernetes model objects [#kubernetes-model-objects]_. KubernetesUtils @@ -429,40 +371,7 @@ CNF termination --------------- Following sequence diagram shows flow of termination of CNF. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 115; - - Client -> WSGIMiddleware [label = "Terminate VNF"]; - WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; - Client <-- WSGIMiddleware [label = "202 Accepted"]; - WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; - TackerConductor --> VnfLcmDriver - [label = "terminate_vnf(vnf_instance, terminate_vnf_request)"]; - VnfLcmDriver --> KubernetesDriver - [label = "delete(context, instance_id, access_info)"]; - KubernetesDriver -->> KubernetesDriver - [label = "get deployment infromation"]; - KubernetesDriver --> KubernetesPythonClient [label = "delete deployment"]; - KubernetesPythonClient --> Kubernetes [label = "delete deployment"]; - KubernetesPythonClient <-- Kubernetes [label = "deployment deleted"]; - KubernetesDriver <-- KubernetesPythonClient; - VnfLcmDriver <-- KubernetesDriver; - VnfLcmDriver --> KubernetesDriver - [label = "delete_wait(context, instance_id, access_info)"]; - KubernetesDriver --> KubernetesPythonClient - [label = "get deployment status"]; - KubernetesPythonClient --> Kubernetes [label = "get deployment status"]; - KubernetesPythonClient <-- Kubernetes [label = "deployment status"]; - KubernetesDriver <-- KubernetesPythonClient - [label = "deployment status(deleted)"]; - VnfLcmDriver <-- KubernetesDriver [label = "resources removed"]; - TackerConductor <-- VnfLcmDriver - [label = "request successfully completed"]; - TackerConductor -->> TackerConductor [label = "update DB"]; - } +.. image:: ./container-network-function/03.png Current implementation of Kubernetes driver handles limited objects such as Service, Deployment, HorizontalPodAutoscaler etc. Since this spec introduces diff --git a/specs/victoria/container-network-function/01.diag b/specs/victoria/container-network-function/01.diag new file mode 100644 index 00000000..89230ede --- /dev/null +++ b/specs/victoria/container-network-function/01.diag @@ -0,0 +1,40 @@ + + seqdiag { + node_width = 100; + edge_length = 115; + + Client -> WSGIMiddleware [label = + "POST /vnflcm/v1/vnf_instances"]; + Client <-- WSGIMiddleware [label = "200 Success"]; + Client -> WSGIMiddleware [label = + "POST /vnflcm/v1/vnf_instances/{id}/instantiate"]; + WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; + Client <-- WSGIMiddleware [label = "202 Accepted"]; + + NFVOPlugin; + WSGIMiddleware -> VnfLcmDriver [label = "Trigger asynchronous task "]; + VnfLcmDriver --> NFVOPlugin [label = "get VNF Package"]; + VnfLcmDriver <-- NFVOPlugin; + VnfLcmDriver -->> VnfLcmDriver [label = "create VIM connection object"]; + + VnfLcmDriver -> KubernetesDriver [label = "pre_instantiation_vnf()"]; + KubernetesDriver -->> KubernetesDriver [label = "No Action"]; + VnfLcmDriver <-- KubernetesDriver; + + VnfLcmDriver --> KubernetesDriver [label = + "instantiate_vnf()"]; + KubernetesDriver --> KubernetesDriver [label = "1 create()"] + VnfLcmDriver <-- KubernetesDriver [label = "instance_id"]; + VnfLcmDriver --> KubernetesDriver [label ="create_wait()"]; + KubernetesDriver -> KubernetesPythonClient [label = + "check deployment status"]; + KubernetesPythonClient -> Kubernetes [label = "get deployment status"]; + KubernetesPythonClient <-- Kubernetes [label = "status"]; + KubernetesDriver <-- KubernetesPythonClient; + VnfLcmDriver <-- KubernetesDriver; + + VnfLcmDriver -> KubernetesDriver [label = "post_vnf_instantiation()"]; + KubernetesDriver -->> KubernetesDriver[label = + "2. Update DB for VNFC resources[TBD]"]; + VnfLcmDriver <-- KubernetesDriver; + } diff --git a/specs/victoria/container-network-function/01.png b/specs/victoria/container-network-function/01.png new file mode 100644 index 00000000..bb6d9742 Binary files /dev/null and b/specs/victoria/container-network-function/01.png differ diff --git a/specs/victoria/container-network-function/02.diag b/specs/victoria/container-network-function/02.diag new file mode 100644 index 00000000..74b6fe2d --- /dev/null +++ b/specs/victoria/container-network-function/02.diag @@ -0,0 +1,18 @@ + + seqdiag { + node_width = 100; + edge_length = 115; + + KubernetesDriver --> KubernetesUtil [label = + "1. cnf_to_kube_objects(\ncnf_def_dict)"]; + KubernetesDriver <-- KubernetesUtil [label = + "Kubernetes model\nobjects"]; + KubernetesDriver --> KubernetesPythonClient [label = + "2. call client APIs for each\nmodel object"]; + KubernetesPythonClient --> Kubernetes [label = + "deploy kubernetes\nobjects"]; + KubernetesPythonClient <-- Kubernetes [label = "deployed objects info"]; + KubernetesDriver <-- KubernetesPythonClient [label = + "3. deployed objects info"]; + KubernetesDriver -->> KubernetesDriver [label = "prepare\ninstance id"]; + } diff --git a/specs/victoria/container-network-function/02.png b/specs/victoria/container-network-function/02.png new file mode 100644 index 00000000..b16a4419 Binary files /dev/null and b/specs/victoria/container-network-function/02.png differ diff --git a/specs/victoria/container-network-function/03.diag b/specs/victoria/container-network-function/03.diag new file mode 100644 index 00000000..f40fc909 --- /dev/null +++ b/specs/victoria/container-network-function/03.diag @@ -0,0 +1,33 @@ + + seqdiag { + node_width = 100; + edge_length = 115; + + Client -> WSGIMiddleware [label = "Terminate VNF"]; + WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; + Client <-- WSGIMiddleware [label = "202 Accepted"]; + WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; + TackerConductor --> VnfLcmDriver + [label = "terminate_vnf(vnf_instance, terminate_vnf_request)"]; + VnfLcmDriver --> KubernetesDriver + [label = "delete(context, instance_id, access_info)"]; + KubernetesDriver -->> KubernetesDriver + [label = "get deployment infromation"]; + KubernetesDriver --> KubernetesPythonClient [label = "delete deployment"]; + KubernetesPythonClient --> Kubernetes [label = "delete deployment"]; + KubernetesPythonClient <-- Kubernetes [label = "deployment deleted"]; + KubernetesDriver <-- KubernetesPythonClient; + VnfLcmDriver <-- KubernetesDriver; + VnfLcmDriver --> KubernetesDriver + [label = "delete_wait(context, instance_id, access_info)"]; + KubernetesDriver --> KubernetesPythonClient + [label = "get deployment status"]; + KubernetesPythonClient --> Kubernetes [label = "get deployment status"]; + KubernetesPythonClient <-- Kubernetes [label = "deployment status"]; + KubernetesDriver <-- KubernetesPythonClient + [label = "deployment status(deleted)"]; + VnfLcmDriver <-- KubernetesDriver [label = "resources removed"]; + TackerConductor <-- VnfLcmDriver + [label = "request successfully completed"]; + TackerConductor -->> TackerConductor [label = "update DB"]; + } diff --git a/specs/victoria/container-network-function/03.png b/specs/victoria/container-network-function/03.png new file mode 100644 index 00000000..cb26cb98 Binary files /dev/null and b/specs/victoria/container-network-function/03.png differ diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support.rst b/specs/victoria/enhancement_enhance-vnf-lcm-api-support.rst index b4472102..14117054 100644 --- a/specs/victoria/enhancement_enhance-vnf-lcm-api-support.rst +++ b/specs/victoria/enhancement_enhance-vnf-lcm-api-support.rst @@ -44,56 +44,7 @@ For backward compatibility, VNFM supports following features: 1-1) Flow of Create VNF Request ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; - - Client -> "tacker-server" [label = "POST /vnf_instances/"]; - "tacker-server" ->> "tacker-server" - [label = "Create VNF instance resource"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package list process{filter}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; - "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; - "tacker-server" ->> "tacker-server" - [label = "Update VNF instance resource(VnfPkgInfo)"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package content process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; - NFVO --> "tacker-conductor" - [label = "Response 200 OK with VNF package file"]; - "tacker-server" <<- "tacker-conductor" - [label = "(VNF package content file)"]; - "tacker-server" ->> "tacker-server" - [label = "Store received package file"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package vnfd process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = - "GET /vnf_packages/{vnfPkgId}/vnfd - with 'Accept' header contains 'text/plain'"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with VNFD contents"]; - "tacker-server" <<- "tacker-conductor" [label = "(VNFD)"]; - "tacker-server" ->> "tacker-server" - [label = "Update VNF instance resource(VNFD)"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package artifact process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with artifact file"]; - "tacker-server" <<- "tacker-conductor" [label = "(artifact file)"]; - "tacker-server" ->> "tacker-server" - [label = "Store received package file"]; - Client <- "tacker-server" [label = " Resonse 201 Created(vnfPkgId)"]; - "tacker-server" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI}"]; - Client --> "tacker-conductor" [label = "Responce 204 No Content"]; - } +.. image:: ./enhancement_enhance-vnf-lcm-api-support/01.png VNFM sends a GET request filtered by "vnfdId" to NFVO in order to query @@ -113,86 +64,21 @@ in the payload body. 1-2) Flow of Query VNF Request ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnf_instantces/{vnfInstanceId}"]; - Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"]; - } +.. image:: ./enhancement_enhance-vnf-lcm-api-support/02.png VNFM returns a "200 OK" response that includes "vnfPkgId" in the payload body. 1-3) Flow of List VNF Request ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnf_instantces"]; - Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"]; - } +.. image:: ./enhancement_enhance-vnf-lcm-api-support/03.png VNFM returns a "200 OK" response that includes "vnfPkgId" in the payload body. 1-4) Flow of Modify VNF Request ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; - - Client -> "tacker-server" - [label = "PATCH /vnf_instances/{vnfInstanceId} (vnfPkgId)"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "execute Individual vnf_package process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; - "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; - "tacker-server" ->> "tacker-server" - [label = "Update VNF instance resource(VnfPkgInfo , vnfPkgId)"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package content process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; - NFVO --> "tacker-conductor" - [label = "Response 200 OK with VNF package file"]; - "tacker-server" <<- "tacker-conductor" - [label = "(VNF package content file)"]; - "tacker-server" ->> "tacker-server" - [label = "Store received package file"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package vnfd process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = - "GET /vnf_packages/{vnfPkgId}/vnfd - with 'Accept' header contains 'text/plain'"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with VNFD contents"]; - "tacker-server" <<- "tacker-conductor" [label = "(VNFD)"]; - "tacker-server" ->> "tacker-server" - [label = "Update VNF instance resource(VNFD)"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package artifact process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with artifact file"]; - "tacker-server" <<- "tacker-conductor" [label = "(artifact file)"]; - "tacker-server" ->> "tacker-server" - [label = "Store received package file"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./enhancement_enhance-vnf-lcm-api-support/04.png Client sends a modify VNF Information request which includes "vnfPkgId" diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support/01.diag b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/01.diag new file mode 100644 index 00000000..b21de4da --- /dev/null +++ b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/01.diag @@ -0,0 +1,49 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; + + Client -> "tacker-server" [label = "POST /vnf_instances/"]; + "tacker-server" ->> "tacker-server" + [label = "Create VNF instance resource"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package list process{filter}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; + "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; + "tacker-server" ->> "tacker-server" + [label = "Update VNF instance resource(VnfPkgInfo)"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package content process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; + NFVO --> "tacker-conductor" + [label = "Response 200 OK with VNF package file"]; + "tacker-server" <<- "tacker-conductor" + [label = "(VNF package content file)"]; + "tacker-server" ->> "tacker-server" + [label = "Store received package file"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package vnfd process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = + "GET /vnf_packages/{vnfPkgId}/vnfd + with 'Accept' header contains 'text/plain'"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VNFD contents"]; + "tacker-server" <<- "tacker-conductor" [label = "(VNFD)"]; + "tacker-server" ->> "tacker-server" + [label = "Update VNF instance resource(VNFD)"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package artifact process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with artifact file"]; + "tacker-server" <<- "tacker-conductor" [label = "(artifact file)"]; + "tacker-server" ->> "tacker-server" + [label = "Store received package file"]; + Client <- "tacker-server" [label = " Resonse 201 Created(vnfPkgId)"]; + "tacker-server" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI}"]; + Client --> "tacker-conductor" [label = "Responce 204 No Content"]; + } diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support/01.png b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/01.png new file mode 100644 index 00000000..146ef6cb Binary files /dev/null and b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/01.png differ diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support/02.diag b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/02.diag new file mode 100644 index 00000000..385a25d1 --- /dev/null +++ b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/02.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnf_instantces/{vnfInstanceId}"]; + Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"]; + } diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support/02.png b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/02.png new file mode 100644 index 00000000..075b026f Binary files /dev/null and b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/02.png differ diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support/03.diag b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/03.diag new file mode 100644 index 00000000..f9f71d7a --- /dev/null +++ b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/03.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnf_instantces"]; + Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"]; + } diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support/03.png b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/03.png new file mode 100644 index 00000000..ae7aefac Binary files /dev/null and b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/03.png differ diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support/04.diag b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/04.diag new file mode 100644 index 00000000..ec043745 --- /dev/null +++ b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/04.diag @@ -0,0 +1,55 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; + + Client -> "tacker-server" + [label = "PATCH /vnf_instances/{vnfInstanceId} (vnfPkgId)"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "execute Individual vnf_package process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; + "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; + "tacker-server" ->> "tacker-server" + [label = "Update VNF instance resource(VnfPkgInfo , vnfPkgId)"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package content process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; + NFVO --> "tacker-conductor" + [label = "Response 200 OK with VNF package file"]; + "tacker-server" <<- "tacker-conductor" + [label = "(VNF package content file)"]; + "tacker-server" ->> "tacker-server" + [label = "Store received package file"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package vnfd process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = + "GET /vnf_packages/{vnfPkgId}/vnfd + with 'Accept' header contains 'text/plain'"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VNFD contents"]; + "tacker-server" <<- "tacker-conductor" [label = "(VNFD)"]; + "tacker-server" ->> "tacker-server" + [label = "Update VNF instance resource(VNFD)"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package artifact process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with artifact file"]; + "tacker-server" <<- "tacker-conductor" [label = "(artifact file)"]; + "tacker-server" ->> "tacker-server" + [label = "Store received package file"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/enhancement_enhance-vnf-lcm-api-support/04.png b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/04.png new file mode 100644 index 00000000..a437339e Binary files /dev/null and b/specs/victoria/enhancement_enhance-vnf-lcm-api-support/04.png differ diff --git a/specs/victoria/support-etsi-nfv-based-errorhandling.rst b/specs/victoria/support-etsi-nfv-based-errorhandling.rst index e44066f9..a10f5f76 100644 --- a/specs/victoria/support-etsi-nfv-based-errorhandling.rst +++ b/specs/victoria/support-etsi-nfv-based-errorhandling.rst @@ -78,72 +78,13 @@ operation normally while it is terminated. When the rollback operation is executed during VNF instantiation, VNFM removes all VMs and resources. -.. seqdiag:: - - seqdiag { - node_width = 105; - edge_length = 130; - - Client -> "tacker-server" - [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "delete stack"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-etsi-nfv-based-errorhandling/01.png When the rollback operation is executed for Scale-out, VNFM deletes all VMs and resources specified in the middle of Scale-out operation. -.. seqdiag:: - - seqdiag { - node_width = 72; - edge_length = 100; - - Client -> "tacker-server" - [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; - "MgmtDriver" -> vnf [label = "VNF Configuration"]; - "MgmtDriver" <-- vnf [label = ""]; - "tacker-conductor" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "resourse signal"]; - "openstackDriver" -> "heat" [label = "update stack"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-etsi-nfv-based-errorhandling/02.png User needs to separately implement Rollback sub-operation by VNF Configuration. diff --git a/specs/victoria/support-etsi-nfv-based-errorhandling/01.diag b/specs/victoria/support-etsi-nfv-based-errorhandling/01.diag new file mode 100644 index 00000000..42a8a8e8 --- /dev/null +++ b/specs/victoria/support-etsi-nfv-based-errorhandling/01.diag @@ -0,0 +1,27 @@ + + seqdiag { + node_width = 105; + edge_length = 130; + + Client -> "tacker-server" + [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "delete stack"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-etsi-nfv-based-errorhandling/01.png b/specs/victoria/support-etsi-nfv-based-errorhandling/01.png new file mode 100644 index 00000000..6b202c40 Binary files /dev/null and b/specs/victoria/support-etsi-nfv-based-errorhandling/01.png differ diff --git a/specs/victoria/support-etsi-nfv-based-errorhandling/02.diag b/specs/victoria/support-etsi-nfv-based-errorhandling/02.diag new file mode 100644 index 00000000..546a102a --- /dev/null +++ b/specs/victoria/support-etsi-nfv-based-errorhandling/02.diag @@ -0,0 +1,32 @@ + + seqdiag { + node_width = 72; + edge_length = 100; + + Client -> "tacker-server" + [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; + "MgmtDriver" -> vnf [label = "VNF Configuration"]; + "MgmtDriver" <-- vnf [label = ""]; + "tacker-conductor" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "resourse signal"]; + "openstackDriver" -> "heat" [label = "update stack"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-etsi-nfv-based-errorhandling/02.png b/specs/victoria/support-etsi-nfv-based-errorhandling/02.png new file mode 100644 index 00000000..226e9ba1 Binary files /dev/null and b/specs/victoria/support-etsi-nfv-based-errorhandling/02.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol.rst b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol.rst index c3210038..240ff4eb 100644 --- a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol.rst +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol.rst @@ -49,45 +49,21 @@ The operation provided through the interfaces are: * Register subscription -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " POST /subscriptions"]; - "tacker-server" -> "tacker-server" - [label = " generate subscription_id (uuid)"]; - Client <-- "tacker-server" [label = " Resonse 201 Created"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/01.png * Delete subscription -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" - [label = " DELETE /subscriptions/{subscriptionId}"]; - Client <-- "tacker-server" [label = " Resonse 204 No Content"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/02.png * Show subscription -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /subscriptions/{subscriptionId}"]; - Client <-- "tacker-server" [label = " Resonse 200 OK"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/03.png * List subscription -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /subscriptions"]; - "tacker-server" -> "tacker-server" [label = "request validation"]; - Client <-- "tacker-server" [label = " Resonse 200 OK"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/04.png * VNFM holds the Callback URL sent by consumer via "Subscription API" @@ -126,90 +102,17 @@ related to VNF lifecycle management. * Heal VNF * Terminate VNF -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = "LCM Operation Request"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/05.png * Modify VNF -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = "LCM Operation Request"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/06.png * Rollback -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 160; - - Client -> "tacker-server" - [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" - [label = "Response: 204 No Content"]; - "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; - "tacker-conductor" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK)"]; - Client --> "tacker-conductor" - [label = "Response: 204 No Content"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/07.png 4) Flow of VNF instance resource with notification @@ -217,53 +120,12 @@ related to VNF lifecycle management. * CereateVNFRequest -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = "POST /vnf_instances/"]; - "tacker-server" ->> "tacker-server" - [label = "Create VNF instance resource"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package list process{filter}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; - NFVO --> "tacker-conductor" - [label = "Response 200 OK with VnfPkgInfo"]; - "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; - "tacker-server" ->> "tacker-server" - [label = "Update VNF instance resource(VnfPkgInfo)"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package content process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; - NFVO --> "tacker-conductor" - [label = "Response 200 OK with VNF package file"]; - "tacker-server" <<- "tacker-conductor" - [label = "(VNF package content file)"]; - "tacker-server" ->> "tacker-server" - [label = "Store received package file"]; - Client <-- "tacker-server" [label = " Resonse 201 Created"]; - "tacker-server" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI}"]; - Client --> "tacker-conductor" [label = "Responce 204 No Content"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/08.png * DeleteVNFRequest -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = "DELETE /vnf_instances/{vnfInstanceId} "]; - "tacker-server" ->> "tacker-server" - [label = "Delete VNF instance resource"]; - Client <-- "tacker-server" [label = " Resonse 204 No Content"]; - "tacker-server" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI}"]; - Client --> "tacker-conductor" [label = "Responce 204 No Content"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/09.png 5)Flow of Getting Operation Status @@ -271,12 +133,7 @@ related to VNF lifecycle management. Operation status can be obtained from VNFM. -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnf_lcm_op_occs/{vnfLcmOpOccId}"]; - Client <-- "tacker-server" [label = " Resonse 200 OK"]; - } +.. image:: ./support-notification-api-based-on-etsi-nfv-sol/10.png * The transmission source node specifies the vnfLcmOpOccId issued at the time diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/01.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/01.diag new file mode 100644 index 00000000..abffd7d9 --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/01.diag @@ -0,0 +1,7 @@ + + seqdiag { + Client -> "tacker-server" [label = " POST /subscriptions"]; + "tacker-server" -> "tacker-server" + [label = " generate subscription_id (uuid)"]; + Client <-- "tacker-server" [label = " Resonse 201 Created"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/01.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/01.png new file mode 100644 index 00000000..1359d888 Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/01.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/02.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/02.diag new file mode 100644 index 00000000..1c816a0f --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/02.diag @@ -0,0 +1,6 @@ + + seqdiag { + Client -> "tacker-server" + [label = " DELETE /subscriptions/{subscriptionId}"]; + Client <-- "tacker-server" [label = " Resonse 204 No Content"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/02.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/02.png new file mode 100644 index 00000000..4064f316 Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/02.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/03.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/03.diag new file mode 100644 index 00000000..f8372443 --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/03.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /subscriptions/{subscriptionId}"]; + Client <-- "tacker-server" [label = " Resonse 200 OK"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/03.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/03.png new file mode 100644 index 00000000..8d64dd91 Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/03.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/04.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/04.diag new file mode 100644 index 00000000..96cc02b4 --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/04.diag @@ -0,0 +1,6 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /subscriptions"]; + "tacker-server" -> "tacker-server" [label = "request validation"]; + Client <-- "tacker-server" [label = " Resonse 200 OK"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/04.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/04.png new file mode 100644 index 00000000..17648566 Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/04.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/05.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/05.diag new file mode 100644 index 00000000..24a0f199 --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/05.diag @@ -0,0 +1,25 @@ + + seqdiag { + Client -> "tacker-server" [label = "LCM Operation Request"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/05.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/05.png new file mode 100644 index 00000000..fcd3ac09 Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/05.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/06.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/06.diag new file mode 100644 index 00000000..80684235 --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/06.diag @@ -0,0 +1,21 @@ + + seqdiag { + Client -> "tacker-server" [label = "LCM Operation Request"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/06.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/06.png new file mode 100644 index 00000000..52f4b3dd Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/06.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/07.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/07.diag new file mode 100644 index 00000000..9f7ea43c --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/07.diag @@ -0,0 +1,27 @@ + + seqdiag { + node_width = 100; + edge_length = 160; + + Client -> "tacker-server" + [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" + [label = "Response: 204 No Content"]; + "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; + "tacker-conductor" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK)"]; + Client --> "tacker-conductor" + [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/07.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/07.png new file mode 100644 index 00000000..799bd992 Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/07.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/08.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/08.diag new file mode 100644 index 00000000..fb3bb6a1 --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/08.diag @@ -0,0 +1,30 @@ + + seqdiag { + Client -> "tacker-server" [label = "POST /vnf_instances/"]; + "tacker-server" ->> "tacker-server" + [label = "Create VNF instance resource"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package list process{filter}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; + NFVO --> "tacker-conductor" + [label = "Response 200 OK with VnfPkgInfo"]; + "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; + "tacker-server" ->> "tacker-server" + [label = "Update VNF instance resource(VnfPkgInfo)"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package content process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; + NFVO --> "tacker-conductor" + [label = "Response 200 OK with VNF package file"]; + "tacker-server" <<- "tacker-conductor" + [label = "(VNF package content file)"]; + "tacker-server" ->> "tacker-server" + [label = "Store received package file"]; + Client <-- "tacker-server" [label = " Resonse 201 Created"]; + "tacker-server" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI}"]; + Client --> "tacker-conductor" [label = "Responce 204 No Content"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/08.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/08.png new file mode 100644 index 00000000..db96516d Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/08.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/09.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/09.diag new file mode 100644 index 00000000..0e5c77c3 --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/09.diag @@ -0,0 +1,11 @@ + + seqdiag { + Client -> "tacker-server" [label = "DELETE /vnf_instances/{vnfInstanceId} "]; + "tacker-server" ->> "tacker-server" + [label = "Delete VNF instance resource"]; + Client <-- "tacker-server" [label = " Resonse 204 No Content"]; + "tacker-server" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI}"]; + Client --> "tacker-conductor" [label = "Responce 204 No Content"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/09.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/09.png new file mode 100644 index 00000000..9604bb49 Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/09.png differ diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/10.diag b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/10.diag new file mode 100644 index 00000000..7fb6ded8 --- /dev/null +++ b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/10.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnf_lcm_op_occs/{vnfLcmOpOccId}"]; + Client <-- "tacker-server" [label = " Resonse 200 OK"]; + } diff --git a/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/10.png b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/10.png new file mode 100644 index 00000000..0adc7e93 Binary files /dev/null and b/specs/victoria/support-notification-api-based-on-etsi-nfv-sol/10.png differ diff --git a/specs/victoria/support-scale-api-based-on-etsi-nfv-sol.rst b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol.rst index 96553594..ecfa2266 100644 --- a/specs/victoria/support-scale-api-based-on-etsi-nfv-sol.rst +++ b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol.rst @@ -46,43 +46,7 @@ The operation provided through this interface is: Precondition: VNF instance in INSTANTIATED state. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - Client -> "tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - Client <- "tacker-conductor" [label = "POST /grants"]; - Client --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "resourse signal"]; - "openstackDriver" -> "heat" [label = "update stack"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "tacker-conductor" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-scale-api-based-on-etsi-nfv-sol/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -120,43 +84,7 @@ scaled. Precondition: VNF instance in INSTANTIATED state. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - Client -> "tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - Client <- "tacker-conductor" [label = "POST /grants"]; - Client --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "tacker-conductor" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "resourse signal"]; - "openstackDriver" -> "heat" [label = "update stack"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-scale-api-based-on-etsi-nfv-sol/02.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/01.diag b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/01.diag new file mode 100644 index 00000000..73ebb811 --- /dev/null +++ b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/01.diag @@ -0,0 +1,36 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + Client -> "tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + Client <- "tacker-conductor" [label = "POST /grants"]; + Client --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "resourse signal"]; + "openstackDriver" -> "heat" [label = "update stack"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "tacker-conductor" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/01.png b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/01.png new file mode 100644 index 00000000..20af2d7f Binary files /dev/null and b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/01.png differ diff --git a/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/02.diag b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/02.diag new file mode 100644 index 00000000..40b7aeee --- /dev/null +++ b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/02.diag @@ -0,0 +1,36 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + Client -> "tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + Client <- "tacker-conductor" [label = "POST /grants"]; + Client --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "tacker-conductor" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "resourse signal"]; + "openstackDriver" -> "heat" [label = "update stack"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/02.png b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/02.png new file mode 100644 index 00000000..4733589f Binary files /dev/null and b/specs/victoria/support-scale-api-based-on-etsi-nfv-sol/02.png differ diff --git a/specs/victoria/support-sol003-vnfm-operations.rst b/specs/victoria/support-sol003-vnfm-operations.rst index 9a793fe7..c393bb82 100644 --- a/specs/victoria/support-sol003-vnfm-operations.rst +++ b/specs/victoria/support-sol003-vnfm-operations.rst @@ -55,54 +55,7 @@ VNF packages uses "vnf_packages" API. Precondition: One or more "Individual VNF package" resources are created. -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; - - Client -> "tacker-server" [label = "POST /vnf_instances/"]; - "tacker-server" ->> "tacker-server" - [label = "Create VNF instance resource"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package list process{filter}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; - "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; - "tacker-server" ->> "tacker-server" - [label = "Update VNF instance resource(VnfPkgInfo)"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package content process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; - NFVO --> "tacker-conductor" - [label = "Response 200 OK with VNF package file"]; - "tacker-server" <<- "tacker-conductor" - [label = "(VNF package content file)"]; - "tacker-server" ->> "tacker-server"[label = "Store received package file"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package vnfd process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = - "GET /vnf_packages/{vnfPkgId}/vnfd with 'Accept' header contains 'text/plain'"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with VNFD contents"]; - "tacker-server" <<- "tacker-conductor" [label = "(VNFD)"]; - "tacker-server" ->> "tacker-server" - [label = "Update VNF instance resource(VNFD)"]; - "tacker-server" -> "tacker-conductor" - [label = "execute vnf_package artifact process{vnfPkgId}"]; - NFVO <- "tacker-conductor" - [label = "GET /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with artifact file"]; - "tacker-server" <<- "tacker-conductor" [label = "(artifact file)"]; - "tacker-server" ->> "tacker-server" - [label = "Store received package file"]; - Client <-- "tacker-server" [label = " Response 201 Created"]; - "tacker-server" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI}"]; - Client --> "tacker-conductor" [label = "Response 204 No Content"]; - } +.. image:: ./support-sol003-vnfm-operations/01.png * VNF packages (GET) @@ -141,34 +94,7 @@ Grant API is sent in below sequences: - Scaling - Termination -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; - - Client -> "tacker-server" [label = "LCM Operation Request"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-sol003-vnfm-operations/02.png After receiving 201 created with body data, VNFM updates the grant information. diff --git a/specs/victoria/support-sol003-vnfm-operations/01.diag b/specs/victoria/support-sol003-vnfm-operations/01.diag new file mode 100644 index 00000000..4627a4e6 --- /dev/null +++ b/specs/victoria/support-sol003-vnfm-operations/01.diag @@ -0,0 +1,47 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; + + Client -> "tacker-server" [label = "POST /vnf_instances/"]; + "tacker-server" ->> "tacker-server" + [label = "Create VNF instance resource"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package list process{filter}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; + "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; + "tacker-server" ->> "tacker-server" + [label = "Update VNF instance resource(VnfPkgInfo)"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package content process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; + NFVO --> "tacker-conductor" + [label = "Response 200 OK with VNF package file"]; + "tacker-server" <<- "tacker-conductor" + [label = "(VNF package content file)"]; + "tacker-server" ->> "tacker-server"[label = "Store received package file"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package vnfd process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = + "GET /vnf_packages/{vnfPkgId}/vnfd with 'Accept' header contains 'text/plain'"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VNFD contents"]; + "tacker-server" <<- "tacker-conductor" [label = "(VNFD)"]; + "tacker-server" ->> "tacker-server" + [label = "Update VNF instance resource(VNFD)"]; + "tacker-server" -> "tacker-conductor" + [label = "execute vnf_package artifact process{vnfPkgId}"]; + NFVO <- "tacker-conductor" + [label = "GET /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with artifact file"]; + "tacker-server" <<- "tacker-conductor" [label = "(artifact file)"]; + "tacker-server" ->> "tacker-server" + [label = "Store received package file"]; + Client <-- "tacker-server" [label = " Response 201 Created"]; + "tacker-server" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI}"]; + Client --> "tacker-conductor" [label = "Response 204 No Content"]; + } diff --git a/specs/victoria/support-sol003-vnfm-operations/01.png b/specs/victoria/support-sol003-vnfm-operations/01.png new file mode 100644 index 00000000..9db49176 Binary files /dev/null and b/specs/victoria/support-sol003-vnfm-operations/01.png differ diff --git a/specs/victoria/support-sol003-vnfm-operations/02.diag b/specs/victoria/support-sol003-vnfm-operations/02.diag new file mode 100644 index 00000000..6cc1b2ec --- /dev/null +++ b/specs/victoria/support-sol003-vnfm-operations/02.diag @@ -0,0 +1,27 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; + + Client -> "tacker-server" [label = "LCM Operation Request"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-sol003-vnfm-operations/02.png b/specs/victoria/support-sol003-vnfm-operations/02.png new file mode 100644 index 00000000..75afa10a Binary files /dev/null and b/specs/victoria/support-sol003-vnfm-operations/02.png differ diff --git a/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol.rst b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol.rst index 50cf2af8..ea8eabee 100644 --- a/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol.rst +++ b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol.rst @@ -52,31 +52,7 @@ The following items can be updated by this operation.: Precondition: The resource representing the VNF instance has been created. The VNF Package used for "Modify VNF" has been onboarded in NFVO. -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; - - Client -> "tacker-server" [label = "PATCH /vnf_instances/{vnfInstanceId}"]; - "tacker-server" -> "tacker-conductor" [label = "execute vnf_package list process{filter}"]; - NFVO <- "tacker-conductor" [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; - "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; - "tacker-server" ->> "tacker-server" [label = "Update VNF instance resource(VnfPkgInfo)"]; - "tacker-server" -> "tacker-conductor" [label = "execute vnf_package content process{vnfPkgId}"]; - NFVO <- "tacker-conductor" [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; - NFVO --> "tacker-conductor" [label = "Response 200 OK with VNF package file"]; - "tacker-server" <<- "tacker-conductor" [label = "(VNF package content file)"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-vnf-update-api-based-on-etsi-nfv-sol/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -99,20 +75,7 @@ instance is updated. Precondition: The resource representing the VNF instance has been created. -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = "PATCH /vnf_instances/{vnfInstanceId}"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-vnf-update-api-based-on-etsi-nfv-sol/02.png #. The Client sends a PATCH request to the "Individual VNF instance" resource. diff --git a/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/01.diag b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/01.diag new file mode 100644 index 00000000..c7e3722d --- /dev/null +++ b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/01.diag @@ -0,0 +1,24 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; + + Client -> "tacker-server" [label = "PATCH /vnf_instances/{vnfInstanceId}"]; + "tacker-server" -> "tacker-conductor" [label = "execute vnf_package list process{filter}"]; + NFVO <- "tacker-conductor" [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; + "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; + "tacker-server" ->> "tacker-server" [label = "Update VNF instance resource(VnfPkgInfo)"]; + "tacker-server" -> "tacker-conductor" [label = "execute vnf_package content process{vnfPkgId}"]; + NFVO <- "tacker-conductor" [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VNF package file"]; + "tacker-server" <<- "tacker-conductor" [label = "(VNF package content file)"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/01.png b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/01.png new file mode 100644 index 00000000..7b0d4768 Binary files /dev/null and b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/01.png differ diff --git a/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/02.diag b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/02.diag new file mode 100644 index 00000000..787d8e3b --- /dev/null +++ b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/02.diag @@ -0,0 +1,13 @@ + + seqdiag { + Client -> "tacker-server" [label = "PATCH /vnf_instances/{vnfInstanceId}"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/02.png b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/02.png new file mode 100644 index 00000000..ef745312 Binary files /dev/null and b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol/02.png differ diff --git a/specs/wallaby/hardware-aware-pod-affinity.rst b/specs/wallaby/hardware-aware-pod-affinity.rst index 0be430e3..a5191385 100644 --- a/specs/wallaby/hardware-aware-pod-affinity.rst +++ b/specs/wallaby/hardware-aware-pod-affinity.rst @@ -351,64 +351,7 @@ Request data(BaseHOT/TOSCA) Following sequence diagram describes the components involved and the flow of instantiate VNF operation in which new Worker-node is set label of ``zone``: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "create stack"]; - "OpenstackDriver" <-- "Heat" - [label = "return stack id"]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = "return instance_id"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "instantiate_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get ssh ipaddress and Kubernetes address using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes on the new Worker-node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "sets label of compute server"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./hardware-aware-pod-affinity/01.png The procedure consists of the following steps as illustrated in above sequence. diff --git a/specs/wallaby/hardware-aware-pod-affinity/01.diag b/specs/wallaby/hardware-aware-pod-affinity/01.diag new file mode 100644 index 00000000..1cc50cb1 --- /dev/null +++ b/specs/wallaby/hardware-aware-pod-affinity/01.diag @@ -0,0 +1,57 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "create stack"]; + "OpenstackDriver" <-- "Heat" + [label = "return stack id"]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = "return instance_id"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "instantiate_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get ssh ipaddress and Kubernetes address using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes on the new Worker-node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "sets label of compute server"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/wallaby/hardware-aware-pod-affinity/01.png b/specs/wallaby/hardware-aware-pod-affinity/01.png new file mode 100644 index 00000000..73c885e0 Binary files /dev/null and b/specs/wallaby/hardware-aware-pod-affinity/01.png differ diff --git a/specs/wallaby/mgmt-driver-for-ha-k8s.rst b/specs/wallaby/mgmt-driver-for-ha-k8s.rst index 5304bbcc..e3e65a28 100644 --- a/specs/wallaby/mgmt-driver-for-ha-k8s.rst +++ b/specs/wallaby/mgmt-driver-for-ha-k8s.rst @@ -342,76 +342,7 @@ Sequence diagram Following sequence diagram describes the components involved and the flow of HA Kubernetes Master deployment in ``instantiate_end``: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "RemoteCommandExecutor" - - Client -> "Tacker-server" - [label = "instantiate VNF"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "instantiate VNF"]; - - "VnfLcmDriver" -> "OpenstackDriver" - [label = "pre instantiate VNF"]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = ""]; - - "VnfLcmDriver" -> "OpenstackDriver" - [label = "instantiate VNF"]; - - "OpenstackDriver" -> "Heat" - [label = "create stack"]; - "OpenstackDriver" <-- "Heat" - [label = ""]; - - "VnfLcmDriver" <-- "OpenstackDriver" - [label = "return stack id"]; - - "VnfLcmDriver" -> "VnfLcmDriver" - [label = "update DB"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "instantiate_end"]; - - "MgmtDriver" -> "Heat" - [label = "get the new vm info created."]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Changes HAProxy configuration"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Install Kubernetes on the new Master-node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Install Kubernetes on the new Worker-node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./mgmt-driver-for-ha-k8s/01.png The procedure consists of the following steps as illustrated in above sequence. The following No.3 and later processes are executed as ``instantiate_end``. diff --git a/specs/wallaby/mgmt-driver-for-ha-k8s/01.diag b/specs/wallaby/mgmt-driver-for-ha-k8s/01.diag new file mode 100644 index 00000000..bea0baea --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-ha-k8s/01.diag @@ -0,0 +1,69 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "RemoteCommandExecutor" + + Client -> "Tacker-server" + [label = "instantiate VNF"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "instantiate VNF"]; + + "VnfLcmDriver" -> "OpenstackDriver" + [label = "pre instantiate VNF"]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = ""]; + + "VnfLcmDriver" -> "OpenstackDriver" + [label = "instantiate VNF"]; + + "OpenstackDriver" -> "Heat" + [label = "create stack"]; + "OpenstackDriver" <-- "Heat" + [label = ""]; + + "VnfLcmDriver" <-- "OpenstackDriver" + [label = "return stack id"]; + + "VnfLcmDriver" -> "VnfLcmDriver" + [label = "update DB"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "instantiate_end"]; + + "MgmtDriver" -> "Heat" + [label = "get the new vm info created."]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Changes HAProxy configuration"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Install Kubernetes on the new Master-node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Install Kubernetes on the new Worker-node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/wallaby/mgmt-driver-for-ha-k8s/01.png b/specs/wallaby/mgmt-driver-for-ha-k8s/01.png new file mode 100644 index 00000000..df74630a Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-ha-k8s/01.png differ diff --git a/specs/wallaby/mgmt-driver-for-k8s-cluster.rst b/specs/wallaby/mgmt-driver-for-k8s-cluster.rst index 3e7972a6..4f1467b5 100644 --- a/specs/wallaby/mgmt-driver-for-k8s-cluster.rst +++ b/specs/wallaby/mgmt-driver-for-k8s-cluster.rst @@ -152,73 +152,7 @@ network: Following sequence diagram describes the components involved and the flow of install Kubernetes cluster with MgmtDriver operation: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "NfvoPlugin" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "create stack"]; - "OpenstackDriver" <-- "Heat" - [label = "return stack id"]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = "return instance_id"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "instantiate_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get ssh ip address and Kubernetes address using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes on the new node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "get identification token from Kubernetes cluster"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "NfvoPlugin" - [label = "register Kubernetes VIM to tacker"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""] - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""] - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./mgmt-driver-for-k8s-cluster/01.png The procedure consists of the following steps as illustrated in above sequence. @@ -562,74 +496,7 @@ network Following sequence diagram describes the components involved and the flow of install Kubernetes cluster with MgmtDriver operation: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "NfvoPlugin" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "create stack"]; - "OpenstackDriver" <-- "Heat" - [label = "return stack id"]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = "return instance_id"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "instantiate_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get ssh ipaddress and Kubernetes address using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes on the new node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "get identification token and hash value of - ssl certificates from Kubernets Custer"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "NfvoPlugin" - [label = "register Kubernetes VIM to tacker"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""] - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""] - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./mgmt-driver-for-k8s-cluster/02.png The procedure consists of the following steps as illustrated in above sequence. @@ -970,58 +837,7 @@ Same to instantiation, this logic will be executed through MgmtDriver in Following sequence diagram describes the components involved and the flow of terminate Kubernetes cluster with MgmtDriver operation: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "NfvoPlugin" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/terminate"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "delete stack"]; - "OpenstackDriver" <-- "Heat" - [label = "stack deleted"]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = "resources removed"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "terminate_end"]; - "MgmtDriver" -> "NfvoPlugin" - [label = "delete the VIM information"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "Clear the Kubernetes cluster information stored in the - vim_connection_info of the VNF Instance"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - - } +.. image:: ./mgmt-driver-for-k8s-cluster/03.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/wallaby/mgmt-driver-for-k8s-cluster/01.diag b/specs/wallaby/mgmt-driver-for-k8s-cluster/01.diag new file mode 100644 index 00000000..e008a424 --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-k8s-cluster/01.diag @@ -0,0 +1,66 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "NfvoPlugin" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "create stack"]; + "OpenstackDriver" <-- "Heat" + [label = "return stack id"]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = "return instance_id"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "instantiate_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get ssh ip address and Kubernetes address using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes on the new node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "get identification token from Kubernetes cluster"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "NfvoPlugin" + [label = "register Kubernetes VIM to tacker"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""] + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""] + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/wallaby/mgmt-driver-for-k8s-cluster/01.png b/specs/wallaby/mgmt-driver-for-k8s-cluster/01.png new file mode 100644 index 00000000..b34fed0a Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-k8s-cluster/01.png differ diff --git a/specs/wallaby/mgmt-driver-for-k8s-cluster/02.diag b/specs/wallaby/mgmt-driver-for-k8s-cluster/02.diag new file mode 100644 index 00000000..df7aaa2f --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-k8s-cluster/02.diag @@ -0,0 +1,67 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "NfvoPlugin" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "create stack"]; + "OpenstackDriver" <-- "Heat" + [label = "return stack id"]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = "return instance_id"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "instantiate_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get ssh ipaddress and Kubernetes address using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes on the new node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "get identification token and hash value of + ssl certificates from Kubernets Custer"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "NfvoPlugin" + [label = "register Kubernetes VIM to tacker"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""] + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""] + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/wallaby/mgmt-driver-for-k8s-cluster/02.png b/specs/wallaby/mgmt-driver-for-k8s-cluster/02.png new file mode 100644 index 00000000..07cae5b5 Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-k8s-cluster/02.png differ diff --git a/specs/wallaby/mgmt-driver-for-k8s-cluster/03.diag b/specs/wallaby/mgmt-driver-for-k8s-cluster/03.diag new file mode 100644 index 00000000..b896cca1 --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-k8s-cluster/03.diag @@ -0,0 +1,51 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "NfvoPlugin" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/terminate"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "delete stack"]; + "OpenstackDriver" <-- "Heat" + [label = "stack deleted"]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = "resources removed"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "terminate_end"]; + "MgmtDriver" -> "NfvoPlugin" + [label = "delete the VIM information"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "Clear the Kubernetes cluster information stored in the + vim_connection_info of the VNF Instance"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + + } diff --git a/specs/wallaby/mgmt-driver-for-k8s-cluster/03.png b/specs/wallaby/mgmt-driver-for-k8s-cluster/03.png new file mode 100644 index 00000000..69feb872 Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-k8s-cluster/03.png differ diff --git a/specs/wallaby/mgmt-driver-for-k8s-heal.rst b/specs/wallaby/mgmt-driver-for-k8s-heal.rst index 375771ee..06c9b7ef 100644 --- a/specs/wallaby/mgmt-driver-for-k8s-heal.rst +++ b/specs/wallaby/mgmt-driver-for-k8s-heal.rst @@ -259,90 +259,7 @@ the following processing: Following sequence diagram describes the components involved and the flow of Healing Master-node operation: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "MgmtDriver" - [label = "heal_start"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get the vim connection info"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "MgmtDriver" - [label = "get the vm info to be deleted by the request data"]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "remove the failed Master-node from etcd cluster by notifying - the other active Master-node of the failure"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "remove the failed Master-node from HA proxy"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "Tacker-conductor" <-- "MgmtDriver" - [label = ""]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "resource signal"]; - "OpenstackDriver" -> "Heat" - [label = "update stack"]; - "OpenstackDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - "Tacker-conductor" -> "MgmtDriver" - [label = "heal_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get the vim connection info"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get the new vm info created by Heal operation."]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Install Kubernetes on the new Master-node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Repairs etcd cluster by invoking shell script"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Changes HA proxy configuration"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - - "Tacker-conductor" <-- "MgmtDriver" - [label = ""]; - } +.. image:: ./mgmt-driver-for-k8s-heal/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -487,82 +404,7 @@ the following processing: Following sequence diagram describes the components involved and the flow of Heal the Worker-node operation: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "MgmtDriver" - [label = "heal_start"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get the vim connection info"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "MgmtDriver" - [label = "get the vm info to be deleted by the request data"]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "try evacuating the pod running on the failed VM to another - worker node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Notify the Master-node of the failed VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "Tacker-conductor" <-- "MgmtDriver" - [label = ""]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "resource signal"]; - "OpenstackDriver" -> "Heat" - [label = "update stack"]; - "OpenstackDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - "Tacker-conductor" -> "MgmtDriver" - [label = "heal_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get the vim connection info"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get the new vm info created by Heal operation."]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Install Kubernetes on the new Worker-node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - - "Tacker-conductor" <-- "MgmtDriver" - [label = ""]; - } +.. image:: ./mgmt-driver-for-k8s-heal/02.png The procedure consists of the following steps as illustrated in above sequence: @@ -613,89 +455,7 @@ operations are required to be implemented in both ``heal_start`` and Following sequence diagram describes the components involved and the flow of Heal operation for an entire VNF instance: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "NfvoPlugin" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "MgmtDriver" - [label = "heal_start"]; - "MgmtDriver" -> "NfvoPlugin" - [label = "delete the failed VIM information"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "Clear the old Kubernetes cluster information stored in the - vim_connection_info of the VNF Instance"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - - "Tacker-conductor" <-- "MgmtDriver" - [label = ""]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "resource signal"]; - "OpenstackDriver" -> "Heat" - [label = "update stack"]; - "OpenstackDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - "Tacker-conductor" -> "MgmtDriver" - [label = "heal_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get ssh ip address and Kubernetes address using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes on the new node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install etcd cluster by invoking shell script"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "NfvoPlugin" - [label = "register Kubernetes VIM to tacker"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""] - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""] - "Tacker-conductor" <-- "MgmtDriver" - [label = ""]; - - } +.. image:: ./mgmt-driver-for-k8s-heal/03.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/wallaby/mgmt-driver-for-k8s-heal/01.diag b/specs/wallaby/mgmt-driver-for-k8s-heal/01.diag new file mode 100644 index 00000000..f49ad097 --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-k8s-heal/01.diag @@ -0,0 +1,83 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "MgmtDriver" + [label = "heal_start"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get the vim connection info"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "MgmtDriver" + [label = "get the vm info to be deleted by the request data"]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "remove the failed Master-node from etcd cluster by notifying + the other active Master-node of the failure"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "remove the failed Master-node from HA proxy"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "Tacker-conductor" <-- "MgmtDriver" + [label = ""]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "resource signal"]; + "OpenstackDriver" -> "Heat" + [label = "update stack"]; + "OpenstackDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + "Tacker-conductor" -> "MgmtDriver" + [label = "heal_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get the vim connection info"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get the new vm info created by Heal operation."]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Install Kubernetes on the new Master-node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Repairs etcd cluster by invoking shell script"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Changes HA proxy configuration"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + + "Tacker-conductor" <-- "MgmtDriver" + [label = ""]; + } diff --git a/specs/wallaby/mgmt-driver-for-k8s-heal/01.png b/specs/wallaby/mgmt-driver-for-k8s-heal/01.png new file mode 100644 index 00000000..20a452b2 Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-k8s-heal/01.png differ diff --git a/specs/wallaby/mgmt-driver-for-k8s-heal/02.diag b/specs/wallaby/mgmt-driver-for-k8s-heal/02.diag new file mode 100644 index 00000000..483ef525 --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-k8s-heal/02.diag @@ -0,0 +1,75 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "MgmtDriver" + [label = "heal_start"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get the vim connection info"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "MgmtDriver" + [label = "get the vm info to be deleted by the request data"]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "try evacuating the pod running on the failed VM to another + worker node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Notify the Master-node of the failed VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "Tacker-conductor" <-- "MgmtDriver" + [label = ""]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "resource signal"]; + "OpenstackDriver" -> "Heat" + [label = "update stack"]; + "OpenstackDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + "Tacker-conductor" -> "MgmtDriver" + [label = "heal_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get the vim connection info"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get the new vm info created by Heal operation."]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Install Kubernetes on the new Worker-node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + + "Tacker-conductor" <-- "MgmtDriver" + [label = ""]; + } diff --git a/specs/wallaby/mgmt-driver-for-k8s-heal/02.png b/specs/wallaby/mgmt-driver-for-k8s-heal/02.png new file mode 100644 index 00000000..bb2e8968 Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-k8s-heal/02.png differ diff --git a/specs/wallaby/mgmt-driver-for-k8s-heal/03.diag b/specs/wallaby/mgmt-driver-for-k8s-heal/03.diag new file mode 100644 index 00000000..a07bf231 --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-k8s-heal/03.diag @@ -0,0 +1,82 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "NfvoPlugin" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "MgmtDriver" + [label = "heal_start"]; + "MgmtDriver" -> "NfvoPlugin" + [label = "delete the failed VIM information"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "Clear the old Kubernetes cluster information stored in the + vim_connection_info of the VNF Instance"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + + "Tacker-conductor" <-- "MgmtDriver" + [label = ""]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "resource signal"]; + "OpenstackDriver" -> "Heat" + [label = "update stack"]; + "OpenstackDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + "Tacker-conductor" -> "MgmtDriver" + [label = "heal_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get ssh ip address and Kubernetes address using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes on the new node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install etcd cluster by invoking shell script"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "NfvoPlugin" + [label = "register Kubernetes VIM to tacker"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""] + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""] + "Tacker-conductor" <-- "MgmtDriver" + [label = ""]; + + } diff --git a/specs/wallaby/mgmt-driver-for-k8s-heal/03.png b/specs/wallaby/mgmt-driver-for-k8s-heal/03.png new file mode 100644 index 00000000..f373634b Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-k8s-heal/03.png differ diff --git a/specs/wallaby/mgmt-driver-for-k8s-scale.rst b/specs/wallaby/mgmt-driver-for-k8s-scale.rst index b5fafc15..a9e0b17c 100644 --- a/specs/wallaby/mgmt-driver-for-k8s-scale.rst +++ b/specs/wallaby/mgmt-driver-for-k8s-scale.rst @@ -231,61 +231,7 @@ Following is a sample of scaling request body: Following sequence diagram describes the components involved and the flow of VNF ``scale-out`` operation: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "resource signal"]; - "OpenstackDriver" -> "Heat" - [label = "update stack"]; - "OpenstackDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - "Tacker-conductor" -> "MgmtDriver" - [label = "scale_end"]; - - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get the vim connection info"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get the new vm info created by scale out operation."]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "Install Kubernetes on the new Worker-node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - - "Tacker-conductor" <-- "MgmtDriver" - [label = ""]; - } +.. image:: ./mgmt-driver-for-k8s-scale/01.png The procedure consists of the following steps as illustrated in above sequence @@ -387,61 +333,7 @@ Following is a sample of scaling request body: Following sequence diagram describes the components involved and the flow of VNF ``scale-in`` operation: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "MgmtDriver" - [label = "scale_start"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get the vim connection info"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get the vm info to be removed by scale in operation."]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "pre-processing for leaving from Kubernetes cluster"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - - "Tacker-conductor" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "resource signal"]; - "OpenstackDriver" -> "Heat" - [label = "update stack"]; - "OpenstackDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./mgmt-driver-for-k8s-scale/02.png The procedure consists of the following steps as illustrated in above sequence. diff --git a/specs/wallaby/mgmt-driver-for-k8s-scale/01.diag b/specs/wallaby/mgmt-driver-for-k8s-scale/01.diag new file mode 100644 index 00000000..10e1ee5e --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-k8s-scale/01.diag @@ -0,0 +1,54 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "resource signal"]; + "OpenstackDriver" -> "Heat" + [label = "update stack"]; + "OpenstackDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + "Tacker-conductor" -> "MgmtDriver" + [label = "scale_end"]; + + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get the vim connection info"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get the new vm info created by scale out operation."]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "Install Kubernetes on the new Worker-node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + + "Tacker-conductor" <-- "MgmtDriver" + [label = ""]; + } diff --git a/specs/wallaby/mgmt-driver-for-k8s-scale/01.png b/specs/wallaby/mgmt-driver-for-k8s-scale/01.png new file mode 100644 index 00000000..a552aa77 Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-k8s-scale/01.png differ diff --git a/specs/wallaby/mgmt-driver-for-k8s-scale/02.diag b/specs/wallaby/mgmt-driver-for-k8s-scale/02.diag new file mode 100644 index 00000000..bcfe8307 --- /dev/null +++ b/specs/wallaby/mgmt-driver-for-k8s-scale/02.diag @@ -0,0 +1,54 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "MgmtDriver" + [label = "scale_start"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get the vim connection info"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get the vm info to be removed by scale in operation."]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "pre-processing for leaving from Kubernetes cluster"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + + "Tacker-conductor" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "resource signal"]; + "OpenstackDriver" -> "Heat" + [label = "update stack"]; + "OpenstackDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/wallaby/mgmt-driver-for-k8s-scale/02.png b/specs/wallaby/mgmt-driver-for-k8s-scale/02.png new file mode 100644 index 00000000..a6ead890 Binary files /dev/null and b/specs/wallaby/mgmt-driver-for-k8s-scale/02.png differ diff --git a/specs/wallaby/support-change-external-VNF-connectivity-operation.rst b/specs/wallaby/support-change-external-VNF-connectivity-operation.rst index 5f462d00..3d5a8ec7 100644 --- a/specs/wallaby/support-change-external-VNF-connectivity-operation.rst +++ b/specs/wallaby/support-change-external-VNF-connectivity-operation.rst @@ -47,30 +47,7 @@ The operation provided through a new API in this specification is below. Along with the addition of the Change external VNF connectivity API, the existing LCM APIs also support new related attributes. -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; - - Client -> "tacker-server" [label = "Change external VNF connectivity"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-server" -> "tacker-conductor" [label = "trigger asynchronous task"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-change-external-VNF-connectivity-operation/01.png This operation allows the client to change the external connectivity of a VNF instance. diff --git a/specs/wallaby/support-change-external-VNF-connectivity-operation/01.diag b/specs/wallaby/support-change-external-VNF-connectivity-operation/01.diag new file mode 100644 index 00000000..cc5deae5 --- /dev/null +++ b/specs/wallaby/support-change-external-VNF-connectivity-operation/01.diag @@ -0,0 +1,23 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; + + Client -> "tacker-server" [label = "Change external VNF connectivity"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-server" -> "tacker-conductor" [label = "trigger asynchronous task"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute MgmtDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/wallaby/support-change-external-VNF-connectivity-operation/01.png b/specs/wallaby/support-change-external-VNF-connectivity-operation/01.png new file mode 100644 index 00000000..7c350bf8 Binary files /dev/null and b/specs/wallaby/support-change-external-VNF-connectivity-operation/01.png differ diff --git a/specs/wallaby/support-cnf-heal.rst b/specs/wallaby/support-cnf-heal.rst index 38ca161a..e4eb5749 100644 --- a/specs/wallaby/support-cnf-heal.rst +++ b/specs/wallaby/support-cnf-heal.rst @@ -350,48 +350,7 @@ During the operation of Instantiate CNF, it needs to store above VNFC resource information. The following sequence diagram describes the components involved and the flow of CNF instantiation operation: -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 115; - - Client -> WSGIMiddleware [label = - "POST /vnflcm/v1/vnf_instances/{id}/instantiate"]; - WSGIMiddleware -->> WSGIMiddleware [label = "Request validation"]; - Client <-- WSGIMiddleware [label = "202 Accepted"]; - - NFVOPlugin; - WSGIMiddleware -> VnfLcmDriver [label = "Trigger asynchronous task "]; - VnfLcmDriver --> NFVOPlugin [label = "Get VNF Package"]; - VnfLcmDriver <-- NFVOPlugin; - VnfLcmDriver -->> VnfLcmDriver [label = "Create VIM connection object"]; - - VnfLcmDriver -> KubernetesDriver [label = "pre_instantiation_vnf()"]; - KubernetesDriver -->> KubernetesDriver [label = "No change needed"]; - VnfLcmDriver <-- KubernetesDriver; - - VnfLcmDriver --> KubernetesDriver - [label = "instantiate_vnf()"]; - KubernetesDriver --> KubernetesDriver [label = "create()"] - KubernetesDriver -> KubernetesDriver [label = "No change needed"]; - VnfLcmDriver <-- KubernetesDriver [label = "instance_id"]; - - VnfLcmDriver --> KubernetesDriver [label ="create_wait()"]; - KubernetesDriver -> KubernetesDriver [label = "No change needed"]; - VnfLcmDriver <-- KubernetesDriver; - - VnfLcmDriver -> KubernetesDriver [label = "post_vnf_instantiation()"]; - KubernetesDriver -> KubernetesPythonClient - [label = "Read Kubernetes resources data"]; - KubernetesPythonClient -> Kubernetes - [label = "Execute read API"]; - KubernetesPythonClient <-- Kubernetes [label = ""]; - KubernetesDriver <-- KubernetesPythonClient; - KubernetesDriver -->> KubernetesDriver - [label = "Update DB for VNFC resources"]; - VnfLcmDriver <-- KubernetesDriver; - } +.. image:: ./support-cnf-heal/01.png #. Tacker receives POST request for instantiate CNF, and Kubernetes resources are created and validated creation which processing is implemented in @@ -432,59 +391,7 @@ The following is a sample of healing request body: The following sequence diagram describes the components involved and the flow of the CNF heal operation: -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 115; - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - "Client" <-- "Tacker-server" [label = "Response 202 Accepted"]; - "Tacker-server" --> "Tacker-conductor" [label = "Trigger asynchronous task"] - "Tacker-conductor" -> "VnfLcmDriver" [label = "Call VnfLcmDriver"]; - - "VnfLcmDriver" -> "KubernetesDriver" [label = "heal_vnf()"]; - "KubernetesDriver" -> "KubernetesPythonClient" - [label = "Execute delete API"]; - "KubernetesPythonClient" -> "Kubernetes" [label = "Execute delete API"]; - "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; - "KubernetesDriver" -> "KubernetesPythonClient" - [label = "Execute read API for check successful deletion"]; - "KubernetesPythonClient" -> "Kubernetes" [label = "Execute read API"]; - "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; - "KubernetesDriver" -->> "KubernetesDriver" - [label = "Translate into target Kubernetes object"]; - "KubernetesDriver" -> "KubernetesPythonClient" - [label = "Execute create API"]; - "KubernetesPythonClient" -> "Kubernetes" [label = "Execute create API"]; - "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - - "VnfLcmDriver" -> "KubernetesDriver" [label = "heal_vnf_wait()"]; - "KubernetesDriver" -> "KubernetesPythonClient" - [label = "Execute read API for check successful creation"]; - "KubernetesPythonClient" -> "Kubernetes" [label = "Execute read API"]; - "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - - "VnfLcmDriver" -> "KubernetesDriver" [label = "post_heal_vnf()"]; - "KubernetesDriver" -> "KubernetesPythonClient" - [label = "read Kubernetes resources data"]; - "KubernetesPythonClient" -> "Kubernetes" [label = "Execute read API"]; - "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; - "KubernetesDriver" -->> "KubernetesDriver" - [label = "Update vnfc resource information"]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - - "Tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - - } +.. image:: ./support-cnf-heal/02.png #. Client sends a POST request to the Heal CNF Instance resource. diff --git a/specs/wallaby/support-cnf-heal/01.diag b/specs/wallaby/support-cnf-heal/01.diag new file mode 100644 index 00000000..aa0ec480 --- /dev/null +++ b/specs/wallaby/support-cnf-heal/01.diag @@ -0,0 +1,41 @@ + + seqdiag { + node_width = 100; + edge_length = 115; + + Client -> WSGIMiddleware [label = + "POST /vnflcm/v1/vnf_instances/{id}/instantiate"]; + WSGIMiddleware -->> WSGIMiddleware [label = "Request validation"]; + Client <-- WSGIMiddleware [label = "202 Accepted"]; + + NFVOPlugin; + WSGIMiddleware -> VnfLcmDriver [label = "Trigger asynchronous task "]; + VnfLcmDriver --> NFVOPlugin [label = "Get VNF Package"]; + VnfLcmDriver <-- NFVOPlugin; + VnfLcmDriver -->> VnfLcmDriver [label = "Create VIM connection object"]; + + VnfLcmDriver -> KubernetesDriver [label = "pre_instantiation_vnf()"]; + KubernetesDriver -->> KubernetesDriver [label = "No change needed"]; + VnfLcmDriver <-- KubernetesDriver; + + VnfLcmDriver --> KubernetesDriver + [label = "instantiate_vnf()"]; + KubernetesDriver --> KubernetesDriver [label = "create()"] + KubernetesDriver -> KubernetesDriver [label = "No change needed"]; + VnfLcmDriver <-- KubernetesDriver [label = "instance_id"]; + + VnfLcmDriver --> KubernetesDriver [label ="create_wait()"]; + KubernetesDriver -> KubernetesDriver [label = "No change needed"]; + VnfLcmDriver <-- KubernetesDriver; + + VnfLcmDriver -> KubernetesDriver [label = "post_vnf_instantiation()"]; + KubernetesDriver -> KubernetesPythonClient + [label = "Read Kubernetes resources data"]; + KubernetesPythonClient -> Kubernetes + [label = "Execute read API"]; + KubernetesPythonClient <-- Kubernetes [label = ""]; + KubernetesDriver <-- KubernetesPythonClient; + KubernetesDriver -->> KubernetesDriver + [label = "Update DB for VNFC resources"]; + VnfLcmDriver <-- KubernetesDriver; + } diff --git a/specs/wallaby/support-cnf-heal/01.png b/specs/wallaby/support-cnf-heal/01.png new file mode 100644 index 00000000..5e6cb78d Binary files /dev/null and b/specs/wallaby/support-cnf-heal/01.png differ diff --git a/specs/wallaby/support-cnf-heal/02.diag b/specs/wallaby/support-cnf-heal/02.diag new file mode 100644 index 00000000..e75f886c --- /dev/null +++ b/specs/wallaby/support-cnf-heal/02.diag @@ -0,0 +1,52 @@ + + seqdiag { + node_width = 100; + edge_length = 115; + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + "Client" <-- "Tacker-server" [label = "Response 202 Accepted"]; + "Tacker-server" --> "Tacker-conductor" [label = "Trigger asynchronous task"] + "Tacker-conductor" -> "VnfLcmDriver" [label = "Call VnfLcmDriver"]; + + "VnfLcmDriver" -> "KubernetesDriver" [label = "heal_vnf()"]; + "KubernetesDriver" -> "KubernetesPythonClient" + [label = "Execute delete API"]; + "KubernetesPythonClient" -> "Kubernetes" [label = "Execute delete API"]; + "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; + "KubernetesDriver" -> "KubernetesPythonClient" + [label = "Execute read API for check successful deletion"]; + "KubernetesPythonClient" -> "Kubernetes" [label = "Execute read API"]; + "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; + "KubernetesDriver" -->> "KubernetesDriver" + [label = "Translate into target Kubernetes object"]; + "KubernetesDriver" -> "KubernetesPythonClient" + [label = "Execute create API"]; + "KubernetesPythonClient" -> "Kubernetes" [label = "Execute create API"]; + "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + + "VnfLcmDriver" -> "KubernetesDriver" [label = "heal_vnf_wait()"]; + "KubernetesDriver" -> "KubernetesPythonClient" + [label = "Execute read API for check successful creation"]; + "KubernetesPythonClient" -> "Kubernetes" [label = "Execute read API"]; + "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + + "VnfLcmDriver" -> "KubernetesDriver" [label = "post_heal_vnf()"]; + "KubernetesDriver" -> "KubernetesPythonClient" + [label = "read Kubernetes resources data"]; + "KubernetesPythonClient" -> "Kubernetes" [label = "Execute read API"]; + "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; + "KubernetesDriver" -->> "KubernetesDriver" + [label = "Update vnfc resource information"]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + + "Tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + + } diff --git a/specs/wallaby/support-cnf-heal/02.png b/specs/wallaby/support-cnf-heal/02.png new file mode 100644 index 00000000..2c598660 Binary files /dev/null and b/specs/wallaby/support-cnf-heal/02.png differ diff --git a/specs/wallaby/support-cnf-scale.rst b/specs/wallaby/support-cnf-scale.rst index 43afe4fc..cd14e3e8 100644 --- a/specs/wallaby/support-cnf-scale.rst +++ b/specs/wallaby/support-cnf-scale.rst @@ -184,40 +184,7 @@ The following is a sample of request body for scale-in: The following sequence diagram describes the components and the flow involved in the CNF scale operation: -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 115; - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - "Client" <-- "Tacker-server" [label = "Response 202 Accepted"]; - "Tacker-server" --> "Tacker-conductor" [label = "Trigger asynchronous task"] - "Tacker-conductor" -> "VnfLcmDriver" [label = "Call VnfLcmDriver"]; - "VnfLcmDriver" -> "KubernetesDriver" [label = "scale()"]; - "KubernetesDriver" -> "KubernetesPythonClient" - [label = "Execute read API to get current replicas"]; - "KubernetesPythonClient" -> "Kubernetes" [label = "Call read API"]; - "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; - "KubernetesDriver" -> "KubernetesPythonClient" - [label = "Execute patch API to change replicas"]; - "KubernetesPythonClient" -> "Kubernetes" [label = "Call patch API"]; - "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - "VnfLcmDriver" -> "KubernetesDriver" [label = "scale_wait()"]; - "KubernetesDriver" -> "KubernetesPythonClient" - [label = "Execute read API for check scale result"]; - "KubernetesPythonClient" -> "Kubernetes" [label = "Call read API"]; - "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - "VnfLcmDriver" -->> "VnfLcmDriver" [label = "Save current scaleLevel"]; - "Tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - - } +.. image:: ./support-cnf-scale/01.png #. Client sends a POST request to a CNF Instance. diff --git a/specs/wallaby/support-cnf-scale/01.diag b/specs/wallaby/support-cnf-scale/01.diag new file mode 100644 index 00000000..8fda93bc --- /dev/null +++ b/specs/wallaby/support-cnf-scale/01.diag @@ -0,0 +1,33 @@ + + seqdiag { + node_width = 100; + edge_length = 115; + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + "Client" <-- "Tacker-server" [label = "Response 202 Accepted"]; + "Tacker-server" --> "Tacker-conductor" [label = "Trigger asynchronous task"] + "Tacker-conductor" -> "VnfLcmDriver" [label = "Call VnfLcmDriver"]; + "VnfLcmDriver" -> "KubernetesDriver" [label = "scale()"]; + "KubernetesDriver" -> "KubernetesPythonClient" + [label = "Execute read API to get current replicas"]; + "KubernetesPythonClient" -> "Kubernetes" [label = "Call read API"]; + "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; + "KubernetesDriver" -> "KubernetesPythonClient" + [label = "Execute patch API to change replicas"]; + "KubernetesPythonClient" -> "Kubernetes" [label = "Call patch API"]; + "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + "VnfLcmDriver" -> "KubernetesDriver" [label = "scale_wait()"]; + "KubernetesDriver" -> "KubernetesPythonClient" + [label = "Execute read API for check scale result"]; + "KubernetesPythonClient" -> "Kubernetes" [label = "Call read API"]; + "KubernetesPythonClient" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" <-- "KubernetesPythonClient" [label = ""]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + "VnfLcmDriver" -->> "VnfLcmDriver" [label = "Save current scaleLevel"]; + "Tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + + } diff --git a/specs/wallaby/support-cnf-scale/01.png b/specs/wallaby/support-cnf-scale/01.png new file mode 100644 index 00000000..7c2407c8 Binary files /dev/null and b/specs/wallaby/support-cnf-scale/01.png differ diff --git a/specs/wallaby/support-error-handling-based-on-ETSI-NFV.rst b/specs/wallaby/support-error-handling-based-on-ETSI-NFV.rst index c310bb38..a3d1baf9 100644 --- a/specs/wallaby/support-error-handling-based-on-ETSI-NFV.rst +++ b/specs/wallaby/support-error-handling-based-on-ETSI-NFV.rst @@ -59,23 +59,7 @@ in FAILED_TEMP state. LCM operation that can perform Retry operation are Instantiation, Termination, Healing, Scaling, and ChangeExternalConnectivity. -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" - [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/retry"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" [label = "start retry procedure"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" ->> "tacker-conductor" [label = "end retry procedure"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-error-handling-based-on-ETSI-NFV/01.png #. The Client sends a POST request with an empty body to the "Retry operation task" resource. @@ -100,19 +84,7 @@ FAILED_TEMP state. LCM operation that can perform Fail operation are Instantiation, Termination, Healing, Scaling, and ChangeExternalConnectivity. -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" - [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/fail"]; - "tacker-server" -> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" [label = "mark operation as failed"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (FAILED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - Client <-- "tacker-server" [label = "Response 200 OK"]; - } +.. image:: ./support-error-handling-based-on-ETSI-NFV/02.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/wallaby/support-error-handling-based-on-ETSI-NFV/01.diag b/specs/wallaby/support-error-handling-based-on-ETSI-NFV/01.diag new file mode 100644 index 00000000..b409a3a3 --- /dev/null +++ b/specs/wallaby/support-error-handling-based-on-ETSI-NFV/01.diag @@ -0,0 +1,16 @@ + + seqdiag { + Client -> "tacker-server" + [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/retry"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "start retry procedure"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" ->> "tacker-conductor" [label = "end retry procedure"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/wallaby/support-error-handling-based-on-ETSI-NFV/01.png b/specs/wallaby/support-error-handling-based-on-ETSI-NFV/01.png new file mode 100644 index 00000000..4fb70ee7 Binary files /dev/null and b/specs/wallaby/support-error-handling-based-on-ETSI-NFV/01.png differ diff --git a/specs/wallaby/support-error-handling-based-on-ETSI-NFV/02.diag b/specs/wallaby/support-error-handling-based-on-ETSI-NFV/02.diag new file mode 100644 index 00000000..65a7ee7d --- /dev/null +++ b/specs/wallaby/support-error-handling-based-on-ETSI-NFV/02.diag @@ -0,0 +1,12 @@ + + seqdiag { + Client -> "tacker-server" + [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/fail"]; + "tacker-server" -> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "mark operation as failed"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (FAILED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + Client <-- "tacker-server" [label = "Response 200 OK"]; + } diff --git a/specs/wallaby/support-error-handling-based-on-ETSI-NFV/02.png b/specs/wallaby/support-error-handling-based-on-ETSI-NFV/02.png new file mode 100644 index 00000000..2dc68d0f Binary files /dev/null and b/specs/wallaby/support-error-handling-based-on-ETSI-NFV/02.png differ diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV.rst b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV.rst index ea2010d3..42b1586b 100644 --- a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV.rst +++ b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV.rst @@ -49,16 +49,7 @@ The operations provided through additional attributes in this specification are 1) Flow of Notification endpoint (GET) -------------------------------------- -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " POST /subscriptions"]; - "tacker-server" -> Client [label = " GET {callback URI}"]; - "tacker-server" <-- Client [label = " Response 204 No Content"]; - "tacker-server" -> "tacker-server" - [label = " generate subscription_id (uuid)"]; - Client <-- "tacker-server" [label = " Response 201 Created"]; - } +.. image:: ./support-fundamental-vnf-lcm-based-on-ETSI-NFV/01.png The procedure consists of the following steps as illustrated in the above sequence: @@ -71,13 +62,7 @@ The procedure consists of the following steps as illustrated in the above sequen 2) Flow of VNF LCM operation occurrence (GET) --------------------------------------------- -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnf_lcm_op_occs"]; - "tacker-server" -> "tacker-server" [label = "request validation"]; - Client <-- "tacker-server" [label = " Response 200 OK"]; - } +.. image:: ./support-fundamental-vnf-lcm-based-on-ETSI-NFV/02.png The procedure consists of the following steps as illustrated in the above sequence: @@ -90,12 +75,7 @@ The procedure consists of the following steps as illustrated in the above sequen 3) Flow of individual VNF LCM operation occurrences (GET) --------------------------------------------------------- -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnf_lcm_op_occs/{vnfLcmOpOccId}"]; - Client <-- "tacker-server" [label = " Response 200 OK"]; - } +.. image:: ./support-fundamental-vnf-lcm-based-on-ETSI-NFV/03.png #. The Client sends a GET request to the "Individual VNF LCM operation occurrence" resource, addressed by the appropriate VNF LCM operation occurrence identifier in its resource URI. @@ -107,16 +87,7 @@ The procedure consists of the following steps as illustrated in the above sequen 4) Flow of Subscriptions (POST) ------------------------------- -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " POST /subscriptions"]; - "tacker-server" -> Client [label = " GET {callback URI}"]; - "tacker-server" <-- Client [label = " Response 204 No Content"]; - "tacker-server" -> "tacker-server" - [label = " generate subscription_id (uuid)"]; - Client <-- "tacker-server" [label = " Response 201 Created"]; - } +.. image:: ./support-fundamental-vnf-lcm-based-on-ETSI-NFV/04.png #. The Client sends a POST request to the "Subscriptions" resource including in the payload body a data structure of type "LccnSubscriptionRequest". @@ -133,13 +104,7 @@ The procedure consists of the following steps as illustrated in the above sequen 5) Flow of Subscriptions (GET) ------------------------------ -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /subscriptions"]; - "tacker-server" -> "tacker-server" [label = "request validation"]; - Client <-- "tacker-server" [label = " Response 200 OK"]; - } +.. image:: ./support-fundamental-vnf-lcm-based-on-ETSI-NFV/05.png #. The Client sends a GET request to the resource representing the subscriptions. #. VNFM returns a 200 OK response that contains zero or more representations of all existing @@ -150,12 +115,7 @@ The procedure consists of the following steps as illustrated in the above sequen 6) Flow of Individual subscriptions (GET) ----------------------------------------- -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /subscriptions/{subscriptionId}"]; - Client <-- "tacker-server" [label = " Response 200 OK"]; - } +.. image:: ./support-fundamental-vnf-lcm-based-on-ETSI-NFV/06.png #. The Client sends a GET request to the resource representing the individual subscription. #. VNFM returns a 200 OK response that contains a representation of that individual diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/01.diag b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/01.diag new file mode 100644 index 00000000..78f7d458 --- /dev/null +++ b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/01.diag @@ -0,0 +1,9 @@ + + seqdiag { + Client -> "tacker-server" [label = " POST /subscriptions"]; + "tacker-server" -> Client [label = " GET {callback URI}"]; + "tacker-server" <-- Client [label = " Response 204 No Content"]; + "tacker-server" -> "tacker-server" + [label = " generate subscription_id (uuid)"]; + Client <-- "tacker-server" [label = " Response 201 Created"]; + } diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/01.png b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/01.png new file mode 100644 index 00000000..797151c6 Binary files /dev/null and b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/01.png differ diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/02.diag b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/02.diag new file mode 100644 index 00000000..d3c19f9a --- /dev/null +++ b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/02.diag @@ -0,0 +1,6 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnf_lcm_op_occs"]; + "tacker-server" -> "tacker-server" [label = "request validation"]; + Client <-- "tacker-server" [label = " Response 200 OK"]; + } diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/02.png b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/02.png new file mode 100644 index 00000000..744bbf20 Binary files /dev/null and b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/02.png differ diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/03.diag b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/03.diag new file mode 100644 index 00000000..26bf7578 --- /dev/null +++ b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/03.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnf_lcm_op_occs/{vnfLcmOpOccId}"]; + Client <-- "tacker-server" [label = " Response 200 OK"]; + } diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/03.png b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/03.png new file mode 100644 index 00000000..49a23e06 Binary files /dev/null and b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/03.png differ diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/04.diag b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/04.diag new file mode 100644 index 00000000..78f7d458 --- /dev/null +++ b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/04.diag @@ -0,0 +1,9 @@ + + seqdiag { + Client -> "tacker-server" [label = " POST /subscriptions"]; + "tacker-server" -> Client [label = " GET {callback URI}"]; + "tacker-server" <-- Client [label = " Response 204 No Content"]; + "tacker-server" -> "tacker-server" + [label = " generate subscription_id (uuid)"]; + Client <-- "tacker-server" [label = " Response 201 Created"]; + } diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/04.png b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/04.png new file mode 100644 index 00000000..797151c6 Binary files /dev/null and b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/04.png differ diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/05.diag b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/05.diag new file mode 100644 index 00000000..3e53ebb1 --- /dev/null +++ b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/05.diag @@ -0,0 +1,6 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /subscriptions"]; + "tacker-server" -> "tacker-server" [label = "request validation"]; + Client <-- "tacker-server" [label = " Response 200 OK"]; + } diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/05.png b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/05.png new file mode 100644 index 00000000..2e038da9 Binary files /dev/null and b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/05.png differ diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/06.diag b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/06.diag new file mode 100644 index 00000000..d085ecf0 --- /dev/null +++ b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/06.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /subscriptions/{subscriptionId}"]; + Client <-- "tacker-server" [label = " Response 200 OK"]; + } diff --git a/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/06.png b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/06.png new file mode 100644 index 00000000..ba052f6f Binary files /dev/null and b/specs/wallaby/support-fundamental-vnf-lcm-based-on-ETSI-NFV/06.png differ diff --git a/specs/xena/cir-k8s-cluster.rst b/specs/xena/cir-k8s-cluster.rst index e55ab892..55c023ba 100644 --- a/specs/xena/cir-k8s-cluster.rst +++ b/specs/xena/cir-k8s-cluster.rst @@ -238,69 +238,7 @@ The following is a sample of body provided in the Instantiate VNF request Sequence for Instantiate Docker private registry VNF operation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenStackInfraDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "SFTPClient" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenStackInfraDriver" - [label = "execute OpenStackInfraDriver"]; - "OpenStackInfraDriver" -> "Heat" - [label = "create stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = "return stack id"]; - "VnfLcmDriver" <-- "OpenStackInfraDriver" - [label = "return instance_id"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "instantiate_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get SSH/SFTP IP address using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Docker on the VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "SFTPClient" - [label = "transfer a Docker image file to the VM if specified by request parameter"]; - "MgmtDriver" <-- "SFTPClient" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "run Private registry container on Docker"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./cir-k8s-cluster/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -401,77 +339,7 @@ ETSI NFV-SOL specification" [#SPEC-SOL-REST-API]_. Sequence for Heal Docker private registry VNF operation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenStackInfraDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "SFTPClient" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenStackInfraDriver" - [label = "execute OpenStackInfraDriver"]; - "OpenStackInfraDriver" -> "Heat" - [label = "resource mark unhealthy"]; - "OpenStackInfraDriver" <-- "Heat" - [label = ""]; - "OpenStackInfraDriver" -> "Heat" - [label = "update stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenStackInfraDriver" - [label = ""]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "heal_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get SSH/SFTP IP address using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get additionalParams of Instantiate VNF request"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Docker on the VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "SFTPClient" - [label = "transfer a Docker image file to the VM if specified by Instantiate VNF request parameter"]; - "MgmtDriver" <-- "SFTPClient" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "run Private registry container on Docker"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./cir-k8s-cluster/02.png The procedure consists of the following steps as illustrated in above sequence: @@ -697,82 +565,7 @@ The following is a sample of body provided in the Instantiate VNF request Sequence for Instantiate Kubernetes cluster VNF with Docker private registries ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenStackInfraDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "SFTPClient" - "NfvoPlugin" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenStackInfraDriver" - [label = "execute OpenStackInfraDriver"]; - "OpenStackInfraDriver" -> "Heat" - [label = "create stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = "return stack id"]; - "VnfLcmDriver" <-- "OpenStackInfraDriver" - [label = "return instance_id"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "instantiate_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get SSH/SFTP IP addresses and Kubernetes addresses using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes and create cluster on new Master/Worker VMs"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "get identification token from Kubernetes cluster"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "SFTPClient" - [label = "transfer CA certificate files to all Master/Worker VMs if specified by request parameter"]; - "MgmtDriver" <-- "SFTPClient" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "configure connections to the Docker private registries on all Master/Worker VMs"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "NfvoPlugin" - [label = "register Kubernetes VIM to tacker"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""] - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""] - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./cir-k8s-cluster/03.png The procedure consists of the following steps as illustrated in above sequence. @@ -854,76 +647,7 @@ Mgmtdriver" [#SPEC-K8S-SCALE]_. Sequence for Scale-out operation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenStackInfraDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "SFTPClient" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenStackInfraDriver" - [label = "execute OpenStackInfraDriver"]; - "OpenStackInfraDriver" -> "Heat" - [label = "resource signal"]; - "OpenStackInfraDriver" <-- "Heat" - [label = ""]; - "OpenStackInfraDriver" -> "Heat" - [label = "update stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenStackInfraDriver" - [label = ""]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "scale_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get the new VM info created by scale out operation"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes and join cluster on the new Worker VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get private_registry_connection_info of Instantiate VNF request"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "SFTPClient" - [label = "transfer CA certificate files to the new Worker VM if specified by Instantiate VNF request parameter"]; - "MgmtDriver" <-- "SFTPClient" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "configure connections to Docker private registries on the new Worker VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./cir-k8s-cluster/04.png The procedure consists of the following steps as illustrated in above sequence. @@ -1015,103 +739,7 @@ Mgmtdriver" [#SPEC-K8S-HEAL]_. Sequence for Healing (entire Kubernetes cluster) operation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenStackInfraDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "SFTPClient" - "NfvoPlugin" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "MgmtDriver" - [label = "heal_start"]; - "MgmtDriver" -> "NfvoPlugin" - [label = "delete the failed VIM information"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "Clear the old Kubernetes cluster information stored in the vim_connection_info of the VNF Instance"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - - "VnfLcmDriver" -> "OpenStackInfraDriver" - [label = "execute OpenStackInfraDriver"]; - "OpenStackInfraDriver" -> "Heat" - [label = "delete stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = ""]; - "OpenStackInfraDriver" -> "Heat" - [label = "create stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenStackInfraDriver" - [label = ""]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "heal_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get SSH/SFTP IP addresses and Kubernetes addresses using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes and create cluster on new Master/Worker VMs"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "get identification token from Kubernetes cluster"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get private_registry_connection_info of Instantiate VNF request"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "SFTPClient" - [label = "transfer CA certificate files to all Master/Worker VMs if specified by Instantiate VNF request parameter"]; - "MgmtDriver" <-- "SFTPClient" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "configure connections to Docker private registries on all Master/Worker VMs"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "NfvoPlugin" - [label = "register Kubernetes VIM to tacker"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""] - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""] - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./cir-k8s-cluster/05.png The procedure consists of the following steps as illustrated in above sequence. @@ -1199,104 +827,7 @@ Mgmtdriver" [#SPEC-K8S-HEAL]_. Sequence for Healing (single node) operation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenStackInfraDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "SFTPClient" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "MgmtDriver" - [label = "heal_start"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get the vim connection info"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "MgmtDriver" - [label = "get the vm info to be deleted by the request data"]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "(Worker only)evacuating the pod running on the failed VM to another worker node"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "remove the failed node from cluster"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "(Master only)remove the failed node from HA proxy"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - - "VnfLcmDriver" -> "OpenStackInfraDriver" - [label = "execute OpenStackInfraDriver"]; - "OpenStackInfraDriver" -> "Heat" - [label = "resource mark unhealthy"]; - "OpenStackInfraDriver" <-- "Heat" - [label = ""]; - "OpenStackInfraDriver" -> "Heat" - [label = "update stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = ""]; - "VnfLcmDriver" <-- "OpenStackInfraDriver" - [label = ""]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "heal_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get the new VM info created by Heal operation"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes and join cluster on the new VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "(Master only)Changes HA proxy configuration"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get private_registry_connection_info of Instantiate VNF request"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "SFTPClient" - [label = "transfer CA certificate files to the new VM if specified by Instantiate VNF request parameter"]; - "MgmtDriver" <-- "SFTPClient" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "configure connections to Docker private registries on the new VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./cir-k8s-cluster/06.png The procedure consists of the following steps as illustrated in above sequence. diff --git a/specs/xena/cir-k8s-cluster/01.diag b/specs/xena/cir-k8s-cluster/01.diag new file mode 100644 index 00000000..625082d7 --- /dev/null +++ b/specs/xena/cir-k8s-cluster/01.diag @@ -0,0 +1,62 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenStackInfraDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "SFTPClient" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenStackInfraDriver" + [label = "execute OpenStackInfraDriver"]; + "OpenStackInfraDriver" -> "Heat" + [label = "create stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = "return stack id"]; + "VnfLcmDriver" <-- "OpenStackInfraDriver" + [label = "return instance_id"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "instantiate_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get SSH/SFTP IP address using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Docker on the VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "SFTPClient" + [label = "transfer a Docker image file to the VM if specified by request parameter"]; + "MgmtDriver" <-- "SFTPClient" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "run Private registry container on Docker"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/cir-k8s-cluster/01.png b/specs/xena/cir-k8s-cluster/01.png new file mode 100644 index 00000000..c1c9efde Binary files /dev/null and b/specs/xena/cir-k8s-cluster/01.png differ diff --git a/specs/xena/cir-k8s-cluster/02.diag b/specs/xena/cir-k8s-cluster/02.diag new file mode 100644 index 00000000..9c79a5f2 --- /dev/null +++ b/specs/xena/cir-k8s-cluster/02.diag @@ -0,0 +1,70 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenStackInfraDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "SFTPClient" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenStackInfraDriver" + [label = "execute OpenStackInfraDriver"]; + "OpenStackInfraDriver" -> "Heat" + [label = "resource mark unhealthy"]; + "OpenStackInfraDriver" <-- "Heat" + [label = ""]; + "OpenStackInfraDriver" -> "Heat" + [label = "update stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenStackInfraDriver" + [label = ""]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "heal_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get SSH/SFTP IP address using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get additionalParams of Instantiate VNF request"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Docker on the VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "SFTPClient" + [label = "transfer a Docker image file to the VM if specified by Instantiate VNF request parameter"]; + "MgmtDriver" <-- "SFTPClient" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "run Private registry container on Docker"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/cir-k8s-cluster/02.png b/specs/xena/cir-k8s-cluster/02.png new file mode 100644 index 00000000..93a0620c Binary files /dev/null and b/specs/xena/cir-k8s-cluster/02.png differ diff --git a/specs/xena/cir-k8s-cluster/03.diag b/specs/xena/cir-k8s-cluster/03.diag new file mode 100644 index 00000000..600ae5df --- /dev/null +++ b/specs/xena/cir-k8s-cluster/03.diag @@ -0,0 +1,75 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenStackInfraDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "SFTPClient" + "NfvoPlugin" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenStackInfraDriver" + [label = "execute OpenStackInfraDriver"]; + "OpenStackInfraDriver" -> "Heat" + [label = "create stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = "return stack id"]; + "VnfLcmDriver" <-- "OpenStackInfraDriver" + [label = "return instance_id"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "instantiate_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get SSH/SFTP IP addresses and Kubernetes addresses using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes and create cluster on new Master/Worker VMs"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "get identification token from Kubernetes cluster"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "SFTPClient" + [label = "transfer CA certificate files to all Master/Worker VMs if specified by request parameter"]; + "MgmtDriver" <-- "SFTPClient" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "configure connections to the Docker private registries on all Master/Worker VMs"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "NfvoPlugin" + [label = "register Kubernetes VIM to tacker"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""] + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""] + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/cir-k8s-cluster/03.png b/specs/xena/cir-k8s-cluster/03.png new file mode 100644 index 00000000..70313fee Binary files /dev/null and b/specs/xena/cir-k8s-cluster/03.png differ diff --git a/specs/xena/cir-k8s-cluster/04.diag b/specs/xena/cir-k8s-cluster/04.diag new file mode 100644 index 00000000..3177adc2 --- /dev/null +++ b/specs/xena/cir-k8s-cluster/04.diag @@ -0,0 +1,69 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenStackInfraDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "SFTPClient" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenStackInfraDriver" + [label = "execute OpenStackInfraDriver"]; + "OpenStackInfraDriver" -> "Heat" + [label = "resource signal"]; + "OpenStackInfraDriver" <-- "Heat" + [label = ""]; + "OpenStackInfraDriver" -> "Heat" + [label = "update stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenStackInfraDriver" + [label = ""]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "scale_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get the new VM info created by scale out operation"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes and join cluster on the new Worker VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get private_registry_connection_info of Instantiate VNF request"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "SFTPClient" + [label = "transfer CA certificate files to the new Worker VM if specified by Instantiate VNF request parameter"]; + "MgmtDriver" <-- "SFTPClient" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "configure connections to Docker private registries on the new Worker VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/cir-k8s-cluster/04.png b/specs/xena/cir-k8s-cluster/04.png new file mode 100644 index 00000000..02a96d6d Binary files /dev/null and b/specs/xena/cir-k8s-cluster/04.png differ diff --git a/specs/xena/cir-k8s-cluster/05.diag b/specs/xena/cir-k8s-cluster/05.diag new file mode 100644 index 00000000..4a89859d --- /dev/null +++ b/specs/xena/cir-k8s-cluster/05.diag @@ -0,0 +1,96 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenStackInfraDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "SFTPClient" + "NfvoPlugin" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "MgmtDriver" + [label = "heal_start"]; + "MgmtDriver" -> "NfvoPlugin" + [label = "delete the failed VIM information"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "Clear the old Kubernetes cluster information stored in the vim_connection_info of the VNF Instance"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + + "VnfLcmDriver" -> "OpenStackInfraDriver" + [label = "execute OpenStackInfraDriver"]; + "OpenStackInfraDriver" -> "Heat" + [label = "delete stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = ""]; + "OpenStackInfraDriver" -> "Heat" + [label = "create stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenStackInfraDriver" + [label = ""]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "heal_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get SSH/SFTP IP addresses and Kubernetes addresses using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes and create cluster on new Master/Worker VMs"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "get identification token from Kubernetes cluster"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get private_registry_connection_info of Instantiate VNF request"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "SFTPClient" + [label = "transfer CA certificate files to all Master/Worker VMs if specified by Instantiate VNF request parameter"]; + "MgmtDriver" <-- "SFTPClient" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "configure connections to Docker private registries on all Master/Worker VMs"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "NfvoPlugin" + [label = "register Kubernetes VIM to tacker"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""] + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""] + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/cir-k8s-cluster/05.png b/specs/xena/cir-k8s-cluster/05.png new file mode 100644 index 00000000..212afbe0 Binary files /dev/null and b/specs/xena/cir-k8s-cluster/05.png differ diff --git a/specs/xena/cir-k8s-cluster/06.diag b/specs/xena/cir-k8s-cluster/06.diag new file mode 100644 index 00000000..8ff761e2 --- /dev/null +++ b/specs/xena/cir-k8s-cluster/06.diag @@ -0,0 +1,97 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenStackInfraDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "SFTPClient" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "MgmtDriver" + [label = "heal_start"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get the vim connection info"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "MgmtDriver" + [label = "get the vm info to be deleted by the request data"]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "(Worker only)evacuating the pod running on the failed VM to another worker node"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "remove the failed node from cluster"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "(Master only)remove the failed node from HA proxy"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + + "VnfLcmDriver" -> "OpenStackInfraDriver" + [label = "execute OpenStackInfraDriver"]; + "OpenStackInfraDriver" -> "Heat" + [label = "resource mark unhealthy"]; + "OpenStackInfraDriver" <-- "Heat" + [label = ""]; + "OpenStackInfraDriver" -> "Heat" + [label = "update stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = ""]; + "VnfLcmDriver" <-- "OpenStackInfraDriver" + [label = ""]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "heal_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get the new VM info created by Heal operation"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes and join cluster on the new VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "(Master only)Changes HA proxy configuration"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get private_registry_connection_info of Instantiate VNF request"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "SFTPClient" + [label = "transfer CA certificate files to the new VM if specified by Instantiate VNF request parameter"]; + "MgmtDriver" <-- "SFTPClient" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "configure connections to Docker private registries on the new VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/cir-k8s-cluster/06.png b/specs/xena/cir-k8s-cluster/06.png new file mode 100644 index 00000000..692dbf07 Binary files /dev/null and b/specs/xena/cir-k8s-cluster/06.png differ diff --git a/specs/xena/helmchart-k8s-vim.rst b/specs/xena/helmchart-k8s-vim.rst index 0d42390b..c5cd8285 100644 --- a/specs/xena/helmchart-k8s-vim.rst +++ b/specs/xena/helmchart-k8s-vim.rst @@ -157,61 +157,7 @@ When MgmtDriver invokes ``instantiate_end``, following steps are added: Following sequence diagram describes the components involved and the flow of install Helm with MgmtDriver operation: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "MgmtDriver" - "OpenStackInfraDriver" - "MasterNode" - "TackerDB" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "Trigger asynchronous task"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "Execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenStackInfraDriver" - [label = "instantiate_vnf()"]; - "OpenStackInfraDriver" -> "Heat" - [label = "Create stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = "Return stack id"]; - "VnfLcmDriver" <-- "OpenStackInfraDriver" - [label = "return instance_id"]; - "VnfLcmDriver" -> "MgmtDriver" - [label = "instantiate_end()"]; - "MgmtDriver" -> "Heat" - [label = "Get ssh ip address and Kubernetes address using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "MasterNode" - [label = "Install Kubernetes by script"]; - "MgmtDriver" <-- "MasterNode" - [label = ""]; - "MgmtDriver" -> "MasterNode" - [label = "Install Helm by script"]; - "MgmtDriver" <-- "MasterNode" - [label = ""]; - "MgmtDriver"-> "TackerDB" - [label = "Add MasterNode access information to vim_connection_info table"] - "MgmtDriver" <-- "TackerDB" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./helmchart-k8s-vim/01.png The procedure consists of the following steps as illustrated in above sequence. @@ -445,73 +391,7 @@ The diagram below shows the Instantiate operation with Helm chart: Following sequence diagram describes CNF instantiation with Helm chart: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "KubernetesInfraDriver" - "TackerDB" - "Kubernetes client" - "Helm(MasterNode)" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "KubernetesInfraDriver" - [label = "execute KubernetesInfraDriver"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "get package info"]; - "KubernetesInfraDriver" <-- "TackerDB" - [label = "return package info"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "get MasterNode access information"]; - "KubernetesInfraDriver" <-- "TackerDB" - [label = "return MasterNode access information"]; - "KubernetesInfraDriver" -> "Helm(MasterNode)" - [label = "put Helm chart"]; - "KubernetesInfraDriver" <-- "Helm(MasterNode)" - [label = ""]; - "KubernetesInfraDriver" -> "Helm(MasterNode)" - [label = "create repository of Helm chart"]; - "KubernetesInfraDriver" <-- "Helm(MasterNode)" - [label = ""]; - "KubernetesInfraDriver" -> "Helm(MasterNode)" - [label = "Kubernetes resource create by helm chart"]; - "KubernetesInfraDriver" <-- "Helm(MasterNode)" - [label = ""] - "KubernetesInfraDriver" -> "Helm(MasterNode)" - [label = "get manifest information"] - "KubernetesInfraDriver" <-- "Helm(MasterNode)" - [label = "return manifest information"] - "KubernetesInfraDriver" -> "TackerDB" - [label = "save manifest information"] - "KubernetesInfraDriver" <-- "TackerDB" - [label = ""] - "KubernetesInfraDriver" -> "Kubernetes client" - [label = "get pod status"] - "KubernetesInfraDriver" <-- "Kubernetes client" - [label = "return pod status"] - "KubernetesInfraDriver" -> "TackerDB" - [label = "save pod information"] - "KubernetesInfraDriver" <-- "TackerDB" - [label = ""] - "VnfLcmDriver" <-- "KubernetesInfraDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./helmchart-k8s-vim/02.png #. The Client sends an instantiate request. diff --git a/specs/xena/helmchart-k8s-vim/01.diag b/specs/xena/helmchart-k8s-vim/01.diag new file mode 100644 index 00000000..b7ac9c63 --- /dev/null +++ b/specs/xena/helmchart-k8s-vim/01.diag @@ -0,0 +1,54 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "MgmtDriver" + "OpenStackInfraDriver" + "MasterNode" + "TackerDB" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "Trigger asynchronous task"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "Execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenStackInfraDriver" + [label = "instantiate_vnf()"]; + "OpenStackInfraDriver" -> "Heat" + [label = "Create stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = "Return stack id"]; + "VnfLcmDriver" <-- "OpenStackInfraDriver" + [label = "return instance_id"]; + "VnfLcmDriver" -> "MgmtDriver" + [label = "instantiate_end()"]; + "MgmtDriver" -> "Heat" + [label = "Get ssh ip address and Kubernetes address using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "MasterNode" + [label = "Install Kubernetes by script"]; + "MgmtDriver" <-- "MasterNode" + [label = ""]; + "MgmtDriver" -> "MasterNode" + [label = "Install Helm by script"]; + "MgmtDriver" <-- "MasterNode" + [label = ""]; + "MgmtDriver"-> "TackerDB" + [label = "Add MasterNode access information to vim_connection_info table"] + "MgmtDriver" <-- "TackerDB" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/helmchart-k8s-vim/01.png b/specs/xena/helmchart-k8s-vim/01.png new file mode 100644 index 00000000..e9bb45c1 Binary files /dev/null and b/specs/xena/helmchart-k8s-vim/01.png differ diff --git a/specs/xena/helmchart-k8s-vim/02.diag b/specs/xena/helmchart-k8s-vim/02.diag new file mode 100644 index 00000000..6b2319be --- /dev/null +++ b/specs/xena/helmchart-k8s-vim/02.diag @@ -0,0 +1,66 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "KubernetesInfraDriver" + "TackerDB" + "Kubernetes client" + "Helm(MasterNode)" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "KubernetesInfraDriver" + [label = "execute KubernetesInfraDriver"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "get package info"]; + "KubernetesInfraDriver" <-- "TackerDB" + [label = "return package info"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "get MasterNode access information"]; + "KubernetesInfraDriver" <-- "TackerDB" + [label = "return MasterNode access information"]; + "KubernetesInfraDriver" -> "Helm(MasterNode)" + [label = "put Helm chart"]; + "KubernetesInfraDriver" <-- "Helm(MasterNode)" + [label = ""]; + "KubernetesInfraDriver" -> "Helm(MasterNode)" + [label = "create repository of Helm chart"]; + "KubernetesInfraDriver" <-- "Helm(MasterNode)" + [label = ""]; + "KubernetesInfraDriver" -> "Helm(MasterNode)" + [label = "Kubernetes resource create by helm chart"]; + "KubernetesInfraDriver" <-- "Helm(MasterNode)" + [label = ""] + "KubernetesInfraDriver" -> "Helm(MasterNode)" + [label = "get manifest information"] + "KubernetesInfraDriver" <-- "Helm(MasterNode)" + [label = "return manifest information"] + "KubernetesInfraDriver" -> "TackerDB" + [label = "save manifest information"] + "KubernetesInfraDriver" <-- "TackerDB" + [label = ""] + "KubernetesInfraDriver" -> "Kubernetes client" + [label = "get pod status"] + "KubernetesInfraDriver" <-- "Kubernetes client" + [label = "return pod status"] + "KubernetesInfraDriver" -> "TackerDB" + [label = "save pod information"] + "KubernetesInfraDriver" <-- "TackerDB" + [label = ""] + "VnfLcmDriver" <-- "KubernetesInfraDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/helmchart-k8s-vim/02.png b/specs/xena/helmchart-k8s-vim/02.png new file mode 100644 index 00000000..ae0cec22 Binary files /dev/null and b/specs/xena/helmchart-k8s-vim/02.png differ diff --git a/specs/xena/k8s-mgmtdriver-kubespray.rst b/specs/xena/k8s-mgmtdriver-kubespray.rst index cea5ac21..c8b0ea90 100644 --- a/specs/xena/k8s-mgmtdriver-kubespray.rst +++ b/specs/xena/k8s-mgmtdriver-kubespray.rst @@ -227,84 +227,7 @@ The following depicts the diagram of instantiate process of Kubernetes cluster: .. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenstackDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "Ansible" - "NfvoPlugin" - - Client -> "Tacker-server" - [label = "1. POST /vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "2. Trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "3. Execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenstackDriver" - [label = "4. Execute OpenstackDriver"]; - "OpenstackDriver" -> "Heat" - [label = "5. Create stack"]; - "OpenstackDriver" <-- "Heat" - [label = "Return stack id"]; - "VnfLcmDriver" <-- "OpenstackDriver" - [label = "Return instance_id"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "6. Instantiate_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "7. Get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "8. Get SSH IP address"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "MgmtDriver" - [label = "9. Generate a new inventory file"]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "10. Call Ansible via SSH"]; - "RemoteCommandExecutor" -> "Ansible" - [label = "11. Run playbooks"]; - "RemoteCommandExecutor" <-- "Ansible" - [label = ""]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "12. Get access info of Kubernetes cluster"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "NfvoPlugin" - [label = "13. Register Kubernetes VIM to tacker"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "14. Update VimConnectionInfo with access info of Kubernetes cluster"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "15. Install and configure ExternalLB"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./k8s-mgmtdriver-kubespray/01.png New steps are required in ``instantiate_end()`` method of MgmtDriver to "VNF-A: Create VMs and set up Kubernetes cluster (Kube-adm)" chapter of diff --git a/specs/xena/k8s-mgmtdriver-kubespray/01.diag b/specs/xena/k8s-mgmtdriver-kubespray/01.diag new file mode 100644 index 00000000..68d6cfa8 --- /dev/null +++ b/specs/xena/k8s-mgmtdriver-kubespray/01.diag @@ -0,0 +1,77 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenstackDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "Ansible" + "NfvoPlugin" + + Client -> "Tacker-server" + [label = "1. POST /vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "2. Trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "3. Execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenstackDriver" + [label = "4. Execute OpenstackDriver"]; + "OpenstackDriver" -> "Heat" + [label = "5. Create stack"]; + "OpenstackDriver" <-- "Heat" + [label = "Return stack id"]; + "VnfLcmDriver" <-- "OpenstackDriver" + [label = "Return instance_id"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "6. Instantiate_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "7. Get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "8. Get SSH IP address"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "MgmtDriver" + [label = "9. Generate a new inventory file"]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "10. Call Ansible via SSH"]; + "RemoteCommandExecutor" -> "Ansible" + [label = "11. Run playbooks"]; + "RemoteCommandExecutor" <-- "Ansible" + [label = ""]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "12. Get access info of Kubernetes cluster"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "NfvoPlugin" + [label = "13. Register Kubernetes VIM to tacker"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "14. Update VimConnectionInfo with access info of Kubernetes cluster"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "15. Install and configure ExternalLB"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/k8s-mgmtdriver-kubespray/01.png b/specs/xena/k8s-mgmtdriver-kubespray/01.png new file mode 100644 index 00000000..d9a2ca83 Binary files /dev/null and b/specs/xena/k8s-mgmtdriver-kubespray/01.png differ diff --git a/specs/xena/multi-version-api.rst b/specs/xena/multi-version-api.rst index ea5ef9c0..f5ec3512 100644 --- a/specs/xena/multi-version-api.rst +++ b/specs/xena/multi-version-api.rst @@ -272,63 +272,7 @@ the case in VnflcmDriver to re-use the same logics in different API versions. Sequence of multi-version API ----------------------------- -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 115; - - "Client" - "Controller" - "Conductor" - "VnflcmDriver" - "InfraDriver" - "CommonUtils" - "Database" - - Client -> Controller - [label = "HTTP request (e.g. VNF Lifecycle Management)"]; - Controller -> CommonUtils - [label = "Process common logic"]; - Controller <-- CommonUtils - [label = ""]; - Controller -> Database - [label = "Validate request with appropriate API version"]; - Controller <-- Database - [label = ""]; - Controller -> Database - [label = "Create VnfLcmOpOcc(STARTING)"]; - Controller <-- Database - [label = ""]; - Controller -> Conductor - [label = "Send RPC"]; - Client <-- Controller - [label = "202 Accepted"] - Conductor -> VnflcmDriver - [label = "Invoke VnflcmDriver with appropriate API version"]; - VnflcmDriver -> CommonUtils - [label = "Process common logic"]; - VnflcmDriver <-- CommonUtils - [label = ""]; - VnflcmDriver -> Database - [label = "Update VnfLcmOpOcc(PROCESSING)"]; - VnflcmDriver <-- Database - [label = ""]; - VnflcmDriver -> InfraDriver - [label = "Invoke InfraDriver with appropriate API version"]; - VnflcmDriver <-- InfraDriver - [label = ""]; - VnflcmDriver -> CommonUtils - [label = "Process common logic"]; - VnflcmDriver <-- CommonUtils - [label = ""]; - VnflcmDriver -> Database - [label = "Update VnfLcmOpOcc(COMPLETED)"]; - VnflcmDriver <-- Database - [label = ""]; - Conductor <-- VnflcmDriver - [label = ""]; - } +.. image:: ./multi-version-api/01.png #. Client sends HTTP request (e.g. `POST vnflcm/v2/vnf_instances/instantiate`) diff --git a/specs/xena/multi-version-api/01.diag b/specs/xena/multi-version-api/01.diag new file mode 100644 index 00000000..4b0d8227 --- /dev/null +++ b/specs/xena/multi-version-api/01.diag @@ -0,0 +1,56 @@ + + seqdiag { + node_width = 100; + edge_length = 115; + + "Client" + "Controller" + "Conductor" + "VnflcmDriver" + "InfraDriver" + "CommonUtils" + "Database" + + Client -> Controller + [label = "HTTP request (e.g. VNF Lifecycle Management)"]; + Controller -> CommonUtils + [label = "Process common logic"]; + Controller <-- CommonUtils + [label = ""]; + Controller -> Database + [label = "Validate request with appropriate API version"]; + Controller <-- Database + [label = ""]; + Controller -> Database + [label = "Create VnfLcmOpOcc(STARTING)"]; + Controller <-- Database + [label = ""]; + Controller -> Conductor + [label = "Send RPC"]; + Client <-- Controller + [label = "202 Accepted"] + Conductor -> VnflcmDriver + [label = "Invoke VnflcmDriver with appropriate API version"]; + VnflcmDriver -> CommonUtils + [label = "Process common logic"]; + VnflcmDriver <-- CommonUtils + [label = ""]; + VnflcmDriver -> Database + [label = "Update VnfLcmOpOcc(PROCESSING)"]; + VnflcmDriver <-- Database + [label = ""]; + VnflcmDriver -> InfraDriver + [label = "Invoke InfraDriver with appropriate API version"]; + VnflcmDriver <-- InfraDriver + [label = ""]; + VnflcmDriver -> CommonUtils + [label = "Process common logic"]; + VnflcmDriver <-- CommonUtils + [label = ""]; + VnflcmDriver -> Database + [label = "Update VnfLcmOpOcc(COMPLETED)"]; + VnflcmDriver <-- Database + [label = ""]; + Conductor <-- VnflcmDriver + [label = ""]; + } diff --git a/specs/xena/multi-version-api/01.png b/specs/xena/multi-version-api/01.png new file mode 100644 index 00000000..9272ad61 Binary files /dev/null and b/specs/xena/multi-version-api/01.png differ diff --git a/specs/xena/pv-k8s-cluster.rst b/specs/xena/pv-k8s-cluster.rst index 906af9f4..e9625e17 100644 --- a/specs/xena/pv-k8s-cluster.rst +++ b/specs/xena/pv-k8s-cluster.rst @@ -434,98 +434,7 @@ The following is a sample of body provided in the Instantiate VNF request Sequence for Instantiate Kubernetes cluster with PersistentVolumes ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "OpenStackInfraDriver" - "Heat" - "MgmtDriver" - "VnfInstance(Tacker DB)" - "RemoteCommandExecutor" - "SFTPClient" - "NfvoPlugin" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "OpenStackInfraDriver" - [label = "execute OpenStackInfraDriver"]; - "OpenStackInfraDriver" -> "Heat" - [label = "create stack"]; - "OpenStackInfraDriver" <-- "Heat" - [label = "return stack id"]; - "VnfLcmDriver" <-- "OpenStackInfraDriver" - [label = "return instance_id"]; - - "VnfLcmDriver" -> "MgmtDriver" - [label = "instantiate_end"]; - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "get stack id"]; - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""]; - "MgmtDriver" -> "Heat" - [label = "get SSH/SFTP IP addresses and Kubernetes addresses using stack id"]; - "MgmtDriver" <-- "Heat" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install Kubernetes and create cluster on Master/Worker VMs"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "get identification token from Kubernetes cluster"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "set up Cinder volume directories on the Storage server VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install NFS server and set up NFS exports on the Storage server VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "install NFS client on all Master/Worker VMs"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "SFTPClient" - [label = "transfer manifest files for Kubernetes PersistentVolumes to the Master VM"]; - "MgmtDriver" <-- "SFTPClient" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "replace the NFS server IP address in manifest files for Kubernetes PersistentVolumes"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "RemoteCommandExecutor" - [label = "register Kubernetes PersistentVolumes on the Master VM"]; - "MgmtDriver" <-- "RemoteCommandExecutor" - [label = ""]; - "MgmtDriver" -> "NfvoPlugin" - [label = "register Kubernetes VIM to tacker"]; - "MgmtDriver" <-- "NfvoPlugin" - [label = ""] - "MgmtDriver" -> "VnfInstance(Tacker DB)" - [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] - "MgmtDriver" <-- "VnfInstance(Tacker DB)" - [label = ""] - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - - } +.. image:: ./pv-k8s-cluster/01.png The procedure consists of the following steps as illustrated in above sequence. diff --git a/specs/xena/pv-k8s-cluster/01.diag b/specs/xena/pv-k8s-cluster/01.diag new file mode 100644 index 00000000..052fd265 --- /dev/null +++ b/specs/xena/pv-k8s-cluster/01.diag @@ -0,0 +1,91 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "OpenStackInfraDriver" + "Heat" + "MgmtDriver" + "VnfInstance(Tacker DB)" + "RemoteCommandExecutor" + "SFTPClient" + "NfvoPlugin" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "OpenStackInfraDriver" + [label = "execute OpenStackInfraDriver"]; + "OpenStackInfraDriver" -> "Heat" + [label = "create stack"]; + "OpenStackInfraDriver" <-- "Heat" + [label = "return stack id"]; + "VnfLcmDriver" <-- "OpenStackInfraDriver" + [label = "return instance_id"]; + + "VnfLcmDriver" -> "MgmtDriver" + [label = "instantiate_end"]; + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "get stack id"]; + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""]; + "MgmtDriver" -> "Heat" + [label = "get SSH/SFTP IP addresses and Kubernetes addresses using stack id"]; + "MgmtDriver" <-- "Heat" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install Kubernetes and create cluster on Master/Worker VMs"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "get identification token from Kubernetes cluster"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "set up Cinder volume directories on the Storage server VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install NFS server and set up NFS exports on the Storage server VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "install NFS client on all Master/Worker VMs"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "SFTPClient" + [label = "transfer manifest files for Kubernetes PersistentVolumes to the Master VM"]; + "MgmtDriver" <-- "SFTPClient" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "replace the NFS server IP address in manifest files for Kubernetes PersistentVolumes"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "RemoteCommandExecutor" + [label = "register Kubernetes PersistentVolumes on the Master VM"]; + "MgmtDriver" <-- "RemoteCommandExecutor" + [label = ""]; + "MgmtDriver" -> "NfvoPlugin" + [label = "register Kubernetes VIM to tacker"]; + "MgmtDriver" <-- "NfvoPlugin" + [label = ""] + "MgmtDriver" -> "VnfInstance(Tacker DB)" + [label = "append Kubernetes cluster VIM info to VimConnectionInfo"] + "MgmtDriver" <-- "VnfInstance(Tacker DB)" + [label = ""] + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + + } diff --git a/specs/xena/pv-k8s-cluster/01.png b/specs/xena/pv-k8s-cluster/01.png new file mode 100644 index 00000000..e0cad5cf Binary files /dev/null and b/specs/xena/pv-k8s-cluster/01.png differ diff --git a/specs/xena/support-nfv-solv3-get-information.rst b/specs/xena/support-nfv-solv3-get-information.rst index c0d43271..b4a751ee 100644 --- a/specs/xena/support-nfv-solv3-get-information.rst +++ b/specs/xena/support-nfv-solv3-get-information.rst @@ -73,12 +73,7 @@ flow of v1 API and that of v2 API. * List VNF Instances (GET /vnf_instances) -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = "GET /vnflcm/v2/vnf_instances"]; - Client <-- "tacker-server" [label = "Response 200 OK (VnfInstance[])"]; - } +.. image:: ./support-nfv-solv3-get-information/01.png The procedure consists of the following steps as illustrated in the above sequence: @@ -92,12 +87,7 @@ Precondition: The resource representing the VNF instance has been created. * Show VNF (GET /vnf_instances/{vnfInstanceId}) -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = "GET /vnflcm/v2/vnf_instances/vnf_instanceId"]; - Client <-- "tacker-server" [label = "Response 200 OK (VnfInstance)"]; - } +.. image:: ./support-nfv-solv3-get-information/02.png The procedure consists of the following steps as illustrated in the above sequence: @@ -116,13 +106,7 @@ Precondition: The resource representing the VNF instance has been created. * List VNF occurrence (GET /vnf_lcm_op_occs) -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnflcm/v2/vnf_lcm_op_occs"]; - "tacker-server" -> "tacker-server" [label = "request validation"]; - Client <-- "tacker-server" [label = " Response 200 OK"]; - } +.. image:: ./support-nfv-solv3-get-information/03.png The procedure consists of the following steps as illustrated in the above sequence: @@ -136,12 +120,7 @@ The procedure consists of the following steps as illustrated in the above sequen * Show VNF occurrence (GET /vnf_lcm_op_occs/{vnfLcmOpOccId}) -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}"]; - Client <-- "tacker-server" [label = " Response 200 OK"]; - } +.. image:: ./support-nfv-solv3-get-information/04.png The procedure consists of the following steps as illustrated in the above sequence: @@ -159,16 +138,7 @@ The procedure consists of the following steps as illustrated in the above sequen * Create Subscriptions (POST /subscriptions) * Test Notification endpoint (GET) -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " POST /vnflcm/v2/subscriptions"]; - "tacker-server" -> Client [label = " GET {callback URI}"]; - "tacker-server" <-- Client [label = " Response 204 No Content"]; - "tacker-server" -> "tacker-server" - [label = " generate subscription_id (uuid)"]; - Client <-- "tacker-server" [label = " Response 201 Created"]; - } +.. image:: ./support-nfv-solv3-get-information/05.png The procedure consists of the following steps as illustrated in the above sequence: @@ -181,13 +151,7 @@ The procedure consists of the following steps as illustrated in the above sequen * List Subscriptions (GET /subscriptions) -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnflcm/v2/subscriptions"]; - "tacker-server" -> "tacker-server" [label = "request validation"]; - Client <-- "tacker-server" [label = " Response 200 OK"]; - } +.. image:: ./support-nfv-solv3-get-information/06.png The procedure consists of the following steps as illustrated in the above sequence: @@ -199,12 +163,7 @@ The procedure consists of the following steps as illustrated in the above sequen * Show Subscriptions (GET /subscriptions/{subscriptionId}) -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = " GET /vnflcm/v2/subscriptions/{subscriptionId}"]; - Client <-- "tacker-server" [label = " Response 200 OK"]; - } +.. image:: ./support-nfv-solv3-get-information/07.png The procedure consists of the following steps as illustrated in the above sequence: @@ -217,13 +176,7 @@ The procedure consists of the following steps as illustrated in the above sequen * Delete Subscriptions (DELETE /subscriptions/{subscriptionId}) -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" - [label = " DELETE /vnflcm/v2/subscriptions/{subscriptionId}"]; - Client <-- "tacker-server" [label = " Response 204 No Content"]; - } +.. image:: ./support-nfv-solv3-get-information/08.png The procedure consists of the following steps as illustrated in the above sequence: diff --git a/specs/xena/support-nfv-solv3-get-information/01.diag b/specs/xena/support-nfv-solv3-get-information/01.diag new file mode 100644 index 00000000..1147d041 --- /dev/null +++ b/specs/xena/support-nfv-solv3-get-information/01.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = "GET /vnflcm/v2/vnf_instances"]; + Client <-- "tacker-server" [label = "Response 200 OK (VnfInstance[])"]; + } diff --git a/specs/xena/support-nfv-solv3-get-information/01.png b/specs/xena/support-nfv-solv3-get-information/01.png new file mode 100644 index 00000000..69581365 Binary files /dev/null and b/specs/xena/support-nfv-solv3-get-information/01.png differ diff --git a/specs/xena/support-nfv-solv3-get-information/02.diag b/specs/xena/support-nfv-solv3-get-information/02.diag new file mode 100644 index 00000000..10a22064 --- /dev/null +++ b/specs/xena/support-nfv-solv3-get-information/02.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = "GET /vnflcm/v2/vnf_instances/vnf_instanceId"]; + Client <-- "tacker-server" [label = "Response 200 OK (VnfInstance)"]; + } diff --git a/specs/xena/support-nfv-solv3-get-information/02.png b/specs/xena/support-nfv-solv3-get-information/02.png new file mode 100644 index 00000000..ecffe52f Binary files /dev/null and b/specs/xena/support-nfv-solv3-get-information/02.png differ diff --git a/specs/xena/support-nfv-solv3-get-information/03.diag b/specs/xena/support-nfv-solv3-get-information/03.diag new file mode 100644 index 00000000..3bed00d4 --- /dev/null +++ b/specs/xena/support-nfv-solv3-get-information/03.diag @@ -0,0 +1,6 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnflcm/v2/vnf_lcm_op_occs"]; + "tacker-server" -> "tacker-server" [label = "request validation"]; + Client <-- "tacker-server" [label = " Response 200 OK"]; + } diff --git a/specs/xena/support-nfv-solv3-get-information/03.png b/specs/xena/support-nfv-solv3-get-information/03.png new file mode 100644 index 00000000..775debd2 Binary files /dev/null and b/specs/xena/support-nfv-solv3-get-information/03.png differ diff --git a/specs/xena/support-nfv-solv3-get-information/04.diag b/specs/xena/support-nfv-solv3-get-information/04.diag new file mode 100644 index 00000000..5a401515 --- /dev/null +++ b/specs/xena/support-nfv-solv3-get-information/04.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}"]; + Client <-- "tacker-server" [label = " Response 200 OK"]; + } diff --git a/specs/xena/support-nfv-solv3-get-information/04.png b/specs/xena/support-nfv-solv3-get-information/04.png new file mode 100644 index 00000000..caf5b43f Binary files /dev/null and b/specs/xena/support-nfv-solv3-get-information/04.png differ diff --git a/specs/xena/support-nfv-solv3-get-information/05.diag b/specs/xena/support-nfv-solv3-get-information/05.diag new file mode 100644 index 00000000..b4681593 --- /dev/null +++ b/specs/xena/support-nfv-solv3-get-information/05.diag @@ -0,0 +1,9 @@ + + seqdiag { + Client -> "tacker-server" [label = " POST /vnflcm/v2/subscriptions"]; + "tacker-server" -> Client [label = " GET {callback URI}"]; + "tacker-server" <-- Client [label = " Response 204 No Content"]; + "tacker-server" -> "tacker-server" + [label = " generate subscription_id (uuid)"]; + Client <-- "tacker-server" [label = " Response 201 Created"]; + } diff --git a/specs/xena/support-nfv-solv3-get-information/05.png b/specs/xena/support-nfv-solv3-get-information/05.png new file mode 100644 index 00000000..213f5391 Binary files /dev/null and b/specs/xena/support-nfv-solv3-get-information/05.png differ diff --git a/specs/xena/support-nfv-solv3-get-information/06.diag b/specs/xena/support-nfv-solv3-get-information/06.diag new file mode 100644 index 00000000..b376e400 --- /dev/null +++ b/specs/xena/support-nfv-solv3-get-information/06.diag @@ -0,0 +1,6 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnflcm/v2/subscriptions"]; + "tacker-server" -> "tacker-server" [label = "request validation"]; + Client <-- "tacker-server" [label = " Response 200 OK"]; + } diff --git a/specs/xena/support-nfv-solv3-get-information/06.png b/specs/xena/support-nfv-solv3-get-information/06.png new file mode 100644 index 00000000..96ca42cf Binary files /dev/null and b/specs/xena/support-nfv-solv3-get-information/06.png differ diff --git a/specs/xena/support-nfv-solv3-get-information/07.diag b/specs/xena/support-nfv-solv3-get-information/07.diag new file mode 100644 index 00000000..00c49201 --- /dev/null +++ b/specs/xena/support-nfv-solv3-get-information/07.diag @@ -0,0 +1,5 @@ + + seqdiag { + Client -> "tacker-server" [label = " GET /vnflcm/v2/subscriptions/{subscriptionId}"]; + Client <-- "tacker-server" [label = " Response 200 OK"]; + } diff --git a/specs/xena/support-nfv-solv3-get-information/07.png b/specs/xena/support-nfv-solv3-get-information/07.png new file mode 100644 index 00000000..317e7c79 Binary files /dev/null and b/specs/xena/support-nfv-solv3-get-information/07.png differ diff --git a/specs/xena/support-nfv-solv3-get-information/08.diag b/specs/xena/support-nfv-solv3-get-information/08.diag new file mode 100644 index 00000000..af21c53e --- /dev/null +++ b/specs/xena/support-nfv-solv3-get-information/08.diag @@ -0,0 +1,6 @@ + + seqdiag { + Client -> "tacker-server" + [label = " DELETE /vnflcm/v2/subscriptions/{subscriptionId}"]; + Client <-- "tacker-server" [label = " Response 204 No Content"]; + } diff --git a/specs/xena/support-nfv-solv3-get-information/08.png b/specs/xena/support-nfv-solv3-get-information/08.png new file mode 100644 index 00000000..ef81b58f Binary files /dev/null and b/specs/xena/support-nfv-solv3-get-information/08.png differ diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf.rst b/specs/xena/support-nfv-solv3-start-and-terminate-vnf.rst index 3605363c..9f1ba7f1 100644 --- a/specs/xena/support-nfv-solv3-start-and-terminate-vnf.rst +++ b/specs/xena/support-nfv-solv3-start-and-terminate-vnf.rst @@ -53,14 +53,7 @@ The following are sample APIs supported by this interface. 1) Flow of creation of a VNF instance resource ---------------------------------------------- -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" [label = "POST /vnflcm/v2/vnf_instances"]; - "tacker-server" ->> "tacker-server" - [label = "Create VNF instance resource"]; - Client <-- "tacker-server" [label = "Response 201 Created"]; - } +.. image:: ./support-nfv-solv3-start-and-terminate-vnf/01.png #. Client sends a Create VNF request with the API major version included in URI is "v2". @@ -76,23 +69,7 @@ process as described in the SPEC `support-notification-api-based-on-etsi-nfv-sol 2) Flow of Instantiation of a VNF instance ------------------------------------------ -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; MgmtDriver; VnfLcmDriver; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; - "tacker-conductor" <-- "MgmtDriver" [label = ""]; - } +.. image:: ./support-nfv-solv3-start-and-terminate-vnf/02.png #. Client sends an Instantiate VNF request with the API major version included in URI is "v2". @@ -107,23 +84,7 @@ If necessary, VNFM performs the notification process as described in the SPEC 3) Flow of Termination of a VNF instance ---------------------------------------- -.. seqdiag:: - - seqdiag { - Client; NFVO; tacker-server; tacker-conductor; MgmtDriver; VnfLcmDriver; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/terminate"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" - [label = "trriger asynchronous task"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; - "tacker-conductor" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - } +.. image:: ./support-nfv-solv3-start-and-terminate-vnf/03.png #. Client sends a Terminate VNF request with the API major version included in URI is "v2". @@ -138,15 +99,7 @@ If necessary, VNFM performs the notification process as described in the SPEC 4) Flow of deletion of a VNF instance resource ---------------------------------------------- -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" - [label = "DELETE /vnflcm/v2/vnf_instances/{vnfInstanceId}"]; - "tacker-server" ->> "tacker-server" - [label = "Delete VNF instance resource"]; - Client <-- "tacker-server" [label = "Response 204 No Content"]; - } +.. image:: ./support-nfv-solv3-start-and-terminate-vnf/04.png #. Client sends a Delete VNF request with the API major version included in URI is "v2". diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf/01.diag b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/01.diag new file mode 100644 index 00000000..e621c01f --- /dev/null +++ b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/01.diag @@ -0,0 +1,7 @@ + + seqdiag { + Client -> "tacker-server" [label = "POST /vnflcm/v2/vnf_instances"]; + "tacker-server" ->> "tacker-server" + [label = "Create VNF instance resource"]; + Client <-- "tacker-server" [label = "Response 201 Created"]; + } diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf/01.png b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/01.png new file mode 100644 index 00000000..767a0b25 Binary files /dev/null and b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/01.png differ diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf/02.diag b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/02.diag new file mode 100644 index 00000000..bacb1e62 --- /dev/null +++ b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/02.diag @@ -0,0 +1,16 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; MgmtDriver; VnfLcmDriver; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; + "tacker-conductor" <-- "MgmtDriver" [label = ""]; + } diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf/02.png b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/02.png new file mode 100644 index 00000000..6c6a5de4 Binary files /dev/null and b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/02.png differ diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf/03.diag b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/03.diag new file mode 100644 index 00000000..ea5921db --- /dev/null +++ b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/03.diag @@ -0,0 +1,16 @@ + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; MgmtDriver; VnfLcmDriver; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/terminate"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" + [label = "trriger asynchronous task"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" -> "MgmtDriver" [label = "execute MgmtDriver"]; + "tacker-conductor" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + } diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf/03.png b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/03.png new file mode 100644 index 00000000..77a481c3 Binary files /dev/null and b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/03.png differ diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf/04.diag b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/04.diag new file mode 100644 index 00000000..415a4f9d --- /dev/null +++ b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/04.diag @@ -0,0 +1,8 @@ + + seqdiag { + Client -> "tacker-server" + [label = "DELETE /vnflcm/v2/vnf_instances/{vnfInstanceId}"]; + "tacker-server" ->> "tacker-server" + [label = "Delete VNF instance resource"]; + Client <-- "tacker-server" [label = "Response 204 No Content"]; + } diff --git a/specs/xena/support-nfv-solv3-start-and-terminate-vnf/04.png b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/04.png new file mode 100644 index 00000000..c0444993 Binary files /dev/null and b/specs/xena/support-nfv-solv3-start-and-terminate-vnf/04.png differ diff --git a/specs/yoga/add-sample-ansible-mgmt-driver.rst b/specs/yoga/add-sample-ansible-mgmt-driver.rst index c87c96a4..d617e1e9 100644 --- a/specs/yoga/add-sample-ansible-mgmt-driver.rst +++ b/specs/yoga/add-sample-ansible-mgmt-driver.rst @@ -123,30 +123,7 @@ during each LCM operation. The Ansible Driver Sample runs using the Ansible service on the same server as Tacker. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Tacker-conductor" - "AnsibleMgmtDriver" - "ScriptANSIBLE" - "Ansible" - "VnfInstance" - - "Tacker-conductor" -> "AnsibleMgmtDriver" - [label = "Execute LCM Configuration"]; - "AnsibleMgmtDriver" -> "ScriptANSIBLE" - [label = "Get configuration setting and select ansible playbook"]; - "AnsibleMgmtDriver" <- "ScriptANSIBLE" - [label = "return ansible playbook path at Scripts and configuration"]; - "AnsibleMgmtDriver" -> "Ansible" - [label = "Execute ansible-playbook command using playbook in Scripts"]; - "Ansible" -> "VnfInstance" - [label = "Configuration instance"]; - - } +.. image:: ./add-sample-ansible-mgmt-driver/01.png Alternatives ------------ diff --git a/specs/yoga/add-sample-ansible-mgmt-driver/01.diag b/specs/yoga/add-sample-ansible-mgmt-driver/01.diag new file mode 100644 index 00000000..08b9b0ba --- /dev/null +++ b/specs/yoga/add-sample-ansible-mgmt-driver/01.diag @@ -0,0 +1,23 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Tacker-conductor" + "AnsibleMgmtDriver" + "ScriptANSIBLE" + "Ansible" + "VnfInstance" + + "Tacker-conductor" -> "AnsibleMgmtDriver" + [label = "Execute LCM Configuration"]; + "AnsibleMgmtDriver" -> "ScriptANSIBLE" + [label = "Get configuration setting and select ansible playbook"]; + "AnsibleMgmtDriver" <- "ScriptANSIBLE" + [label = "return ansible playbook path at Scripts and configuration"]; + "AnsibleMgmtDriver" -> "Ansible" + [label = "Execute ansible-playbook command using playbook in Scripts"]; + "Ansible" -> "VnfInstance" + [label = "Configuration instance"]; + + } diff --git a/specs/yoga/add-sample-ansible-mgmt-driver/01.png b/specs/yoga/add-sample-ansible-mgmt-driver/01.png new file mode 100644 index 00000000..f28987f2 Binary files /dev/null and b/specs/yoga/add-sample-ansible-mgmt-driver/01.png differ diff --git a/specs/yoga/container-update.rst b/specs/yoga/container-update.rst index 69939241..d6e86aa4 100644 --- a/specs/yoga/container-update.rst +++ b/specs/yoga/container-update.rst @@ -293,55 +293,7 @@ by mounting to volume: Sequence for operation ------------------------ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "MgmtDriver" - "TackerDB" - "VIM(Kubernetes)" - - Client -> "Tacker-server" - [label = "1. PATCH /vnflcm/v1/vnf_instances/{vnfInstanceId}"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = ""]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "2. modify_vnf"]; - "VnfLcmDriver" -> "MgmtDriver" - [label = "3. modify_start"]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "VnfLcmDriver" -> "TackerDB" - [label = "4. Update vnfdid"]; - "VnfLcmDriver" <-- "TackerDB" - [label = ""]; - "VnfLcmDriver" -> "MgmtDriver" - [label = "5. modify_end"]; - "MgmtDriver" -> "VIM(Kubernetes)" - [label = "5-1. replace config"]; - "MgmtDriver" <-- "VIM(Kubernetes)" - [label = ""]; - "MgmtDriver" -> "VIM(Kubernetes)" - [label = "5-2. recreate Pod"]; - "MgmtDriver" <-- "VIM(Kubernetes)" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "VnfLcmDriver" -> "TackerDB" - [label = "6. Update resourceid"]; - "VnfLcmDriver" <-- "TackerDB" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./container-update/01.png .. note:: diff --git a/specs/yoga/container-update/01.diag b/specs/yoga/container-update/01.diag new file mode 100644 index 00000000..aae87d14 --- /dev/null +++ b/specs/yoga/container-update/01.diag @@ -0,0 +1,48 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "MgmtDriver" + "TackerDB" + "VIM(Kubernetes)" + + Client -> "Tacker-server" + [label = "1. PATCH /vnflcm/v1/vnf_instances/{vnfInstanceId}"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = ""]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "2. modify_vnf"]; + "VnfLcmDriver" -> "MgmtDriver" + [label = "3. modify_start"]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "VnfLcmDriver" -> "TackerDB" + [label = "4. Update vnfdid"]; + "VnfLcmDriver" <-- "TackerDB" + [label = ""]; + "VnfLcmDriver" -> "MgmtDriver" + [label = "5. modify_end"]; + "MgmtDriver" -> "VIM(Kubernetes)" + [label = "5-1. replace config"]; + "MgmtDriver" <-- "VIM(Kubernetes)" + [label = ""]; + "MgmtDriver" -> "VIM(Kubernetes)" + [label = "5-2. recreate Pod"]; + "MgmtDriver" <-- "VIM(Kubernetes)" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "VnfLcmDriver" -> "TackerDB" + [label = "6. Update resourceid"]; + "VnfLcmDriver" <-- "TackerDB" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/yoga/container-update/01.png b/specs/yoga/container-update/01.png new file mode 100644 index 00000000..f0cd2095 Binary files /dev/null and b/specs/yoga/container-update/01.png differ diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation.rst b/specs/yoga/enhance-nfv-solv3-lcm-operation.rst index 96b0bb3d..9bef8b4a 100644 --- a/specs/yoga/enhance-nfv-solv3-lcm-operation.rst +++ b/specs/yoga/enhance-nfv-solv3-lcm-operation.rst @@ -67,55 +67,7 @@ involved in getting information of lifecycle management operation. 1) Flow of Scale VNF -------------------- -.. seqdiag:: - - seqdiag { - node_width = 72; - edge_length = 100; - - Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; - "VnfLcmDriver" ->> "VnfLcmDriver" [label = "calculate the number of VMs to scale-out or scale-in"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "[only for scale-in] mark stack unhealthy (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id})"]; - "openstackDriver" <-- "heat" [label = ""]; - "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./enhance-nfv-solv3-lcm-operation/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -193,54 +145,7 @@ combining terminate vnf and instantiate vnf. The following shows the sequence of patterns A-1, A-2, and B-1. -.. seqdiag:: - - seqdiag { - node_width = 72; - edge_length = 100; - - Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "NFVO" <- "tacker-conductor" [label = "POST /grants"]; - "NFVO" --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "mark stack unhealthy (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id})"]; - "openstackDriver" <-- "heat" [label = ""]; - "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./enhance-nfv-solv3-lcm-operation/02.png The procedure consists of the following steps as illustrated in above sequence: @@ -274,25 +179,7 @@ Postcondition: VNF instance in "INSTANTIATED" state, and healed. 3) Flow of the Modify VNF Information ------------------------------------- -.. seqdiag:: - - seqdiag { - node_width = 140; - edge_length = 340; - - Client; tacker-server; tacker-conductor; - - Client -> "tacker-server" [label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" -> "tacker-conductor" [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./enhance-nfv-solv3-lcm-operation/03.png Precondition: The resource representing the VNF instance has been created. @@ -315,52 +202,7 @@ is updated. 4) Flow of Change external VNF connectivity ------------------------------------------- -.. seqdiag:: - - seqdiag { - node_width = 72; - edge_length = 100; - - Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_ext_conn"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "NFVO" <- "tacker-conductor" [label = "POST /grants"]; - "NFVO" --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "update stack (PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./enhance-nfv-solv3-lcm-operation/04.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation/01.diag b/specs/yoga/enhance-nfv-solv3-lcm-operation/01.diag new file mode 100644 index 00000000..0a3f4d02 --- /dev/null +++ b/specs/yoga/enhance-nfv-solv3-lcm-operation/01.diag @@ -0,0 +1,48 @@ + + seqdiag { + node_width = 72; + edge_length = 100; + + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" ->> "VnfLcmDriver" [label = "calculate the number of VMs to scale-out or scale-in"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "[only for scale-in] mark stack unhealthy (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation/01.png b/specs/yoga/enhance-nfv-solv3-lcm-operation/01.png new file mode 100644 index 00000000..8d69b0e7 Binary files /dev/null and b/specs/yoga/enhance-nfv-solv3-lcm-operation/01.png differ diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation/02.diag b/specs/yoga/enhance-nfv-solv3-lcm-operation/02.diag new file mode 100644 index 00000000..33237503 --- /dev/null +++ b/specs/yoga/enhance-nfv-solv3-lcm-operation/02.diag @@ -0,0 +1,47 @@ + + seqdiag { + node_width = 72; + edge_length = 100; + + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "NFVO" <- "tacker-conductor" [label = "POST /grants"]; + "NFVO" --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "mark stack unhealthy (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation/02.png b/specs/yoga/enhance-nfv-solv3-lcm-operation/02.png new file mode 100644 index 00000000..8b6d5e1c Binary files /dev/null and b/specs/yoga/enhance-nfv-solv3-lcm-operation/02.png differ diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation/03.diag b/specs/yoga/enhance-nfv-solv3-lcm-operation/03.diag new file mode 100644 index 00000000..67fbfd33 --- /dev/null +++ b/specs/yoga/enhance-nfv-solv3-lcm-operation/03.diag @@ -0,0 +1,18 @@ + + seqdiag { + node_width = 140; + edge_length = 340; + + Client; tacker-server; tacker-conductor; + + Client -> "tacker-server" [label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation/03.png b/specs/yoga/enhance-nfv-solv3-lcm-operation/03.png new file mode 100644 index 00000000..da060d2c Binary files /dev/null and b/specs/yoga/enhance-nfv-solv3-lcm-operation/03.png differ diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation/04.diag b/specs/yoga/enhance-nfv-solv3-lcm-operation/04.diag new file mode 100644 index 00000000..db20a818 --- /dev/null +++ b/specs/yoga/enhance-nfv-solv3-lcm-operation/04.diag @@ -0,0 +1,45 @@ + + seqdiag { + node_width = 72; + edge_length = 100; + + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_ext_conn"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "NFVO" <- "tacker-conductor" [label = "POST /grants"]; + "NFVO" --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "update stack (PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation/04.png b/specs/yoga/enhance-nfv-solv3-lcm-operation/04.png new file mode 100644 index 00000000..5dcbd206 Binary files /dev/null and b/specs/yoga/enhance-nfv-solv3-lcm-operation/04.png differ diff --git a/specs/yoga/k8s-namespace.rst b/specs/yoga/k8s-namespace.rst index b749117a..0081c505 100644 --- a/specs/yoga/k8s-namespace.rst +++ b/specs/yoga/k8s-namespace.rst @@ -170,52 +170,7 @@ Following is a sample: Sequence of CNF Instantiate with specified namespace ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "KubernetesInfraDriver" - "Heat" - "TackerDB" - "k8s client" - - Client -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "trigger asynchronous task"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "KubernetesInfraDriver" - [label = "execute KubernetesInfraDriver"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "get package info"]; - "KubernetesInfraDriver" <-- "TackerDB" - [label = "return package info"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "Save the namespace to the vnf_resources table"] - "KubernetesInfraDriver" <-- "TackerDB" - [label = ""] - "KubernetesInfraDriver" -> "k8s client" - [label = "create Kubernetes resource"] - "KubernetesInfraDriver" <-- "k8s client" - [label = ""] - "KubernetesInfraDriver" -> "TackerDB" - [label = "save pod information"] - "KubernetesInfraDriver" <-- "TackerDB" - [label = ""] - "VnfLcmDriver" <-- "KubernetesInfraDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./k8s-namespace/01.png The procedure consists of the following steps as illustrated above. diff --git a/specs/yoga/k8s-namespace/01.diag b/specs/yoga/k8s-namespace/01.diag new file mode 100644 index 00000000..efe23c39 --- /dev/null +++ b/specs/yoga/k8s-namespace/01.diag @@ -0,0 +1,45 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "KubernetesInfraDriver" + "Heat" + "TackerDB" + "k8s client" + + Client -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "trigger asynchronous task"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "KubernetesInfraDriver" + [label = "execute KubernetesInfraDriver"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "get package info"]; + "KubernetesInfraDriver" <-- "TackerDB" + [label = "return package info"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "Save the namespace to the vnf_resources table"] + "KubernetesInfraDriver" <-- "TackerDB" + [label = ""] + "KubernetesInfraDriver" -> "k8s client" + [label = "create Kubernetes resource"] + "KubernetesInfraDriver" <-- "k8s client" + [label = ""] + "KubernetesInfraDriver" -> "TackerDB" + [label = "save pod information"] + "KubernetesInfraDriver" <-- "TackerDB" + [label = ""] + "VnfLcmDriver" <-- "KubernetesInfraDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/yoga/k8s-namespace/01.png b/specs/yoga/k8s-namespace/01.png new file mode 100644 index 00000000..9034cfc3 Binary files /dev/null and b/specs/yoga/k8s-namespace/01.png differ diff --git a/specs/yoga/multi-tenant-policy.rst b/specs/yoga/multi-tenant-policy.rst index 8c3f971d..cde49076 100644 --- a/specs/yoga/multi-tenant-policy.rst +++ b/specs/yoga/multi-tenant-policy.rst @@ -86,31 +86,7 @@ Users can get the above information only in their own tenant. Notification is modified to check the tenant which is assigned during subscription sequence and then notify events to the specified tenant. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client belong to tenant-B" - "Tacker-server" - "Tacker-condunctor" - "Notify Receiver of tenant-A" - "Notify Receiver of tenant-B" - - "Client belong to tenant-B" -> "Tacker-server" - [label = "Request LCM Operation"]; - "Tacker-server" -> "Tacker-condunctor" - [label = "Execute LCM Operation"]; - "Tacker-condunctor" -> "Tacker-condunctor" - [label = "Checking tenant of operation and vnf instance"]; - "Tacker-condunctor" -> "Notify Receiver of tenant-B" - [label = "Send LCM Operation Notification"]; - "Tacker-condunctor" <-- "Notify Receiver of tenant-B" - "Tacker-condunctor" -> "Tacker-condunctor" - [label = "Execute LCM Process"]; - - } +.. image:: ./multi-tenant-policy/01.png 3) Prohibiting VIM and VNF association created in different tenants: -------------------------------------------------------------------- @@ -118,35 +94,7 @@ subscription sequence and then notify events to the specified tenant. Tacker only allows associating a VIM with a VNF that belongs to the same tenant as the VIM. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "client" - "tacker-server" - "tacker-condunctor" - "vnflcm_driver" - "infra_driver" - - "client" -> "tacker-server" - [label = "Request Instantiate VNF"]; - "client" <- "tacker-server" - "tacker-server" --> "tacker-condunctor" - [label = "Execute instantiate"]; - "tacker-condunctor" -> "vnflcm_driver" - [label = "Execute instantiate_vnf"]; - "vnflcm_driver" -> "vnflcm_driver" - [label = "Verify VIM and VNF belong to the same Tenant"]; - === if same tenant === - "vnflcm_driver" -> "infra_driver" - [label = "create VNF resrouces"]; - === if not same tenant === - "tacker-condunctor" <- "vnflcm_driver" - [label = "return TenantMatchFailure"]; - - } +.. image:: ./multi-tenant-policy/02.png How to design Functional Testing -------------------------------- @@ -206,65 +154,7 @@ the following test cases are added. - User B belongs to Project B can't get information about Subscription A, and should not get information of Subscription A. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "Subscription A" - "Subscription B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Register Subscription"]; - "Tacker" -> "Subscription A" [label = "Registered Subscription"]; - "Tacker" <- "Subscription A"; - "User A" <-- "Tacker" [label = "Registered OK"]; - - "User B" -> "Tacker" [label = "Register Subscription"]; - "Tacker" -> "Subscription B" [label = "Registered Subscription"]; - "Tacker" <- "Subscription B"; - "User B" <-- "Tacker" [label = "Registered OK"]; - - "User A" -> "Tacker" - [label = "Get subscription List of Subscription A"]; - "Tacker" -> "Subscription A" - [label = "Return list of only Subscription A"]; - "Tacker" <- "Subscription A"; - "User A" <-- "Tacker" [label = "Get list of Subscription A"]; - - "User B" -> "Tacker" - [label = "Get subscription List of Subscription B"]; - "Tacker" -> "Subscription B" - [label = "Return list of only Subscription B"]; - "Tacker" <- "Subscription B"; - "User B" <-- "Tacker" [label = "Get list of Subscription B"]; - - "User A" -> "Tacker" [label = "Show subscription of Subscription A"]; - "Tacker" -> "Subscription A" [label = "Return of Subscription A"]; - "Tacker" <- "Subscription A"; - "User A" <-- "Tacker" [label = "Showed Subscription A"]; - - "User A" -> "Tacker" [label = "Show subscription of Subscription B"]; - "User A" <-- "Tacker" [label = "Fail to showed Subscription A"]; - - "User B" -> "Tacker" [label = "Show subscription of Subscription B"]; - "Tacker" -> "Subscription B" [label = "Return of Subscription B"]; - "Tacker" <- "Subscription B"; - "User B" <-- "Tacker" [label = "Showed Subscription B"]; - - "User B" -> "Tacker" [label = "Show subscription of Subscription A"]; - "User B" <-- "Tacker" [label = "Fail to showed Subscription A"]; - } +.. image:: ./multi-tenant-policy/03.png - Create, upload, show, list VNF Package - User A belongs to Project A create VNF Package A @@ -280,73 +170,7 @@ the following test cases are added. - User A belongs to Project A show VNF Package B, and should fail - User B belongs to Project B show VNF Package A, and should fail -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "VNF Package A" - "VNF Package B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Create VNF Package A"]; - "Tacker" -> "VNF Package A" [label = "Create VNF Package A"]; - "Tacker" <- "VNF Package A"; - "User A" <-- "Tacker" [label = "Created VNF Package A"]; - - "User A" -> "Tacker" [label = "Upload VNF Package A"]; - "Tacker" -> "VNF Package A" [label = "Upload VNF Package A"]; - "Tacker" <- "VNF Package A"; - "User A" <-- "Tacker" [label = "Uploaded VNF Package A"]; - - "User B" -> "Tacker" [label = "Create VNF Package B"]; - "Tacker" -> "VNF Package B" [label = "Create VNF Package B"]; - "Tacker" <- "VNF Package B"; - "User B" <-- "Tacker" [label = "Created VNF Package B"]; - - "User B" -> "Tacker" [label = "Upload VNF Package B"]; - "Tacker" -> "VNF Package B" [label = "Upload VNF Package B"]; - "Tacker" <- "VNF Package B"; - "User B" <-- "Tacker" [label = "Uploaded VNF Package B"]; - - "User A" -> "Tacker" [label = "Get VNF Package List of VNF Package A"]; - "Tacker" -> "VNF Package A" - [label = "Return list of only VNF Package A"]; - "Tacker" <- "VNF Package A"; - "User A" <-- "Tacker" [label = "Get list of VNF Package A"]; - - "User B" -> "Tacker" [label = "Get VNF Package List of VNF Package B"]; - "Tacker" -> "VNF Package B" - [label = "Return list of only VNF Package B"]; - "Tacker" <- "VNF Package B"; - "User B" <-- "Tacker" [label = "Get list of VNF Package B"]; - - "User A" -> "Tacker" [label = "Show VNF Package A"]; - "Tacker" -> "VNF Package A" [label = "Show VNF Package A"]; - "Tacker" <- "VNF Package A"; - "User A" <-- "Tacker" [label = "Showed VNF Package A"]; - - "User A" -> "Tacker" [label = "Show VNF Package B"]; - "User A" <-- "Tacker" [label = "Fail to showed VNF Package B"]; - - "User B" -> "Tacker" [label = "Show VNF Package B"]; - "Tacker" -> "VNF Package B" [label = "Return of VNF Package B"]; - "Tacker" <- "VNF Package B"; - "User B" <-- "Tacker" [label = "Showed VNF Package B"]; - - "User B" -> "Tacker" [label = "Show VNF Package A"]; - "User B" <-- "Tacker" [label = "Fail to showed VNF Package A"]; - } +.. image:: ./multi-tenant-policy/04.png - Create VNF - User A belongs to Project A uses VNF Package B to create VNF Instance B, @@ -364,69 +188,7 @@ the following test cases are added. - Verify that Notification Server A is unable to get the Create information for VNF Instance B -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "VNF A" - "VNF B" - "Notification Server A" - "Notification Server B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Create VNF B using VNF Package B"]; - "User A" <-- "Tacker" [label = "Failed to create VNF B"]; - - "User B" -> "Tacker" [label = "Create VNF A using VNF Package A"]; - "User B" <-- "Tacker" [label = "Failed to create VNF A"]; - - "User A" -> "Tacker" [label = "Create VNF A"]; - "Tacker" -> "VNF A" [label = "Create VNF A"]; - "Tacker" <- "VNF A"; - "Tacker" -> "Notification Server A" [label = "send notification"]; - "Tacker" <- "Notification Server A"; - "User A" <-- "Tacker" [label = "Created VNF A"]; - - "User B" -> "Tacker" [label = "Create VNF B"]; - "Tacker" -> "VNF B" [label = "Create VNF B"]; - "Tacker" <- "VNF B"; - "Tacker" -> "Notification Server B" [label = "send notification"]; - "Tacker" <- "Notification Server B"; - "User B" <-- "Tacker" [label = "Created VNF B"]; - - "User A" -> "Notification Server A" - [label = "Check the exist notification that created VNF A"]; - "User A" <-- "Notification Server A" - [label = "check existing notification that created VNF A"]; - - "User B" -> "Notification Server B" - [label = "Check the not exist notification that created VNF A"]; - "User B" <-- "Notification Server B" - [label = "check not existing notification that created VNF A"]; - - "User B" -> "Notification Server B" - [label = "Check the exist notification that created VNF B"]; - "User B" <-- "Notification Server B" - [label = "check existing notification that created VNF B"]; - - "User A" -> "Notification Server A" - [label = "Check the not exist notification that created VNF B"]; - "User A" <-- "Notification Server A" - [label = "check not existing notification that created VNF B"]; - - - } +.. image:: ./multi-tenant-policy/05.png - Instantiate VNF - User A belongs to Project A instantiate VNF Instance B, and should fail @@ -452,99 +214,7 @@ the following test cases are added. - Verify that Notification Server A is unable to get the Instantiate information for VNF Instance B -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "VNF A" - "VNF B" - "VnfLcmOpOccs A" - "VnfLcmOpOccs B" - "Notification Server A" - "Notification Server B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Instantiate VNF B"]; - "User A" <-- "Tacker" [label = "Failed to Instantiate VNF B"]; - - "User B" -> "Tacker" [label = "Instantiate VNF A"]; - "User B" <-- "Tacker" [label = "Failed to Instantiate VNF A"]; - - "User A" -> "Tacker" [label = "Instantiate VNF A"]; - "Tacker" -> "VNF A" [label = "Instantiate VNF A"]; - "Tacker" <- "VNF A"; - "Tacker" -> "Notification Server A" [label = "send notification"]; - "Tacker" <- "Notification Server A"; - "User A" <-- "Tacker" [label = "Instantiated VNF A"]; - - "User B" -> "Tacker" [label = "Instantiate VNF B"]; - "Tacker" -> "VNF B" [label = "Instantiate VNF B"]; - "Tacker" <- "VNF B"; - "Tacker" -> "Notification Server B" [label = "send notification"]; - "Tacker" <- "Notification Server B"; - "User B" <-- "Tacker" [label = "Instantiated VNF B"]; - - "User A" -> "Tacker" [label = "Get VnfLcmOpOccs List of only VNF A"]; - "Tacker" -> "VnfLcmOpOccs A" - [label = "Return list of VnfLcmOpOccs"]; - "Tacker" <- "VnfLcmOpOccs A"; - "User A" <-- "Tacker" [label = "Get list of VnfLcmOpOccs"]; - - "User B" -> "Tacker" [label = "Get VnfLcmOpOccs List of only VNF B"]; - "Tacker" -> "VnfLcmOpOccs B" - [label = "Return list of VnfLcmOpOccs"]; - "Tacker" <- "VnfLcmOpOccs B"; - "User B" <-- "Tacker" [label = "Get list of VnfLcmOpOccs"]; - - "User A" -> "Tacker" [label = "Show VnfLcmOpOccs A"]; - "Tacker" -> "VnfLcmOpOccs A" [label = "Show VnfLcmOpOccs A"]; - "Tacker" <- "VnfLcmOpOccs A"; - "User A" <-- "Tacker" [label = "Showed VnfLcmOpOccs A"]; - - "User A" -> "Tacker" [label = "Show VnfLcmOpOccs B"]; - "User A" <-- "Tacker" [label = "failed to show VnfLcmOpOccs B"]; - - "User B" -> "Tacker" [label = "Show VnfLcmOpOccs B"]; - "Tacker" -> "VnfLcmOpOccs B" [label = "Show VnfLcmOpOccs B"]; - "Tacker" <- "VnfLcmOpOccs B"; - "User B" <-- "Tacker" [label = "Showed VnfLcmOpOccs B"]; - - "User B" -> "Tacker" [label = "Show VnfLcmOpOccs A"]; - "User B" <-- "Tacker" [label = "failed to show VnfLcmOpOccs A"]; - - "User A" -> "Notification Server A" - [label = "Check the exist notification that Instantiated VNF A"]; - "User A" <-- "Notification Server A" - [label = "check existing notification that Instantiated VNF A"]; - - "User B" -> "Notification Server B" - [label = "Check the not exist notification that Instantiated VNF A"]; - "User B" <-- "Notification Server B" - [label = "check not existing notification that Instantiated VNF A"]; - - "User B" -> "Notification Server B" - [label = "Check the exist notification that Instantiated VNF B"]; - "User B" <-- "Notification Server B" - [label = "check existing notification that Instantiated VNF B"]; - - "User A" -> "Notification Server A" - [label = "Check the not exist notification that Instantiated VNF B"]; - "User A" <-- "Notification Server A" - [label = "check not existing notification that Instantiated VNF B"]; - - - } +.. image:: ./multi-tenant-policy/06.png - Terminate VNF - User A belongs to Project A terminate VNF Instance B, and should fail @@ -570,98 +240,7 @@ the following test cases are added. - Verify that Notification Server A is unable to get the Termination information for VNF Instance B -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "VNF A" - "VNF B" - "VnfLcmOpOccs A" - "VnfLcmOpOccs B" - "Notification Server A" - "Notification Server B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Terminate VNF B"]; - "User A" <-- "Tacker" [label = "Failed to Terminate VNF B"]; - - "User B" -> "Tacker" [label = "Terminate VNF A"]; - "User B" <-- "Tacker" [label = "Failed to Terminate VNF A"]; - - "User A" -> "Tacker" [label = "Terminate VNF A"]; - "Tacker" -> "VNF A" [label = "Terminate VNF A"]; - "Tacker" <- "VNF A"; - "Tacker" -> "Notification Server A" [label = "send notification"]; - "Tacker" <- "Notification Server A"; - "User A" <-- "Tacker" [label = "Terminated VNF A"]; - - "User B" -> "Tacker" [label = "Terminate VNF B"]; - "Tacker" -> "VNF B" [label = "Terminate VNF B"]; - "Tacker" <- "VNF B"; - "Tacker" -> "Notification Server B" [label = "send notification"]; - "Tacker" <- "Notification Server B"; - "User B" <-- "Tacker" [label = "Terminated VNF B"]; - - "User A" -> "Tacker" [label = "Get VnfLcmOpOccs List of only VNF A"]; - "Tacker" -> "VnfLcmOpOccs A" - [label = "Return list of VnfLcmOpOccs"]; - "Tacker" <- "VnfLcmOpOccs A"; - "User A" <-- "Tacker" [label = "Get list of VnfLcmOpOccs"]; - - "User B" -> "Tacker" [label = "Get VnfLcmOpOccs List of only VNF B"]; - "Tacker" -> "VnfLcmOpOccs B" - [label = "Return list of VnfLcmOpOccs"]; - "Tacker" <- "VnfLcmOpOccs B"; - "User B" <-- "Tacker" [label = "Get list of VnfLcmOpOccs"]; - - "User A" -> "Tacker" [label = "Show VnfLcmOpOccs A"]; - "Tacker" -> "VnfLcmOpOccs A" [label = "Show VnfLcmOpOccs A"]; - "Tacker" <- "VnfLcmOpOccs A"; - "User A" <-- "Tacker" [label = "Showed VnfLcmOpOccs A"]; - - "User A" -> "Tacker" [label = "Show VnfLcmOpOccs B"]; - "User A" <-- "Tacker" [label = "failed to show VnfLcmOpOccs B"]; - - "User B" -> "Tacker" [label = "Show VnfLcmOpOccs B"]; - "Tacker" -> "VnfLcmOpOccs B" [label = "Show VnfLcmOpOccs B"]; - "Tacker" <- "VnfLcmOpOccs B"; - "User B" <-- "Tacker" [label = "Showed VnfLcmOpOccs B"]; - - "User B" -> "Tacker" [label = "Show VnfLcmOpOccs A"]; - "User B" <-- "Tacker" [label = "failed to show VnfLcmOpOccs A"]; - - "User A" -> "Notification Server A" - [label = "Check the exist notification that Terminated VNF A"]; - "User A" <-- "Notification Server A" - [label = "check existing notification that Terminated VNF A"]; - - "User B" -> "Notification Server B" - [label = "Check the not exist notification that Terminated VNF A"]; - "User B" <-- "Notification Server B" - [label = "check not existing notification that Terminated VNF A"]; - - "User B" -> "Notification Server B" - [label = "Check the exist notification that Terminated VNF B"]; - "User B" <-- "Notification Server B" - [label = "check existing notification that Terminated VNF B"]; - - "User A" -> "Notification Server A" - [label = "Check the not exist notification that Terminated VNF B"]; - "User A" <-- "Notification Server A" - [label = "check not existing notification that Terminated VNF B"]; - - } +.. image:: ./multi-tenant-policy/07.png - Delete VNF - User A belongs to Project A deletes VNF Instance B, and should fail @@ -673,69 +252,7 @@ the following test cases are added. - Verify that Notification Server B is unable to get Delete information for VNF Instance A -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "VNF A" - "VNF B" - "Notification Server A" - "Notification Server B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Delete VNF B"]; - "User A" <-- "Tacker" [label = "Failed to Delete VNF B"]; - - "User B" -> "Tacker" [label = "Delete VNF A"]; - "User B" <-- "Tacker" [label = "Failed to Delete VNF A"]; - - "User A" -> "Tacker" [label = "Delete VNF A"]; - "Tacker" -> "VNF A" [label = "Delete VNF A"]; - "Tacker" <- "VNF A"; - "Tacker" -> "Notification Server A" [label = "send notification"]; - "Tacker" <- "Notification Server A"; - "User A" <-- "Tacker" [label = "Deleted VNF A"]; - - "User B" -> "Tacker" [label = "Delete VNF B"]; - "Tacker" -> "VNF B" [label = "Delete VNF B"]; - "Tacker" <- "VNF B"; - "Tacker" -> "Notification Server B" [label = "send notification"]; - "Tacker" <- "Notification Server B"; - "User B" <-- "Tacker" [label = "Deleted VNF B"]; - - "User A" -> "Notification Server A" - [label = "Check the exist notification that Deleted VNF A"]; - "User A" <-- "Notification Server A" - [label = "check existing notification that Deleted VNF A"]; - - "User B" -> "Notification Server B" - [label = "Check the not exist notification that Deleted VNF A"]; - "User B" <-- "Notification Server B" - [label = "check not existing notification that Deleted VNF A"]; - - "User B" -> "Notification Server B" - [label = "Check the exist notification that Deleted VNF B"]; - "User B" <-- "Notification Server B" - [label = "check existing notification that Deleted VNF B"]; - - "User A" -> "Notification Server A" - [label = "Check the not exist notification that Deleted VNF B"]; - "User A" <-- "Notification Server A" - [label = "check not existing notification that Deleted VNF B"]; - - - } +.. image:: ./multi-tenant-policy/08.png - Delete VNF Package - User A belongs to Project A deletes VNF Package B, and should fail @@ -743,42 +260,7 @@ the following test cases are added. - User A belongs to Project A deletes VNF Package A - User B belongs to Project B deletes VNF Package B -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "VNF Package A" - "VNF Package B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Delete VNF Package B"]; - "User A" <-- "Tacker" [label = "Failed to delete VNF Package B"]; - - "User B" -> "Tacker" [label = "Delete VNF Package A"]; - "User B" <-- "Tacker" [label = "Failed to delete VNF Package A"]; - - "User A" -> "Tacker" [label = "Delete VNF Package A"]; - "Tacker" -> "VNF Package A" [label = "Delete VNF Package A"]; - "Tacker" <- "VNF Package A"; - "User A" <-- "Tacker" [label = "Deleted VNF Package A"]; - - "User B" -> "Tacker" [label = "Delete VNF Package B"]; - "Tacker" -> "VNF Package B" [label = "Delete VNF Package B"]; - "Tacker" <- "VNF Package B"; - "User B" <-- "Tacker" [label = "Deleted VNF Package B"]; - - } +.. image:: ./multi-tenant-policy/09.png - Delete Subscription - User A belongs to Project A deletes Subscription B, and should fail @@ -786,43 +268,7 @@ the following test cases are added. - User A belongs to Project A deletes Subscription A - User B belongs to Project B deletes Subscription B -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "Subscription A" - "Subscription B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Delete Subscription B"]; - "User A" <-- "Tacker" [label = "Failed to delete Subscription B"]; - - "User B" -> "Tacker" [label = "Delete Subscription A"]; - "User B" <-- "Tacker" [label = "Failed to delete Subscription A"]; - - - "User A" -> "Tacker" [label = "Delete Subscription A"]; - "Tacker" -> "Subscription A" [label = "Delete Subscription A"]; - "Tacker" <- "Subscription A"; - "User A" <-- "Tacker" [label = "Deleted Subscription A"]; - - "User B" -> "Tacker" [label = "Delete Subscription B"]; - "Tacker" -> "Subscription B" [label = "Delete Subscription B"]; - "Tacker" <- "Subscription B"; - "User B" <-- "Tacker" [label = "Deleted Subscription B"]; - - } +.. image:: ./multi-tenant-policy/10.png Test perspective for proposed changes (3) @@ -849,84 +295,7 @@ the following test cases are added. - User A belongs to Project A deletes VNF Instance A - User B belongs to Project B deletes VNF Instance B -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Test Class" - "User A" - "User B" - "Tacker" - "VIM A" - "VIM B" - "VNF A" - "VNF B" - - "Test Class" -> "User A" [label = "Set User"]; - "Test Class" <- "User A"; - - "Test Class" -> "User B" [label = "Set User"]; - "Test Class" <- "User B"; - - "User A" -> "Tacker" [label = "Register VIM A"]; - "Tacker" -> "VIM A" [label = "Register VIM A"]; - "Tacker" <- "VIM A"; - "User A" <-- "Tacker" [label = "Registered VIM A"]; - - "User B" -> "Tacker" [label = "Register VIM B"]; - "Tacker" -> "VIM B" [label = "Register VIM B"]; - "Tacker" <- "VIM B"; - "User A" <-- "Tacker" [label = "Registered VIM B"]; - - "User A" -> "Tacker" [label = "Create VNF A"]; - "Tacker" -> "VNF A" [label = "Create VNF A"]; - "Tacker" <- "VNF A"; - "User A" <-- "Tacker" [label = "Created VNF A"]; - - "User B" -> "Tacker" [label = "Create VNF B"]; - "Tacker" -> "VNF B" [label = "Create VNF B"]; - "Tacker" <- "VNF B"; - "User B" <-- "Tacker" [label = "Created VNF B"]; - - "User A" -> "Tacker" [label = "Instantiate VNF A with VIM B"]; - "User A" <-- "Tacker" [label = "Failed to Instantiate VNF A"]; - - "User B" -> "Tacker" [label = "Instantiate VNF B with VIM A"]; - "User B" <-- "Tacker" [label = "Failed to Instantiate VNF B"]; - - "User A" -> "Tacker" [label = "Instantiate VNF A"]; - "Tacker" -> "VNF A" [label = "Instantiate VNF A"]; - "Tacker" <- "VNF A"; - "User A" <-- "Tacker" [label = "Instantiated VNF A"]; - - "User B" -> "Tacker" [label = "Instantiate VNF B"]; - "Tacker" -> "VNF B" [label = "Instantiate VNF B"]; - "Tacker" <- "VNF B"; - "User B" <-- "Tacker" [label = "Instantiated VNF B"]; - - "User A" -> "Tacker" [label = "Terminate VNF A"]; - "Tacker" -> "VNF A" [label = "Terminate VNF A"]; - "Tacker" <- "VNF A"; - "User A" <-- "Tacker" [label = "Terminated VNF A"]; - - "User B" -> "Tacker" [label = "Terminate VNF B"]; - "Tacker" -> "VNF B" [label = "Terminate VNF B"]; - "Tacker" <- "VNF B"; - "User B" <-- "Tacker" [label = "Terminated VNF B"]; - - "User A" -> "Tacker" [label = "Delete VNF A"]; - "Tacker" -> "VNF A" [label = "Delete VNF A"]; - "Tacker" <- "VNF A"; - "User A" <-- "Tacker" [label = "Deleted VNF A"]; - - "User B" -> "Tacker" [label = "Delete VNF B"]; - "Tacker" -> "VNF B" [label = "Delete VNF B"]; - "Tacker" <- "VNF B"; - "User B" <-- "Tacker" [label = "Deleted VNF B"]; - - } +.. image:: ./multi-tenant-policy/11.png diff --git a/specs/yoga/multi-tenant-policy/01.diag b/specs/yoga/multi-tenant-policy/01.diag new file mode 100644 index 00000000..cc00654c --- /dev/null +++ b/specs/yoga/multi-tenant-policy/01.diag @@ -0,0 +1,24 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client belong to tenant-B" + "Tacker-server" + "Tacker-condunctor" + "Notify Receiver of tenant-A" + "Notify Receiver of tenant-B" + + "Client belong to tenant-B" -> "Tacker-server" + [label = "Request LCM Operation"]; + "Tacker-server" -> "Tacker-condunctor" + [label = "Execute LCM Operation"]; + "Tacker-condunctor" -> "Tacker-condunctor" + [label = "Checking tenant of operation and vnf instance"]; + "Tacker-condunctor" -> "Notify Receiver of tenant-B" + [label = "Send LCM Operation Notification"]; + "Tacker-condunctor" <-- "Notify Receiver of tenant-B" + "Tacker-condunctor" -> "Tacker-condunctor" + [label = "Execute LCM Process"]; + + } diff --git a/specs/yoga/multi-tenant-policy/01.png b/specs/yoga/multi-tenant-policy/01.png new file mode 100644 index 00000000..8ab0dc8f Binary files /dev/null and b/specs/yoga/multi-tenant-policy/01.png differ diff --git a/specs/yoga/multi-tenant-policy/02.diag b/specs/yoga/multi-tenant-policy/02.diag new file mode 100644 index 00000000..96d3af24 --- /dev/null +++ b/specs/yoga/multi-tenant-policy/02.diag @@ -0,0 +1,28 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "client" + "tacker-server" + "tacker-condunctor" + "vnflcm_driver" + "infra_driver" + + "client" -> "tacker-server" + [label = "Request Instantiate VNF"]; + "client" <- "tacker-server" + "tacker-server" --> "tacker-condunctor" + [label = "Execute instantiate"]; + "tacker-condunctor" -> "vnflcm_driver" + [label = "Execute instantiate_vnf"]; + "vnflcm_driver" -> "vnflcm_driver" + [label = "Verify VIM and VNF belong to the same Tenant"]; + === if same tenant === + "vnflcm_driver" -> "infra_driver" + [label = "create VNF resrouces"]; + === if not same tenant === + "tacker-condunctor" <- "vnflcm_driver" + [label = "return TenantMatchFailure"]; + + } diff --git a/specs/yoga/multi-tenant-policy/02.png b/specs/yoga/multi-tenant-policy/02.png new file mode 100644 index 00000000..4438ab1e Binary files /dev/null and b/specs/yoga/multi-tenant-policy/02.png differ diff --git a/specs/yoga/multi-tenant-policy/03.diag b/specs/yoga/multi-tenant-policy/03.diag new file mode 100644 index 00000000..615d89e3 --- /dev/null +++ b/specs/yoga/multi-tenant-policy/03.diag @@ -0,0 +1,58 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "Subscription A" + "Subscription B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Register Subscription"]; + "Tacker" -> "Subscription A" [label = "Registered Subscription"]; + "Tacker" <- "Subscription A"; + "User A" <-- "Tacker" [label = "Registered OK"]; + + "User B" -> "Tacker" [label = "Register Subscription"]; + "Tacker" -> "Subscription B" [label = "Registered Subscription"]; + "Tacker" <- "Subscription B"; + "User B" <-- "Tacker" [label = "Registered OK"]; + + "User A" -> "Tacker" + [label = "Get subscription List of Subscription A"]; + "Tacker" -> "Subscription A" + [label = "Return list of only Subscription A"]; + "Tacker" <- "Subscription A"; + "User A" <-- "Tacker" [label = "Get list of Subscription A"]; + + "User B" -> "Tacker" + [label = "Get subscription List of Subscription B"]; + "Tacker" -> "Subscription B" + [label = "Return list of only Subscription B"]; + "Tacker" <- "Subscription B"; + "User B" <-- "Tacker" [label = "Get list of Subscription B"]; + + "User A" -> "Tacker" [label = "Show subscription of Subscription A"]; + "Tacker" -> "Subscription A" [label = "Return of Subscription A"]; + "Tacker" <- "Subscription A"; + "User A" <-- "Tacker" [label = "Showed Subscription A"]; + + "User A" -> "Tacker" [label = "Show subscription of Subscription B"]; + "User A" <-- "Tacker" [label = "Fail to showed Subscription A"]; + + "User B" -> "Tacker" [label = "Show subscription of Subscription B"]; + "Tacker" -> "Subscription B" [label = "Return of Subscription B"]; + "Tacker" <- "Subscription B"; + "User B" <-- "Tacker" [label = "Showed Subscription B"]; + + "User B" -> "Tacker" [label = "Show subscription of Subscription A"]; + "User B" <-- "Tacker" [label = "Fail to showed Subscription A"]; + } diff --git a/specs/yoga/multi-tenant-policy/03.png b/specs/yoga/multi-tenant-policy/03.png new file mode 100644 index 00000000..c9d53d08 Binary files /dev/null and b/specs/yoga/multi-tenant-policy/03.png differ diff --git a/specs/yoga/multi-tenant-policy/04.diag b/specs/yoga/multi-tenant-policy/04.diag new file mode 100644 index 00000000..526665b5 --- /dev/null +++ b/specs/yoga/multi-tenant-policy/04.diag @@ -0,0 +1,66 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "VNF Package A" + "VNF Package B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Create VNF Package A"]; + "Tacker" -> "VNF Package A" [label = "Create VNF Package A"]; + "Tacker" <- "VNF Package A"; + "User A" <-- "Tacker" [label = "Created VNF Package A"]; + + "User A" -> "Tacker" [label = "Upload VNF Package A"]; + "Tacker" -> "VNF Package A" [label = "Upload VNF Package A"]; + "Tacker" <- "VNF Package A"; + "User A" <-- "Tacker" [label = "Uploaded VNF Package A"]; + + "User B" -> "Tacker" [label = "Create VNF Package B"]; + "Tacker" -> "VNF Package B" [label = "Create VNF Package B"]; + "Tacker" <- "VNF Package B"; + "User B" <-- "Tacker" [label = "Created VNF Package B"]; + + "User B" -> "Tacker" [label = "Upload VNF Package B"]; + "Tacker" -> "VNF Package B" [label = "Upload VNF Package B"]; + "Tacker" <- "VNF Package B"; + "User B" <-- "Tacker" [label = "Uploaded VNF Package B"]; + + "User A" -> "Tacker" [label = "Get VNF Package List of VNF Package A"]; + "Tacker" -> "VNF Package A" + [label = "Return list of only VNF Package A"]; + "Tacker" <- "VNF Package A"; + "User A" <-- "Tacker" [label = "Get list of VNF Package A"]; + + "User B" -> "Tacker" [label = "Get VNF Package List of VNF Package B"]; + "Tacker" -> "VNF Package B" + [label = "Return list of only VNF Package B"]; + "Tacker" <- "VNF Package B"; + "User B" <-- "Tacker" [label = "Get list of VNF Package B"]; + + "User A" -> "Tacker" [label = "Show VNF Package A"]; + "Tacker" -> "VNF Package A" [label = "Show VNF Package A"]; + "Tacker" <- "VNF Package A"; + "User A" <-- "Tacker" [label = "Showed VNF Package A"]; + + "User A" -> "Tacker" [label = "Show VNF Package B"]; + "User A" <-- "Tacker" [label = "Fail to showed VNF Package B"]; + + "User B" -> "Tacker" [label = "Show VNF Package B"]; + "Tacker" -> "VNF Package B" [label = "Return of VNF Package B"]; + "Tacker" <- "VNF Package B"; + "User B" <-- "Tacker" [label = "Showed VNF Package B"]; + + "User B" -> "Tacker" [label = "Show VNF Package A"]; + "User B" <-- "Tacker" [label = "Fail to showed VNF Package A"]; + } diff --git a/specs/yoga/multi-tenant-policy/04.png b/specs/yoga/multi-tenant-policy/04.png new file mode 100644 index 00000000..3f9679c9 Binary files /dev/null and b/specs/yoga/multi-tenant-policy/04.png differ diff --git a/specs/yoga/multi-tenant-policy/05.diag b/specs/yoga/multi-tenant-policy/05.diag new file mode 100644 index 00000000..dab26cb6 --- /dev/null +++ b/specs/yoga/multi-tenant-policy/05.diag @@ -0,0 +1,62 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "VNF A" + "VNF B" + "Notification Server A" + "Notification Server B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Create VNF B using VNF Package B"]; + "User A" <-- "Tacker" [label = "Failed to create VNF B"]; + + "User B" -> "Tacker" [label = "Create VNF A using VNF Package A"]; + "User B" <-- "Tacker" [label = "Failed to create VNF A"]; + + "User A" -> "Tacker" [label = "Create VNF A"]; + "Tacker" -> "VNF A" [label = "Create VNF A"]; + "Tacker" <- "VNF A"; + "Tacker" -> "Notification Server A" [label = "send notification"]; + "Tacker" <- "Notification Server A"; + "User A" <-- "Tacker" [label = "Created VNF A"]; + + "User B" -> "Tacker" [label = "Create VNF B"]; + "Tacker" -> "VNF B" [label = "Create VNF B"]; + "Tacker" <- "VNF B"; + "Tacker" -> "Notification Server B" [label = "send notification"]; + "Tacker" <- "Notification Server B"; + "User B" <-- "Tacker" [label = "Created VNF B"]; + + "User A" -> "Notification Server A" + [label = "Check the exist notification that created VNF A"]; + "User A" <-- "Notification Server A" + [label = "check existing notification that created VNF A"]; + + "User B" -> "Notification Server B" + [label = "Check the not exist notification that created VNF A"]; + "User B" <-- "Notification Server B" + [label = "check not existing notification that created VNF A"]; + + "User B" -> "Notification Server B" + [label = "Check the exist notification that created VNF B"]; + "User B" <-- "Notification Server B" + [label = "check existing notification that created VNF B"]; + + "User A" -> "Notification Server A" + [label = "Check the not exist notification that created VNF B"]; + "User A" <-- "Notification Server A" + [label = "check not existing notification that created VNF B"]; + + + } diff --git a/specs/yoga/multi-tenant-policy/05.png b/specs/yoga/multi-tenant-policy/05.png new file mode 100644 index 00000000..a194b1a4 Binary files /dev/null and b/specs/yoga/multi-tenant-policy/05.png differ diff --git a/specs/yoga/multi-tenant-policy/06.diag b/specs/yoga/multi-tenant-policy/06.diag new file mode 100644 index 00000000..c5f0bbb2 --- /dev/null +++ b/specs/yoga/multi-tenant-policy/06.diag @@ -0,0 +1,92 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "VNF A" + "VNF B" + "VnfLcmOpOccs A" + "VnfLcmOpOccs B" + "Notification Server A" + "Notification Server B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Instantiate VNF B"]; + "User A" <-- "Tacker" [label = "Failed to Instantiate VNF B"]; + + "User B" -> "Tacker" [label = "Instantiate VNF A"]; + "User B" <-- "Tacker" [label = "Failed to Instantiate VNF A"]; + + "User A" -> "Tacker" [label = "Instantiate VNF A"]; + "Tacker" -> "VNF A" [label = "Instantiate VNF A"]; + "Tacker" <- "VNF A"; + "Tacker" -> "Notification Server A" [label = "send notification"]; + "Tacker" <- "Notification Server A"; + "User A" <-- "Tacker" [label = "Instantiated VNF A"]; + + "User B" -> "Tacker" [label = "Instantiate VNF B"]; + "Tacker" -> "VNF B" [label = "Instantiate VNF B"]; + "Tacker" <- "VNF B"; + "Tacker" -> "Notification Server B" [label = "send notification"]; + "Tacker" <- "Notification Server B"; + "User B" <-- "Tacker" [label = "Instantiated VNF B"]; + + "User A" -> "Tacker" [label = "Get VnfLcmOpOccs List of only VNF A"]; + "Tacker" -> "VnfLcmOpOccs A" + [label = "Return list of VnfLcmOpOccs"]; + "Tacker" <- "VnfLcmOpOccs A"; + "User A" <-- "Tacker" [label = "Get list of VnfLcmOpOccs"]; + + "User B" -> "Tacker" [label = "Get VnfLcmOpOccs List of only VNF B"]; + "Tacker" -> "VnfLcmOpOccs B" + [label = "Return list of VnfLcmOpOccs"]; + "Tacker" <- "VnfLcmOpOccs B"; + "User B" <-- "Tacker" [label = "Get list of VnfLcmOpOccs"]; + + "User A" -> "Tacker" [label = "Show VnfLcmOpOccs A"]; + "Tacker" -> "VnfLcmOpOccs A" [label = "Show VnfLcmOpOccs A"]; + "Tacker" <- "VnfLcmOpOccs A"; + "User A" <-- "Tacker" [label = "Showed VnfLcmOpOccs A"]; + + "User A" -> "Tacker" [label = "Show VnfLcmOpOccs B"]; + "User A" <-- "Tacker" [label = "failed to show VnfLcmOpOccs B"]; + + "User B" -> "Tacker" [label = "Show VnfLcmOpOccs B"]; + "Tacker" -> "VnfLcmOpOccs B" [label = "Show VnfLcmOpOccs B"]; + "Tacker" <- "VnfLcmOpOccs B"; + "User B" <-- "Tacker" [label = "Showed VnfLcmOpOccs B"]; + + "User B" -> "Tacker" [label = "Show VnfLcmOpOccs A"]; + "User B" <-- "Tacker" [label = "failed to show VnfLcmOpOccs A"]; + + "User A" -> "Notification Server A" + [label = "Check the exist notification that Instantiated VNF A"]; + "User A" <-- "Notification Server A" + [label = "check existing notification that Instantiated VNF A"]; + + "User B" -> "Notification Server B" + [label = "Check the not exist notification that Instantiated VNF A"]; + "User B" <-- "Notification Server B" + [label = "check not existing notification that Instantiated VNF A"]; + + "User B" -> "Notification Server B" + [label = "Check the exist notification that Instantiated VNF B"]; + "User B" <-- "Notification Server B" + [label = "check existing notification that Instantiated VNF B"]; + + "User A" -> "Notification Server A" + [label = "Check the not exist notification that Instantiated VNF B"]; + "User A" <-- "Notification Server A" + [label = "check not existing notification that Instantiated VNF B"]; + + + } diff --git a/specs/yoga/multi-tenant-policy/06.png b/specs/yoga/multi-tenant-policy/06.png new file mode 100644 index 00000000..543cd5ec Binary files /dev/null and b/specs/yoga/multi-tenant-policy/06.png differ diff --git a/specs/yoga/multi-tenant-policy/07.diag b/specs/yoga/multi-tenant-policy/07.diag new file mode 100644 index 00000000..8140ff01 --- /dev/null +++ b/specs/yoga/multi-tenant-policy/07.diag @@ -0,0 +1,91 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "VNF A" + "VNF B" + "VnfLcmOpOccs A" + "VnfLcmOpOccs B" + "Notification Server A" + "Notification Server B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Terminate VNF B"]; + "User A" <-- "Tacker" [label = "Failed to Terminate VNF B"]; + + "User B" -> "Tacker" [label = "Terminate VNF A"]; + "User B" <-- "Tacker" [label = "Failed to Terminate VNF A"]; + + "User A" -> "Tacker" [label = "Terminate VNF A"]; + "Tacker" -> "VNF A" [label = "Terminate VNF A"]; + "Tacker" <- "VNF A"; + "Tacker" -> "Notification Server A" [label = "send notification"]; + "Tacker" <- "Notification Server A"; + "User A" <-- "Tacker" [label = "Terminated VNF A"]; + + "User B" -> "Tacker" [label = "Terminate VNF B"]; + "Tacker" -> "VNF B" [label = "Terminate VNF B"]; + "Tacker" <- "VNF B"; + "Tacker" -> "Notification Server B" [label = "send notification"]; + "Tacker" <- "Notification Server B"; + "User B" <-- "Tacker" [label = "Terminated VNF B"]; + + "User A" -> "Tacker" [label = "Get VnfLcmOpOccs List of only VNF A"]; + "Tacker" -> "VnfLcmOpOccs A" + [label = "Return list of VnfLcmOpOccs"]; + "Tacker" <- "VnfLcmOpOccs A"; + "User A" <-- "Tacker" [label = "Get list of VnfLcmOpOccs"]; + + "User B" -> "Tacker" [label = "Get VnfLcmOpOccs List of only VNF B"]; + "Tacker" -> "VnfLcmOpOccs B" + [label = "Return list of VnfLcmOpOccs"]; + "Tacker" <- "VnfLcmOpOccs B"; + "User B" <-- "Tacker" [label = "Get list of VnfLcmOpOccs"]; + + "User A" -> "Tacker" [label = "Show VnfLcmOpOccs A"]; + "Tacker" -> "VnfLcmOpOccs A" [label = "Show VnfLcmOpOccs A"]; + "Tacker" <- "VnfLcmOpOccs A"; + "User A" <-- "Tacker" [label = "Showed VnfLcmOpOccs A"]; + + "User A" -> "Tacker" [label = "Show VnfLcmOpOccs B"]; + "User A" <-- "Tacker" [label = "failed to show VnfLcmOpOccs B"]; + + "User B" -> "Tacker" [label = "Show VnfLcmOpOccs B"]; + "Tacker" -> "VnfLcmOpOccs B" [label = "Show VnfLcmOpOccs B"]; + "Tacker" <- "VnfLcmOpOccs B"; + "User B" <-- "Tacker" [label = "Showed VnfLcmOpOccs B"]; + + "User B" -> "Tacker" [label = "Show VnfLcmOpOccs A"]; + "User B" <-- "Tacker" [label = "failed to show VnfLcmOpOccs A"]; + + "User A" -> "Notification Server A" + [label = "Check the exist notification that Terminated VNF A"]; + "User A" <-- "Notification Server A" + [label = "check existing notification that Terminated VNF A"]; + + "User B" -> "Notification Server B" + [label = "Check the not exist notification that Terminated VNF A"]; + "User B" <-- "Notification Server B" + [label = "check not existing notification that Terminated VNF A"]; + + "User B" -> "Notification Server B" + [label = "Check the exist notification that Terminated VNF B"]; + "User B" <-- "Notification Server B" + [label = "check existing notification that Terminated VNF B"]; + + "User A" -> "Notification Server A" + [label = "Check the not exist notification that Terminated VNF B"]; + "User A" <-- "Notification Server A" + [label = "check not existing notification that Terminated VNF B"]; + + } diff --git a/specs/yoga/multi-tenant-policy/07.png b/specs/yoga/multi-tenant-policy/07.png new file mode 100644 index 00000000..74ea950a Binary files /dev/null and b/specs/yoga/multi-tenant-policy/07.png differ diff --git a/specs/yoga/multi-tenant-policy/08.diag b/specs/yoga/multi-tenant-policy/08.diag new file mode 100644 index 00000000..7ad8d0d0 --- /dev/null +++ b/specs/yoga/multi-tenant-policy/08.diag @@ -0,0 +1,62 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "VNF A" + "VNF B" + "Notification Server A" + "Notification Server B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Delete VNF B"]; + "User A" <-- "Tacker" [label = "Failed to Delete VNF B"]; + + "User B" -> "Tacker" [label = "Delete VNF A"]; + "User B" <-- "Tacker" [label = "Failed to Delete VNF A"]; + + "User A" -> "Tacker" [label = "Delete VNF A"]; + "Tacker" -> "VNF A" [label = "Delete VNF A"]; + "Tacker" <- "VNF A"; + "Tacker" -> "Notification Server A" [label = "send notification"]; + "Tacker" <- "Notification Server A"; + "User A" <-- "Tacker" [label = "Deleted VNF A"]; + + "User B" -> "Tacker" [label = "Delete VNF B"]; + "Tacker" -> "VNF B" [label = "Delete VNF B"]; + "Tacker" <- "VNF B"; + "Tacker" -> "Notification Server B" [label = "send notification"]; + "Tacker" <- "Notification Server B"; + "User B" <-- "Tacker" [label = "Deleted VNF B"]; + + "User A" -> "Notification Server A" + [label = "Check the exist notification that Deleted VNF A"]; + "User A" <-- "Notification Server A" + [label = "check existing notification that Deleted VNF A"]; + + "User B" -> "Notification Server B" + [label = "Check the not exist notification that Deleted VNF A"]; + "User B" <-- "Notification Server B" + [label = "check not existing notification that Deleted VNF A"]; + + "User B" -> "Notification Server B" + [label = "Check the exist notification that Deleted VNF B"]; + "User B" <-- "Notification Server B" + [label = "check existing notification that Deleted VNF B"]; + + "User A" -> "Notification Server A" + [label = "Check the not exist notification that Deleted VNF B"]; + "User A" <-- "Notification Server A" + [label = "check not existing notification that Deleted VNF B"]; + + + } diff --git a/specs/yoga/multi-tenant-policy/08.png b/specs/yoga/multi-tenant-policy/08.png new file mode 100644 index 00000000..51b94b43 Binary files /dev/null and b/specs/yoga/multi-tenant-policy/08.png differ diff --git a/specs/yoga/multi-tenant-policy/09.diag b/specs/yoga/multi-tenant-policy/09.diag new file mode 100644 index 00000000..b39f72ae --- /dev/null +++ b/specs/yoga/multi-tenant-policy/09.diag @@ -0,0 +1,35 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "VNF Package A" + "VNF Package B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Delete VNF Package B"]; + "User A" <-- "Tacker" [label = "Failed to delete VNF Package B"]; + + "User B" -> "Tacker" [label = "Delete VNF Package A"]; + "User B" <-- "Tacker" [label = "Failed to delete VNF Package A"]; + + "User A" -> "Tacker" [label = "Delete VNF Package A"]; + "Tacker" -> "VNF Package A" [label = "Delete VNF Package A"]; + "Tacker" <- "VNF Package A"; + "User A" <-- "Tacker" [label = "Deleted VNF Package A"]; + + "User B" -> "Tacker" [label = "Delete VNF Package B"]; + "Tacker" -> "VNF Package B" [label = "Delete VNF Package B"]; + "Tacker" <- "VNF Package B"; + "User B" <-- "Tacker" [label = "Deleted VNF Package B"]; + + } diff --git a/specs/yoga/multi-tenant-policy/09.png b/specs/yoga/multi-tenant-policy/09.png new file mode 100644 index 00000000..18155894 Binary files /dev/null and b/specs/yoga/multi-tenant-policy/09.png differ diff --git a/specs/yoga/multi-tenant-policy/10.diag b/specs/yoga/multi-tenant-policy/10.diag new file mode 100644 index 00000000..264d442f --- /dev/null +++ b/specs/yoga/multi-tenant-policy/10.diag @@ -0,0 +1,36 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "Subscription A" + "Subscription B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Delete Subscription B"]; + "User A" <-- "Tacker" [label = "Failed to delete Subscription B"]; + + "User B" -> "Tacker" [label = "Delete Subscription A"]; + "User B" <-- "Tacker" [label = "Failed to delete Subscription A"]; + + + "User A" -> "Tacker" [label = "Delete Subscription A"]; + "Tacker" -> "Subscription A" [label = "Delete Subscription A"]; + "Tacker" <- "Subscription A"; + "User A" <-- "Tacker" [label = "Deleted Subscription A"]; + + "User B" -> "Tacker" [label = "Delete Subscription B"]; + "Tacker" -> "Subscription B" [label = "Delete Subscription B"]; + "Tacker" <- "Subscription B"; + "User B" <-- "Tacker" [label = "Deleted Subscription B"]; + + } diff --git a/specs/yoga/multi-tenant-policy/10.png b/specs/yoga/multi-tenant-policy/10.png new file mode 100644 index 00000000..d4085579 Binary files /dev/null and b/specs/yoga/multi-tenant-policy/10.png differ diff --git a/specs/yoga/multi-tenant-policy/11.diag b/specs/yoga/multi-tenant-policy/11.diag new file mode 100644 index 00000000..25a50385 --- /dev/null +++ b/specs/yoga/multi-tenant-policy/11.diag @@ -0,0 +1,77 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Test Class" + "User A" + "User B" + "Tacker" + "VIM A" + "VIM B" + "VNF A" + "VNF B" + + "Test Class" -> "User A" [label = "Set User"]; + "Test Class" <- "User A"; + + "Test Class" -> "User B" [label = "Set User"]; + "Test Class" <- "User B"; + + "User A" -> "Tacker" [label = "Register VIM A"]; + "Tacker" -> "VIM A" [label = "Register VIM A"]; + "Tacker" <- "VIM A"; + "User A" <-- "Tacker" [label = "Registered VIM A"]; + + "User B" -> "Tacker" [label = "Register VIM B"]; + "Tacker" -> "VIM B" [label = "Register VIM B"]; + "Tacker" <- "VIM B"; + "User A" <-- "Tacker" [label = "Registered VIM B"]; + + "User A" -> "Tacker" [label = "Create VNF A"]; + "Tacker" -> "VNF A" [label = "Create VNF A"]; + "Tacker" <- "VNF A"; + "User A" <-- "Tacker" [label = "Created VNF A"]; + + "User B" -> "Tacker" [label = "Create VNF B"]; + "Tacker" -> "VNF B" [label = "Create VNF B"]; + "Tacker" <- "VNF B"; + "User B" <-- "Tacker" [label = "Created VNF B"]; + + "User A" -> "Tacker" [label = "Instantiate VNF A with VIM B"]; + "User A" <-- "Tacker" [label = "Failed to Instantiate VNF A"]; + + "User B" -> "Tacker" [label = "Instantiate VNF B with VIM A"]; + "User B" <-- "Tacker" [label = "Failed to Instantiate VNF B"]; + + "User A" -> "Tacker" [label = "Instantiate VNF A"]; + "Tacker" -> "VNF A" [label = "Instantiate VNF A"]; + "Tacker" <- "VNF A"; + "User A" <-- "Tacker" [label = "Instantiated VNF A"]; + + "User B" -> "Tacker" [label = "Instantiate VNF B"]; + "Tacker" -> "VNF B" [label = "Instantiate VNF B"]; + "Tacker" <- "VNF B"; + "User B" <-- "Tacker" [label = "Instantiated VNF B"]; + + "User A" -> "Tacker" [label = "Terminate VNF A"]; + "Tacker" -> "VNF A" [label = "Terminate VNF A"]; + "Tacker" <- "VNF A"; + "User A" <-- "Tacker" [label = "Terminated VNF A"]; + + "User B" -> "Tacker" [label = "Terminate VNF B"]; + "Tacker" -> "VNF B" [label = "Terminate VNF B"]; + "Tacker" <- "VNF B"; + "User B" <-- "Tacker" [label = "Terminated VNF B"]; + + "User A" -> "Tacker" [label = "Delete VNF A"]; + "Tacker" -> "VNF A" [label = "Delete VNF A"]; + "Tacker" <- "VNF A"; + "User A" <-- "Tacker" [label = "Deleted VNF A"]; + + "User B" -> "Tacker" [label = "Delete VNF B"]; + "Tacker" -> "VNF B" [label = "Delete VNF B"]; + "Tacker" <- "VNF B"; + "User B" <-- "Tacker" [label = "Deleted VNF B"]; + + } diff --git a/specs/yoga/multi-tenant-policy/11.png b/specs/yoga/multi-tenant-policy/11.png new file mode 100644 index 00000000..6c504070 Binary files /dev/null and b/specs/yoga/multi-tenant-policy/11.png differ diff --git a/specs/yoga/prometheus-plugin-heal.rst b/specs/yoga/prometheus-plugin-heal.rst index 238e8e88..73f78dd8 100644 --- a/specs/yoga/prometheus-plugin-heal.rst +++ b/specs/yoga/prometheus-plugin-heal.rst @@ -352,36 +352,7 @@ Sequence for operation in Polling mode The following describes the processing flow of the Tacker after the Alertmanager sends the alert. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Alertmanager" - "Prometheus-Plugin" - "VnfFmDriver" - "Tacker DB" - - "Alertmanager" -> "Prometheus-Plugin" - [label = "1. Send alert to the specified URL"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "2. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "3. Determine whether the alert is AutoHeal or AutoScale", note = "If it is scale, refer to the processing flow of AutoScale"]; - "Prometheus-Plugin" -> "Tacker DB" - [label = "4. Find the corresponding ComputeResource from the DB"]; - "Prometheus-Plugin" <-- "Tacker DB" - [label = "InstantiatedVnfInfo.vnfcResourceInfo.computeResource"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "5. Convert received alert to alarm"]; - "Prometheus-Plugin" -> "VnfFmDriver" - [label = "6. Execute VnfFmDriver"]; - "VnfFmDriver" -> "Tacker DB" - [label = "7. Save alarm to DB"]; - "VnfFmDriver" <-- "Tacker DB" - "Prometheus-Plugin" <-- "VnfFmDriver" - } +.. image:: ./prometheus-plugin-heal/01.png 1. Alertmanager receives alert sent from Prometheus Server and inform the alert to specified URL(Tacker Server). @@ -416,43 +387,7 @@ the Alertmanager sends the alert. The following describes the Client's processing flow for Tacker using Polling mode to AutoHeal. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfFmDriver" - "Tacker DB" - - "Client" -> "Tacker-server" - [label = "8. Query alarms"]; - "Tacker-server" -> "Tacker-conductor" - [label = "9. Trigger synchronization task"]; - "Tacker-conductor" -> "VnfFmDriver" - [label = "10. Query alarms"]; - "VnfFmDriver" -> "Tacker DB" - [label = "11. Get alarms from DB according to conditions"]; - "VnfFmDriver" <-- "Tacker DB" - [label = "Alarms"]; - "Tacker-conductor" <-- "VnfFmDriver" - [label = "Alarms"]; - "Tacker-server" <-- "Tacker-conductor" - [label = "Alarms"]; - "Client" <-- "Tacker-server" - [label = "Alarms"]; - "Client" -> "Client" - [label = "12. Get VNFC information from alarm", note = "If no alarm is returned, the processing is over"]; - "Client" -> "Tacker-server" - [label = "13. Heal specified vnfc"]; - "Tacker-server" -> "Tacker-conductor" - [label = "14. Trigger asynchronous task", note = "The same with the default heal operation"]; - "Client" <-- "Tacker-server" - [label = "Response 202 Accepted"]; - } +.. image:: ./prometheus-plugin-heal/02.png 8. The Client sends a request to the Tacker to query @@ -565,75 +500,7 @@ Sequence for operation in Notify mode The following describes the Client's processing flow for Tacker using Notify mode to AutoHeal. -.. seqdiag:: - - seqdiag { - node_width = 90; - edge_length = 100; - - "Client" - "Alertmanager" - "Prometheus-Plugin" - "Tacker-server" - "Tacker-conductor" - "VnfFmDriver" - "Tacker DB" - - "Client" -> "Tacker-server" - [label = "1. Create subscription"]; - "Tacker-server" -> "Tacker-conductor" - [label = "Trigger synchronization task"]; - "Tacker-conductor" -> "VnfFmDriver" - [label = "execute VnfFmDriver"]; - "VnfFmDriver" -> "VnfFmDriver" - [label = "Get the callback_uri in the subscription"]; - "VnfFmDriver" -> "Client" - [label = "Send a GET request to the callback_uri in the Client."]; - "VnfFmDriver" <-- "Client" - [label = "Response 204 No Content"]; - "VnfFmDriver" -> "Tacker DB" - [label = "Save subscription to DB"]; - "VnfFmDriver" <-- "Tacker DB" - "Tacker-conductor" <-- "VnfFmDriver" - "Tacker-server" <-- "Tacker-conductor" - "Client" <-- "Tacker-server" - [label = "Response 201 Created"]; - "Alertmanager" -> "Prometheus-Plugin" - [label = "2. Send alert to the specified URL"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "3. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "4. Determine whether the alert is AutoHeal or AutoScale", note = "If it is scale, refer to the processing flow of AutoScale"]; - "Prometheus-Plugin" -> "Tacker DB" - [label = "5. Find the corresponding ComputeResource from the DB"]; - "Prometheus-Plugin" <-- "Tacker DB" - [label = "InstantiatedVnfInfo.vnfcResourceInfo.computeResource"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "6. Convert received alert to alarm"]; - "Prometheus-Plugin" -> "VnfFmDriver" - [label = "7. execute VnfFmDriver"]; - "VnfFmDriver" -> "Tacker DB" - [label = "8. Save alarm to DB"]; - "VnfFmDriver" <-- "Tacker DB" - "VnfFmDriver" -> "Tacker DB" - [label = "9. Get subscriptions from DB"]; - "VnfFmDriver" <-- "Tacker DB" - "VnfFmDriver" -> "VnfFmDriver" - [label = "10. Determine whether the alarm matches the subscriptions.", note = "If it does not match, the processing ends"]; - "VnfFmDriver" -> "Client" - [label = "11. Send a Notify Alarm request to the Client"]; - "VnfFmDriver" <-- "Client" - [label = "Response 204 No Content"]; - "Prometheus-Plugin" <-- "VnfFmDriver" - "Client" -> "Client" - [label = "12. Get VNFC information from alarm", note = "If no alarm is returned, the processing is over"]; - "Client" -> "Tacker-server" - [label = "13. Heal specified vnfc"]; - "Tacker-server" -> "Tacker-conductor" - [label = "14. Trigger asynchronous task", note = "The same with the default heal operation"]; - "Client" <-- "Tacker-server" - [label = "Response 202 Accepted"]; - } +.. image:: ./prometheus-plugin-heal/03.png * 1.The Client sends a request to create a subscription to the Tacker. After Tacker receives the subscription, it will get the callback_uri in it. diff --git a/specs/yoga/prometheus-plugin-heal/01.diag b/specs/yoga/prometheus-plugin-heal/01.diag new file mode 100644 index 00000000..3c97d13b --- /dev/null +++ b/specs/yoga/prometheus-plugin-heal/01.diag @@ -0,0 +1,29 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Alertmanager" + "Prometheus-Plugin" + "VnfFmDriver" + "Tacker DB" + + "Alertmanager" -> "Prometheus-Plugin" + [label = "1. Send alert to the specified URL"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "2. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "3. Determine whether the alert is AutoHeal or AutoScale", note = "If it is scale, refer to the processing flow of AutoScale"]; + "Prometheus-Plugin" -> "Tacker DB" + [label = "4. Find the corresponding ComputeResource from the DB"]; + "Prometheus-Plugin" <-- "Tacker DB" + [label = "InstantiatedVnfInfo.vnfcResourceInfo.computeResource"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "5. Convert received alert to alarm"]; + "Prometheus-Plugin" -> "VnfFmDriver" + [label = "6. Execute VnfFmDriver"]; + "VnfFmDriver" -> "Tacker DB" + [label = "7. Save alarm to DB"]; + "VnfFmDriver" <-- "Tacker DB" + "Prometheus-Plugin" <-- "VnfFmDriver" + } diff --git a/specs/yoga/prometheus-plugin-heal/01.png b/specs/yoga/prometheus-plugin-heal/01.png new file mode 100644 index 00000000..ca728565 Binary files /dev/null and b/specs/yoga/prometheus-plugin-heal/01.png differ diff --git a/specs/yoga/prometheus-plugin-heal/02.diag b/specs/yoga/prometheus-plugin-heal/02.diag new file mode 100644 index 00000000..3493ccfc --- /dev/null +++ b/specs/yoga/prometheus-plugin-heal/02.diag @@ -0,0 +1,36 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfFmDriver" + "Tacker DB" + + "Client" -> "Tacker-server" + [label = "8. Query alarms"]; + "Tacker-server" -> "Tacker-conductor" + [label = "9. Trigger synchronization task"]; + "Tacker-conductor" -> "VnfFmDriver" + [label = "10. Query alarms"]; + "VnfFmDriver" -> "Tacker DB" + [label = "11. Get alarms from DB according to conditions"]; + "VnfFmDriver" <-- "Tacker DB" + [label = "Alarms"]; + "Tacker-conductor" <-- "VnfFmDriver" + [label = "Alarms"]; + "Tacker-server" <-- "Tacker-conductor" + [label = "Alarms"]; + "Client" <-- "Tacker-server" + [label = "Alarms"]; + "Client" -> "Client" + [label = "12. Get VNFC information from alarm", note = "If no alarm is returned, the processing is over"]; + "Client" -> "Tacker-server" + [label = "13. Heal specified vnfc"]; + "Tacker-server" -> "Tacker-conductor" + [label = "14. Trigger asynchronous task", note = "The same with the default heal operation"]; + "Client" <-- "Tacker-server" + [label = "Response 202 Accepted"]; + } diff --git a/specs/yoga/prometheus-plugin-heal/02.png b/specs/yoga/prometheus-plugin-heal/02.png new file mode 100644 index 00000000..a98a810c Binary files /dev/null and b/specs/yoga/prometheus-plugin-heal/02.png differ diff --git a/specs/yoga/prometheus-plugin-heal/03.diag b/specs/yoga/prometheus-plugin-heal/03.diag new file mode 100644 index 00000000..145d72a9 --- /dev/null +++ b/specs/yoga/prometheus-plugin-heal/03.diag @@ -0,0 +1,68 @@ + + seqdiag { + node_width = 90; + edge_length = 100; + + "Client" + "Alertmanager" + "Prometheus-Plugin" + "Tacker-server" + "Tacker-conductor" + "VnfFmDriver" + "Tacker DB" + + "Client" -> "Tacker-server" + [label = "1. Create subscription"]; + "Tacker-server" -> "Tacker-conductor" + [label = "Trigger synchronization task"]; + "Tacker-conductor" -> "VnfFmDriver" + [label = "execute VnfFmDriver"]; + "VnfFmDriver" -> "VnfFmDriver" + [label = "Get the callback_uri in the subscription"]; + "VnfFmDriver" -> "Client" + [label = "Send a GET request to the callback_uri in the Client."]; + "VnfFmDriver" <-- "Client" + [label = "Response 204 No Content"]; + "VnfFmDriver" -> "Tacker DB" + [label = "Save subscription to DB"]; + "VnfFmDriver" <-- "Tacker DB" + "Tacker-conductor" <-- "VnfFmDriver" + "Tacker-server" <-- "Tacker-conductor" + "Client" <-- "Tacker-server" + [label = "Response 201 Created"]; + "Alertmanager" -> "Prometheus-Plugin" + [label = "2. Send alert to the specified URL"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "3. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "4. Determine whether the alert is AutoHeal or AutoScale", note = "If it is scale, refer to the processing flow of AutoScale"]; + "Prometheus-Plugin" -> "Tacker DB" + [label = "5. Find the corresponding ComputeResource from the DB"]; + "Prometheus-Plugin" <-- "Tacker DB" + [label = "InstantiatedVnfInfo.vnfcResourceInfo.computeResource"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "6. Convert received alert to alarm"]; + "Prometheus-Plugin" -> "VnfFmDriver" + [label = "7. execute VnfFmDriver"]; + "VnfFmDriver" -> "Tacker DB" + [label = "8. Save alarm to DB"]; + "VnfFmDriver" <-- "Tacker DB" + "VnfFmDriver" -> "Tacker DB" + [label = "9. Get subscriptions from DB"]; + "VnfFmDriver" <-- "Tacker DB" + "VnfFmDriver" -> "VnfFmDriver" + [label = "10. Determine whether the alarm matches the subscriptions.", note = "If it does not match, the processing ends"]; + "VnfFmDriver" -> "Client" + [label = "11. Send a Notify Alarm request to the Client"]; + "VnfFmDriver" <-- "Client" + [label = "Response 204 No Content"]; + "Prometheus-Plugin" <-- "VnfFmDriver" + "Client" -> "Client" + [label = "12. Get VNFC information from alarm", note = "If no alarm is returned, the processing is over"]; + "Client" -> "Tacker-server" + [label = "13. Heal specified vnfc"]; + "Tacker-server" -> "Tacker-conductor" + [label = "14. Trigger asynchronous task", note = "The same with the default heal operation"]; + "Client" <-- "Tacker-server" + [label = "Response 202 Accepted"]; + } diff --git a/specs/yoga/prometheus-plugin-heal/03.png b/specs/yoga/prometheus-plugin-heal/03.png new file mode 100644 index 00000000..d5b978f9 Binary files /dev/null and b/specs/yoga/prometheus-plugin-heal/03.png differ diff --git a/specs/yoga/support-heal-scale-in-user_lcm.rst b/specs/yoga/support-heal-scale-in-user_lcm.rst index f4c0105f..79d1c89b 100644 --- a/specs/yoga/support-heal-scale-in-user_lcm.rst +++ b/specs/yoga/support-heal-scale-in-user_lcm.rst @@ -62,29 +62,7 @@ Flow of the Stack update process * Heal VNF instance (POST /vnf_instances/(vnfinstanceId)/heal) -.. seqdiag:: - - seqdiag { - Client -> WSGIMiddleware [label = "1. HEAL VNF"]; - WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; - Client <-- WSGIMiddleware [label = "202 Accepted"]; - WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; - TackerConductor --> VnfLcmDriver [label = "heal_vnf(vnf_instance, heal_vnf_request)"]; - VnfLcmDriver --> OpenstackDriver [note = "Determine the following:\n 1. If UserData Class is specified in Instantiate.\n 2. heal exists in the specified class.\n 3. If heal does not exist in the UserData Class, do existing process."]; - OpenstackDriver --> OpenstackDriver [note = "Execute heal of UserData Class based on the HOT info,\n VNFD info, Stack parameter info and VNF info, \n and create Parameter"] - OpenstackDriver --> Heat [label = "2. Mark resource unhealthy"]; - OpenstackDriver <-- Heat; - OpenstackDriver --> Heat [label = "3. update stack"]; - OpenstackDriver <-- Heat [label = "stack updated"]; - VnfLcmDriver <-- OpenstackDriver; - VnfLcmDriver --> OpenstackDriver [label = "post_heal_vnf(vnf_instance, vim_connection_info,heal_vnf_request)"]; - OpenstackDriver --> Heat [label = "4. get updated resource data"]; - OpenstackDriver <-- Heat [label = "resources"]; - VnfLcmDriver <-- OpenstackDriver; - VnfLcmDriver -->> VnfLcmDriver [label = "5. update DB"]; - TackerConductor <-- VnfLcmDriver [label = "request successfully completed"]; - - } +.. image:: ./support-heal-scale-in-user_lcm/01.png Precondition: The resource representing the VNF instance has been created and instantiated. @@ -93,27 +71,7 @@ Precondition: The resource representing the VNF instance has been created and in * Scale VNF instance (POST /vnf_instances/{vnfInstanceId}/scale) -.. seqdiag:: - - seqdiag { - Client -> WSGIMiddleware [label = "1. Scale VNF"]; - WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; - Client <-- WSGIMiddleware [label = "202 Accepted"]; - WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; - TackerConductor --> VnfLcmDriver [label = "scale_vnf(vnf_instance, scale_vnf_request)"]; - VnfLcmDriver --> OpenstackDriver [note = "Determine the following:\n 1. If UserData Class is specified in Instantiate.\n 2. Scale exists in the specified class.\n 3. If Scale does not exist in the UserData Class, do existing process."]; - OpenstackDriver --> OpenstackDriver [note = "Execute heal of UserData Class based on the HOT info,\n VNFD info, Stack parameter info and VNF info, \n and create Parameter"] - OpenstackDriver --> Heat [label = "2. update stack"]; - OpenstackDriver <-- Heat [label = "stack updated"]; - VnfLcmDriver <-- OpenstackDriver; - VnfLcmDriver --> OpenstackDriver [label = "post_scale_vnf(vnf_instance, vim_connection_info,scale_vnf_request)"]; - OpenstackDriver --> Heat [label = "3. get updated resource data"]; - OpenstackDriver <-- Heat [label = "resources"]; - VnfLcmDriver <-- OpenstackDriver; - VnfLcmDriver -->> VnfLcmDriver [label = "5. update DB"]; - TackerConductor <-- VnfLcmDriver [label = "request successfully completed"]; - - } +.. image:: ./support-heal-scale-in-user_lcm/02.png Precondition: The resource representing the VNF instance has been created and instantiated. diff --git a/specs/yoga/support-heal-scale-in-user_lcm/01.diag b/specs/yoga/support-heal-scale-in-user_lcm/01.diag new file mode 100644 index 00000000..3e0e071e --- /dev/null +++ b/specs/yoga/support-heal-scale-in-user_lcm/01.diag @@ -0,0 +1,22 @@ + + seqdiag { + Client -> WSGIMiddleware [label = "1. HEAL VNF"]; + WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; + Client <-- WSGIMiddleware [label = "202 Accepted"]; + WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; + TackerConductor --> VnfLcmDriver [label = "heal_vnf(vnf_instance, heal_vnf_request)"]; + VnfLcmDriver --> OpenstackDriver [note = "Determine the following:\n 1. If UserData Class is specified in Instantiate.\n 2. heal exists in the specified class.\n 3. If heal does not exist in the UserData Class, do existing process."]; + OpenstackDriver --> OpenstackDriver [note = "Execute heal of UserData Class based on the HOT info,\n VNFD info, Stack parameter info and VNF info, \n and create Parameter"] + OpenstackDriver --> Heat [label = "2. Mark resource unhealthy"]; + OpenstackDriver <-- Heat; + OpenstackDriver --> Heat [label = "3. update stack"]; + OpenstackDriver <-- Heat [label = "stack updated"]; + VnfLcmDriver <-- OpenstackDriver; + VnfLcmDriver --> OpenstackDriver [label = "post_heal_vnf(vnf_instance, vim_connection_info,heal_vnf_request)"]; + OpenstackDriver --> Heat [label = "4. get updated resource data"]; + OpenstackDriver <-- Heat [label = "resources"]; + VnfLcmDriver <-- OpenstackDriver; + VnfLcmDriver -->> VnfLcmDriver [label = "5. update DB"]; + TackerConductor <-- VnfLcmDriver [label = "request successfully completed"]; + + } diff --git a/specs/yoga/support-heal-scale-in-user_lcm/01.png b/specs/yoga/support-heal-scale-in-user_lcm/01.png new file mode 100644 index 00000000..dc31bcea Binary files /dev/null and b/specs/yoga/support-heal-scale-in-user_lcm/01.png differ diff --git a/specs/yoga/support-heal-scale-in-user_lcm/02.diag b/specs/yoga/support-heal-scale-in-user_lcm/02.diag new file mode 100644 index 00000000..2ae2c39e --- /dev/null +++ b/specs/yoga/support-heal-scale-in-user_lcm/02.diag @@ -0,0 +1,20 @@ + + seqdiag { + Client -> WSGIMiddleware [label = "1. Scale VNF"]; + WSGIMiddleware -->> WSGIMiddleware [label = "request validation"]; + Client <-- WSGIMiddleware [label = "202 Accepted"]; + WSGIMiddleware -> TackerConductor [label = "Trigger asynchronous task"]; + TackerConductor --> VnfLcmDriver [label = "scale_vnf(vnf_instance, scale_vnf_request)"]; + VnfLcmDriver --> OpenstackDriver [note = "Determine the following:\n 1. If UserData Class is specified in Instantiate.\n 2. Scale exists in the specified class.\n 3. If Scale does not exist in the UserData Class, do existing process."]; + OpenstackDriver --> OpenstackDriver [note = "Execute heal of UserData Class based on the HOT info,\n VNFD info, Stack parameter info and VNF info, \n and create Parameter"] + OpenstackDriver --> Heat [label = "2. update stack"]; + OpenstackDriver <-- Heat [label = "stack updated"]; + VnfLcmDriver <-- OpenstackDriver; + VnfLcmDriver --> OpenstackDriver [label = "post_scale_vnf(vnf_instance, vim_connection_info,scale_vnf_request)"]; + OpenstackDriver --> Heat [label = "3. get updated resource data"]; + OpenstackDriver <-- Heat [label = "resources"]; + VnfLcmDriver <-- OpenstackDriver; + VnfLcmDriver -->> VnfLcmDriver [label = "5. update DB"]; + TackerConductor <-- VnfLcmDriver [label = "request successfully completed"]; + + } diff --git a/specs/yoga/support-heal-scale-in-user_lcm/02.png b/specs/yoga/support-heal-scale-in-user_lcm/02.png new file mode 100644 index 00000000..143eeb65 Binary files /dev/null and b/specs/yoga/support-heal-scale-in-user_lcm/02.png differ diff --git a/specs/yoga/support-nfv-solv3-error-handling.rst b/specs/yoga/support-nfv-solv3-error-handling.rst index 45fe61e9..f76ffed0 100644 --- a/specs/yoga/support-nfv-solv3-error-handling.rst +++ b/specs/yoga/support-nfv-solv3-error-handling.rst @@ -61,23 +61,7 @@ involved in error handling of lifecycle management operation. LCM operations that can perform Retry operation are Instantiation, Termination, Healing, Scaling, Modify and ChangeExternalConnectivity. -.. seqdiag:: - - seqdiag { - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/retry"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" [label = "start retry procedure"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" ->> "tacker-conductor" [label = "end retry procedure"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-nfv-solv3-error-handling/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -109,22 +93,7 @@ FAILED_TEMP, COMPLETED. LCM operations that can perform Fail operation are Instantiation, Termination, Healing, Scaling, Modify and ChangeExternalConnectivity. -.. seqdiag:: - - seqdiag { - Client; tacker-server; tacker-conductor; tacker-database; - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/fail"]; - "tacker-server" -> "tacker-database" - [label = "mark operation as failed"]; - "tacker-server" <-- "tacker-database" - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (FAILED)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - Client <-- "tacker-server" [label = "Response 200 OK"]; - } +.. image:: ./support-nfv-solv3-error-handling/02.png The procedure consists of the following steps as illustrated in above sequence: @@ -153,154 +122,25 @@ flow of rollback for each VNF lifecycle management operation. When the rollback operation is executed during VNF instantiation, VNFM removes all VMs and resources. -.. seqdiag:: - - seqdiag { - node_width = 90; - edge_length = 130; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLING_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "delete stack if exists"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLED_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-nfv-solv3-error-handling/03.png When the rollback operation is executed for scale-out VNF operation, VNFM reverts changes of VMs and resources specified in the middle of scale-out operation. -.. seqdiag:: - - seqdiag { - node_width = 75; - edge_length = 100; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLING_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "mark stack unhealthy (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id})"]; - "openstackDriver" <-- "heat" [label = ""]; - "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLED_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-nfv-solv3-error-handling/04.png When the rollback operation is executed during modifying VNF Information, VNFM simply updates the state of operation. -.. seqdiag:: - - seqdiag { - node_width = 90; - edge_length = 130; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLING_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLED_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-nfv-solv3-error-handling/05.png When the rollback operation is executed during changing external VNF connectivity, VNFM reverts changes of the external connectivity for VNF instances. -.. seqdiag:: - - seqdiag { - node_width = 90; - edge_length = 130; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLING_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; - "VnfLcmDriver" ->> "VnfLcmDriver" [label = "recreated stack parameters using instantiatedVnfInfo"]; - "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; - "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; - "openstackDriver" <-- "heat" [label = ""]; - "VnfLcmDriver" <-- "openstackDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLED_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-nfv-solv3-error-handling/06.png The procedure consists of the following steps as illustrated in above sequences: diff --git a/specs/yoga/support-nfv-solv3-error-handling/01.diag b/specs/yoga/support-nfv-solv3-error-handling/01.diag new file mode 100644 index 00000000..0e94ed21 --- /dev/null +++ b/specs/yoga/support-nfv-solv3-error-handling/01.diag @@ -0,0 +1,16 @@ + + seqdiag { + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/retry"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "start retry procedure"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" ->> "tacker-conductor" [label = "end retry procedure"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/support-nfv-solv3-error-handling/01.png b/specs/yoga/support-nfv-solv3-error-handling/01.png new file mode 100644 index 00000000..706a00eb Binary files /dev/null and b/specs/yoga/support-nfv-solv3-error-handling/01.png differ diff --git a/specs/yoga/support-nfv-solv3-error-handling/02.diag b/specs/yoga/support-nfv-solv3-error-handling/02.diag new file mode 100644 index 00000000..b8f5c622 --- /dev/null +++ b/specs/yoga/support-nfv-solv3-error-handling/02.diag @@ -0,0 +1,15 @@ + + seqdiag { + Client; tacker-server; tacker-conductor; tacker-database; + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/fail"]; + "tacker-server" -> "tacker-database" + [label = "mark operation as failed"]; + "tacker-server" <-- "tacker-database" + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (FAILED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + Client <-- "tacker-server" [label = "Response 200 OK"]; + } diff --git a/specs/yoga/support-nfv-solv3-error-handling/02.png b/specs/yoga/support-nfv-solv3-error-handling/02.png new file mode 100644 index 00000000..a20ebdb3 Binary files /dev/null and b/specs/yoga/support-nfv-solv3-error-handling/02.png differ diff --git a/specs/yoga/support-nfv-solv3-error-handling/03.diag b/specs/yoga/support-nfv-solv3-error-handling/03.diag new file mode 100644 index 00000000..334ae8f9 --- /dev/null +++ b/specs/yoga/support-nfv-solv3-error-handling/03.diag @@ -0,0 +1,33 @@ + + seqdiag { + node_width = 90; + edge_length = 130; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLING_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "delete stack if exists"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLED_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/support-nfv-solv3-error-handling/03.png b/specs/yoga/support-nfv-solv3-error-handling/03.png new file mode 100644 index 00000000..09d14745 Binary files /dev/null and b/specs/yoga/support-nfv-solv3-error-handling/03.png differ diff --git a/specs/yoga/support-nfv-solv3-error-handling/04.diag b/specs/yoga/support-nfv-solv3-error-handling/04.diag new file mode 100644 index 00000000..d502ef7c --- /dev/null +++ b/specs/yoga/support-nfv-solv3-error-handling/04.diag @@ -0,0 +1,35 @@ + + seqdiag { + node_width = 75; + edge_length = 100; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLING_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "mark stack unhealthy (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLED_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/support-nfv-solv3-error-handling/04.png b/specs/yoga/support-nfv-solv3-error-handling/04.png new file mode 100644 index 00000000..8154dca9 Binary files /dev/null and b/specs/yoga/support-nfv-solv3-error-handling/04.png differ diff --git a/specs/yoga/support-nfv-solv3-error-handling/05.diag b/specs/yoga/support-nfv-solv3-error-handling/05.diag new file mode 100644 index 00000000..61ee92b4 --- /dev/null +++ b/specs/yoga/support-nfv-solv3-error-handling/05.diag @@ -0,0 +1,27 @@ + + seqdiag { + node_width = 90; + edge_length = 130; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLING_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLED_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/support-nfv-solv3-error-handling/05.png b/specs/yoga/support-nfv-solv3-error-handling/05.png new file mode 100644 index 00000000..70202c90 Binary files /dev/null and b/specs/yoga/support-nfv-solv3-error-handling/05.png differ diff --git a/specs/yoga/support-nfv-solv3-error-handling/06.diag b/specs/yoga/support-nfv-solv3-error-handling/06.diag new file mode 100644 index 00000000..9abc5efe --- /dev/null +++ b/specs/yoga/support-nfv-solv3-error-handling/06.diag @@ -0,0 +1,34 @@ + + seqdiag { + node_width = 90; + edge_length = 130; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLING_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" ->> "VnfLcmDriver" [label = "recreated stack parameters using instantiatedVnfInfo"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLED_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/yoga/support-nfv-solv3-error-handling/06.png b/specs/yoga/support-nfv-solv3-error-handling/06.png new file mode 100644 index 00000000..ca216e34 Binary files /dev/null and b/specs/yoga/support-nfv-solv3-error-handling/06.png differ diff --git a/specs/yoga/upgrade-vnf-package.rst b/specs/yoga/upgrade-vnf-package.rst index 05fe84cf..61d9ad26 100644 --- a/specs/yoga/upgrade-vnf-package.rst +++ b/specs/yoga/upgrade-vnf-package.rst @@ -245,70 +245,7 @@ Below is a diagram of the Blue-Green deployment process for OpenStack VIM: Sequence for Blue-Green Deployment operation (For OpenStack VIM) -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "InfraDriver" - "CoordinateVNF script" - "TackerDB" - "VIM (OpenStack)" - "VNF" - "LB" - - Client -> "Tacker-server" - [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" ->> "Tacker-conductor" - [label = "2. ChangeCurrentVNFPackage"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "change_vnfpkg"]; - "VnfLcmDriver" -> "InfraDriver" - [label = "3. create_newVNF"]; - "InfraDriver" -> "VIM (OpenStack)" - [label = "4. create_newVNF"]; - "InfraDriver" <-- "VIM (OpenStack)" - [label = ""]; - "VnfLcmDriver" <-- "InfraDriver" - [label = ""]; - "VnfLcmDriver" -> "CoordinateVNF script" - [label = "5. CoordinateVNF"]; - "CoordinateVNF script" -> "VNF" - [label = "6. Coordinate new VNF"]; - "CoordinateVNF script" <-- "VNF" - [label = ""]; - "CoordinateVNF script" -> "LB" - [label = "7. update_loadbalancer"]; - "CoordinateVNF script" <-- "LB" - [label = ""]; - "CoordinateVNF script" -> "VNF" - [label = "8. Coordinate old VNF"]; - "CoordinateVNF script" <-- "VNF" - [label = ""]; - "VnfLcmDriver" <-- "CoordinateVNF script" - [label = ""]; - "VnfLcmDriver" -> "InfraDriver" - [label = "9. terminate_oldVNF"]; - "InfraDriver" -> "VIM (OpenStack)" - [label = "10. terminate_oldVNF"]; - "InfraDriver" <-- "VIM (OpenStack)" - [label = ""]; - "VnfLcmDriver" <-- "InfraDriver" - [label = ""]; - "VnfLcmDriver" -> "TackerDB" - [label = "11. Update_DB"]; - "VnfLcmDriver" <-- "TackerDB" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./upgrade-vnf-package/01.png #. The Client sends a POST request to the "Individual VNF instance" resource. @@ -388,59 +325,7 @@ Below is a diagram of the Rolling update process for OpenStack VIM: Sequence for Rolling update operation (For OpenStack VIM) -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "InfraDriver" - "CoordinateVNF script" - "TackerDB" - "VIM (OpenStack)" - "VNF" - - Client -> "Tacker-server" - [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" ->> "Tacker-conductor" - [label = "2. ChangeCurrentVNFPackage"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "change_vnfpkg"]; - "VnfLcmDriver" -> "InfraDriver" - [label = "3. change_vnfpkg_process"]; - "InfraDriver" -> "VIM (OpenStack)" - [label = "4. Get stack resource to update"]; - "InfraDriver" <-- "VIM (OpenStack)" - [label = ""]; - "InfraDriver" -> "VIM (OpenStack)" - [label = "5. update_stack"]; - "InfraDriver" <-- "VIM (OpenStack)" - [label = ""]; - "InfraDriver" -> "CoordinateVNF script" - [label = "6. CoordinateVNF"]; - "CoordinateVNF script" -> "VNF" - [label = "7. Coordinate resource"]; - "CoordinateVNF script" <-- "VNF" - [label = ""]; - "InfraDriver" <-- "CoordinateVNF script" - [label = ""]; - "InfraDriver" -> "InfraDriver" - [label = "8. Repeat steps 5 through 7 for each VNFC"]; - "VnfLcmDriver" <-- "InfraDriver" - [label = ""]; - "VnfLcmDriver" -> "TackerDB" - [label = "9. Update_DB"]; - "VnfLcmDriver" <-- "TackerDB" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./upgrade-vnf-package/02.png #. The Client sends a POST request to the "Individual VNF instance" resource. @@ -578,60 +463,7 @@ Below is a diagram of the Blue-Green deployment process for Kubernetes VIM: Sequence for Blue-Green deployment operation (For Kubernetes VIM) -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "InfraDriver" - "CoordinateVNF script" - "TackerDB" - "VIM (Kubernetes)" - - Client -> "Tacker-server" - [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" ->> "Tacker-conductor" - [label = "2. ChangeCurrentVNFPackage"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "change_vnfpkg"]; - "VnfLcmDriver" -> "InfraDriver" - [label = "3. apply_newDeployment"]; - "InfraDriver" -> "VIM (Kubernetes)" - [label = "4. apply_newDeployment"]; - "InfraDriver" <-- "VIM (Kubernetes)" - [label = ""]; - "VnfLcmDriver" <-- "InfraDriver" - [label = ""]; - "VnfLcmDriver" -> "CoordinateVNF script" - [label = "5. coordinate VNF"]; - "CoordinateVNF script" -> "VIM (Kubernetes)" - [label = "6. update_label"]; - "CoordinateVNF script" <-- "VIM (Kubernetes)" - [label = ""]; - "VnfLcmDriver" <-- "CoordinateVNF script" - [label = ""]; - "VnfLcmDriver" -> "InfraDriver" - [label = "7. terminate oldDeployment"]; - "InfraDriver" -> "VIM (Kubernetes)" - [label = "8. terminate Old Deployment"]; - "InfraDriver" <-- "VIM (Kubernetes)" - [label = ""]; - "VnfLcmDriver" <-- "InfraDriver" - [label = ""]; - "VnfLcmDriver" -> "TackerDB" - [label = "9. Update_DB"]; - "VnfLcmDriver" <-- "TackerDB" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./upgrade-vnf-package/03.png #. The Client sends a POST request to the "Individual VNF instance" resource. #. Tacker-server sends ChangeCurrentVNFPackage request to Tacker-conductor, then Tacker-conductor fetches an on-boarded VNF package and calls VnfLcmDriver. @@ -702,48 +534,7 @@ Below is a diagram of the Rolling update process for Kubernetes VIM: Sequence for Rolling update operation (For Kubernetes VIM) -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "InfraDriver" - "CoordinateVNF script" - "TackerDB" - "VIM (Kubernetes)" - - Client -> "Tacker-server" - [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" ->> "Tacker-conductor" - [label = "2. ChangeCurrentVNFPackage"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "change_vnfpkg"]; - "VnfLcmDriver" -> "InfraDriver" - [label = "3. apply_newDeployment"]; - "InfraDriver" -> "VIM (Kubernetes)" - [label = "4. apply_newDeployment"]; - "InfraDriver" <-- "VIM (Kubernetes)" - [label = ""]; - "VnfLcmDriver" <-- "InfraDriver" - [label = ""]; - "VnfLcmDriver" -> "CoordinateVNF script" - [label = "5. coordinate_VNF"]; - "VnfLcmDriver" <-- "CoordinateVNF script" - [label = ""]; - "VnfLcmDriver" -> "TackerDB" - [label = "6. Update_DB"]; - "VnfLcmDriver" <-- "TackerDB" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./upgrade-vnf-package/04.png #. The Client sends a POST request to the "Individual VNF instance" resource. diff --git a/specs/yoga/upgrade-vnf-package/01.diag b/specs/yoga/upgrade-vnf-package/01.diag new file mode 100644 index 00000000..4823df71 --- /dev/null +++ b/specs/yoga/upgrade-vnf-package/01.diag @@ -0,0 +1,63 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "InfraDriver" + "CoordinateVNF script" + "TackerDB" + "VIM (OpenStack)" + "VNF" + "LB" + + Client -> "Tacker-server" + [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" ->> "Tacker-conductor" + [label = "2. ChangeCurrentVNFPackage"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "change_vnfpkg"]; + "VnfLcmDriver" -> "InfraDriver" + [label = "3. create_newVNF"]; + "InfraDriver" -> "VIM (OpenStack)" + [label = "4. create_newVNF"]; + "InfraDriver" <-- "VIM (OpenStack)" + [label = ""]; + "VnfLcmDriver" <-- "InfraDriver" + [label = ""]; + "VnfLcmDriver" -> "CoordinateVNF script" + [label = "5. CoordinateVNF"]; + "CoordinateVNF script" -> "VNF" + [label = "6. Coordinate new VNF"]; + "CoordinateVNF script" <-- "VNF" + [label = ""]; + "CoordinateVNF script" -> "LB" + [label = "7. update_loadbalancer"]; + "CoordinateVNF script" <-- "LB" + [label = ""]; + "CoordinateVNF script" -> "VNF" + [label = "8. Coordinate old VNF"]; + "CoordinateVNF script" <-- "VNF" + [label = ""]; + "VnfLcmDriver" <-- "CoordinateVNF script" + [label = ""]; + "VnfLcmDriver" -> "InfraDriver" + [label = "9. terminate_oldVNF"]; + "InfraDriver" -> "VIM (OpenStack)" + [label = "10. terminate_oldVNF"]; + "InfraDriver" <-- "VIM (OpenStack)" + [label = ""]; + "VnfLcmDriver" <-- "InfraDriver" + [label = ""]; + "VnfLcmDriver" -> "TackerDB" + [label = "11. Update_DB"]; + "VnfLcmDriver" <-- "TackerDB" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/yoga/upgrade-vnf-package/01.png b/specs/yoga/upgrade-vnf-package/01.png new file mode 100644 index 00000000..80699bbd Binary files /dev/null and b/specs/yoga/upgrade-vnf-package/01.png differ diff --git a/specs/yoga/upgrade-vnf-package/02.diag b/specs/yoga/upgrade-vnf-package/02.diag new file mode 100644 index 00000000..5bafa837 --- /dev/null +++ b/specs/yoga/upgrade-vnf-package/02.diag @@ -0,0 +1,52 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "InfraDriver" + "CoordinateVNF script" + "TackerDB" + "VIM (OpenStack)" + "VNF" + + Client -> "Tacker-server" + [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" ->> "Tacker-conductor" + [label = "2. ChangeCurrentVNFPackage"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "change_vnfpkg"]; + "VnfLcmDriver" -> "InfraDriver" + [label = "3. change_vnfpkg_process"]; + "InfraDriver" -> "VIM (OpenStack)" + [label = "4. Get stack resource to update"]; + "InfraDriver" <-- "VIM (OpenStack)" + [label = ""]; + "InfraDriver" -> "VIM (OpenStack)" + [label = "5. update_stack"]; + "InfraDriver" <-- "VIM (OpenStack)" + [label = ""]; + "InfraDriver" -> "CoordinateVNF script" + [label = "6. CoordinateVNF"]; + "CoordinateVNF script" -> "VNF" + [label = "7. Coordinate resource"]; + "CoordinateVNF script" <-- "VNF" + [label = ""]; + "InfraDriver" <-- "CoordinateVNF script" + [label = ""]; + "InfraDriver" -> "InfraDriver" + [label = "8. Repeat steps 5 through 7 for each VNFC"]; + "VnfLcmDriver" <-- "InfraDriver" + [label = ""]; + "VnfLcmDriver" -> "TackerDB" + [label = "9. Update_DB"]; + "VnfLcmDriver" <-- "TackerDB" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/yoga/upgrade-vnf-package/02.png b/specs/yoga/upgrade-vnf-package/02.png new file mode 100644 index 00000000..90db5cd7 Binary files /dev/null and b/specs/yoga/upgrade-vnf-package/02.png differ diff --git a/specs/yoga/upgrade-vnf-package/03.diag b/specs/yoga/upgrade-vnf-package/03.diag new file mode 100644 index 00000000..7827cf29 --- /dev/null +++ b/specs/yoga/upgrade-vnf-package/03.diag @@ -0,0 +1,53 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "InfraDriver" + "CoordinateVNF script" + "TackerDB" + "VIM (Kubernetes)" + + Client -> "Tacker-server" + [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" ->> "Tacker-conductor" + [label = "2. ChangeCurrentVNFPackage"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "change_vnfpkg"]; + "VnfLcmDriver" -> "InfraDriver" + [label = "3. apply_newDeployment"]; + "InfraDriver" -> "VIM (Kubernetes)" + [label = "4. apply_newDeployment"]; + "InfraDriver" <-- "VIM (Kubernetes)" + [label = ""]; + "VnfLcmDriver" <-- "InfraDriver" + [label = ""]; + "VnfLcmDriver" -> "CoordinateVNF script" + [label = "5. coordinate VNF"]; + "CoordinateVNF script" -> "VIM (Kubernetes)" + [label = "6. update_label"]; + "CoordinateVNF script" <-- "VIM (Kubernetes)" + [label = ""]; + "VnfLcmDriver" <-- "CoordinateVNF script" + [label = ""]; + "VnfLcmDriver" -> "InfraDriver" + [label = "7. terminate oldDeployment"]; + "InfraDriver" -> "VIM (Kubernetes)" + [label = "8. terminate Old Deployment"]; + "InfraDriver" <-- "VIM (Kubernetes)" + [label = ""]; + "VnfLcmDriver" <-- "InfraDriver" + [label = ""]; + "VnfLcmDriver" -> "TackerDB" + [label = "9. Update_DB"]; + "VnfLcmDriver" <-- "TackerDB" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/yoga/upgrade-vnf-package/03.png b/specs/yoga/upgrade-vnf-package/03.png new file mode 100644 index 00000000..04a814e5 Binary files /dev/null and b/specs/yoga/upgrade-vnf-package/03.png differ diff --git a/specs/yoga/upgrade-vnf-package/04.diag b/specs/yoga/upgrade-vnf-package/04.diag new file mode 100644 index 00000000..131139a8 --- /dev/null +++ b/specs/yoga/upgrade-vnf-package/04.diag @@ -0,0 +1,41 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "InfraDriver" + "CoordinateVNF script" + "TackerDB" + "VIM (Kubernetes)" + + Client -> "Tacker-server" + [label = "1. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" ->> "Tacker-conductor" + [label = "2. ChangeCurrentVNFPackage"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "change_vnfpkg"]; + "VnfLcmDriver" -> "InfraDriver" + [label = "3. apply_newDeployment"]; + "InfraDriver" -> "VIM (Kubernetes)" + [label = "4. apply_newDeployment"]; + "InfraDriver" <-- "VIM (Kubernetes)" + [label = ""]; + "VnfLcmDriver" <-- "InfraDriver" + [label = ""]; + "VnfLcmDriver" -> "CoordinateVNF script" + [label = "5. coordinate_VNF"]; + "VnfLcmDriver" <-- "CoordinateVNF script" + [label = ""]; + "VnfLcmDriver" -> "TackerDB" + [label = "6. Update_DB"]; + "VnfLcmDriver" <-- "TackerDB" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/yoga/upgrade-vnf-package/04.png b/specs/yoga/upgrade-vnf-package/04.png new file mode 100644 index 00000000..8bff2907 Binary files /dev/null and b/specs/yoga/upgrade-vnf-package/04.png differ diff --git a/specs/zed/code-refactoring.rst b/specs/zed/code-refactoring.rst index a8e4708a..87c2817b 100644 --- a/specs/zed/code-refactoring.rst +++ b/specs/zed/code-refactoring.rst @@ -86,422 +86,48 @@ by passing ``"stack_id"`` obtained when the process of each LCM operation. + Sequence before changing (Instantiate) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "instantiate"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "POST stacks"]; - "Tacker-conductor" <-- "Heat" - [label = "201 Created"]; - - === start of the checking of the resource status === - - === loop start (Repeat until 'CREATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - - "Tacker-conductor" -> "Heat" - [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/01.png + Sequence after changing (Instantiate) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "instantiate"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "POST stacks"]; - "Tacker-conductor" <-- "Heat" - [label = "201 Created"]; - - "Tacker-conductor" -> "Tacker-conductor" - [note = "Get 'stack_id' parameter from Response and \nsave it to a local variable"]; - - === start of the checking of the resource status === - - === loop start (Repeat until 'CREATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}/{stack_id}", leftnote="Can be sent with the Heat API without redirection"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/02.png + For Terminate + Sequence before changing (Terminate) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/terminate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "terminate"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "DELETE stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - "Tacker-conductor" -> "Heat" - [label = "(Redirection) DELETE stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "204 No Content"]; - - === start of the checking of the resource status === - - === loop start (Repeat until 'DELETE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - - "Tacker-conductor" -> "Heat" - [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/03.png + Sequence after changing (Terminate) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/terminate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "terminate"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "DELETE stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - "Tacker-conductor" -> "Heat" - [label = "(Redirection) DELETE stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "204 No Content"]; - - === start of the checking of the resource status === - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}", leftnote = "First check of the resource status"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - - "Tacker-conductor" -> "Heat" - [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - "Tacker-conductor" -> "Tacker-conductor" - [note = "Get 'stack_id' parameter from Response and \nsave it to a local variable"]; - - === loop start (Repeat until 'DELETE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Second and subsequent check of resource state. \nCan be sent with the Heat API without redirection."]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/04.png + For Scale + Sequence before changing (Scale) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - "Tacker-server" -> "Tacker-conductor" - [label = "scale"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "PATCH stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - "Tacker-conductor" -> "Heat" - [label = "(Redirection) PATCH stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "202 Accepted"]; - - === start of the checking of the resource status === - - === loop start (Repeat until 'UPDATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - - "Tacker-conductor" -> "Heat" - [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/05.png + Sequence after changing (Scale) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - "Tacker-server" -> "Tacker-conductor" - [label = "scale"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "PATCH stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - "Tacker-conductor" -> "Heat" - [label = "(Redirection) PATCH stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "202 Accepted"]; - - === start of the checking of the resource status === - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}", leftnote = "First check of the resource status"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - - "Tacker-conductor" -> "Heat" - [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - "Tacker-conductor" -> "Tacker-conductor" - [note = "Get 'stack_id' parameter from Response and \nsave it to a local variable"]; - - === loop start (Repeat until 'UPDATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Second and subsequent check of resource state. \nCan be sent with the Heat API without redirection."]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/06.png + For Heal + Sequence before changing (Heal) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - "Tacker-server" -> "Tacker-conductor" - [label = "heal"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "PATCH stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - "Tacker-conductor" -> "Heat" - [label = "(Redirection) PATCH stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "202 Accepted"]; - - === start of the checking of the resource status === - - === loop start (Repeat until 'UPDATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - - "Tacker-conductor" -> "Heat" - [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/07.png + Sequence after changing (Heal) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - "Tacker-server" -> "Tacker-conductor" - [label = "heal"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "PATCH stacks/{stack_name}"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - "Tacker-conductor" -> "Heat" - [label = "(Redirection) PATCH stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "202 Accepted"]; - - === start of the checking of the resource status === - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}", leftnote = "First check of the resource status"]; - "Tacker-conductor" <-- "Heat" - [label = "302 Found"]; - - "Tacker-conductor" -> "Heat" - [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - "Tacker-conductor" -> "Tacker-conductor" - [note = "Get 'stack_id' parameter from Response and \nsave it to a local variable"]; - - === loop start (Repeat until 'UPDATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Second and subsequent check of resource state. \nCan be sent with the Heat API without redirection."]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/08.png Option 2: Store "stack_id" in Tacker DB obtained during the Instantiate process @@ -519,189 +145,22 @@ in the VnfInstanceV2.instantiatedVnfInfo.metadata field. + Sequence after changing (Instantiate) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "TackerDB" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "instantiate"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "Heat" - [label = "POST stacks"]; - "Tacker-conductor" <-- "Heat" - [label = "201 Created"]; - - "Tacker-conductor" -> "Tacker-conductor" - [note = "Get 'stack_id' parameter from Response"]; - - "Tacker-conductor" -> "TackerDB" - [label = "Save 'stack_id' in TackerDB"]; - "Tacker-conductor" <-- "TackerDB" - - === start of the checking of the resource status === - - === loop start (Repeat until 'CREATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/09.png + Sequence after changing (Terminate) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "TackerDB" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/terminate"]; - "Tacker-server" -> "Tacker-conductor" - [label = "terminate"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "TackerDB" - [label = "Get 'stack_id' in TackerDB", note = "Get 'stack_id' \n from the VnfInstanceV2.instantiatedVnfInfo.metadata field"]; - "Tacker-conductor" <-- "TackerDB" - - "Tacker-conductor" -> "Heat" - [label = "DELETE stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; - "Tacker-conductor" <-- "Heat" - [label = "204 No Content"]; - - === start of the checking of the resource status === - - === loop start (Repeat until 'DELETE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/10.png + Sequence after changing (Scale) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "TackerDB" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; - "Tacker-server" -> "Tacker-conductor" - [label = "scale"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "TackerDB" - [label = "Get 'stack_id' in TackerDB", note = "Get 'stack_id' \n from the VnfInstanceV2.instantiatedVnfInfo.metadata field"]; - "Tacker-conductor" <-- "TackerDB" - - "Tacker-conductor" -> "Heat" - [label = "PATCH stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; - "Tacker-conductor" <-- "Heat" - [label = "202 Accepted"]; - - === start of the checking of the resource status === - - === loop start (Repeat until 'UPDATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/11.png + Sequence after changing (Heal) - .. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "TackerDB" - "Heat" - - "Client" -> "Tacker-server" - [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; - "Tacker-server" -> "Tacker-conductor" - [label = "heal"]; - - ... ------------- Omitted from description ------------- ... - - "Tacker-conductor" -> "TackerDB" - [label = "Get 'stack_id' in TackerDB", note = "Get 'stack_id' \n from the VnfInstanceV2.instantiatedVnfInfo.metadata field"]; - "Tacker-conductor" <-- "TackerDB" - - "Tacker-conductor" -> "Heat" - [label = "PATCH stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; - "Tacker-conductor" <-- "Heat" - [label = "202 Accepted"]; - - === start of the checking of the resource status === - - === loop start (Repeat until 'UPDATE_COMPLETE')=== - - "Tacker-conductor" -> "Heat" - [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; - "Tacker-conductor" <-- "Heat" - [label = "200 OK"]; - - === loop end === - - === end of the checking of the resource status === - - } + .. image:: ./code-refactoring/12.png + | Similar performance improvements can be made during other LCM operations. | For example, in the "Rollback" process for Instantiate, @@ -751,34 +210,7 @@ to send Notifications related to specific vnfdId. The following shows the flow of Notify communication processing with the Subscription filter by vnfdId. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "TackerDB" - - "Client" -> "Tacker-server" - [label = "Trigger operation sending notification"]; - "Tacker-server" -> "Tacker-conductor" - [label = "send_notification"]; - "Tacker-conductor" -> "TackerDB" - [label = "Get specific vnf instance id"]; - "Tacker-conductor" <-- "TackerDB" - [label = "vnf instance id"]; - "Tacker-conductor" -> "Tacker-conductor" - [label = "Filters the subscriptions by a specific vnfdid"]; - "Client" <- "Tacker-conductor" - [label = "Sends Notify filtered on a specific vnfdid."]; - "Client" --> "Tacker-conductor" - [label = "response"]; - "Tacker-server" <-- "Tacker-conductor" - [label = "return"]; - } +.. image:: ./code-refactoring/13.png 3. Refactor the Tacker Output Logs (for Tacker v1/v2 API) --------------------------------------------------------- diff --git a/specs/zed/code-refactoring/01.diag b/specs/zed/code-refactoring/01.diag new file mode 100644 index 00000000..de2cd64a --- /dev/null +++ b/specs/zed/code-refactoring/01.diag @@ -0,0 +1,41 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "instantiate"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "POST stacks"]; + "Tacker-conductor" <-- "Heat" + [label = "201 Created"]; + + === start of the checking of the resource status === + + === loop start (Repeat until 'CREATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + + "Tacker-conductor" -> "Heat" + [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/01.png b/specs/zed/code-refactoring/01.png new file mode 100644 index 00000000..733f3878 Binary files /dev/null and b/specs/zed/code-refactoring/01.png differ diff --git a/specs/zed/code-refactoring/02.diag b/specs/zed/code-refactoring/02.diag new file mode 100644 index 00000000..aba88329 --- /dev/null +++ b/specs/zed/code-refactoring/02.diag @@ -0,0 +1,39 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "instantiate"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "POST stacks"]; + "Tacker-conductor" <-- "Heat" + [label = "201 Created"]; + + "Tacker-conductor" -> "Tacker-conductor" + [note = "Get 'stack_id' parameter from Response and \nsave it to a local variable"]; + + === start of the checking of the resource status === + + === loop start (Repeat until 'CREATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}/{stack_id}", leftnote="Can be sent with the Heat API without redirection"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/02.png b/specs/zed/code-refactoring/02.png new file mode 100644 index 00000000..fabf918f Binary files /dev/null and b/specs/zed/code-refactoring/02.png differ diff --git a/specs/zed/code-refactoring/03.diag b/specs/zed/code-refactoring/03.diag new file mode 100644 index 00000000..0df0a72a --- /dev/null +++ b/specs/zed/code-refactoring/03.diag @@ -0,0 +1,45 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/terminate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "terminate"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "DELETE stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + "Tacker-conductor" -> "Heat" + [label = "(Redirection) DELETE stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "204 No Content"]; + + === start of the checking of the resource status === + + === loop start (Repeat until 'DELETE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + + "Tacker-conductor" -> "Heat" + [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/03.png b/specs/zed/code-refactoring/03.png new file mode 100644 index 00000000..13ba6550 Binary files /dev/null and b/specs/zed/code-refactoring/03.png differ diff --git a/specs/zed/code-refactoring/04.diag b/specs/zed/code-refactoring/04.diag new file mode 100644 index 00000000..fc8d1440 --- /dev/null +++ b/specs/zed/code-refactoring/04.diag @@ -0,0 +1,53 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/terminate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "terminate"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "DELETE stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + "Tacker-conductor" -> "Heat" + [label = "(Redirection) DELETE stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "204 No Content"]; + + === start of the checking of the resource status === + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}", leftnote = "First check of the resource status"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + + "Tacker-conductor" -> "Heat" + [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + "Tacker-conductor" -> "Tacker-conductor" + [note = "Get 'stack_id' parameter from Response and \nsave it to a local variable"]; + + === loop start (Repeat until 'DELETE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Second and subsequent check of resource state. \nCan be sent with the Heat API without redirection."]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/04.png b/specs/zed/code-refactoring/04.png new file mode 100644 index 00000000..f1b80adc Binary files /dev/null and b/specs/zed/code-refactoring/04.png differ diff --git a/specs/zed/code-refactoring/05.diag b/specs/zed/code-refactoring/05.diag new file mode 100644 index 00000000..cc45789f --- /dev/null +++ b/specs/zed/code-refactoring/05.diag @@ -0,0 +1,45 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + "Tacker-server" -> "Tacker-conductor" + [label = "scale"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "PATCH stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + "Tacker-conductor" -> "Heat" + [label = "(Redirection) PATCH stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "202 Accepted"]; + + === start of the checking of the resource status === + + === loop start (Repeat until 'UPDATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + + "Tacker-conductor" -> "Heat" + [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/05.png b/specs/zed/code-refactoring/05.png new file mode 100644 index 00000000..0f1c033a Binary files /dev/null and b/specs/zed/code-refactoring/05.png differ diff --git a/specs/zed/code-refactoring/06.diag b/specs/zed/code-refactoring/06.diag new file mode 100644 index 00000000..8b1ea1bd --- /dev/null +++ b/specs/zed/code-refactoring/06.diag @@ -0,0 +1,53 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + "Tacker-server" -> "Tacker-conductor" + [label = "scale"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "PATCH stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + "Tacker-conductor" -> "Heat" + [label = "(Redirection) PATCH stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "202 Accepted"]; + + === start of the checking of the resource status === + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}", leftnote = "First check of the resource status"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + + "Tacker-conductor" -> "Heat" + [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + "Tacker-conductor" -> "Tacker-conductor" + [note = "Get 'stack_id' parameter from Response and \nsave it to a local variable"]; + + === loop start (Repeat until 'UPDATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Second and subsequent check of resource state. \nCan be sent with the Heat API without redirection."]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/06.png b/specs/zed/code-refactoring/06.png new file mode 100644 index 00000000..eed0d516 Binary files /dev/null and b/specs/zed/code-refactoring/06.png differ diff --git a/specs/zed/code-refactoring/07.diag b/specs/zed/code-refactoring/07.diag new file mode 100644 index 00000000..508b87e4 --- /dev/null +++ b/specs/zed/code-refactoring/07.diag @@ -0,0 +1,45 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + "Tacker-server" -> "Tacker-conductor" + [label = "heal"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "PATCH stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + "Tacker-conductor" -> "Heat" + [label = "(Redirection) PATCH stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "202 Accepted"]; + + === start of the checking of the resource status === + + === loop start (Repeat until 'UPDATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + + "Tacker-conductor" -> "Heat" + [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/07.png b/specs/zed/code-refactoring/07.png new file mode 100644 index 00000000..9caf0b96 Binary files /dev/null and b/specs/zed/code-refactoring/07.png differ diff --git a/specs/zed/code-refactoring/08.diag b/specs/zed/code-refactoring/08.diag new file mode 100644 index 00000000..90ecc034 --- /dev/null +++ b/specs/zed/code-refactoring/08.diag @@ -0,0 +1,53 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + "Tacker-server" -> "Tacker-conductor" + [label = "heal"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "PATCH stacks/{stack_name}"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + "Tacker-conductor" -> "Heat" + [label = "(Redirection) PATCH stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "202 Accepted"]; + + === start of the checking of the resource status === + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}", leftnote = "First check of the resource status"]; + "Tacker-conductor" <-- "Heat" + [label = "302 Found"]; + + "Tacker-conductor" -> "Heat" + [label = "(Redirection) GET stacks/{stack_name}/{stack_id}"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + "Tacker-conductor" -> "Tacker-conductor" + [note = "Get 'stack_id' parameter from Response and \nsave it to a local variable"]; + + === loop start (Repeat until 'UPDATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Second and subsequent check of resource state. \nCan be sent with the Heat API without redirection."]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/08.png b/specs/zed/code-refactoring/08.png new file mode 100644 index 00000000..6100bc1f Binary files /dev/null and b/specs/zed/code-refactoring/08.png differ diff --git a/specs/zed/code-refactoring/09.diag b/specs/zed/code-refactoring/09.diag new file mode 100644 index 00000000..761e2643 --- /dev/null +++ b/specs/zed/code-refactoring/09.diag @@ -0,0 +1,44 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "TackerDB" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/instantiate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "instantiate"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "Heat" + [label = "POST stacks"]; + "Tacker-conductor" <-- "Heat" + [label = "201 Created"]; + + "Tacker-conductor" -> "Tacker-conductor" + [note = "Get 'stack_id' parameter from Response"]; + + "Tacker-conductor" -> "TackerDB" + [label = "Save 'stack_id' in TackerDB"]; + "Tacker-conductor" <-- "TackerDB" + + === start of the checking of the resource status === + + === loop start (Repeat until 'CREATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/09.png b/specs/zed/code-refactoring/09.png new file mode 100644 index 00000000..d6c6a7f9 Binary files /dev/null and b/specs/zed/code-refactoring/09.png differ diff --git a/specs/zed/code-refactoring/10.diag b/specs/zed/code-refactoring/10.diag new file mode 100644 index 00000000..6f51aa53 --- /dev/null +++ b/specs/zed/code-refactoring/10.diag @@ -0,0 +1,41 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "TackerDB" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/terminate"]; + "Tacker-server" -> "Tacker-conductor" + [label = "terminate"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "TackerDB" + [label = "Get 'stack_id' in TackerDB", note = "Get 'stack_id' \n from the VnfInstanceV2.instantiatedVnfInfo.metadata field"]; + "Tacker-conductor" <-- "TackerDB" + + "Tacker-conductor" -> "Heat" + [label = "DELETE stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; + "Tacker-conductor" <-- "Heat" + [label = "204 No Content"]; + + === start of the checking of the resource status === + + === loop start (Repeat until 'DELETE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/10.png b/specs/zed/code-refactoring/10.png new file mode 100644 index 00000000..5794d3a3 Binary files /dev/null and b/specs/zed/code-refactoring/10.png differ diff --git a/specs/zed/code-refactoring/11.diag b/specs/zed/code-refactoring/11.diag new file mode 100644 index 00000000..da8537bf --- /dev/null +++ b/specs/zed/code-refactoring/11.diag @@ -0,0 +1,41 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "TackerDB" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/scale"]; + "Tacker-server" -> "Tacker-conductor" + [label = "scale"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "TackerDB" + [label = "Get 'stack_id' in TackerDB", note = "Get 'stack_id' \n from the VnfInstanceV2.instantiatedVnfInfo.metadata field"]; + "Tacker-conductor" <-- "TackerDB" + + "Tacker-conductor" -> "Heat" + [label = "PATCH stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; + "Tacker-conductor" <-- "Heat" + [label = "202 Accepted"]; + + === start of the checking of the resource status === + + === loop start (Repeat until 'UPDATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/11.png b/specs/zed/code-refactoring/11.png new file mode 100644 index 00000000..589d54a0 Binary files /dev/null and b/specs/zed/code-refactoring/11.png differ diff --git a/specs/zed/code-refactoring/12.diag b/specs/zed/code-refactoring/12.diag new file mode 100644 index 00000000..a2c3bc0e --- /dev/null +++ b/specs/zed/code-refactoring/12.diag @@ -0,0 +1,41 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "TackerDB" + "Heat" + + "Client" -> "Tacker-server" + [label = "POST /vnf_instances/{vnfInstanceId}/heal"]; + "Tacker-server" -> "Tacker-conductor" + [label = "heal"]; + + ... ------------- Omitted from description ------------- ... + + "Tacker-conductor" -> "TackerDB" + [label = "Get 'stack_id' in TackerDB", note = "Get 'stack_id' \n from the VnfInstanceV2.instantiatedVnfInfo.metadata field"]; + "Tacker-conductor" <-- "TackerDB" + + "Tacker-conductor" -> "Heat" + [label = "PATCH stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; + "Tacker-conductor" <-- "Heat" + [label = "202 Accepted"]; + + === start of the checking of the resource status === + + === loop start (Repeat until 'UPDATE_COMPLETE')=== + + "Tacker-conductor" -> "Heat" + [label = "GET stacks/{stack_name}/{stack_id}", leftnote = "Can be sent with the Heat API without redirection"]; + "Tacker-conductor" <-- "Heat" + [label = "200 OK"]; + + === loop end === + + === end of the checking of the resource status === + + } diff --git a/specs/zed/code-refactoring/12.png b/specs/zed/code-refactoring/12.png new file mode 100644 index 00000000..55052d48 Binary files /dev/null and b/specs/zed/code-refactoring/12.png differ diff --git a/specs/zed/code-refactoring/13.diag b/specs/zed/code-refactoring/13.diag new file mode 100644 index 00000000..790c21c3 --- /dev/null +++ b/specs/zed/code-refactoring/13.diag @@ -0,0 +1,27 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "TackerDB" + + "Client" -> "Tacker-server" + [label = "Trigger operation sending notification"]; + "Tacker-server" -> "Tacker-conductor" + [label = "send_notification"]; + "Tacker-conductor" -> "TackerDB" + [label = "Get specific vnf instance id"]; + "Tacker-conductor" <-- "TackerDB" + [label = "vnf instance id"]; + "Tacker-conductor" -> "Tacker-conductor" + [label = "Filters the subscriptions by a specific vnfdid"]; + "Client" <- "Tacker-conductor" + [label = "Sends Notify filtered on a specific vnfdid."]; + "Client" --> "Tacker-conductor" + [label = "response"]; + "Tacker-server" <-- "Tacker-conductor" + [label = "return"]; + } diff --git a/specs/zed/code-refactoring/13.png b/specs/zed/code-refactoring/13.png new file mode 100644 index 00000000..2cfde460 Binary files /dev/null and b/specs/zed/code-refactoring/13.png differ diff --git a/specs/zed/database-synchronization.rst b/specs/zed/database-synchronization.rst index 94b48318..a095b1ad 100644 --- a/specs/zed/database-synchronization.rst +++ b/specs/zed/database-synchronization.rst @@ -122,108 +122,7 @@ The diagram below shows the database synchronization. Sequence for periodic database synchronization: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver/VnfLcmDriverV2" - "KubernetesInfraDriver" - "TackerDB" - "Kubernetes client" - - === Start periodic database synchronization. === - "Tacker-conductor" -> "VnfLcmDriver/VnfLcmDriverV2" - [label = "1. Start periodic database synchronization."]; - "VnfLcmDriver/VnfLcmDriverV2" -> "KubernetesInfraDriver" - [label = "check pod status"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "2. Get pod information"]; - "KubernetesInfraDriver" <-- "TackerDB" - [label = "return pod information"]; - "KubernetesInfraDriver" -> "Kubernetes client" - [label = "3. Get pod information"]; - "KubernetesInfraDriver" <-- "Kubernetes client" - [label = "return pod information"]; - "KubernetesInfraDriver" -> "KubernetesInfraDriver" - [label = "4. Check differences"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "5. If there are difference, update pod information"]; - - "Client" -> "Tacker-server" - [label = "LCM request", rightnote = "This is a sample of LCM request,\nnot intending to describe specific LCM."]; - "Tacker-server" -> "Tacker-conductor" - [label = "LCM request"]; - "Tacker-conductor" -> "VnfLcmDriver/VnfLcmDriverV2" - [label = "LCM request"]; - "VnfLcmDriver/VnfLcmDriverV2" -> "KubernetesInfraDriver" - [label = "LCM request"]; - "VnfLcmDriver/VnfLcmDriverV2" <-- "KubernetesInfraDriver" - [label = "Return error due to synchronization", rightnote = "LCM requests will be rejected\nduring synchronization."]; - "Tacker-conductor" <-- "VnfLcmDriver/VnfLcmDriverV2" - [label = "Return error due to synchronization"]; - "Tacker-server" <-- "Tacker-conductor" - [label = "Return error due to synchronization"]; - "Client" <-- "Tacker-server" - [label = "409 Conflict"]; - - "KubernetesInfraDriver" <-- "TackerDB" - [label = ""]; - "VnfLcmDriver/VnfLcmDriverV2" <-- "KubernetesInfraDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver/VnfLcmDriverV2" - [label = ""]; - "Client" <-- "Tacker-conductor" - [style=none]; - - === In case of conflicting DB synchronization during LCMs === - "Client" -> "Tacker-server" - [label = "LCM request", rightnote = "This is a sample of LCM request,\nnot intending to describe specific LCM."]; - "Tacker-server" -> "Tacker-conductor" - [label = "LCM request"]; - "Tacker-conductor" -> "VnfLcmDriver/VnfLcmDriverV2" - [label = "LCM request"]; - "VnfLcmDriver/VnfLcmDriverV2" -> "KubernetesInfraDriver" - [label = "LCM request"]; - - "Tacker-server" -> "Tacker-conductor" - [style=none] - "Tacker-conductor" -> "VnfLcmDriver/VnfLcmDriverV2" - [label = "1'. Start periodic database synchronization."]; - "VnfLcmDriver/VnfLcmDriverV2" -> "KubernetesInfraDriver" - [label = "check pod status"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "2'. Get pod information"]; - "KubernetesInfraDriver" <-- "TackerDB" - [label = "return pod information"]; - "KubernetesInfraDriver" -> "Kubernetes client" - [label = "3'. Get pod information"]; - "KubernetesInfraDriver" <-- "Kubernetes client" - [label = "return pod information"]; - "KubernetesInfraDriver" -> "KubernetesInfraDriver" - [label = "4'. Check differences"]; - "KubernetesInfraDriver" -> "KubernetesInfraDriver" - [label = "5'. Skip DB update if the target instance is same as current ongoing LCM."]; - "VnfLcmDriver/VnfLcmDriverV2" <-- "KubernetesInfraDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver/VnfLcmDriverV2" - [label = ""]; - "Tacker-server" <-- "Tacker-conductor" - [style=none] - - "VnfLcmDriver/VnfLcmDriverV2" <-- "KubernetesInfraDriver" - [label = "return"]; - "Tacker-conductor" <-- "VnfLcmDriver/VnfLcmDriverV2" - [label = "return"]; - "Tacker-server" <-- "Tacker-conductor" - [label = "return"]; - "Client" <-- "Tacker-server" - [label = "return"]; - } +.. image:: ./database-synchronization/01.png #. Start the database synchronization process periodically at intervals specified in Config diff --git a/specs/zed/database-synchronization/01.diag b/specs/zed/database-synchronization/01.diag new file mode 100644 index 00000000..9bc58712 --- /dev/null +++ b/specs/zed/database-synchronization/01.diag @@ -0,0 +1,101 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver/VnfLcmDriverV2" + "KubernetesInfraDriver" + "TackerDB" + "Kubernetes client" + + === Start periodic database synchronization. === + "Tacker-conductor" -> "VnfLcmDriver/VnfLcmDriverV2" + [label = "1. Start periodic database synchronization."]; + "VnfLcmDriver/VnfLcmDriverV2" -> "KubernetesInfraDriver" + [label = "check pod status"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "2. Get pod information"]; + "KubernetesInfraDriver" <-- "TackerDB" + [label = "return pod information"]; + "KubernetesInfraDriver" -> "Kubernetes client" + [label = "3. Get pod information"]; + "KubernetesInfraDriver" <-- "Kubernetes client" + [label = "return pod information"]; + "KubernetesInfraDriver" -> "KubernetesInfraDriver" + [label = "4. Check differences"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "5. If there are difference, update pod information"]; + + "Client" -> "Tacker-server" + [label = "LCM request", rightnote = "This is a sample of LCM request,\nnot intending to describe specific LCM."]; + "Tacker-server" -> "Tacker-conductor" + [label = "LCM request"]; + "Tacker-conductor" -> "VnfLcmDriver/VnfLcmDriverV2" + [label = "LCM request"]; + "VnfLcmDriver/VnfLcmDriverV2" -> "KubernetesInfraDriver" + [label = "LCM request"]; + "VnfLcmDriver/VnfLcmDriverV2" <-- "KubernetesInfraDriver" + [label = "Return error due to synchronization", rightnote = "LCM requests will be rejected\nduring synchronization."]; + "Tacker-conductor" <-- "VnfLcmDriver/VnfLcmDriverV2" + [label = "Return error due to synchronization"]; + "Tacker-server" <-- "Tacker-conductor" + [label = "Return error due to synchronization"]; + "Client" <-- "Tacker-server" + [label = "409 Conflict"]; + + "KubernetesInfraDriver" <-- "TackerDB" + [label = ""]; + "VnfLcmDriver/VnfLcmDriverV2" <-- "KubernetesInfraDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver/VnfLcmDriverV2" + [label = ""]; + "Client" <-- "Tacker-conductor" + [style=none]; + + === In case of conflicting DB synchronization during LCMs === + "Client" -> "Tacker-server" + [label = "LCM request", rightnote = "This is a sample of LCM request,\nnot intending to describe specific LCM."]; + "Tacker-server" -> "Tacker-conductor" + [label = "LCM request"]; + "Tacker-conductor" -> "VnfLcmDriver/VnfLcmDriverV2" + [label = "LCM request"]; + "VnfLcmDriver/VnfLcmDriverV2" -> "KubernetesInfraDriver" + [label = "LCM request"]; + + "Tacker-server" -> "Tacker-conductor" + [style=none] + "Tacker-conductor" -> "VnfLcmDriver/VnfLcmDriverV2" + [label = "1'. Start periodic database synchronization."]; + "VnfLcmDriver/VnfLcmDriverV2" -> "KubernetesInfraDriver" + [label = "check pod status"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "2'. Get pod information"]; + "KubernetesInfraDriver" <-- "TackerDB" + [label = "return pod information"]; + "KubernetesInfraDriver" -> "Kubernetes client" + [label = "3'. Get pod information"]; + "KubernetesInfraDriver" <-- "Kubernetes client" + [label = "return pod information"]; + "KubernetesInfraDriver" -> "KubernetesInfraDriver" + [label = "4'. Check differences"]; + "KubernetesInfraDriver" -> "KubernetesInfraDriver" + [label = "5'. Skip DB update if the target instance is same as current ongoing LCM."]; + "VnfLcmDriver/VnfLcmDriverV2" <-- "KubernetesInfraDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver/VnfLcmDriverV2" + [label = ""]; + "Tacker-server" <-- "Tacker-conductor" + [style=none] + + "VnfLcmDriver/VnfLcmDriverV2" <-- "KubernetesInfraDriver" + [label = "return"]; + "Tacker-conductor" <-- "VnfLcmDriver/VnfLcmDriverV2" + [label = "return"]; + "Tacker-server" <-- "Tacker-conductor" + [label = "return"]; + "Client" <-- "Tacker-server" + [label = "return"]; + } diff --git a/specs/zed/database-synchronization/01.png b/specs/zed/database-synchronization/01.png new file mode 100644 index 00000000..faac56a7 Binary files /dev/null and b/specs/zed/database-synchronization/01.png differ diff --git a/specs/zed/db-migration-tool.rst b/specs/zed/db-migration-tool.rst index ed6fc52e..5e3a90ce 100644 --- a/specs/zed/db-migration-tool.rst +++ b/specs/zed/db-migration-tool.rst @@ -100,49 +100,7 @@ When the command is $ tacker-db-manage migrate-to-v2 --all [ --keep-orig ] -.. seqdiag:: - - seqdiag { - User -> Tacker-db-manage [label = "tacker-db-manage migrate-to-v2 --all [ --keep-orig ]"]; - Tacker-db-manage -> SQL_Alchemy [label = "Search for objects with deleted=0 from Vnf_instances"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get Vnf_instances objects"]; - === Repeat every Vnf_instances object === - Tacker-db-manage -> SQL_Alchemy [label = "Define VnfInstanceV2 Object"]; - Tacker-db-manage <-- SQL_Alchemy - === Repeat every field === - Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; - Tacker-db-manage -> SQL_Alchemy [label = "Refer to the field of gotten object and update the field of VNFInstanceV2"]; - Tacker-db-manage <-- SQL_Alchemy - === End line of "Repeat every field" === - Tacker-db-manage -> SQL_Alchemy [label = "Create VnfInstanceV2 Object"]; - SQL_Alchemy -> Tacker_DB [label = "Insert record"]; - SQL_Alchemy <-- Tacker_DB; - Tacker-db-manage <-- SQL_Alchemy; - ... ... - Tacker-db-manage -> SQL_Alchemy [label = "Define VnfLcmOpOccV2 Object"]; - Tacker-db-manage <-- SQL_Alchemy; - === Repeat every field === - Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a foreign key"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; - Tacker-db-manage -> SQL_Alchemy [label = "Refer to the field of gotten object and update the field of VnfLcmOpOccV2"]; - Tacker-db-manage <-- SQL_Alchemy; - === End line of "Repeat every field" === - Tacker-db-manage -> SQL_Alchemy [label = "Create VnfLcmOpOccV2 Object"]; - SQL_Alchemy -> Tacker_DB [label = "Insert record"]; - SQL_Alchemy <-- Tacker_DB; - Tacker-db-manage <-- SQL_Alchemy; - === Skip if the keep original records flag is ON === - Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; - Tacker-db-manage -> SQL_Alchemy [label = "Delete object"]; - SQL_Alchemy -> Tacker_DB [label = "Delete record"]; - SQL_Alchemy <-- Tacker_DB; - Tacker-db-manage <-- SQL_Alchemy; - === End line of "Skip if the keep original records flag is ON" === - === End line of "Repeat every Vnf_instances object" === - User <-- Tacker-db-manage; - } +.. image:: ./db-migration-tool/01.png When the command is @@ -150,45 +108,7 @@ When the command is $ tacker-db-manage migrate-to-v2 --vnf-id [ --keep-orig ] -.. seqdiag:: - - seqdiag { - User -> Tacker-db-manage [label = "tacker-db-manage migrate-to-v2 --vnf-id [ --keep-orig ]"]; - Tacker-db-manage -> SQL_Alchemy [label = "Define VnfInstanceV2 Object"]; - Tacker-db-manage <-- SQL_Alchemy - === Repeat every field === - Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; - Tacker-db-manage -> SQL_Alchemy [label = "Refer to the field of gotten object and update the field of VNFInstanceV2"]; - Tacker-db-manage <-- SQL_Alchemy - === End line of "Repeat every field" === - Tacker-db-manage -> SQL_Alchemy [label = "Create VnfInstanceV2 Object"]; - SQL_Alchemy -> Tacker_DB [label = "Insert record"]; - SQL_Alchemy <-- Tacker_DB; - Tacker-db-manage <-- SQL_Alchemy; - ... ... - Tacker-db-manage -> SQL_Alchemy [label = "Define VnfLcmOpOccV2 Object"]; - Tacker-db-manage <-- SQL_Alchemy; - === Repeat every field === - Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a foreign key"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; - Tacker-db-manage -> SQL_Alchemy [label = "Refer to the field of gotten object and update the field of VnfLcmOpOccV2"]; - Tacker-db-manage <-- SQL_Alchemy; - === End line of "Repeat every field" === - Tacker-db-manage -> SQL_Alchemy [label = "Create VnfLcmOpOccV2 Object"]; - SQL_Alchemy -> Tacker_DB [label = "Insert record"]; - SQL_Alchemy <-- Tacker_DB; - Tacker-db-manage <-- SQL_Alchemy; - === Skip if the keep original records flag is ON === - Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; - Tacker-db-manage -> SQL_Alchemy [label = "Delete object"]; - SQL_Alchemy -> Tacker_DB [label = "Delete record"]; - SQL_Alchemy <-- Tacker_DB; - Tacker-db-manage <-- SQL_Alchemy; - === End line of "Skip if the keep original records flag is ON" === - User <-- Tacker-db-manage; - } +.. image:: ./db-migration-tool/02.png When the command is @@ -197,22 +117,7 @@ When the command is $ tacker-db-manage migrate-to-v2 --mark-delete --api-ver v1 --vnf-id -.. seqdiag:: - - seqdiag { - User -> Tacker-db-manage [label = "tacker-db-manage migrate-to-v2 --mark-delete --api-ver v1 --vnf-id "]; - === Repeat related v1 tables === - Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; - Tacker-db-manage -> SQL_Alchemy [label = "Update the deleted field of gotten object to 1"]; - Tacker-db-manage <-- SQL_Alchemy - Tacker-db-manage -> SQL_Alchemy [label = "Save gotten object"]; - SQL_Alchemy -> Tacker_DB [label = "Update record"]; - SQL_Alchemy <-- Tacker_DB; - Tacker-db-manage <-- SQL_Alchemy; - === End line of "Repeat related v1 tables" === - User <-- Tacker-db-manage; - } +.. image:: ./db-migration-tool/03.png When the command is @@ -220,22 +125,7 @@ When the command is $ tacker-db-manage migrate-to-v2 --mark-delete --api-ver v2 --vnf-id -.. seqdiag:: - - seqdiag { - User -> Tacker-db-manage [label = "tacker-db-manage migrate-to-v2 --mark-delete --api-ver v2 --vnf-id "]; - === Repeat related v2 tables === - Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; - Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; - Tacker-db-manage -> SQL_Alchemy [label = "Update the deleted field of gotten object to 1"]; - Tacker-db-manage <-- SQL_Alchemy - Tacker-db-manage -> SQL_Alchemy [label = "Save gotten object"]; - SQL_Alchemy -> Tacker_DB [label = "Update record"]; - SQL_Alchemy <-- Tacker_DB; - Tacker-db-manage <-- SQL_Alchemy; - === End line of "Repeat related v2 tables" === - User <-- Tacker-db-manage; - } +.. image:: ./db-migration-tool/04.png Data model impact ----------------- diff --git a/specs/zed/db-migration-tool/01.diag b/specs/zed/db-migration-tool/01.diag new file mode 100644 index 00000000..27a75206 --- /dev/null +++ b/specs/zed/db-migration-tool/01.diag @@ -0,0 +1,42 @@ + + seqdiag { + User -> Tacker-db-manage [label = "tacker-db-manage migrate-to-v2 --all [ --keep-orig ]"]; + Tacker-db-manage -> SQL_Alchemy [label = "Search for objects with deleted=0 from Vnf_instances"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get Vnf_instances objects"]; + === Repeat every Vnf_instances object === + Tacker-db-manage -> SQL_Alchemy [label = "Define VnfInstanceV2 Object"]; + Tacker-db-manage <-- SQL_Alchemy + === Repeat every field === + Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; + Tacker-db-manage -> SQL_Alchemy [label = "Refer to the field of gotten object and update the field of VNFInstanceV2"]; + Tacker-db-manage <-- SQL_Alchemy + === End line of "Repeat every field" === + Tacker-db-manage -> SQL_Alchemy [label = "Create VnfInstanceV2 Object"]; + SQL_Alchemy -> Tacker_DB [label = "Insert record"]; + SQL_Alchemy <-- Tacker_DB; + Tacker-db-manage <-- SQL_Alchemy; + ... ... + Tacker-db-manage -> SQL_Alchemy [label = "Define VnfLcmOpOccV2 Object"]; + Tacker-db-manage <-- SQL_Alchemy; + === Repeat every field === + Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a foreign key"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; + Tacker-db-manage -> SQL_Alchemy [label = "Refer to the field of gotten object and update the field of VnfLcmOpOccV2"]; + Tacker-db-manage <-- SQL_Alchemy; + === End line of "Repeat every field" === + Tacker-db-manage -> SQL_Alchemy [label = "Create VnfLcmOpOccV2 Object"]; + SQL_Alchemy -> Tacker_DB [label = "Insert record"]; + SQL_Alchemy <-- Tacker_DB; + Tacker-db-manage <-- SQL_Alchemy; + === Skip if the keep original records flag is ON === + Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; + Tacker-db-manage -> SQL_Alchemy [label = "Delete object"]; + SQL_Alchemy -> Tacker_DB [label = "Delete record"]; + SQL_Alchemy <-- Tacker_DB; + Tacker-db-manage <-- SQL_Alchemy; + === End line of "Skip if the keep original records flag is ON" === + === End line of "Repeat every Vnf_instances object" === + User <-- Tacker-db-manage; + } diff --git a/specs/zed/db-migration-tool/01.png b/specs/zed/db-migration-tool/01.png new file mode 100644 index 00000000..3c7ca363 Binary files /dev/null and b/specs/zed/db-migration-tool/01.png differ diff --git a/specs/zed/db-migration-tool/02.diag b/specs/zed/db-migration-tool/02.diag new file mode 100644 index 00000000..7d8f5123 --- /dev/null +++ b/specs/zed/db-migration-tool/02.diag @@ -0,0 +1,38 @@ + + seqdiag { + User -> Tacker-db-manage [label = "tacker-db-manage migrate-to-v2 --vnf-id [ --keep-orig ]"]; + Tacker-db-manage -> SQL_Alchemy [label = "Define VnfInstanceV2 Object"]; + Tacker-db-manage <-- SQL_Alchemy + === Repeat every field === + Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; + Tacker-db-manage -> SQL_Alchemy [label = "Refer to the field of gotten object and update the field of VNFInstanceV2"]; + Tacker-db-manage <-- SQL_Alchemy + === End line of "Repeat every field" === + Tacker-db-manage -> SQL_Alchemy [label = "Create VnfInstanceV2 Object"]; + SQL_Alchemy -> Tacker_DB [label = "Insert record"]; + SQL_Alchemy <-- Tacker_DB; + Tacker-db-manage <-- SQL_Alchemy; + ... ... + Tacker-db-manage -> SQL_Alchemy [label = "Define VnfLcmOpOccV2 Object"]; + Tacker-db-manage <-- SQL_Alchemy; + === Repeat every field === + Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a foreign key"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; + Tacker-db-manage -> SQL_Alchemy [label = "Refer to the field of gotten object and update the field of VnfLcmOpOccV2"]; + Tacker-db-manage <-- SQL_Alchemy; + === End line of "Repeat every field" === + Tacker-db-manage -> SQL_Alchemy [label = "Create VnfLcmOpOccV2 Object"]; + SQL_Alchemy -> Tacker_DB [label = "Insert record"]; + SQL_Alchemy <-- Tacker_DB; + Tacker-db-manage <-- SQL_Alchemy; + === Skip if the keep original records flag is ON === + Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; + Tacker-db-manage -> SQL_Alchemy [label = "Delete object"]; + SQL_Alchemy -> Tacker_DB [label = "Delete record"]; + SQL_Alchemy <-- Tacker_DB; + Tacker-db-manage <-- SQL_Alchemy; + === End line of "Skip if the keep original records flag is ON" === + User <-- Tacker-db-manage; + } diff --git a/specs/zed/db-migration-tool/02.png b/specs/zed/db-migration-tool/02.png new file mode 100644 index 00000000..e8613354 Binary files /dev/null and b/specs/zed/db-migration-tool/02.png differ diff --git a/specs/zed/db-migration-tool/03.diag b/specs/zed/db-migration-tool/03.diag new file mode 100644 index 00000000..fb6ff517 --- /dev/null +++ b/specs/zed/db-migration-tool/03.diag @@ -0,0 +1,15 @@ + + seqdiag { + User -> Tacker-db-manage [label = "tacker-db-manage migrate-to-v2 --mark-delete --api-ver v1 --vnf-id "]; + === Repeat related v1 tables === + Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; + Tacker-db-manage -> SQL_Alchemy [label = "Update the deleted field of gotten object to 1"]; + Tacker-db-manage <-- SQL_Alchemy + Tacker-db-manage -> SQL_Alchemy [label = "Save gotten object"]; + SQL_Alchemy -> Tacker_DB [label = "Update record"]; + SQL_Alchemy <-- Tacker_DB; + Tacker-db-manage <-- SQL_Alchemy; + === End line of "Repeat related v1 tables" === + User <-- Tacker-db-manage; + } diff --git a/specs/zed/db-migration-tool/03.png b/specs/zed/db-migration-tool/03.png new file mode 100644 index 00000000..ac944085 Binary files /dev/null and b/specs/zed/db-migration-tool/03.png differ diff --git a/specs/zed/db-migration-tool/04.diag b/specs/zed/db-migration-tool/04.diag new file mode 100644 index 00000000..c75a5e73 --- /dev/null +++ b/specs/zed/db-migration-tool/04.diag @@ -0,0 +1,15 @@ + + seqdiag { + User -> Tacker-db-manage [label = "tacker-db-manage migrate-to-v2 --mark-delete --api-ver v2 --vnf-id "]; + === Repeat related v2 tables === + Tacker-db-manage -> SQL_Alchemy [label = "Search for related objects with the specified VNFID as a primary key or foreign key"]; + Tacker-db-manage <- SQL_Alchemy [label = "Get object"]; + Tacker-db-manage -> SQL_Alchemy [label = "Update the deleted field of gotten object to 1"]; + Tacker-db-manage <-- SQL_Alchemy + Tacker-db-manage -> SQL_Alchemy [label = "Save gotten object"]; + SQL_Alchemy -> Tacker_DB [label = "Update record"]; + SQL_Alchemy <-- Tacker_DB; + Tacker-db-manage <-- SQL_Alchemy; + === End line of "Repeat related v2 tables" === + User <-- Tacker-db-manage; + } diff --git a/specs/zed/db-migration-tool/04.png b/specs/zed/db-migration-tool/04.png new file mode 100644 index 00000000..adef8db2 Binary files /dev/null and b/specs/zed/db-migration-tool/04.png differ diff --git a/specs/zed/enhance-cli-for-paging.rst b/specs/zed/enhance-cli-for-paging.rst index c07ea6b5..7c11864d 100644 --- a/specs/zed/enhance-cli-for-paging.rst +++ b/specs/zed/enhance-cli-for-paging.rst @@ -54,19 +54,7 @@ CLI feature by default in case of handling large query results. (4) After receiving all paginated records from the server, client side assembles retained records and then displays them as a CLI response. -.. seqdiag:: - - seqdiag { - user -> tacker-client [label = "execute list command"] - tacker-client -> tacker-server [label = "execute HTTP GET method" ] - tacker-client <-- tacker-server [label = "return the first page" ] - tacker-client -> tacker-server [label = "execute HTTP GET method" ] - tacker-client <-- tacker-server [label = "return next page" ] - === loop while there is next page existing === - tacker-client -> tacker-server [label = "execute HTTP GET method" ] - tacker-client <-- tacker-server [label = "return the last page" ] - user <-- tacker-client [label = "show all records" ] - } +.. image:: ./enhance-cli-for-paging/01.png Data Model Impact diff --git a/specs/zed/enhance-cli-for-paging/01.diag b/specs/zed/enhance-cli-for-paging/01.diag new file mode 100644 index 00000000..fda07b84 --- /dev/null +++ b/specs/zed/enhance-cli-for-paging/01.diag @@ -0,0 +1,12 @@ + + seqdiag { + user -> tacker-client [label = "execute list command"] + tacker-client -> tacker-server [label = "execute HTTP GET method" ] + tacker-client <-- tacker-server [label = "return the first page" ] + tacker-client -> tacker-server [label = "execute HTTP GET method" ] + tacker-client <-- tacker-server [label = "return next page" ] + === loop while there is next page existing === + tacker-client -> tacker-server [label = "execute HTTP GET method" ] + tacker-client <-- tacker-server [label = "return the last page" ] + user <-- tacker-client [label = "show all records" ] + } diff --git a/specs/zed/enhance-cli-for-paging/01.png b/specs/zed/enhance-cli-for-paging/01.png new file mode 100644 index 00000000..346e8edb Binary files /dev/null and b/specs/zed/enhance-cli-for-paging/01.png differ diff --git a/specs/zed/enhance-cnf-operations.rst b/specs/zed/enhance-cnf-operations.rst index d92433d7..1dd91319 100644 --- a/specs/zed/enhance-cnf-operations.rst +++ b/specs/zed/enhance-cnf-operations.rst @@ -138,66 +138,7 @@ The diagram below shows the CNF instantiation using Helm Chart. Following sequence diagram describes CNF instantiation with Helm Chart: -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver(V1/V2)" - "KubernetesInfraDriver" - "TackerDB" - "Kubernetes client" - "Helm(MasterNode)" - - Client -> "Tacker-server" - [label = "1. POST /vnf_instances/{vnfInstanceId}/instantiate with instantiationLevelId"]; - "Tacker-server" -> "Tacker-conductor" - [label = "2. trigger asynchronous task"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-conductor" -> "VnfLcmDriver(V1/V2)" - [label = "3. execute VnfLcmDriver"]; - "VnfLcmDriver(V1/V2)" -> "KubernetesInfraDriver" - [label = "4. execute KubernetesInfraDriver"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "5. get package information"]; - "KubernetesInfraDriver" <-- "TackerDB" - [label = "return package information"]; - "KubernetesInfraDriver" -> "KubernetesInfraDriver" - [label = "6. calculates the number of pods to launch from the InstantiationLevelId"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "7. get MasterNode access information"]; - "KubernetesInfraDriver" <-- "TackerDB" - [label = "return MasterNode access information"]; - "KubernetesInfraDriver" -> "Helm(MasterNode)" - [label = "8. send Helm Chart Files and deployment instructions"]; - "KubernetesInfraDriver" <-- "Helm(MasterNode)" - [label = ""]; - "KubernetesInfraDriver" -> "Helm(MasterNode)" - [label = "9. get manifest information"] - "KubernetesInfraDriver" <-- "Helm(MasterNode)" - [label = "return manifest information"] - "KubernetesInfraDriver" -> "TackerDB" - [label = "10. save manifest information"] - "KubernetesInfraDriver" <-- "TackerDB" - [label = ""]; - "KubernetesInfraDriver" -> "Kubernetes client" - [label = "11. get pod status"]; - "KubernetesInfraDriver" <-- "Kubernetes client" - [label = "return pod status"]; - "KubernetesInfraDriver" -> "TackerDB" - [label = "12. save pod information"]; - "KubernetesInfraDriver" <-- "TackerDB" - [label = ""] - "VnfLcmDriver(V1/V2)" <-- "KubernetesInfraDriver" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver(V1/V2)" - [label = ""]; - } +.. image:: ./enhance-cnf-operations/01.png #. Tacker-server receives an Instantiate VNF request with ``instantiationLevelId`` in its parameter. diff --git a/specs/zed/enhance-cnf-operations/01.diag b/specs/zed/enhance-cnf-operations/01.diag new file mode 100644 index 00000000..10f9ef73 --- /dev/null +++ b/specs/zed/enhance-cnf-operations/01.diag @@ -0,0 +1,59 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver(V1/V2)" + "KubernetesInfraDriver" + "TackerDB" + "Kubernetes client" + "Helm(MasterNode)" + + Client -> "Tacker-server" + [label = "1. POST /vnf_instances/{vnfInstanceId}/instantiate with instantiationLevelId"]; + "Tacker-server" -> "Tacker-conductor" + [label = "2. trigger asynchronous task"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-conductor" -> "VnfLcmDriver(V1/V2)" + [label = "3. execute VnfLcmDriver"]; + "VnfLcmDriver(V1/V2)" -> "KubernetesInfraDriver" + [label = "4. execute KubernetesInfraDriver"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "5. get package information"]; + "KubernetesInfraDriver" <-- "TackerDB" + [label = "return package information"]; + "KubernetesInfraDriver" -> "KubernetesInfraDriver" + [label = "6. calculates the number of pods to launch from the InstantiationLevelId"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "7. get MasterNode access information"]; + "KubernetesInfraDriver" <-- "TackerDB" + [label = "return MasterNode access information"]; + "KubernetesInfraDriver" -> "Helm(MasterNode)" + [label = "8. send Helm Chart Files and deployment instructions"]; + "KubernetesInfraDriver" <-- "Helm(MasterNode)" + [label = ""]; + "KubernetesInfraDriver" -> "Helm(MasterNode)" + [label = "9. get manifest information"] + "KubernetesInfraDriver" <-- "Helm(MasterNode)" + [label = "return manifest information"] + "KubernetesInfraDriver" -> "TackerDB" + [label = "10. save manifest information"] + "KubernetesInfraDriver" <-- "TackerDB" + [label = ""]; + "KubernetesInfraDriver" -> "Kubernetes client" + [label = "11. get pod status"]; + "KubernetesInfraDriver" <-- "Kubernetes client" + [label = "return pod status"]; + "KubernetesInfraDriver" -> "TackerDB" + [label = "12. save pod information"]; + "KubernetesInfraDriver" <-- "TackerDB" + [label = ""] + "VnfLcmDriver(V1/V2)" <-- "KubernetesInfraDriver" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver(V1/V2)" + [label = ""]; + } diff --git a/specs/zed/enhance-cnf-operations/01.png b/specs/zed/enhance-cnf-operations/01.png new file mode 100644 index 00000000..c574d70b Binary files /dev/null and b/specs/zed/enhance-cnf-operations/01.png differ diff --git a/specs/zed/enhancement-container-update.rst b/specs/zed/enhancement-container-update.rst index 0253bc9b..4ef883fd 100644 --- a/specs/zed/enhancement-container-update.rst +++ b/specs/zed/enhancement-container-update.rst @@ -274,71 +274,7 @@ by mounting to volume: Sequence for operation ---------------------- -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "MgmtDriver" - "TackerDB" - "VIM(Kubernetes)" - - Client -> "Tacker-server" - [label = "1. PATCH /vnflcm/v1/vnf_instances/{vnfInstanceId}"]; - Client <-- "Tacker-server" - [label = "Response 202 Accepted"]; - "Tacker-server" -> "Tacker-conductor" - [label = ""]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "2. modify_vnf"]; - "VnfLcmDriver" -> "MgmtDriver" - [label = "3. modify_start"]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "VnfLcmDriver" -> "TackerDB" - [label = "4. Update vnfdid"]; - "VnfLcmDriver" <-- "TackerDB" - [label = ""]; - "VnfLcmDriver" -> "MgmtDriver" - [label = "5. modify_end"]; - "MgmtDriver" -> "VIM(Kubernetes)" - [label = "5-1. get information of ConfigMap and Secret"]; - "MgmtDriver" <-- "VIM(Kubernetes)" - [label = ""]; - "MgmtDriver" -> "MgmtDriver" - [label = "5-2. select ConfigMap and Secret to replace"]; - "MgmtDriver" -> "VIM(Kubernetes)" - [label = "5-3. replace config"]; - "MgmtDriver" <-- "VIM(Kubernetes)" - [label = ""]; - "MgmtDriver" -> "TackerDB" - [label = "5-4. select Pod that uses the old ConfigMap or Secret"]; - "MgmtDriver" <-- "TackerDB" - [label = ""]; - "MgmtDriver" -> "VIM(Kubernetes)" - [label = "5-5. get information of Pod"]; - "MgmtDriver" <-- "VIM(Kubernetes)" - [label = ""]; - "MgmtDriver" -> "MgmtDriver" - [label = "5-6. select Pod whose image has changed"]; - "MgmtDriver" -> "VIM(Kubernetes)" - [label = "5-7. replace Pod"]; - "MgmtDriver" <-- "VIM(Kubernetes)" - [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" - [label = ""]; - "VnfLcmDriver" -> "TackerDB" - [label = "6. Update resourceid"]; - "VnfLcmDriver" <-- "TackerDB" - [label = ""]; - "Tacker-conductor" <-- "VnfLcmDriver" - [label = ""]; - } +.. image:: ./enhancement-container-update/01.png 1. The Client sends a PATCH request to the "Individual VNF instance" resource. diff --git a/specs/zed/enhancement-container-update/01.diag b/specs/zed/enhancement-container-update/01.diag new file mode 100644 index 00000000..87259b28 --- /dev/null +++ b/specs/zed/enhancement-container-update/01.diag @@ -0,0 +1,64 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "MgmtDriver" + "TackerDB" + "VIM(Kubernetes)" + + Client -> "Tacker-server" + [label = "1. PATCH /vnflcm/v1/vnf_instances/{vnfInstanceId}"]; + Client <-- "Tacker-server" + [label = "Response 202 Accepted"]; + "Tacker-server" -> "Tacker-conductor" + [label = ""]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "2. modify_vnf"]; + "VnfLcmDriver" -> "MgmtDriver" + [label = "3. modify_start"]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "VnfLcmDriver" -> "TackerDB" + [label = "4. Update vnfdid"]; + "VnfLcmDriver" <-- "TackerDB" + [label = ""]; + "VnfLcmDriver" -> "MgmtDriver" + [label = "5. modify_end"]; + "MgmtDriver" -> "VIM(Kubernetes)" + [label = "5-1. get information of ConfigMap and Secret"]; + "MgmtDriver" <-- "VIM(Kubernetes)" + [label = ""]; + "MgmtDriver" -> "MgmtDriver" + [label = "5-2. select ConfigMap and Secret to replace"]; + "MgmtDriver" -> "VIM(Kubernetes)" + [label = "5-3. replace config"]; + "MgmtDriver" <-- "VIM(Kubernetes)" + [label = ""]; + "MgmtDriver" -> "TackerDB" + [label = "5-4. select Pod that uses the old ConfigMap or Secret"]; + "MgmtDriver" <-- "TackerDB" + [label = ""]; + "MgmtDriver" -> "VIM(Kubernetes)" + [label = "5-5. get information of Pod"]; + "MgmtDriver" <-- "VIM(Kubernetes)" + [label = ""]; + "MgmtDriver" -> "MgmtDriver" + [label = "5-6. select Pod whose image has changed"]; + "MgmtDriver" -> "VIM(Kubernetes)" + [label = "5-7. replace Pod"]; + "MgmtDriver" <-- "VIM(Kubernetes)" + [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" + [label = ""]; + "VnfLcmDriver" -> "TackerDB" + [label = "6. Update resourceid"]; + "VnfLcmDriver" <-- "TackerDB" + [label = ""]; + "Tacker-conductor" <-- "VnfLcmDriver" + [label = ""]; + } diff --git a/specs/zed/enhancement-container-update/01.png b/specs/zed/enhancement-container-update/01.png new file mode 100644 index 00000000..fc09d086 Binary files /dev/null and b/specs/zed/enhancement-container-update/01.png differ diff --git a/specs/zed/faultnotification-autoheal.rst b/specs/zed/faultnotification-autoheal.rst index f2b75b2a..6e58341a 100644 --- a/specs/zed/faultnotification-autoheal.rst +++ b/specs/zed/faultnotification-autoheal.rst @@ -222,194 +222,7 @@ Sequence for AutoHealing operation on FaultNotification trigger The following describes the processing flow of the AutoHealing triggered by FaultNotification. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - NFVO - VnflcmControllerV2 - VnfServerNotificationController - NfvoClient - ConductorV2 - VnfServerNotificationDriver - VnfLcmDriverV2 - MgmtDriver - InfraDriver - ServerNotifier - VNF - - - "ServerNotifier" -> "VNF" - [label = "1. Fault events occurred in VNF"] - "ServerNotifier" <-- "VNF" - [label="return"] - - "ServerNotifier" -> "VnfServerNotificationController" - [label = "2. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", - note="Multiple events \ncan be reported at the same time.\n - This is ignored if faultID is invalid."] - - "VnfServerNotificationController" ->> "ConductorV2" - [label = "3. notify fault event"] - "ConductorV2" -> "VnfServerNotificationDriver" - [label = "4. fault event"] - "ServerNotifier" <-- "VnfServerNotificationController" - [label = "Response: 204"] - "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" - [label = "5. Queueing fault event"] - "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" - [label = "6. start packing timer"] - "ConductorV2" <-- "VnfServerNotificationDriver" - [label = "return"] - "VnfServerNotificationController" <-- "ConductorV2" - [style=none] - - "ServerNotifier" -> "VnfServerNotificationController" - [label = "7. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", - note="This is ignored if faultID is invalid."] - - "VnfServerNotificationController" ->> "ConductorV2" - [label = "8. notify fault event"] - "ConductorV2" -> "VnfServerNotificationDriver" - [label = "9. fault event"] - "ServerNotifier" <-- "VnfServerNotificationController" - [label = "Response: 204"] - "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" - [label = "10. Queueing fault event"] - "ConductorV2" <-- "VnfServerNotificationDriver" - [label = "return"] - "VnfServerNotificationController" <-- "ConductorV2" - [style=none] - - - "ServerNotifier" -> "VnfServerNotificationController" - [label = "11. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", - note="This is ignored if faultID is invalid."] - - "VnfServerNotificationController" ->> "ConductorV2" - [label = "12. notify fault event"] - "ConductorV2" -> "VnfServerNotificationDriver" - [label = "13. fault event"] - "ServerNotifier" <-- "VnfServerNotificationController" - [label = "Response: 204"] - "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" - [label = "14. Queueing fault event"] - "ConductorV2" <-- "VnfServerNotificationDriver" - [label = "return"] - "VnfServerNotificationController" <-- "ConductorV2" - [style=none] - - "VnfServerNotificationDriver" <-- "ServerNotifier" - [style=none] - - "ConductorV2" -> "VnfServerNotificationDriver" - [style=none] - - "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" - [label = "15. packing timer is expired"] - - "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" - [label = "16. Multiple events are packed for a configured period of time"] - - "VnfServerNotificationDriver" -> "VnflcmControllerV2" - [label = "17. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal"] - - "VnflcmControllerV2" -> "ConductorV2" - [label = "18. start_lcm_op"] - - "VnfServerNotificationDriver" <-- "VnflcmControllerV2" - [label = "Response: 202"] - - "ConductorV2" <-- "VnfServerNotificationDriver" - [style=none] - - "ConductorV2" -> "NfvoClient" - [label = "19. send_lcmocc_notification"] - "NfvoClient" -> "NFVO" - [label="20. POST /VnfLcmOperationOccurrenceNotification(STARTING)"] - "NfvoClient" <-- "NFVO" - [label="Response: 204"] - "ConductorV2" <-- "NfvoClient" - [label="return"] - - "ConductorV2" -> "NfvoClient" - [label = "21. grant"] - "NfvoClient" -> "NFVO" - [label="22. POST /grants"] - "NfvoClient" <-- "NFVO" - [label="Response: 201"] - "ConductorV2" <-- "NfvoClient" - [label="return"] - - "ConductorV2" -> "NfvoClient" - [label = "23. send_lcmocc_notification"] - "NfvoClient" -> "NFVO" - [label="24. POST /VnfLcmOperationOccurrenceNotification(PROCESSING)"] - "NfvoClient" <-- "NFVO" - [label="Response: 204"] - "ConductorV2" <-- "NfvoClient" - [label="return"] - - "ConductorV2" -> "VnfLcmDriverV2" - [label="25. perform healing"] - - "VnfLcmDriverV2" -> "MgmtDriver" - [label="26. heal_start"] - "MgmtDriver" -> "VNF" - [label="27. DELETE v2/{tenant_id}/servers/{server_id}/alarms/{alarm_id}"] - "MgmtDriver" <-- "VNF" - [label="Response: 204"] - "VnfLcmDriverV2" <-- "MgmtDriver" - [label="return"] - - "VnfLcmDriverV2" -> "InfraDriver" - [label = "28. heal"] - - "InfraDriver" -> "VNF" - [label="29. Mark resource unhealthy via Heat"] - "InfraDriver" <-- "VNF" - [label="return"] - - "InfraDriver" -> "VNF" - [label="30. Update stack via Heat"] - "InfraDriver" <-- "VNF" - [label="return"] - - "InfraDriver" -> "VNF" - [label="31. Get updated resource data via Heat"] - "InfraDriver" <-- "VNF" - [label="return"] - - "VnfLcmDriverV2" <-- "InfraDriver" - [label="return"] - - "VnfLcmDriverV2" -> "MgmtDriver" - [label="32. heal_end"] - "MgmtDriver" -> "VNF" - [label="33. POST v2/{tenant_id}/servers/{server_id}/alarms"] - "MgmtDriver" <-- "VNF" - [label="Response: 201"] - "VnfLcmDriverV2" <-- "MgmtDriver" - [label="return"] - - "ConductorV2" <-- "VnfLcmDriverV2" - [label="return"] - - "ConductorV2" -> "NfvoClient" - [label = "34. send_lcmocc_notification"] - "NfvoClient" -> "NFVO" - [label="35. POST /VnfLcmOperationOccurrenceNotification(COMPLETED)"] - "NfvoClient" <-- "NFVO" - [label="Response: 204"] - "ConductorV2" <-- "NfvoClient" - [label="return"] - - "VnflcmControllerV2" <-- "ConductorV2" - [style=none] - - } +.. image:: ./faultnotification-autoheal/01.png * ``1.`` ServerNotifier watches and detects fault events on VNF. diff --git a/specs/zed/faultnotification-autoheal/01.diag b/specs/zed/faultnotification-autoheal/01.diag new file mode 100644 index 00000000..840b2622 --- /dev/null +++ b/specs/zed/faultnotification-autoheal/01.diag @@ -0,0 +1,187 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + NFVO + VnflcmControllerV2 + VnfServerNotificationController + NfvoClient + ConductorV2 + VnfServerNotificationDriver + VnfLcmDriverV2 + MgmtDriver + InfraDriver + ServerNotifier + VNF + + + "ServerNotifier" -> "VNF" + [label = "1. Fault events occurred in VNF"] + "ServerNotifier" <-- "VNF" + [label="return"] + + "ServerNotifier" -> "VnfServerNotificationController" + [label = "2. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", + note="Multiple events \ncan be reported at the same time.\n + This is ignored if faultID is invalid."] + + "VnfServerNotificationController" ->> "ConductorV2" + [label = "3. notify fault event"] + "ConductorV2" -> "VnfServerNotificationDriver" + [label = "4. fault event"] + "ServerNotifier" <-- "VnfServerNotificationController" + [label = "Response: 204"] + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "5. Queueing fault event"] + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "6. start packing timer"] + "ConductorV2" <-- "VnfServerNotificationDriver" + [label = "return"] + "VnfServerNotificationController" <-- "ConductorV2" + [style=none] + + "ServerNotifier" -> "VnfServerNotificationController" + [label = "7. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", + note="This is ignored if faultID is invalid."] + + "VnfServerNotificationController" ->> "ConductorV2" + [label = "8. notify fault event"] + "ConductorV2" -> "VnfServerNotificationDriver" + [label = "9. fault event"] + "ServerNotifier" <-- "VnfServerNotificationController" + [label = "Response: 204"] + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "10. Queueing fault event"] + "ConductorV2" <-- "VnfServerNotificationDriver" + [label = "return"] + "VnfServerNotificationController" <-- "ConductorV2" + [style=none] + + + "ServerNotifier" -> "VnfServerNotificationController" + [label = "11. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", + note="This is ignored if faultID is invalid."] + + "VnfServerNotificationController" ->> "ConductorV2" + [label = "12. notify fault event"] + "ConductorV2" -> "VnfServerNotificationDriver" + [label = "13. fault event"] + "ServerNotifier" <-- "VnfServerNotificationController" + [label = "Response: 204"] + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "14. Queueing fault event"] + "ConductorV2" <-- "VnfServerNotificationDriver" + [label = "return"] + "VnfServerNotificationController" <-- "ConductorV2" + [style=none] + + "VnfServerNotificationDriver" <-- "ServerNotifier" + [style=none] + + "ConductorV2" -> "VnfServerNotificationDriver" + [style=none] + + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "15. packing timer is expired"] + + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "16. Multiple events are packed for a configured period of time"] + + "VnfServerNotificationDriver" -> "VnflcmControllerV2" + [label = "17. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal"] + + "VnflcmControllerV2" -> "ConductorV2" + [label = "18. start_lcm_op"] + + "VnfServerNotificationDriver" <-- "VnflcmControllerV2" + [label = "Response: 202"] + + "ConductorV2" <-- "VnfServerNotificationDriver" + [style=none] + + "ConductorV2" -> "NfvoClient" + [label = "19. send_lcmocc_notification"] + "NfvoClient" -> "NFVO" + [label="20. POST /VnfLcmOperationOccurrenceNotification(STARTING)"] + "NfvoClient" <-- "NFVO" + [label="Response: 204"] + "ConductorV2" <-- "NfvoClient" + [label="return"] + + "ConductorV2" -> "NfvoClient" + [label = "21. grant"] + "NfvoClient" -> "NFVO" + [label="22. POST /grants"] + "NfvoClient" <-- "NFVO" + [label="Response: 201"] + "ConductorV2" <-- "NfvoClient" + [label="return"] + + "ConductorV2" -> "NfvoClient" + [label = "23. send_lcmocc_notification"] + "NfvoClient" -> "NFVO" + [label="24. POST /VnfLcmOperationOccurrenceNotification(PROCESSING)"] + "NfvoClient" <-- "NFVO" + [label="Response: 204"] + "ConductorV2" <-- "NfvoClient" + [label="return"] + + "ConductorV2" -> "VnfLcmDriverV2" + [label="25. perform healing"] + + "VnfLcmDriverV2" -> "MgmtDriver" + [label="26. heal_start"] + "MgmtDriver" -> "VNF" + [label="27. DELETE v2/{tenant_id}/servers/{server_id}/alarms/{alarm_id}"] + "MgmtDriver" <-- "VNF" + [label="Response: 204"] + "VnfLcmDriverV2" <-- "MgmtDriver" + [label="return"] + + "VnfLcmDriverV2" -> "InfraDriver" + [label = "28. heal"] + + "InfraDriver" -> "VNF" + [label="29. Mark resource unhealthy via Heat"] + "InfraDriver" <-- "VNF" + [label="return"] + + "InfraDriver" -> "VNF" + [label="30. Update stack via Heat"] + "InfraDriver" <-- "VNF" + [label="return"] + + "InfraDriver" -> "VNF" + [label="31. Get updated resource data via Heat"] + "InfraDriver" <-- "VNF" + [label="return"] + + "VnfLcmDriverV2" <-- "InfraDriver" + [label="return"] + + "VnfLcmDriverV2" -> "MgmtDriver" + [label="32. heal_end"] + "MgmtDriver" -> "VNF" + [label="33. POST v2/{tenant_id}/servers/{server_id}/alarms"] + "MgmtDriver" <-- "VNF" + [label="Response: 201"] + "VnfLcmDriverV2" <-- "MgmtDriver" + [label="return"] + + "ConductorV2" <-- "VnfLcmDriverV2" + [label="return"] + + "ConductorV2" -> "NfvoClient" + [label = "34. send_lcmocc_notification"] + "NfvoClient" -> "NFVO" + [label="35. POST /VnfLcmOperationOccurrenceNotification(COMPLETED)"] + "NfvoClient" <-- "NFVO" + [label="Response: 204"] + "ConductorV2" <-- "NfvoClient" + [label="return"] + + "VnflcmControllerV2" <-- "ConductorV2" + [style=none] + + } diff --git a/specs/zed/faultnotification-autoheal/01.png b/specs/zed/faultnotification-autoheal/01.png new file mode 100644 index 00000000..e713ae12 Binary files /dev/null and b/specs/zed/faultnotification-autoheal/01.png differ diff --git a/specs/zed/individual-vnfc-management.rst b/specs/zed/individual-vnfc-management.rst index 23b8f915..918a6794 100644 --- a/specs/zed/individual-vnfc-management.rst +++ b/specs/zed/individual-vnfc-management.rst @@ -152,73 +152,7 @@ Sequence before changing The following sequence omits the notification process. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - EM; Client; NFVO; "Tacker common process"; "Tacker UserData script"; - Heat; VDU1-VNFC1; VDU1-VNFC2; - - === Instantiate VNF === - - "Client" -> "Tacker common process" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"]; - "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; - "Tacker common process" ->> "Tacker common process" - [label = "calculate the number of VMs"]; - "NFVO" <- "Tacker common process" [label = "POST /grants"]; - "NFVO" --> "Tacker common process" - [label = "201 Created with OpenStack Glance imageid"]; - "Tacker common process" -> "Tacker UserData script" - [label = "request, instance, grantRequest, grant, tmp_csar_dir"]; - "Tacker common process" <-- "Tacker UserData script" - [label = "HOT and corresponding input-parameter including desired_capacity"]; - "Tacker common process" -> "Heat" - [label = "POST /v1/{tenant_id}/stacks --parameter - imageid=; desired_capacity=1"]; - "Heat" -> "VDU1-VNFC1" [label = "create VM"]; - "Heat" <-- "VDU1-VNFC1" [label = ""]; - "Tacker common process" <-- "Heat" [label = ""]; - - === Update internal configuration on VNFC === - - "EM" -> "VDU1-VNFC1" [label = "update the internal configuration"]; - "EM" <-- "VDU1-VNFC1" [label = ""]; - - === Modify the VNF Instance's information in Tacker DB === - - "Client" -> "Tacker common process" - [label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"]; - "Tacker common process" -> "Tacker common process" - [label = "change vnfdid of the vnfInstance. - new vnfd includes identifier of the new image."]; - "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; - - === Scale-out the VNF === - - "Client" -> "Tacker common process" - [label = "/vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; - "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; - "NFVO" <- "Tacker common process" [label = "POST /grants"]; - "NFVO" --> "Tacker common process" - [label = "201 Created with new OpenStack Glance imageid"]; - "Tacker common process" -> "Tacker UserData script" - [label = "request, instance, grantRequest, grant, tmp_csar_dir"]; - "Tacker UserData script" -> "Tacker UserData script" - [label = "calculate the number of VMs"]; - "Tacker common process" <-- "Tacker UserData script" - [label = "HOT and corresponding input-paramaeter including desired_capacity"]; - "Tacker common process" -> "Heat" - [label = "PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id} - --existing --parameter imageid=; desired_capacity=2"]; - "Heat" -> "VDU1-VNFC1" [label = "re-create VM"]; - "Heat" <-- "VDU1-VNFC1" [label = ""]; - "Heat" -> "VDU1-VNFC2" [label = "create VM"]; - "Heat" <-- "VDU1-VNFC2" [label = ""]; - "Tacker common process" <-- "Heat" [label = ""]; - } +.. image:: ./individual-vnfc-management/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -270,72 +204,7 @@ The following sequence omits the notification process. Changes are highlighted in red boxes. -.. seqdiag:: - - seqdiag { - node_width = 80; - edge_length = 100; - - EM; Client; NFVO; "Tacker common process"; "Tacker UserData script"; - Heat; VDU1-VNFC1; VDU1-VNFC2; - - === Instantiate VNF === - - "Client" -> "Tacker common process" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"]; - "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; - "Tacker common process" ->> "Tacker common process" - [label = "calculate the number of VMs"]; - "NFVO" <- "Tacker common process" [label = "POST /grants"]; - "NFVO" --> "Tacker common process" - [label = "201 Created with OpenStack Glance imageid"]; - "Tacker common process" -> "Tacker UserData script" - [label = "request, instance, grantRequest, grant, tmp_csar_dir"]; - "Tacker common process" <-- "Tacker UserData script" - [label = "adjusted HOT and corresponding input-parameter", - leftnote = "Tacker UserData script makes adjusted HOT"]; - "Tacker common process" -> "Heat" - [label = "POST /v1/{tenant_id}/stacks --parameter imageid="]; - "Heat" -> "VDU1-VNFC1" [label = "create VM"]; - "Heat" <-- "VDU1-VNFC1" [label = ""]; - "Tacker common process" <-- "Heat" [label = ""]; - - === Update internal configuration on VNFC === - - "EM" -> "VDU1-VNFC1" [label = "update the internal configuration"]; - "EM" <-- "VDU1-VNFC1" [label = ""]; - - === Modify the VNF Instance's information in Tacker DB === - - "Client" -> "Tacker common process" - [label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"]; - "Tacker common process" -> "Tacker common process" - [label = "change vnfdid of the vnfInstance. - new vnfd includes identifier of the new image."]; - "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; - - === Scale-out the VNF === - - "Client" -> "Tacker common process" - [label = "/vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; - "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; - "NFVO" <- "Tacker common process" [label = "POST /grants"]; - "NFVO" --> "Tacker common process" - [label = "201 Created with new OpenStack Glance imageid"]; - "Tacker common process" -> "Tacker UserData script" - [label = "request, instance, grantRequest, grant, tmp_csar_dir"]; - "Tacker UserData script" -> "Tacker UserData script" - [label = "calculate the number of VMs"]; - "Tacker common process" <-- "Tacker UserData script" - [label = "adjusted HOT and corresponding input-parameter", - leftnote = "Tacker UserData script makes adjusted HOT"]; - "Tacker common process" -> "Heat" - [label = "PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id} - --existing --parameter imageid="]; - "Heat" -> "VDU1-VNFC2" [label = "create VM"]; - "Heat" <-- "VDU1-VNFC2" [label = ""]; - "Tacker common process" <-- "Heat" [label = ""]; - } +.. image:: ./individual-vnfc-management/02.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/zed/individual-vnfc-management/01.diag b/specs/zed/individual-vnfc-management/01.diag new file mode 100644 index 00000000..6971af18 --- /dev/null +++ b/specs/zed/individual-vnfc-management/01.diag @@ -0,0 +1,66 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + EM; Client; NFVO; "Tacker common process"; "Tacker UserData script"; + Heat; VDU1-VNFC1; VDU1-VNFC2; + + === Instantiate VNF === + + "Client" -> "Tacker common process" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"]; + "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; + "Tacker common process" ->> "Tacker common process" + [label = "calculate the number of VMs"]; + "NFVO" <- "Tacker common process" [label = "POST /grants"]; + "NFVO" --> "Tacker common process" + [label = "201 Created with OpenStack Glance imageid"]; + "Tacker common process" -> "Tacker UserData script" + [label = "request, instance, grantRequest, grant, tmp_csar_dir"]; + "Tacker common process" <-- "Tacker UserData script" + [label = "HOT and corresponding input-parameter including desired_capacity"]; + "Tacker common process" -> "Heat" + [label = "POST /v1/{tenant_id}/stacks --parameter + imageid=; desired_capacity=1"]; + "Heat" -> "VDU1-VNFC1" [label = "create VM"]; + "Heat" <-- "VDU1-VNFC1" [label = ""]; + "Tacker common process" <-- "Heat" [label = ""]; + + === Update internal configuration on VNFC === + + "EM" -> "VDU1-VNFC1" [label = "update the internal configuration"]; + "EM" <-- "VDU1-VNFC1" [label = ""]; + + === Modify the VNF Instance's information in Tacker DB === + + "Client" -> "Tacker common process" + [label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"]; + "Tacker common process" -> "Tacker common process" + [label = "change vnfdid of the vnfInstance. + new vnfd includes identifier of the new image."]; + "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; + + === Scale-out the VNF === + + "Client" -> "Tacker common process" + [label = "/vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; + "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; + "NFVO" <- "Tacker common process" [label = "POST /grants"]; + "NFVO" --> "Tacker common process" + [label = "201 Created with new OpenStack Glance imageid"]; + "Tacker common process" -> "Tacker UserData script" + [label = "request, instance, grantRequest, grant, tmp_csar_dir"]; + "Tacker UserData script" -> "Tacker UserData script" + [label = "calculate the number of VMs"]; + "Tacker common process" <-- "Tacker UserData script" + [label = "HOT and corresponding input-paramaeter including desired_capacity"]; + "Tacker common process" -> "Heat" + [label = "PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id} + --existing --parameter imageid=; desired_capacity=2"]; + "Heat" -> "VDU1-VNFC1" [label = "re-create VM"]; + "Heat" <-- "VDU1-VNFC1" [label = ""]; + "Heat" -> "VDU1-VNFC2" [label = "create VM"]; + "Heat" <-- "VDU1-VNFC2" [label = ""]; + "Tacker common process" <-- "Heat" [label = ""]; + } diff --git a/specs/zed/individual-vnfc-management/01.png b/specs/zed/individual-vnfc-management/01.png new file mode 100644 index 00000000..29f45ab0 Binary files /dev/null and b/specs/zed/individual-vnfc-management/01.png differ diff --git a/specs/zed/individual-vnfc-management/02.diag b/specs/zed/individual-vnfc-management/02.diag new file mode 100644 index 00000000..4da38920 --- /dev/null +++ b/specs/zed/individual-vnfc-management/02.diag @@ -0,0 +1,65 @@ + + seqdiag { + node_width = 80; + edge_length = 100; + + EM; Client; NFVO; "Tacker common process"; "Tacker UserData script"; + Heat; VDU1-VNFC1; VDU1-VNFC2; + + === Instantiate VNF === + + "Client" -> "Tacker common process" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"]; + "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; + "Tacker common process" ->> "Tacker common process" + [label = "calculate the number of VMs"]; + "NFVO" <- "Tacker common process" [label = "POST /grants"]; + "NFVO" --> "Tacker common process" + [label = "201 Created with OpenStack Glance imageid"]; + "Tacker common process" -> "Tacker UserData script" + [label = "request, instance, grantRequest, grant, tmp_csar_dir"]; + "Tacker common process" <-- "Tacker UserData script" + [label = "adjusted HOT and corresponding input-parameter", + leftnote = "Tacker UserData script makes adjusted HOT"]; + "Tacker common process" -> "Heat" + [label = "POST /v1/{tenant_id}/stacks --parameter imageid="]; + "Heat" -> "VDU1-VNFC1" [label = "create VM"]; + "Heat" <-- "VDU1-VNFC1" [label = ""]; + "Tacker common process" <-- "Heat" [label = ""]; + + === Update internal configuration on VNFC === + + "EM" -> "VDU1-VNFC1" [label = "update the internal configuration"]; + "EM" <-- "VDU1-VNFC1" [label = ""]; + + === Modify the VNF Instance's information in Tacker DB === + + "Client" -> "Tacker common process" + [label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"]; + "Tacker common process" -> "Tacker common process" + [label = "change vnfdid of the vnfInstance. + new vnfd includes identifier of the new image."]; + "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; + + === Scale-out the VNF === + + "Client" -> "Tacker common process" + [label = "/vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; + "Client" <-- "Tacker common process" [label = "Response 202 Accepted"]; + "NFVO" <- "Tacker common process" [label = "POST /grants"]; + "NFVO" --> "Tacker common process" + [label = "201 Created with new OpenStack Glance imageid"]; + "Tacker common process" -> "Tacker UserData script" + [label = "request, instance, grantRequest, grant, tmp_csar_dir"]; + "Tacker UserData script" -> "Tacker UserData script" + [label = "calculate the number of VMs"]; + "Tacker common process" <-- "Tacker UserData script" + [label = "adjusted HOT and corresponding input-parameter", + leftnote = "Tacker UserData script makes adjusted HOT"]; + "Tacker common process" -> "Heat" + [label = "PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id} + --existing --parameter imageid="]; + "Heat" -> "VDU1-VNFC2" [label = "create VM"]; + "Heat" <-- "VDU1-VNFC2" [label = ""]; + "Tacker common process" <-- "Heat" [label = ""]; + } diff --git a/specs/zed/individual-vnfc-management/02.png b/specs/zed/individual-vnfc-management/02.png new file mode 100644 index 00000000..4d7b6528 Binary files /dev/null and b/specs/zed/individual-vnfc-management/02.png differ diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale.rst b/specs/zed/prometheus-plugin-autoheal-and-autoscale.rst index f331e01f..9c5b0003 100644 --- a/specs/zed/prometheus-plugin-autoheal-and-autoscale.rst +++ b/specs/zed/prometheus-plugin-autoheal-and-autoscale.rst @@ -242,36 +242,7 @@ Sequence for operation in FM Polling Mode The following describes the processing flow of the Tacker after the External Monitoring Tool sends the alert. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "External Monitoring Tool" - "Prometheus-Plugin" - "VnfFmDriver" - "Tacker DB" - - "External Monitoring Tool" -> "Prometheus-Plugin" - [label = "1. Send alert to the specified URI"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "2. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "3. Determine whether the alert is AutoHeal or AutoScale", note = "If it is scale, refer to the processing flow of AutoScale"]; - "Prometheus-Plugin" -> "Tacker DB" - [label = "4. Find the corresponding ComputeResource from the DB"]; - "Prometheus-Plugin" <-- "Tacker DB" - [label = "InstantiatedVnfInfo.vnfcResourceInfo.computeResource"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "5. Convert received alert to alarm"]; - "Prometheus-Plugin" -> "VnfFmDriver" - [label = "6. Execute VnfFmDriver"]; - "VnfFmDriver" -> "Tacker DB" - [label = "7. Save alarm to DB"]; - "VnfFmDriver" <-- "Tacker DB" - "Prometheus-Plugin" <-- "VnfFmDriver" - } +.. image:: ./prometheus-plugin-autoheal-and-autoscale/01.png #. External Monitoring Tool detects fault event via Prometheus and inform the alert to specified URI(Tacker). @@ -301,43 +272,7 @@ the External Monitoring Tool sends the alert. The following describes the Client's processing flow for Tacker using Polling Mode to AutoHeal. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 150; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfFmDriver" - "Tacker DB" - - "Client" -> "Tacker-server" - [label = "8. Get alarms"]; - "Tacker-server" -> "Tacker-conductor" - [label = "9. Trigger synchronization task"]; - "Tacker-conductor" -> "VnfFmDriver" - [label = "10. Get alarms"]; - "VnfFmDriver" -> "Tacker DB" - [label = "11. Get alarms from DB according to conditions"]; - "VnfFmDriver" <-- "Tacker DB" - [label = "Alarms"]; - "Tacker-conductor" <-- "VnfFmDriver" - [label = "Alarms"]; - "Tacker-server" <-- "Tacker-conductor" - [label = "Alarms"]; - "Client" <-- "Tacker-server" - [label = "Alarms"]; - "Client" -> "Client" - [label = "12. Get VNFC information from alarm", note = "If no alarm is returned, the processing is over"]; - "Client" -> "Tacker-server" - [label = "13. Heal specified vnfc"]; - "Tacker-server" -> "Tacker-conductor" - [label = "14. Trigger asynchronous task", note = "The same with the default heal operation"]; - "Client" <-- "Tacker-server" - [label = "Response 202 Accepted"]; - } +.. image:: ./prometheus-plugin-autoheal-and-autoscale/02.png 8. The Client sends a request to the Tacker to get the alarms of @@ -446,75 +381,7 @@ Sequence for operation in FM Notification Mode The following describes the Client's processing flow for Tacker using Notification Mode to AutoHeal. -.. seqdiag:: - - seqdiag { - node_width = 90; - edge_length = 100; - - "Client" - "External Monitoring Tool" - "Prometheus-Plugin" - "Tacker-server" - "Tacker-conductor" - "VnfFmDriver" - "Tacker DB" - - "Client" -> "Tacker-server" - [label = "1. Create subscription"]; - "Tacker-server" -> "Tacker-conductor" - [label = "Trigger synchronization task"]; - "Tacker-conductor" -> "VnfFmDriver" - [label = "execute VnfFmDriver"]; - "VnfFmDriver" -> "VnfFmDriver" - [label = "Get the callback_uri in the subscription"]; - "VnfFmDriver" -> "Client" - [label = "Send a GET request to the callback_uri in the Client."]; - "VnfFmDriver" <-- "Client" - [label = "Response 204 No Content"]; - "VnfFmDriver" -> "Tacker DB" - [label = "Save subscription to DB"]; - "VnfFmDriver" <-- "Tacker DB" - "Tacker-conductor" <-- "VnfFmDriver" - "Tacker-server" <-- "Tacker-conductor" - "Client" <-- "Tacker-server" - [label = "Response 201 Created"]; - "External Monitoring Tool" -> "Prometheus-Plugin" - [label = "2. Send alert to the specified URI"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "3. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "4. Determine whether the alert is AutoHeal or AutoScale", note = "If it is scale, refer to the processing flow of AutoScale"]; - "Prometheus-Plugin" -> "Tacker DB" - [label = "5. Find the corresponding ComputeResource from the DB"]; - "Prometheus-Plugin" <-- "Tacker DB" - [label = "InstantiatedVnfInfo.vnfcResourceInfo.computeResource"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "6. Convert received alert to alarm"]; - "Prometheus-Plugin" -> "VnfFmDriver" - [label = "7. execute VnfFmDriver"]; - "VnfFmDriver" -> "Tacker DB" - [label = "8. Save alarm to DB"]; - "VnfFmDriver" <-- "Tacker DB" - "VnfFmDriver" -> "Tacker DB" - [label = "9. Get subscriptions from DB"]; - "VnfFmDriver" <-- "Tacker DB" - "VnfFmDriver" -> "VnfFmDriver" - [label = "10. Determine whether the alarm matches the subscriptions.", note = "If it does not match, the processing ends"]; - "VnfFmDriver" -> "Client" - [label = "11. Send a Notify Alarm request to the Client"]; - "VnfFmDriver" <-- "Client" - [label = "Response 204 No Content"]; - "Prometheus-Plugin" <-- "VnfFmDriver" - "Client" -> "Client" - [label = "12. Get VNFC information from alarm", note = "If no alarm is returned, the processing is over"]; - "Client" -> "Tacker-server" - [label = "13. Heal specified vnfc"]; - "Tacker-server" -> "Tacker-conductor" - [label = "14. Trigger asynchronous task", note = "The same with the default heal operation"]; - "Client" <-- "Tacker-server" - [label = "Response 202 Accepted"]; - } +.. image:: ./prometheus-plugin-autoheal-and-autoscale/03.png #. The Client sends a request to create a subscription to the Tacker. After Tacker receives the subscription, it will get the callback_uri in it. @@ -657,82 +524,7 @@ Sequence for operation in PM The following describes the Client's processing flow for Tacker to AutoScale. -.. seqdiag:: - - seqdiag { - node_width = 90; - edge_length = 100; - - "Client" - "External Monitoring Tool" - "Prometheus-Plugin" - "Tacker-server" - "Tacker-conductor" - "VnfPmDriverV2" - "Tacker DB" - - "Client" -> "Tacker-server" - [label = "1. Create PM job"]; - "Tacker-server" -> "Tacker-conductor" - [label = "Trigger synchronization task"]; - "Tacker-conductor" -> "VnfPmDriverV2" - [label = "execute VnfPmDriverV2"]; - "VnfPmDriverV2" -> "VnfPmDriverV2" - [label = "Get the callback_uri in the PM job"]; - "VnfPmDriverV2" -> "Client" - [label = "Send a GET request to the callback_uri in the Client."]; - "VnfPmDriverV2" <-- "Client" - [label = "Response 204 No Content"]; - "VnfPmDriverV2" -> "Tacker DB" - [label = "Save PM job to DB"]; - "VnfPmDriverV2" <-- "Tacker DB" - "VnfPmDriverV2" -> "Prometheus-Plugin" - [label = "Set PM job to Prometheus-Plugin"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "Convert to Prometheus format PM job"]; - "Prometheus-Plugin" -> "External Monitoring Tool" - [label = "Set PM job"]; - "Prometheus-Plugin" <-- "External Monitoring Tool" - "VnfPmDriverV2" <-- "Prometheus-Plugin" - "Tacker-conductor" <-- "VnfPmDriverV2" - "Tacker-server" <-- "Tacker-conductor" - "Client" <-- "Tacker-server" - [label = "Response 201 Created"]; - "External Monitoring Tool" -> "Prometheus-Plugin" - [label = "2. Send event to the specified URI"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "3. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "4. Determine whether the report is AutoHeal or AutoScale", note = "If it is heal, refer to the processing flow of AutoHeal"]; - "Prometheus-Plugin" -> "Tacker DB" - [label = "5. Find the corresponding resource from the DB"]; - "Prometheus-Plugin" <-- "Tacker DB" - "Prometheus-Plugin" -> "Prometheus-Plugin" - [label = "6. Convert received event to report"]; - "Prometheus-Plugin" -> "VnfPmDriverV2" - [label = "7. execute VnfPmDriverV2"]; - "VnfPmDriverV2" -> "Tacker DB" - [label = "8. Save report to DB"]; - "VnfPmDriverV2" <-- "Tacker DB" - "VnfPmDriverV2" -> "Tacker DB" - [label = "9. Get job from DB"]; - "VnfPmDriverV2" <-- "Tacker DB" - "VnfPmDriverV2" -> "VnfPmDriverV2" - [label = "10. Determine whether the report matches the PM job.", note = "If it does not match, the processing ends"]; - "VnfPmDriverV2" -> "Client" - [label = "11. Send a Notify Event request to the Client"]; - "VnfPmDriverV2" <-- "Client" - [label = "Response 204 No Content"]; - "Prometheus-Plugin" <-- "VnfPmDriverV2" - "Client" -> "Client" - [label = "12. Get VNFC information from report", note = "If no report is returned, the processing is over"]; - "Client" -> "Tacker-server" - [label = "13. Scale"]; - "Tacker-server" -> "Tacker-conductor" - [label = "14. Trigger asynchronous task", note = "The same with the default scale operation"]; - "Client" <-- "Tacker-server" - [label = "Response 202 Accepted"]; - } +.. image:: ./prometheus-plugin-autoheal-and-autoscale/04.png #. The Client sends a request to create a PM job to the Tacker. After Tacker receives the PM job, it will get the callback_uri in it. diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale/01.diag b/specs/zed/prometheus-plugin-autoheal-and-autoscale/01.diag new file mode 100644 index 00000000..d83e6760 --- /dev/null +++ b/specs/zed/prometheus-plugin-autoheal-and-autoscale/01.diag @@ -0,0 +1,29 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "External Monitoring Tool" + "Prometheus-Plugin" + "VnfFmDriver" + "Tacker DB" + + "External Monitoring Tool" -> "Prometheus-Plugin" + [label = "1. Send alert to the specified URI"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "2. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "3. Determine whether the alert is AutoHeal or AutoScale", note = "If it is scale, refer to the processing flow of AutoScale"]; + "Prometheus-Plugin" -> "Tacker DB" + [label = "4. Find the corresponding ComputeResource from the DB"]; + "Prometheus-Plugin" <-- "Tacker DB" + [label = "InstantiatedVnfInfo.vnfcResourceInfo.computeResource"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "5. Convert received alert to alarm"]; + "Prometheus-Plugin" -> "VnfFmDriver" + [label = "6. Execute VnfFmDriver"]; + "VnfFmDriver" -> "Tacker DB" + [label = "7. Save alarm to DB"]; + "VnfFmDriver" <-- "Tacker DB" + "Prometheus-Plugin" <-- "VnfFmDriver" + } diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale/01.png b/specs/zed/prometheus-plugin-autoheal-and-autoscale/01.png new file mode 100644 index 00000000..6d92133a Binary files /dev/null and b/specs/zed/prometheus-plugin-autoheal-and-autoscale/01.png differ diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale/02.diag b/specs/zed/prometheus-plugin-autoheal-and-autoscale/02.diag new file mode 100644 index 00000000..dcdbdd1c --- /dev/null +++ b/specs/zed/prometheus-plugin-autoheal-and-autoscale/02.diag @@ -0,0 +1,36 @@ + + seqdiag { + node_width = 100; + edge_length = 150; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfFmDriver" + "Tacker DB" + + "Client" -> "Tacker-server" + [label = "8. Get alarms"]; + "Tacker-server" -> "Tacker-conductor" + [label = "9. Trigger synchronization task"]; + "Tacker-conductor" -> "VnfFmDriver" + [label = "10. Get alarms"]; + "VnfFmDriver" -> "Tacker DB" + [label = "11. Get alarms from DB according to conditions"]; + "VnfFmDriver" <-- "Tacker DB" + [label = "Alarms"]; + "Tacker-conductor" <-- "VnfFmDriver" + [label = "Alarms"]; + "Tacker-server" <-- "Tacker-conductor" + [label = "Alarms"]; + "Client" <-- "Tacker-server" + [label = "Alarms"]; + "Client" -> "Client" + [label = "12. Get VNFC information from alarm", note = "If no alarm is returned, the processing is over"]; + "Client" -> "Tacker-server" + [label = "13. Heal specified vnfc"]; + "Tacker-server" -> "Tacker-conductor" + [label = "14. Trigger asynchronous task", note = "The same with the default heal operation"]; + "Client" <-- "Tacker-server" + [label = "Response 202 Accepted"]; + } diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale/02.png b/specs/zed/prometheus-plugin-autoheal-and-autoscale/02.png new file mode 100644 index 00000000..2f592872 Binary files /dev/null and b/specs/zed/prometheus-plugin-autoheal-and-autoscale/02.png differ diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale/03.diag b/specs/zed/prometheus-plugin-autoheal-and-autoscale/03.diag new file mode 100644 index 00000000..5e0aa9c8 --- /dev/null +++ b/specs/zed/prometheus-plugin-autoheal-and-autoscale/03.diag @@ -0,0 +1,68 @@ + + seqdiag { + node_width = 90; + edge_length = 100; + + "Client" + "External Monitoring Tool" + "Prometheus-Plugin" + "Tacker-server" + "Tacker-conductor" + "VnfFmDriver" + "Tacker DB" + + "Client" -> "Tacker-server" + [label = "1. Create subscription"]; + "Tacker-server" -> "Tacker-conductor" + [label = "Trigger synchronization task"]; + "Tacker-conductor" -> "VnfFmDriver" + [label = "execute VnfFmDriver"]; + "VnfFmDriver" -> "VnfFmDriver" + [label = "Get the callback_uri in the subscription"]; + "VnfFmDriver" -> "Client" + [label = "Send a GET request to the callback_uri in the Client."]; + "VnfFmDriver" <-- "Client" + [label = "Response 204 No Content"]; + "VnfFmDriver" -> "Tacker DB" + [label = "Save subscription to DB"]; + "VnfFmDriver" <-- "Tacker DB" + "Tacker-conductor" <-- "VnfFmDriver" + "Tacker-server" <-- "Tacker-conductor" + "Client" <-- "Tacker-server" + [label = "Response 201 Created"]; + "External Monitoring Tool" -> "Prometheus-Plugin" + [label = "2. Send alert to the specified URI"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "3. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "4. Determine whether the alert is AutoHeal or AutoScale", note = "If it is scale, refer to the processing flow of AutoScale"]; + "Prometheus-Plugin" -> "Tacker DB" + [label = "5. Find the corresponding ComputeResource from the DB"]; + "Prometheus-Plugin" <-- "Tacker DB" + [label = "InstantiatedVnfInfo.vnfcResourceInfo.computeResource"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "6. Convert received alert to alarm"]; + "Prometheus-Plugin" -> "VnfFmDriver" + [label = "7. execute VnfFmDriver"]; + "VnfFmDriver" -> "Tacker DB" + [label = "8. Save alarm to DB"]; + "VnfFmDriver" <-- "Tacker DB" + "VnfFmDriver" -> "Tacker DB" + [label = "9. Get subscriptions from DB"]; + "VnfFmDriver" <-- "Tacker DB" + "VnfFmDriver" -> "VnfFmDriver" + [label = "10. Determine whether the alarm matches the subscriptions.", note = "If it does not match, the processing ends"]; + "VnfFmDriver" -> "Client" + [label = "11. Send a Notify Alarm request to the Client"]; + "VnfFmDriver" <-- "Client" + [label = "Response 204 No Content"]; + "Prometheus-Plugin" <-- "VnfFmDriver" + "Client" -> "Client" + [label = "12. Get VNFC information from alarm", note = "If no alarm is returned, the processing is over"]; + "Client" -> "Tacker-server" + [label = "13. Heal specified vnfc"]; + "Tacker-server" -> "Tacker-conductor" + [label = "14. Trigger asynchronous task", note = "The same with the default heal operation"]; + "Client" <-- "Tacker-server" + [label = "Response 202 Accepted"]; + } diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale/03.png b/specs/zed/prometheus-plugin-autoheal-and-autoscale/03.png new file mode 100644 index 00000000..606b51e5 Binary files /dev/null and b/specs/zed/prometheus-plugin-autoheal-and-autoscale/03.png differ diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale/04.diag b/specs/zed/prometheus-plugin-autoheal-and-autoscale/04.diag new file mode 100644 index 00000000..aec9a292 --- /dev/null +++ b/specs/zed/prometheus-plugin-autoheal-and-autoscale/04.diag @@ -0,0 +1,75 @@ + + seqdiag { + node_width = 90; + edge_length = 100; + + "Client" + "External Monitoring Tool" + "Prometheus-Plugin" + "Tacker-server" + "Tacker-conductor" + "VnfPmDriverV2" + "Tacker DB" + + "Client" -> "Tacker-server" + [label = "1. Create PM job"]; + "Tacker-server" -> "Tacker-conductor" + [label = "Trigger synchronization task"]; + "Tacker-conductor" -> "VnfPmDriverV2" + [label = "execute VnfPmDriverV2"]; + "VnfPmDriverV2" -> "VnfPmDriverV2" + [label = "Get the callback_uri in the PM job"]; + "VnfPmDriverV2" -> "Client" + [label = "Send a GET request to the callback_uri in the Client."]; + "VnfPmDriverV2" <-- "Client" + [label = "Response 204 No Content"]; + "VnfPmDriverV2" -> "Tacker DB" + [label = "Save PM job to DB"]; + "VnfPmDriverV2" <-- "Tacker DB" + "VnfPmDriverV2" -> "Prometheus-Plugin" + [label = "Set PM job to Prometheus-Plugin"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "Convert to Prometheus format PM job"]; + "Prometheus-Plugin" -> "External Monitoring Tool" + [label = "Set PM job"]; + "Prometheus-Plugin" <-- "External Monitoring Tool" + "VnfPmDriverV2" <-- "Prometheus-Plugin" + "Tacker-conductor" <-- "VnfPmDriverV2" + "Tacker-server" <-- "Tacker-conductor" + "Client" <-- "Tacker-server" + [label = "Response 201 Created"]; + "External Monitoring Tool" -> "Prometheus-Plugin" + [label = "2. Send event to the specified URI"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "3. Check items of prometheus_plugin from cfg.CONF.tacker", note = "If prometheus_plugin is False, asynchronous task is over"]; + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "4. Determine whether the report is AutoHeal or AutoScale", note = "If it is heal, refer to the processing flow of AutoHeal"]; + "Prometheus-Plugin" -> "Tacker DB" + [label = "5. Find the corresponding resource from the DB"]; + "Prometheus-Plugin" <-- "Tacker DB" + "Prometheus-Plugin" -> "Prometheus-Plugin" + [label = "6. Convert received event to report"]; + "Prometheus-Plugin" -> "VnfPmDriverV2" + [label = "7. execute VnfPmDriverV2"]; + "VnfPmDriverV2" -> "Tacker DB" + [label = "8. Save report to DB"]; + "VnfPmDriverV2" <-- "Tacker DB" + "VnfPmDriverV2" -> "Tacker DB" + [label = "9. Get job from DB"]; + "VnfPmDriverV2" <-- "Tacker DB" + "VnfPmDriverV2" -> "VnfPmDriverV2" + [label = "10. Determine whether the report matches the PM job.", note = "If it does not match, the processing ends"]; + "VnfPmDriverV2" -> "Client" + [label = "11. Send a Notify Event request to the Client"]; + "VnfPmDriverV2" <-- "Client" + [label = "Response 204 No Content"]; + "Prometheus-Plugin" <-- "VnfPmDriverV2" + "Client" -> "Client" + [label = "12. Get VNFC information from report", note = "If no report is returned, the processing is over"]; + "Client" -> "Tacker-server" + [label = "13. Scale"]; + "Tacker-server" -> "Tacker-conductor" + [label = "14. Trigger asynchronous task", note = "The same with the default scale operation"]; + "Client" <-- "Tacker-server" + [label = "Response 202 Accepted"]; + } diff --git a/specs/zed/prometheus-plugin-autoheal-and-autoscale/04.png b/specs/zed/prometheus-plugin-autoheal-and-autoscale/04.png new file mode 100644 index 00000000..a8ca44f8 Binary files /dev/null and b/specs/zed/prometheus-plugin-autoheal-and-autoscale/04.png differ diff --git a/specs/zed/support-openid-k8s-vim.rst b/specs/zed/support-openid-k8s-vim.rst index 36626303..8478e3b2 100644 --- a/specs/zed/support-openid-k8s-vim.rst +++ b/specs/zed/support-openid-k8s-vim.rst @@ -259,40 +259,7 @@ will be as follows: The flow of calling the Kubernetes APIs is shown as below (take ``instantiate`` as an example): -.. seqdiag:: - - seqdiag { - node_width = 90; - edge_length = 130; - - "Client" - "Tacker-server" - "Tacker-conductor" - "VnfLcmDriver" - "InfraDriver(Kubernetes)" - "IdP" - "VIM(Kubernetes)" - - "Client" -> "Tacker-server" - [label = "1. instantiate vnf"]; - "Client" <-- "Tacker-server" - [label = "response"]; - "Tacker-server" ->> "Tacker-conductor" - [label = "2. instantiate"]; - "Tacker-conductor" -> "VnfLcmDriver" - [label = "3. instantiate_vnf"]; - "VnfLcmDriver" -> "InfraDriver(Kubernetes)" - [label = "4. instantiate_vnf"]; - "InfraDriver(Kubernetes)" -> "IdP" - [label = "5. get token"]; - "InfraDriver(Kubernetes)" <-- "IdP"; - "InfraDriver(Kubernetes)" -> "VIM(Kubernetes)" - [label = "6. call Kubernetes APIs"]; - "InfraDriver(Kubernetes)" <-- "VIM(Kubernetes)" - [label = "response"]; - "VnfLcmDriver" <-- "InfraDriver(Kubernetes)"; - "Tacker-conductor" <-- "VnfLcmDriver"; - } +.. image:: ./support-openid-k8s-vim/01.png #. The Client sends a request to Tacker-server to instantiate a vnf. diff --git a/specs/zed/support-openid-k8s-vim/01.diag b/specs/zed/support-openid-k8s-vim/01.diag new file mode 100644 index 00000000..e9b252cc --- /dev/null +++ b/specs/zed/support-openid-k8s-vim/01.diag @@ -0,0 +1,33 @@ + + seqdiag { + node_width = 90; + edge_length = 130; + + "Client" + "Tacker-server" + "Tacker-conductor" + "VnfLcmDriver" + "InfraDriver(Kubernetes)" + "IdP" + "VIM(Kubernetes)" + + "Client" -> "Tacker-server" + [label = "1. instantiate vnf"]; + "Client" <-- "Tacker-server" + [label = "response"]; + "Tacker-server" ->> "Tacker-conductor" + [label = "2. instantiate"]; + "Tacker-conductor" -> "VnfLcmDriver" + [label = "3. instantiate_vnf"]; + "VnfLcmDriver" -> "InfraDriver(Kubernetes)" + [label = "4. instantiate_vnf"]; + "InfraDriver(Kubernetes)" -> "IdP" + [label = "5. get token"]; + "InfraDriver(Kubernetes)" <-- "IdP"; + "InfraDriver(Kubernetes)" -> "VIM(Kubernetes)" + [label = "6. call Kubernetes APIs"]; + "InfraDriver(Kubernetes)" <-- "VIM(Kubernetes)" + [label = "response"]; + "VnfLcmDriver" <-- "InfraDriver(Kubernetes)"; + "Tacker-conductor" <-- "VnfLcmDriver"; + } diff --git a/specs/zed/support-openid-k8s-vim/01.png b/specs/zed/support-openid-k8s-vim/01.png new file mode 100644 index 00000000..fdd06bd6 Binary files /dev/null and b/specs/zed/support-openid-k8s-vim/01.png differ diff --git a/specs/zed/support-v2-cnf-heal.rst b/specs/zed/support-v2-cnf-heal.rst index 763e1bbe..dcb6de5b 100644 --- a/specs/zed/support-v2-cnf-heal.rst +++ b/specs/zed/support-v2-cnf-heal.rst @@ -112,63 +112,7 @@ Flow of Heal operation There is no change from the current implementation except for InfraDriver (KubernetesDriver) processing. -.. seqdiag:: - - seqdiag { - - node_width = 100; - edge_length = 120; - - Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; - MgmtDriver; KubernetesDriver; Kubernetes; VNF; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal"]; - "tacker-server" -> "tacker-server" - [label = "validate vnfcInstanceId in the request."]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "NFVO" <- "tacker-conductor" [label = "POST /grants"]; - "NFVO" --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; - "VnfLcmDriver" -> "KubernetesDriver" [label = "execute KubernetesDriver"]; - "KubernetesDriver" -> "Kubernetes" [label = "call Delete API"]; - "KubernetesDriver" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Create API only if heal targets are singleton Pods"]; - "KubernetesDriver" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Read API to check the status of healed resources"]; - "KubernetesDriver" <-- "Kubernetes" [label = "resource information"]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-v2-cnf-heal/01.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/zed/support-v2-cnf-heal/01.diag b/specs/zed/support-v2-cnf-heal/01.diag new file mode 100644 index 00000000..96c1e6fc --- /dev/null +++ b/specs/zed/support-v2-cnf-heal/01.diag @@ -0,0 +1,56 @@ + + seqdiag { + + node_width = 100; + edge_length = 120; + + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; + MgmtDriver; KubernetesDriver; Kubernetes; VNF; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal"]; + "tacker-server" -> "tacker-server" + [label = "validate vnfcInstanceId in the request."]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "NFVO" <- "tacker-conductor" [label = "POST /grants"]; + "NFVO" --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" -> "KubernetesDriver" [label = "execute KubernetesDriver"]; + "KubernetesDriver" -> "Kubernetes" [label = "call Delete API"]; + "KubernetesDriver" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Create API only if heal targets are singleton Pods"]; + "KubernetesDriver" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Read API to check the status of healed resources"]; + "KubernetesDriver" <-- "Kubernetes" [label = "resource information"]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/zed/support-v2-cnf-heal/01.png b/specs/zed/support-v2-cnf-heal/01.png new file mode 100644 index 00000000..dadaab9c Binary files /dev/null and b/specs/zed/support-v2-cnf-heal/01.png differ diff --git a/specs/zed/support-v2-cnf-rollback.rst b/specs/zed/support-v2-cnf-rollback.rst index afcd5113..9563610a 100644 --- a/specs/zed/support-v2-cnf-rollback.rst +++ b/specs/zed/support-v2-cnf-rollback.rst @@ -56,47 +56,7 @@ Rollback for Instantiation There is no change from the current implementation except for InfraDriver (KubernetesDriver) processing. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 120; - - Client -> "tacker-server" - [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLING_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; - "VnfLcmDriver" -> "KubernetesDriver" [label = "execute KubernetesDriver"]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Read API to check the existence of resources"]; - "KubernetesDriver" <-- "Kubernetes" [label = "resource information if it exists"]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Delete API if resources exist"]; - "KubernetesDriver" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Read API to check the status of resources"]; - "KubernetesDriver" <-- "Kubernetes" [label = "resource information"]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLED_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-v2-cnf-rollback/01.png The procedure consists of the following steps as illustrated in above sequence: @@ -193,49 +153,7 @@ Rollback for Scale-out There is no change from the current implementation except for InfraDriver processing. -.. seqdiag:: - - seqdiag { - node_width = 100; - edge_length = 120; - - Client -> "tacker-server" - [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLING_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLING_BACK)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; - "VnfLcmDriver" -> "KubernetesDriver" [label = "execute KubernetesDriver"]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Read API to check the replicas of the resources"]; - "KubernetesDriver" <-- "Kubernetes" [label = "the value of replicas"]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Update API to update the replicas - to the one before scaling-out - if replicas has been updated by failed scale-out operation"]; - "KubernetesDriver" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Read API to check the status of resources"]; - "KubernetesDriver" <-- "Kubernetes" [label = ""]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "tacker-database" - [label = "mark operation as ROLLED_BACK"]; - "tacker-conductor" <-- "tacker-database" - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-v2-cnf-rollback/02.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/zed/support-v2-cnf-rollback/01.diag b/specs/zed/support-v2-cnf-rollback/01.diag new file mode 100644 index 00000000..a8d0691f --- /dev/null +++ b/specs/zed/support-v2-cnf-rollback/01.diag @@ -0,0 +1,40 @@ + + seqdiag { + node_width = 100; + edge_length = 120; + + Client -> "tacker-server" + [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLING_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute VnfLcmDriver"]; + "VnfLcmDriver" -> "KubernetesDriver" [label = "execute KubernetesDriver"]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Read API to check the existence of resources"]; + "KubernetesDriver" <-- "Kubernetes" [label = "resource information if it exists"]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Delete API if resources exist"]; + "KubernetesDriver" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Read API to check the status of resources"]; + "KubernetesDriver" <-- "Kubernetes" [label = "resource information"]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLED_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/zed/support-v2-cnf-rollback/01.png b/specs/zed/support-v2-cnf-rollback/01.png new file mode 100644 index 00000000..fe899887 Binary files /dev/null and b/specs/zed/support-v2-cnf-rollback/01.png differ diff --git a/specs/zed/support-v2-cnf-rollback/02.diag b/specs/zed/support-v2-cnf-rollback/02.diag new file mode 100644 index 00000000..cea55f36 --- /dev/null +++ b/specs/zed/support-v2-cnf-rollback/02.diag @@ -0,0 +1,42 @@ + + seqdiag { + node_width = 100; + edge_length = 120; + + Client -> "tacker-server" + [label = "POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLING_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLING_BACK)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" -> "KubernetesDriver" [label = "execute KubernetesDriver"]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Read API to check the replicas of the resources"]; + "KubernetesDriver" <-- "Kubernetes" [label = "the value of replicas"]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Update API to update the replicas + to the one before scaling-out + if replicas has been updated by failed scale-out operation"]; + "KubernetesDriver" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Read API to check the status of resources"]; + "KubernetesDriver" <-- "Kubernetes" [label = ""]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "tacker-database" + [label = "mark operation as ROLLED_BACK"]; + "tacker-conductor" <-- "tacker-database" + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (ROLLED_BACK or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/zed/support-v2-cnf-rollback/02.png b/specs/zed/support-v2-cnf-rollback/02.png new file mode 100644 index 00000000..efd83505 Binary files /dev/null and b/specs/zed/support-v2-cnf-rollback/02.png differ diff --git a/specs/zed/support-v2-cnf-scale.rst b/specs/zed/support-v2-cnf-scale.rst index cc83b9fb..e191d4da 100644 --- a/specs/zed/support-v2-cnf-scale.rst +++ b/specs/zed/support-v2-cnf-scale.rst @@ -68,63 +68,7 @@ Flow of Scale VNF There is no change from the current implementation except for InfraDriver (KubernetesDriver) processing. -.. seqdiag:: - - seqdiag { - - node_width = 100; - edge_length = 120; - - Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; - MgmtDriver; KubernetesDriver; Kubernetes; VNF; - - Client -> "tacker-server" - [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; - Client <-- "tacker-server" [label = "Response 202 Accepted"]; - "tacker-server" ->> "tacker-conductor" - [label = "trigger asynchronous task"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "tacker-conductor" - [label = "calculates the number of Pods to scale"]; - NFVO <- "tacker-conductor" [label = "POST /grants"]; - NFVO --> "tacker-conductor" [label = "201 Created"]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; - "VnfLcmDriver" -> "VnfLcmDriver" - [label = "calculate the number of VMs to scale-out or scale-in"]; - "VnfLcmDriver" -> "KubernetesDriver" [label = "execute KubernetesDriver"]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Update API to change replicas of target VDU"]; - "KubernetesDriver" <-- "Kubernetes" [label = ""]; - "KubernetesDriver" -> "Kubernetes" - [label = "call Read API to check the status of resources"]; - "KubernetesDriver" <-- "Kubernetes" [label = "resource information"]; - "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; - "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; - "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; - "MgmtDriver" <-- "VNF" [label = ""]; - "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; - "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; - "tacker-conductor" ->> "tacker-conductor" - [label = "execute notification process"]; - Client <- "tacker-conductor" - [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; - Client --> "tacker-conductor" [label = "Response: 204 No Content"]; - } +.. image:: ./support-v2-cnf-scale/01.png The procedure consists of the following steps as illustrated in above sequence: diff --git a/specs/zed/support-v2-cnf-scale/01.diag b/specs/zed/support-v2-cnf-scale/01.diag new file mode 100644 index 00000000..febb49db --- /dev/null +++ b/specs/zed/support-v2-cnf-scale/01.diag @@ -0,0 +1,56 @@ + + seqdiag { + + node_width = 100; + edge_length = 120; + + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; + MgmtDriver; KubernetesDriver; Kubernetes; VNF; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "tacker-conductor" + [label = "calculates the number of Pods to scale"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute preamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" -> "VnfLcmDriver" + [label = "calculate the number of VMs to scale-out or scale-in"]; + "VnfLcmDriver" -> "KubernetesDriver" [label = "execute KubernetesDriver"]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Update API to change replicas of target VDU"]; + "KubernetesDriver" <-- "Kubernetes" [label = ""]; + "KubernetesDriver" -> "Kubernetes" + [label = "call Read API to check the status of resources"]; + "KubernetesDriver" <-- "Kubernetes" [label = "resource information"]; + "VnfLcmDriver" <-- "KubernetesDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" + [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } diff --git a/specs/zed/support-v2-cnf-scale/01.png b/specs/zed/support-v2-cnf-scale/01.png new file mode 100644 index 00000000..2997bc42 Binary files /dev/null and b/specs/zed/support-v2-cnf-scale/01.png differ