Merge "Remove sphinxcontrib-*diag"

This commit is contained in:
Zuul
2024-12-07 21:42:08 +00:00
committed by Gerrit Code Review
394 changed files with 6478 additions and 6542 deletions

View File

@@ -3,9 +3,6 @@
# process, which may cause wedges in the gate later. # process, which may cause wedges in the gate later.
sphinx>=2.0.0,!=2.1.0 # BSD sphinx>=2.0.0,!=2.1.0 # BSD
openstackdocstheme>=2.2.1 # Apache-2.0 openstackdocstheme>=2.2.1 # Apache-2.0
pillow===9.5.0 pillow===11.0.0
sphinxcontrib-actdiag # BSD sphinxcontrib-actdiag # BSD
sphinxcontrib-blockdiag # BSD
sphinxcontrib-nwdiag # BSD
sphinxcontrib-seqdiag # BSD
sphinxcontrib-mermaid # BSD sphinxcontrib-mermaid # BSD

View File

@@ -28,10 +28,6 @@ import datetime
extensions = [ extensions = [
'sphinx.ext.todo', 'sphinx.ext.todo',
'sphinx.ext.viewcode', 'sphinx.ext.viewcode',
'sphinxcontrib.blockdiag',
'sphinxcontrib.actdiag',
'sphinxcontrib.seqdiag',
'sphinxcontrib.nwdiag',
'sphinxcontrib.mermaid', 'sphinxcontrib.mermaid',
'openstackdocstheme', 'openstackdocstheme',
] ]

View File

@@ -405,59 +405,7 @@ The following diagram shows the rolling update using coordinateVNF script.
Sequence for Rolling update operation Sequence for Rolling update operation
.. seqdiag:: .. image:: ./add-sample-coordination/01.png
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 = ""];
}
#. The Client sends a ChangeCurrentVNFPackage request to the "Individual VNF instance" resource. #. The Client sends a ChangeCurrentVNFPackage request to the "Individual VNF instance" resource.

View File

@@ -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 = ""];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -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. The flow of a policy check in API process to support enhanced Tacker policy.
.. seqdiag:: .. image:: ./enhance-tacker-policy/01.png
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"];
}
Step 3 is specialized and needs to be implemented by each API process by itself. 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: 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. The flow of a policy filter in API process to support enhanced Tacker policy.
.. seqdiag:: .. image:: ./enhance-tacker-policy/02.png
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"];
}
Step 6 is specialized and needs to be implemented by each API process by itself. 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 The other steps are common or already exist steps for all API processes to be

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -86,34 +86,7 @@ until there are no more candidates.
1) Flowchart of availability zone reselection 1) Flowchart of availability zone reselection
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. blockdiag:: .. image:: ./enhance_placement_process/01.png
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'];
}
The procedure consists of the following steps as illustrated in above The procedure consists of the following steps as illustrated in above
flow: flow:

View File

@@ -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'];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -36,53 +36,7 @@ In current implementation, onboarding process are as follows.
The sequence of the process is as follows. The sequence of the process is as follows.
.. seqdiag:: .. image:: ./support-multi-conductors-onboarding/01.png
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 = ""]
}
- when receiving the "POST /vnfpkgm/v1/vnf_packages/{vnf_package_id} - when receiving the "POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}
/package_content/upload_from_uri" request. /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. The sequence of the process is as follows.
.. seqdiag:: .. image:: ./support-multi-conductors-onboarding/02.png
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 = ""]
}
.. note:: Configurations of a backend storage are defined in .. note:: Configurations of a backend storage are defined in
``[glance_store]`` section in ``tacker.conf``. ``[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 #. The Tacker-conductor that sends a message to all Tacker-conductors
updates the onboardingState to "ONBOARDED". updates the onboardingState to "ONBOARDED".
.. seqdiag:: .. image:: ./support-multi-conductors-onboarding/03.png
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 = ""]
}
- when receiving the "POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/ - when receiving the "POST /vnfpkgm/v1/vnf_packages/{vnf_package_id}/
package_content/upload_from_uri" request. 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 #. The Tacker-conductor that sends a message to all Tacker-conductors
updates the onboardingState to "ONBOARDED". updates the onboardingState to "ONBOARDED".
.. seqdiag:: .. image:: ./support-multi-conductors-onboarding/04.png
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 = ""]
}
.. note:: If even one of the Tacker-conductor fails to download CSAR file, .. note:: If even one of the Tacker-conductor fails to download CSAR file,
the ``onboardingState`` is not being updated to "ONBOARDED". 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 #. All Tacker-conductors that get the message delete the file from
their local file system and return a result via rpc. their local file system and return a result via rpc.
.. seqdiag:: .. image:: ./support-multi-conductors-onboarding/05.png
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 = ""]
}
If a Tacker-conductor is newly added to the cluster, If a Tacker-conductor is newly added to the cluster,

View File

@@ -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 = ""]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -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 = ""]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -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 = ""]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@@ -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 = ""]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -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 = ""]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -137,34 +137,7 @@ Flow of initializing PostgreSQL as Tacker DB backend
The following sequence diagram describes initializing PostgreSQL as Tacker DB backend. The following sequence diagram describes initializing PostgreSQL as Tacker DB backend.
.. seqdiag:: .. image:: ./support-tacker-db-manage-postgresql/01.png
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"];
}
#. The Client creates Tacker DB and user in PostgreSQL. #. The Client creates Tacker DB and user in PostgreSQL.
#. The Client requests Tacker to execute tacker-db-manage #. The Client requests Tacker to execute tacker-db-manage

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -236,72 +236,7 @@ The following sequence diagrams describes
the Client's processing flow for Tacker to AutoScale the Client's processing flow for Tacker to AutoScale
by PM threshold. by PM threshold.
.. seqdiag:: .. image:: ./support-threshold-pm-interface/01.png
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"];
}
#. The Client sends a request to create a threshold to the Tacker. #. 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. After Tacker receives the threshold, it will get the callback_uri in it.

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -154,43 +154,7 @@ Sequence for operation
The following describes the processing flow of the Tacker after The following describes the processing flow of the Tacker after
the External Monitoring Tool sends the alert. the External Monitoring Tool sends the alert.
.. seqdiag:: .. image:: ./vnfm-autoheal-and-autoscale/01.png
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"];
}
#. As an External Monitoring Tool, Prometheus monitors specified resources #. As an External Monitoring Tool, Prometheus monitors specified resources
through user-defined rules. When the data monitored by Prometheus matches 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 following describes the processing flow of
the Tacker after the External Monitoring Tool sends the alert. the Tacker after the External Monitoring Tool sends the alert.
.. seqdiag:: .. image:: ./vnfm-autoheal-and-autoscale/02.png
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"];
}
#. As an External Monitoring Tool, Prometheus monitors specified resources #. As an External Monitoring Tool, Prometheus monitors specified resources
through user-defined rules. When the data monitored by Prometheus matches through user-defined rules. When the data monitored by Prometheus matches

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -125,55 +125,13 @@ of authentication credentials in VNF LCM operations under consideration.
The following is a flow of Instantiation of a VNF instance The following is a flow of Instantiation of a VNF instance
with barbican under consideration. with barbican under consideration.
.. seqdiag:: .. image:: ./support-external-keymanager/01.png
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 = ""];
}
The following is a flow of Termination of a VNF instance The following is a flow of Termination of a VNF instance
with barbican. with barbican.
.. seqdiag:: .. image:: ./support-external-keymanager/02.png
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"];
}
Add configuration options Add configuration options

View File

@@ -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 = ""];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -83,47 +83,17 @@ with the conductor via the following interface VimMonitor:
sequence diagram for register vim: sequence diagram for register vim:
.. seqdiag:: .. image:: ./mistral_vim_monitor/01.png
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"]
}
sequence diagram for de-register vim: sequence diagram for de-register vim:
.. seqdiag:: .. image:: ./mistral_vim_monitor/02.png
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"];
}
sequence diagram for update vim with auth url change: sequence diagram for update vim with auth url change:
.. seqdiag:: .. image:: ./mistral_vim_monitor/03.png
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"];
}
Alternatives Alternatives

View File

@@ -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"]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -112,14 +112,7 @@ happened on the monitored vnf, for example the VNF was scaled, and was respawned
Sequence diagram for create VNF: Sequence diagram for create VNF:
.. seqdiag:: .. image:: ./mistral_vnf_monitor_policies/01.png
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"];
}
Monitor policy is divided into two parts: policy monitor and policy action. Policy monitor, 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 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 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. information of VNF instance so that they can be managed.
.. seqdiag:: .. image:: ./mistral_vnf_monitor_policies/02.png
seqdiag {
=== loop according to monitor policy ===
vnf_policy_monitor -> conductor [label = "execute_policy_action"]
conductor -> policy_action [label = "execute_action" ]
}
The mistral workflow action will be run once the workflow is started. The action will do 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 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 If the policy action needs to update the vnf_policy_monitor, it will notify vnf_policy_monitor
the change. the change.
.. seqdiag:: .. image:: ./mistral_vnf_monitor_policies/03.png
seqdiag {
conductor -> vnf_policy_monitor [label = "update action job via RPC"]
}
If conductor finds the action is obsolete, it will return bad_action to vnf_policy_monitor, If conductor finds the action is obsolete, it will return bad_action to vnf_policy_monitor,
then the vnf_policy_monitor will exit. then the vnf_policy_monitor will exit.
@@ -164,25 +147,12 @@ VDUs.
Sequence diagram for deleting VNF: Sequence diagram for deleting VNF:
.. seqdiag:: .. image:: ./mistral_vnf_monitor_policies/04.png
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"]
}
Sequence diagram for scale VNF: Sequence diagram for scale VNF:
.. seqdiag:: .. image:: ./mistral_vnf_monitor_policies/05.png
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"]
}
Alternatives Alternatives

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -0,0 +1,6 @@
seqdiag {
=== loop according to monitor policy ===
vnf_policy_monitor -> conductor [label = "execute_policy_action"]
conductor -> policy_action [label = "execute_action" ]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -0,0 +1,4 @@
seqdiag {
conductor -> vnf_policy_monitor [label = "update action job via RPC"]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -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"]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@@ -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"]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -36,7 +36,7 @@ Some notes about using this template:
* If you would like to provide a diagram with your spec, text representations * 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 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. These are described below.
If you require an image (screenshot) for your BP, attaching that to the BP 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 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 mermaid Flowchart

View File

@@ -168,19 +168,7 @@ transions of these three states.
Flow of uploading of VNF package content Flow of uploading of VNF package content
---------------------------------------- ----------------------------------------
.. seqdiag:: .. image:: ./vnf_package_support/01.png
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"]
}
Precondition: The individual VNF package resource has been created with Precondition: The individual VNF package resource has been created with
the value of "onboardingState" attribute equals to "CREATED". the value of "onboardingState" attribute equals to "CREATED".

View File

@@ -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"]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -57,13 +57,7 @@ The operations provided through this interface are:
1) Flow of creation of a VNF instance resource 1) Flow of creation of a VNF instance resource
---------------------------------------------- ----------------------------------------------
.. seqdiag:: .. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/01.png
seqdiag {
Consumer -> VNFM [label = "1. POST .../vnf_instances"];
VNFM -->> VNFM [label = "2. Create VNF instance resource"];
Consumer <- VNFM [label = "3. 201 Created"];
}
The procedure consists of the following steps as illustrated in above sequence: 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 2) Flow of Instantiation of a VNF instance
------------------------------------------ ------------------------------------------
.. seqdiag:: .. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/02.png
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"];
}
The procedure consists of the following steps as illustrated in above sequence: 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. Precondition: VNF instance in "INSTANTIATED" state.
.. seqdiag:: .. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/03.png
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"];
}
The procedure consists of the following steps as illustrated in above sequence: 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 4) Flow of Termination of a VNF instance
---------------------------------------- ----------------------------------------
.. seqdiag:: .. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/04.png
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"];
}
The procedure consists of the following steps as illustrated in above sequence: 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. Precondition: VNF instance in NOT_INSTANTIATED state.
.. seqdiag:: .. image:: ./etsi-nfv-sol-rest-api-for-VNF-deployment/05.png
seqdiag {
Consumer -> VNFM [label = "1.DELETE .../vnf_instances/{vnfInstanceId}"];
VNFM -->> VNFM [label = "2. Delete VNF instance resource"];
Consumer <- VNFM [label = "3. 204 No content"];
}
The procedure consists of the following steps as illustrated in above sequence: The procedure consists of the following steps as illustrated in above sequence:

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -55,23 +55,7 @@ Instantiation procedure with LCM operation user data
As an example, VNF instantiation procedure using LCM operation user data is As an example, VNF instantiation procedure using LCM operation user data is
described below. described below.
.. seqdiag:: .. image:: ./lcm-operation-with-lcm-operation-user-data/01.png
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;
}
Instantiating VNF, as illustrated in above sequence diagram, consists of Instantiating VNF, as illustrated in above sequence diagram, consists of
following steps. following steps.

View File

@@ -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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -293,47 +293,7 @@ dependency.
Following sequence diagram describes the components involved and the flow of Following sequence diagram describes the components involved and the flow of
CNF instantiation: CNF instantiation:
.. seqdiag:: .. image:: ./container-network-function/01.png
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;
}
#. ``create()`` method will get instantiation request and VNF package path as #. ``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 Following sequence diagram shows operation of ``create()`` method in
Kubernetes infra driver: Kubernetes infra driver:
.. seqdiag:: .. image:: ./container-network-function/02.png
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"];
}
#. Definitions extracted from Kubernetes object YAML files will be translated #. Definitions extracted from Kubernetes object YAML files will be translated
into Kubernetes model objects [#kubernetes-model-objects]_. KubernetesUtils into Kubernetes model objects [#kubernetes-model-objects]_. KubernetesUtils
@@ -429,40 +371,7 @@ CNF termination
--------------- ---------------
Following sequence diagram shows flow of termination of CNF. Following sequence diagram shows flow of termination of CNF.
.. seqdiag:: .. image:: ./container-network-function/03.png
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"];
}
Current implementation of Kubernetes driver handles limited objects such as Current implementation of Kubernetes driver handles limited objects such as
Service, Deployment, HorizontalPodAutoscaler etc. Since this spec introduces Service, Deployment, HorizontalPodAutoscaler etc. Since this spec introduces

View File

@@ -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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -44,56 +44,7 @@ For backward compatibility, VNFM supports following features:
1-1) Flow of Create VNF Request 1-1) Flow of Create VNF Request
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. seqdiag:: .. image:: ./enhancement_enhance-vnf-lcm-api-support/01.png
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"];
}
VNFM sends a GET request filtered by "vnfdId" to NFVO in order to query 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 1-2) Flow of Query VNF Request
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. seqdiag:: .. image:: ./enhancement_enhance-vnf-lcm-api-support/02.png
seqdiag {
Client -> "tacker-server" [label = " GET /vnf_instantces/{vnfInstanceId}"];
Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"];
}
VNFM returns a "200 OK" response that includes "vnfPkgId" in the payload body. VNFM returns a "200 OK" response that includes "vnfPkgId" in the payload body.
1-3) Flow of List VNF Request 1-3) Flow of List VNF Request
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. seqdiag:: .. image:: ./enhancement_enhance-vnf-lcm-api-support/03.png
seqdiag {
Client -> "tacker-server" [label = " GET /vnf_instantces"];
Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"];
}
VNFM returns a "200 OK" response that includes "vnfPkgId" in the payload body. VNFM returns a "200 OK" response that includes "vnfPkgId" in the payload body.
1-4) Flow of Modify VNF Request 1-4) Flow of Modify VNF Request
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. seqdiag:: .. image:: ./enhancement_enhance-vnf-lcm-api-support/04.png
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"];
}
Client sends a modify VNF Information request which includes "vnfPkgId" Client sends a modify VNF Information request which includes "vnfPkgId"

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -0,0 +1,5 @@
seqdiag {
Client -> "tacker-server" [label = " GET /vnf_instantces/{vnfInstanceId}"];
Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -0,0 +1,5 @@
seqdiag {
Client -> "tacker-server" [label = " GET /vnf_instantces"];
Client <-- "tacker-server" [label = " Resonse 200 OK (vnfPkgId)"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -78,72 +78,13 @@ operation normally while it is terminated.
When the rollback operation is executed during VNF instantiation, VNFM When the rollback operation is executed during VNF instantiation, VNFM
removes all VMs and resources. removes all VMs and resources.
.. seqdiag:: .. image:: ./support-etsi-nfv-based-errorhandling/01.png
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"];
}
When the rollback operation is executed for Scale-out, VNFM deletes all VMs When the rollback operation is executed for Scale-out, VNFM deletes all VMs
and resources specified in the middle of Scale-out operation. and resources specified in the middle of Scale-out operation.
.. seqdiag:: .. image:: ./support-etsi-nfv-based-errorhandling/02.png
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"];
}
User needs to separately implement Rollback sub-operation by VNF Configuration. User needs to separately implement Rollback sub-operation by VNF Configuration.

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -49,45 +49,21 @@ The operation provided through the interfaces are:
* Register subscription * Register subscription
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/01.png
seqdiag {
Client -> "tacker-server" [label = " POST /subscriptions"];
"tacker-server" -> "tacker-server"
[label = " generate subscription_id (uuid)"];
Client <-- "tacker-server" [label = " Resonse 201 Created"];
}
* Delete subscription * Delete subscription
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/02.png
seqdiag {
Client -> "tacker-server"
[label = " DELETE /subscriptions/{subscriptionId}"];
Client <-- "tacker-server" [label = " Resonse 204 No Content"];
}
* Show subscription * Show subscription
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/03.png
seqdiag {
Client -> "tacker-server" [label = " GET /subscriptions/{subscriptionId}"];
Client <-- "tacker-server" [label = " Resonse 200 OK"];
}
* List subscription * List subscription
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/04.png
seqdiag {
Client -> "tacker-server" [label = " GET /subscriptions"];
"tacker-server" -> "tacker-server" [label = "request validation"];
Client <-- "tacker-server" [label = " Resonse 200 OK"];
}
* VNFM holds the Callback URL sent by consumer via "Subscription API" * VNFM holds the Callback URL sent by consumer via "Subscription API"
@@ -126,90 +102,17 @@ related to VNF lifecycle management.
* Heal VNF * Heal VNF
* Terminate VNF * Terminate VNF
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/05.png
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"];
}
* Modify VNF * Modify VNF
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/06.png
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"];
}
* Rollback * Rollback
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/07.png
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"];
}
4) Flow of VNF instance resource with notification 4) Flow of VNF instance resource with notification
@@ -217,53 +120,12 @@ related to VNF lifecycle management.
* CereateVNFRequest * CereateVNFRequest
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/08.png
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"];
}
* DeleteVNFRequest * DeleteVNFRequest
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/09.png
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"];
}
5Flow of Getting Operation Status 5Flow of Getting Operation Status
@@ -271,12 +133,7 @@ related to VNF lifecycle management.
Operation status can be obtained from VNFM. Operation status can be obtained from VNFM.
.. seqdiag:: .. image:: ./support-notification-api-based-on-etsi-nfv-sol/10.png
seqdiag {
Client -> "tacker-server" [label = " GET /vnf_lcm_op_occs/{vnfLcmOpOccId}"];
Client <-- "tacker-server" [label = " Resonse 200 OK"];
}
* The transmission source node specifies the vnfLcmOpOccId issued at the time * The transmission source node specifies the vnfLcmOpOccId issued at the time

View File

@@ -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"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Some files were not shown because too many files have changed in this diff Show More