Separate UseCaseGuide for v1 API and v2 API
This patch separates the documents for v1 API and v2 API that are described in the same document in UseCaseGuide. Existing documents are modified for v1 API, and v2 API documents are newly placed under `doc/source/user/v2`. And some VNF Package samples have also been added. Change-Id: I6d99a660df32b457ea70a64bfd153bc76ac2d9fe
No files matched your search
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 91 KiB |
@@ -1,735 +0,0 @@
|
||||
===============================================================
|
||||
ETSI NFV-SOL CNF Auto Healing With Prometheus via FM Interfaces
|
||||
===============================================================
|
||||
|
||||
This document describes how to auto heal CNF in Tacker with Prometheus
|
||||
via Fault Management Interfaces.
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
Using the Fault Management interfaces, there are two ways to implement
|
||||
auto heal, Polling Mode and Notification Mode.
|
||||
|
||||
The diagram below shows an overview of the CNF auto healing.
|
||||
|
||||
1. Create FM subscription(Notification Mode)
|
||||
|
||||
NFVO sends a request to Tacker to create a FM subscription.
|
||||
|
||||
2. Collect metrics
|
||||
|
||||
Prometheus collects metrics and decides whether triggering alert
|
||||
is needed or not.
|
||||
|
||||
3. POST alert
|
||||
|
||||
Prometheus sends alerts to Tacker.
|
||||
|
||||
4. Convert alert to alarm
|
||||
|
||||
Tacker receives informed alerts, converts them to alarms, and saves
|
||||
them to Tacker DB.
|
||||
|
||||
5. Get Alarms and return result(Polling Mode)
|
||||
|
||||
NFVO sends a request at regular intervals to get the alarm in
|
||||
the Tacker. Tacker searches Tacker DB with the query condition
|
||||
specified by NFVO, and returns the alarm that matches the
|
||||
condition to NFVO.
|
||||
|
||||
6. Send alarm notification(Notification Mode)
|
||||
|
||||
VnffmDriver finds all FM subscriptions in the DB and matches the
|
||||
alerts to them. If there is a FM subscription that can match
|
||||
successfully, the alarm is sent to the specified path of the
|
||||
NFVO. If the match is not successful, the processing ends.
|
||||
|
||||
7. Heal
|
||||
|
||||
NFVO recognizes the failure of the CNF from the alarm and sends
|
||||
a heal request to the Tacker.
|
||||
|
||||
8. Call Kubernetes API
|
||||
|
||||
In tacker-conductor, the request is redirected again to an
|
||||
appropriate infra-driver (in this case Kubernetes infra-driver)
|
||||
according to the contents of the instantiate parameters. Then,
|
||||
Kubernetes infra-driver calls Kubernetes APIs.
|
||||
|
||||
9. Create a new pod
|
||||
|
||||
Kubernetes Master adds the number of Pods according to the
|
||||
API calls.
|
||||
|
||||
10. Delete the old pod
|
||||
|
||||
Kubernetes Master deletes the number of Pods according to the
|
||||
API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_cnf_auto_healing_fm.png
|
||||
:align: left
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
* The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
|
||||
At least one VNF instance with status of ``INSTANTIATED`` is required.
|
||||
You can refer to :doc:`./etsi_containerized_vnf_usage_guide` for the
|
||||
procedure to instantiate VNF.
|
||||
|
||||
The VNF Package used can refer to `the sample`_.
|
||||
|
||||
* The following third-party services should be installed
|
||||
|
||||
* NFVO
|
||||
* Prometheus(including Alertmanager)
|
||||
|
||||
Each operator has its own NFVO, there is no restriction here, as long as
|
||||
it conforms to `ETSI NFV-SOL 002 v3.3.1`_ and `ETSI NFV-SOL 003 v3.3.1`_,
|
||||
it can be used.
|
||||
|
||||
For the installation of Prometheus and Alertmanager, please refer to
|
||||
the `Prometheus official website`_.
|
||||
|
||||
How to configure Prometheus Plugin
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The Prometheus Plugin is disabled by default in Tacker.
|
||||
For it to work, we need to find ``fault_management`` in
|
||||
``tacker.conf`` and change its value to ``True``.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ vi /etc/tacker/tacker.conf
|
||||
...
|
||||
[prometheus_plugin]
|
||||
fault_management = True
|
||||
[v2_vnfm]
|
||||
# Enable https access to notification server from Tacker (boolean value)
|
||||
notification_verify_cert = true
|
||||
...
|
||||
|
||||
After modifying the configuration file, don't forget to restart the
|
||||
Tacker service to take effect.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo systemctl stop devstack@tacker
|
||||
$ sudo systemctl restart devstack@tacker-conductor
|
||||
$ sudo systemctl start devstack@tacker
|
||||
|
||||
How to configure Prometheus
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Unlike auto scale via PM interfaces, auto heal via FM interfaces does not
|
||||
need to login Prometheus server via SSH to modify its configuration.
|
||||
Users need to manually modify the configuration file of Prometheus, and
|
||||
then it will monitor the specified resources.
|
||||
|
||||
For the setting method of Prometheus configuration file, please refer to
|
||||
`Prometheus Configuration`_ for details.
|
||||
|
||||
The following is the content of a sample ``prometheus.yml``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
global:
|
||||
scrape_interval: 15s
|
||||
evaluation_interval: 15s
|
||||
|
||||
alerting:
|
||||
alertmanagers:
|
||||
- static_configs:
|
||||
- targets:
|
||||
- <IP of Alertmanager>:9093
|
||||
|
||||
rule_files:
|
||||
- "tacker-samplevnf-rules.yaml"
|
||||
|
||||
scrape_configs:
|
||||
- job_name: "kube-state-metrics"
|
||||
static_configs:
|
||||
- targets: ["<IP of Kubernetes>:<port of metrics>"]
|
||||
|
||||
The following is the content of a sample ``tacker-samplevnf-rules.yaml``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
groups:
|
||||
- name: example
|
||||
rules:
|
||||
- alert: KubePodCrashLooping
|
||||
annotations:
|
||||
probable_cause: The server cannot be connected.
|
||||
fault_type: Server Down
|
||||
fault_details: fault details
|
||||
expr: |
|
||||
rate(kube_pod_container_status_restarts_total{job="kube-state-metrics"}[10m]) * 60 * 5 > 0
|
||||
for: 5m
|
||||
labels:
|
||||
receiver_type: tacker
|
||||
function_type: vnffm
|
||||
vnf_instance_id: <VNF instance ID>
|
||||
perceived_severity: WARNING
|
||||
event_type: EQUIPMENT_ALARM
|
||||
|
||||
The following is the content of a sample ``alertmanager.yml``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
route:
|
||||
group_by: ['cluster']
|
||||
group_wait: 30s
|
||||
group_interval: 2m
|
||||
repeat_interval: 1h
|
||||
receiver: 'web.boo'
|
||||
routes:
|
||||
- match:
|
||||
alertname: KubePodCrashLooping
|
||||
receiver: 'web.boo'
|
||||
receivers:
|
||||
- name: 'web.boo'
|
||||
webhook_configs:
|
||||
- url: 'http://<IP of Tacker>:9890/alert'
|
||||
inhibit_rules:
|
||||
- source_match:
|
||||
severity: 'critical'
|
||||
target_match:
|
||||
severity: 'warning'
|
||||
equal: ['dev', 'instance']
|
||||
|
||||
How does NFVO Auto Heal CNF
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Through the FM interfaces, there are two modes to auto heal the CNF.
|
||||
|
||||
Polling Mode
|
||||
^^^^^^^^^^^^
|
||||
|
||||
This mode is where NFVO actively sends a get alarms request to Tacker
|
||||
at an interval.
|
||||
According to the content of the response, confirm the VNFC instance ID
|
||||
of the CNF in which the problem occurred.
|
||||
|
||||
The following is an example of a response to a get alarms request:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
[
|
||||
{
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"managedObjectId": "c61314d0-f583-4ab3-a457-46426bce02d3",
|
||||
"vnfcInstanceIds": [
|
||||
"VDU2-curry-probe-test001-766bdd79bf-wgc7m"
|
||||
],
|
||||
"alarmRaisedTime": "2021-09-03 10:21:03",
|
||||
"alarmChangedTime": "",
|
||||
"alarmClearedTime": "",
|
||||
"alarmAcknowledgedTime": "",
|
||||
"ackState": "UNACKNOWLEDGED",
|
||||
"perceivedSeverity": "WARNING",
|
||||
"eventTime": "2021-09-03 10:06:03",
|
||||
"eventType": "EQUIPMENT_ALARM",
|
||||
"faultType": "",
|
||||
"probableCause": "The server cannot be connected.",
|
||||
"isRootCause": "false",
|
||||
"correlatedAlarmIds": [],
|
||||
"faultDetails": [],
|
||||
"_links": {
|
||||
"self": "/vnffm/v1/alarms/78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"objectInstance": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
.. note::
|
||||
|
||||
The value of ``managedObjectId`` is the VNF instance ID.
|
||||
The value of ``vnfcInstanceIds`` is the VNFC instance IDs.
|
||||
|
||||
Then send a heal request specifying the VNFC instance ID to Tacker.
|
||||
The format of the heal request can refer to `heal request`_.
|
||||
|
||||
.. _Notification Mode :
|
||||
|
||||
Notification Mode
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
This mode is that NFVO will create a FM subscription on Tacker.
|
||||
In this FM subscription, multiple filter conditions can be set, so that
|
||||
the VNF instance that has been instantiated in Tacker can be matched.
|
||||
|
||||
Create FM subscription can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub create sample_param_file.json --os-tacker-api-version 2
|
||||
|
||||
The content of the sample ``sample_param_file.json`` in this document is
|
||||
as follows:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"filter": {
|
||||
"vnfInstanceSubscriptionFilter": {
|
||||
"vnfdIds": [
|
||||
"4d5ffa3b-9dde-45a9-a805-659dc8df0c02"
|
||||
],
|
||||
"vnfProductsFromProviders": [
|
||||
{
|
||||
"vnfProvider": "Company",
|
||||
"vnfProducts": [
|
||||
{
|
||||
"vnfProductName": "Sample VNF",
|
||||
"versions": [
|
||||
{
|
||||
"vnfSoftwareVersion": 1.0,
|
||||
"vnfdVersions": [1.0, 2.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"vnfInstanceIds": [
|
||||
"aad7d2fe-ed51-47da-a20d-7b299860607e"
|
||||
],
|
||||
"vnfInstanceNames": [
|
||||
"test"
|
||||
]
|
||||
},
|
||||
"notificationTypes": [
|
||||
"AlarmNotification"
|
||||
],
|
||||
"faultyResourceTypes": [
|
||||
"COMPUTE"
|
||||
],
|
||||
"perceivedSeverities": [
|
||||
"WARNING"
|
||||
],
|
||||
"eventTypes": [
|
||||
"EQUIPMENT_ALARM"
|
||||
],
|
||||
"probableCauses": [
|
||||
"The server cannot be connected."
|
||||
]
|
||||
},
|
||||
"callbackUri": "http://127.0.0.1:9890/vnffm/v1/subscriptions/407cb9c5-60f2-43e8-a43a-925c0323c3eb",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC",
|
||||
"OAUTH2_CLIENT_CREDENTIALS",
|
||||
"OAUTH2_CLIENT_CERT"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"userName": "nfvo",
|
||||
"password": "nfvopwd"
|
||||
},
|
||||
"paramsOauth2ClientCredentials": {
|
||||
"clientId": "auth_user_name",
|
||||
"clientPassword": "auth_password",
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
},
|
||||
"paramsOauth2ClientCert": {
|
||||
"clientId": "auth_user_name",
|
||||
"certificateRef": {
|
||||
"type": "x5t#S256",
|
||||
"value": "certificate_fingerprint"
|
||||
},
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Here is an example of create FM subscription:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub create sample_param_file.json --os-tacker-api-version 2
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | /nfvo/notification |
|
||||
| Filter | { |
|
||||
| | "vnfInstanceSubscriptionFilter": { |
|
||||
| | "vnfdIds": [ |
|
||||
| | "4d5ffa3b-9dde-45a9-a805-659dc8df0c02" |
|
||||
| | ], |
|
||||
| | "vnfProductsFromProviders": [ |
|
||||
| | { |
|
||||
| | "vnfProvider": "Company", |
|
||||
| | "vnfProducts": [ |
|
||||
| | { |
|
||||
| | "vnfProductName": "Sample VNF", |
|
||||
| | "versions": [ |
|
||||
| | { |
|
||||
| | "vnfSoftwareVersion": "1.0", |
|
||||
| | "vnfdVersions": [ |
|
||||
| | "1.0", |
|
||||
| | "2.0" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfInstanceIds": [ |
|
||||
| | "aad7d2fe-ed51-47da-a20d-7b299860607e" |
|
||||
| | ], |
|
||||
| | "vnfInstanceNames": [ |
|
||||
| | "test" |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | "notificationTypes": [ |
|
||||
| | "AlarmNotification" |
|
||||
| | ], |
|
||||
| | "faultyResourceTypes": [ |
|
||||
| | "COMPUTE" |
|
||||
| | ], |
|
||||
| | "perceivedSeverities": [ |
|
||||
| | "WARNING" |
|
||||
| | ], |
|
||||
| | "eventTypes": [ |
|
||||
| | "EQUIPMENT_ALARM" |
|
||||
| | ], |
|
||||
| | "probableCauses": [ |
|
||||
| | "The server cannot be connected." |
|
||||
| | ] |
|
||||
| | } |
|
||||
| ID | a7a18ac6-a668-4d94-8ba0-f04c20cfeacd |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/subscriptions/407cb9c5-60f2-43e8-a43a-925c0323c3eb" |
|
||||
| | } |
|
||||
| | } |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
|
||||
After the FM subscription is created, whenever Prometheus sends an alert
|
||||
to Tacker, Tacker will find a matching FM subscription based on the
|
||||
information in the alert.
|
||||
|
||||
The following is an example of the request body that Prometheus sends
|
||||
an alert:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"receiver": "receiver",
|
||||
"status": "firing",
|
||||
"alerts": [
|
||||
{
|
||||
"status": "firing",
|
||||
"labels": {
|
||||
"receiver_type": "tacker",
|
||||
"function_type": "vnffm",
|
||||
"vnf_instance_id": "aad7d2fe-ed51-47da-a20d-7b299860607e",
|
||||
"pod": "curry-probe-test001-766bdd79bf-wgc7m",
|
||||
"perceived_severity": "WARNING",
|
||||
"event_type": "PROCESSING_ERROR_ALARM"
|
||||
},
|
||||
"annotations": {
|
||||
"fault_type": "Server Down",
|
||||
"probable_cause": "Process Terminated",
|
||||
"fault_details": "pid 12345"
|
||||
},
|
||||
"startsAt": "2022-06-21T23:47:36.453Z",
|
||||
"endsAt": "0001-01-01T00:00:00Z",
|
||||
"generatorURL": "http://controller147:9090/graph?g0.expr=up%7Bjob%3D%22node%22%7D+%3D%3D+0&g0.tab=1",
|
||||
"fingerprint": "5ef77f1f8a3ecb8d"
|
||||
}
|
||||
],
|
||||
"groupLabels": {},
|
||||
"commonLabels": {
|
||||
"alertname": "NodeInstanceDown",
|
||||
"job": "node"
|
||||
},
|
||||
"commonAnnotations": {
|
||||
"description": "sample"
|
||||
},
|
||||
"externalURL": "http://controller147:9093",
|
||||
"version": "4",
|
||||
"groupKey": "{}:{}",
|
||||
"truncatedAlerts": 0
|
||||
}
|
||||
|
||||
Finally, a notification is sent to the Callback Uri (i.e. NFVO) in the FM
|
||||
subscription. NFVO sends a heal request to Tacker according to the
|
||||
content in the notification.
|
||||
The format of the heal request can refer to `heal request`_.
|
||||
|
||||
The following is an example of the request body that Tacker sends
|
||||
a notification:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"id": "87bea1ed-6ced-403e-8640-2c631eb55d08",
|
||||
"notificationType": "AlarmNotification",
|
||||
"subscriptionId": "fb782658-af96-47e7-9faa-90ba8416e426",
|
||||
"timeStamp": "2021-09-03 10:21:03",
|
||||
"alarm": {
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"managedObjectId": "c61314d0-f583-4ab3-a457-46426bce02d3",
|
||||
"vnfcInstanceIds": [
|
||||
"VDU2-curry-probe-test001-766bdd79bf-wgc7m"
|
||||
],
|
||||
"alarmRaisedTime": "2021-09-03 10:21:03",
|
||||
"alarmChangedTime": "",
|
||||
"alarmClearedTime": "",
|
||||
"alarmAcknowledgedTime": "",
|
||||
"ackState": "UNACKNOWLEDGED",
|
||||
"perceivedSeverity": "WARNING",
|
||||
"eventTime": "2021-09-03 10:06:03",
|
||||
"eventType": "EQUIPMENT_ALARM",
|
||||
"faultType": "",
|
||||
"probableCause": "The server cannot be connected.",
|
||||
"isRootCause": "false",
|
||||
"correlatedAlarmIds": [],
|
||||
"faultDetails": [],
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/vnffm/v1/alarms/78a39661-60a8-4824-b989-88c1b0c3534a"
|
||||
},
|
||||
"objectInstance": {
|
||||
"href": "/vnffm/v1/vnf_instances/c61314d0-f583-4ab3-a457-46426bce02d3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"_links": {
|
||||
"subscription": {
|
||||
"href": "/vnffm/v1/subscriptions/fb782658-af96-47e7-9faa-90ba8416e426"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
How to use the CLI of FM interfaces
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Get all alarms
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
Get all alarms can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm list --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting all alarms:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm list --os-tacker-api-version 2
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
| ID | Managed Object Id | Ack State | Event Type | Perceived Severity | Probable Cause |
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
| 1829331c-4439-4bda-bf57-832fb5786ce9 | fe9b053d-777a-442f-ad24-cfc9fd23b0c4 | ACKNOWLEDGED | PROCESSING_ERROR_ALARM | WARNING | Process Terminated |
|
||||
| 70935ca5-e03c-4190-8eca-233dd4b2be9a | ca1999fd-44ef-43c0-b3e3-3290a54b2bb4 | ACKNOWLEDGED | PROCESSING_ERROR_ALARM | WARNING | Process Terminated |
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
|
||||
Get the specified alarm
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified alarm can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm show ALARM_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified alarm:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm show 1829331c-4439-4bda-bf57-832fb5786ce9 --os-tacker-api-version 2
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Ack State | ACKNOWLEDGED |
|
||||
| Alarm Acknowledged Time | 2022-08-30T12:23:52Z |
|
||||
| Alarm Changed Time | 2022-08-31T07:47:05Z |
|
||||
| Alarm Cleared Time | 2022-06-22T23:47:36Z |
|
||||
| Alarm Raised Time | 2022-08-31T07:46:59Z |
|
||||
| Correlated Alarm Ids | |
|
||||
| Event Time | 2022-06-21T23:47:36Z |
|
||||
| Event Type | PROCESSING_ERROR_ALARM |
|
||||
| Fault Details | [ |
|
||||
| | "fingerprint: 5ef77f1f8a3ecb8d", |
|
||||
| | "detail: pid 12345" |
|
||||
| | ] |
|
||||
| Fault Type | Server Down |
|
||||
| ID | 1829331c-4439-4bda-bf57-832fb5786ce9 |
|
||||
| Is Root Cause | False |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/alarms/1829331c-4439-4bda-bf57-832fb5786ce9" |
|
||||
| | }, |
|
||||
| | "objectInstance": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/fe9b053d-777a-442f-ad24-cfc9fd23b0c4" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Managed Object Id | fe9b053d-777a-442f-ad24-cfc9fd23b0c4 |
|
||||
| Perceived Severity | WARNING |
|
||||
| Probable Cause | Process Terminated |
|
||||
| Root Cause Faulty Resource | |
|
||||
| Vnfc Instance Ids | [ |
|
||||
| | "VDU2-curry-probe-test001-766bdd79bf-wgc7m" |
|
||||
| | ] |
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Change target Alarm
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Change the ackState of the alarm can be executed by the following CLI
|
||||
command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm update ALARM_ID --ack-state UNACKNOWLEDGED --os-tacker-api-version 2
|
||||
|
||||
.. note::
|
||||
|
||||
The value of ``--ack-state`` can only be ``ACKNOWLEDGED`` or
|
||||
``UNACKNOWLEDGED``.
|
||||
|
||||
Here is an example of changing target alarm:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm update 1829331c-4439-4bda-bf57-832fb5786ce9 --ack-state UNACKNOWLEDGED --os-tacker-api-version 2
|
||||
+-----------+----------------+
|
||||
| Field | Value |
|
||||
+-----------+----------------+
|
||||
| Ack State | UNACKNOWLEDGED |
|
||||
+-----------+----------------+
|
||||
|
||||
Create a new FM subscription
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The creation of FM subscription has been introduced in the
|
||||
:ref:`Notification Mode` above, and the use case of the CLI command
|
||||
can be referred to there.
|
||||
|
||||
Get all FM subscriptions
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get all FM subscriptions can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub list --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting all FM subscriptions:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub list --os-tacker-api-version 2
|
||||
+--------------------------------------+--------------------------------------------------------------------------------+
|
||||
| ID | Callback Uri |
|
||||
+--------------------------------------+--------------------------------------------------------------------------------+
|
||||
| 407cb9c5-60f2-43e8-a43a-925c0323c3eb | http://localhost:9990/notification/callback/test_faultmanagement_interface_max |
|
||||
| c4f21875-c41d-42a8-967a-3ec7efe1d867 | http://localhost:9990/notification/callback/test_faultmanagement_interface_min |
|
||||
+--------------------------------------+--------------------------------------------------------------------------------+
|
||||
|
||||
Get the specified FM subscription
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified FM subscription can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub show FM_SUBSCRIPTION_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified FM subscription:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub show 407cb9c5-60f2-43e8-a43a-925c0323c3eb --os-tacker-api-version 2
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback/test_faultmanagement_interface_max |
|
||||
| Filter | { |
|
||||
| | "vnfInstanceSubscriptionFilter": { |
|
||||
| | "vnfdIds": [ |
|
||||
| | "4d5ffa3b-9dde-45a9-a805-659dc8df0c02" |
|
||||
| | ], |
|
||||
| | "vnfProductsFromProviders": [ |
|
||||
| | { |
|
||||
| | "vnfProvider": "Company", |
|
||||
| | "vnfProducts": [ |
|
||||
| | { |
|
||||
| | "vnfProductName": "Sample VNF", |
|
||||
| | "versions": [ |
|
||||
| | { |
|
||||
| | "vnfSoftwareVersion": "1.0", |
|
||||
| | "vnfdVersions": [ |
|
||||
| | "1.0" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfInstanceIds": [ |
|
||||
| | "aad7d2fe-ed51-47da-a20d-7b299860607e" |
|
||||
| | ], |
|
||||
| | "vnfInstanceNames": [ |
|
||||
| | "test" |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | "notificationTypes": [ |
|
||||
| | "AlarmNotification", |
|
||||
| | "AlarmClearedNotification" |
|
||||
| | ], |
|
||||
| | "faultyResourceTypes": [ |
|
||||
| | "COMPUTE" |
|
||||
| | ], |
|
||||
| | "perceivedSeverities": [ |
|
||||
| | "WARNING" |
|
||||
| | ], |
|
||||
| | "eventTypes": [ |
|
||||
| | "PROCESSING_ERROR_ALARM" |
|
||||
| | ], |
|
||||
| | "probableCauses": [ |
|
||||
| | "Process Terminated" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| ID | 407cb9c5-60f2-43e8-a43a-925c0323c3eb |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/subscriptions/407cb9c5-60f2-43e8-a43a-925c0323c3eb" |
|
||||
| | } |
|
||||
| | } |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
|
||||
Delete the specified FM subscription
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Delete the specified FM subscription can be executed by the following CLI
|
||||
command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub delete FM_SUBSCRIPTION_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of deleting the specified FM subscription:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub delete a7a18ac6-a668-4d94-8ba0-f04c20cfeacd --os-tacker-api-version 2
|
||||
VNF FM subscription 'a7a18ac6-a668-4d94-8ba0-f04c20cfeacd' deleted successfully
|
||||
|
||||
.. _the sample : https://docs.openstack.org/tacker/latest/user/etsi_cnf_healing.html#how-to-create-vnf-package-for-healing
|
||||
.. _Prometheus Configuration : https://prometheus.io/docs/prometheus/latest/configuration/configuration/
|
||||
.. _Prometheus official website : https://prometheus.io/docs/prometheus/latest/getting_started/
|
||||
.. _ETSI NFV-SOL 002 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf
|
||||
.. _ETSI NFV-SOL 003 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
||||
.. _heal request : https://docs.openstack.org/api-ref/nfv-orchestration/v2/vnflcm.html?expanded=heal-a-vnf-instance-v2-detail#heal-a-vnf-instance-v2
|
||||
|
||||
@@ -1,671 +0,0 @@
|
||||
===================================================================
|
||||
ETSI NFV-SOL CNF Auto Scaling With Prometheus via PM Job Interfaces
|
||||
===================================================================
|
||||
|
||||
This document describes how to auto scale CNF in Tacker with Prometheus
|
||||
via Performance Management Job Interfaces.
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
The diagram below shows an overview of the CNF auto scaling.
|
||||
|
||||
1. Create PM job
|
||||
|
||||
The NFVO sends a request to the Tacker to create a PM job.
|
||||
|
||||
2. Set PM job
|
||||
|
||||
Prometheus Plugin sets PM job to Prometheus.
|
||||
|
||||
3. Trigger event
|
||||
|
||||
Prometheus collects metrics and decides whether triggering event is
|
||||
needed or not.
|
||||
|
||||
4. POST event
|
||||
|
||||
Prometheus sends POST request to Tacker with specified URI. Tacker
|
||||
collects data related to the PM event.
|
||||
|
||||
5. Convert event to report
|
||||
|
||||
Tacker receives informed event, converts it to report, and saves
|
||||
it to DB. Tacker also saves timestamp of the event.
|
||||
|
||||
6. Send report notification
|
||||
|
||||
VnfPmDriverV2 finds all jobs in the DB and matches the report to
|
||||
job. If there is a job that can match successfully, the report is
|
||||
sent to the specified path of the NFVO. If the match is not successful,
|
||||
the processing ends.
|
||||
|
||||
7. Get PM report
|
||||
|
||||
The NFVO make a request for the content of the report, then make a
|
||||
decision of scaling.
|
||||
|
||||
8. Scale
|
||||
|
||||
Upon receiving a request to scale VNF from NFVO, tacker-server
|
||||
redirects it to tacker-conductor.
|
||||
|
||||
9. Call Kubernetes API
|
||||
|
||||
In tacker-conductor, the request is redirected again to an
|
||||
appropriate infra-driver (in this case Kubernetes infra-driver)
|
||||
according to the contents of the instantiate parameters. Then,
|
||||
Kubernetes infra-driver calls Kubernetes APIs.
|
||||
|
||||
10. Change the number of Pods
|
||||
|
||||
Kubernetes Master change the number of Pods according to the
|
||||
API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_cnf_auto_scaling_pm.png
|
||||
:align: left
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
* The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
|
||||
At least one VNF instance with status of ``INSTANTIATED`` is required.
|
||||
You can refer to :doc:`./etsi_containerized_vnf_usage_guide` for the
|
||||
procedure to instantiate VNF.
|
||||
|
||||
The VNF Package used can refer to `the sample`_.
|
||||
|
||||
* The following third-party services should be installed
|
||||
|
||||
* NFVO
|
||||
* Prometheus(including Alertmanager)
|
||||
|
||||
Each operator has its own NFVO, there is no restriction here, as long as
|
||||
it conforms to `ETSI NFV-SOL 002 v3.3.1`_ and `ETSI NFV-SOL 003 v3.3.1`_,
|
||||
it can be used.
|
||||
|
||||
For the installation of Prometheus and Alertmanager, please refer to
|
||||
the `official website`_.
|
||||
|
||||
How to configure Prometheus Plugin
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The Prometheus Plugin is disabled by default in Tacker.
|
||||
For it to work, we need to find ``performance_management`` in
|
||||
``tacker.conf`` and change its value to ``True``.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ vi /etc/tacker/tacker.conf
|
||||
...
|
||||
[prometheus_plugin]
|
||||
performance_management = True
|
||||
[v2_vnfm]
|
||||
# Enable https access to notification server from Tacker (boolean value)
|
||||
notification_verify_cert = true
|
||||
...
|
||||
|
||||
After modifying the configuration file, don't forget to restart the
|
||||
Tacker service to take effect.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo systemctl stop devstack@tacker
|
||||
$ sudo systemctl restart devstack@tacker-conductor
|
||||
$ sudo systemctl start devstack@tacker
|
||||
|
||||
.. _Create PM job :
|
||||
|
||||
How to create a PM job
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
After having a CNF that can scale, we need to create a PM job. It
|
||||
determines the monitoring metrics and monitoring resources to be
|
||||
used by Prometheus.
|
||||
|
||||
.. note::
|
||||
|
||||
When having an NFVO client, the request is sent by NFVO.
|
||||
|
||||
The interface for creating PM jobs is defined in both
|
||||
`ETSI NFV-SOL 002 v3.3.1`_ and `ETSI NFV-SOL 003 v3.3.1`_.
|
||||
|
||||
The following are the parameters required by this interface.
|
||||
|
||||
.. list-table:: additional params
|
||||
:widths: 18 18 10 50
|
||||
:header-rows: 1
|
||||
|
||||
* - Attribute name
|
||||
- Data type
|
||||
- Cardinality
|
||||
- Description
|
||||
* - objectType
|
||||
- String
|
||||
- 1
|
||||
- Type of the measured object. The applicable measured object type for a
|
||||
measurement is defined in clause 7.2 of `ETSI GS NFV-IFA 027`_.
|
||||
* - objectInstanceIds
|
||||
- Identifier
|
||||
- 1..N
|
||||
- Identifiers of the measured object instances for which performance
|
||||
information is requested to be collected.
|
||||
* - subObjectInstanceIds
|
||||
- IdentifierInVnf
|
||||
- 0..N
|
||||
- Identifiers of the measured object instances in case of a structured
|
||||
measured object.
|
||||
* - criteria
|
||||
- PmJobCriteria
|
||||
- 1
|
||||
- Criteria of the collection of performance information.
|
||||
* - performanceMetric
|
||||
- String
|
||||
- 0..N
|
||||
- This defines the types of performance metrics for the specified object
|
||||
instances. Valid values are specified as "Measurement Name" values in
|
||||
clause 7.2 of `ETSI GS NFV-IFA 027`_. At least one of the two
|
||||
attributes (performance metric or group) shall be present.
|
||||
* - performanceMetricGroup
|
||||
- String
|
||||
- 0..N
|
||||
- Group of performance metrics. A metric group is a pre-defined list of
|
||||
metrics, known to the API producer that it can decompose to individual
|
||||
metrics. Valid values are specified as "Measurement Group" values in
|
||||
clause 7.2 of `ETSI GS NFV-IFA 027`_. At least one of the two
|
||||
attributes (performance metric or group) shall be present.
|
||||
* - collectionPeriod
|
||||
- UnsignedInt
|
||||
- 1
|
||||
- Specifies the periodicity at which the API producer will collect
|
||||
performance information. The unit shall be seconds.
|
||||
* - reportingPeriod
|
||||
- UnsignedInt
|
||||
- 1
|
||||
- Specifies the periodicity at which the API producer will report to
|
||||
the API consumer. about performance information. The unit shall be
|
||||
seconds. The reportingPeriod should be equal to or a multiple of
|
||||
the collectionPeriod.
|
||||
* - reportingBoundary
|
||||
- DateTime
|
||||
- 0..1
|
||||
- Identifies a time boundary after which the reporting will stop. The
|
||||
boundary shall allow a single reporting as well as periodic reporting
|
||||
up to the boundary.
|
||||
* - callbackUri
|
||||
- Uri
|
||||
- 1
|
||||
- The URI of the endpoint to send the notification to.
|
||||
* - authentication
|
||||
- SubscriptionAuthentication
|
||||
- 0..1
|
||||
- Authentication parameters to configure the use of Authorization when
|
||||
sending notifications corresponding to this subscription. See as
|
||||
clause 8.3.4 of `ETSI GS NFV-SOL 013`_.
|
||||
* - metadata
|
||||
- Structure
|
||||
- 1
|
||||
- Additional parameters to create PM job.
|
||||
* - monitoring
|
||||
- Structure
|
||||
- 1
|
||||
- Treats to specify such as monitoring system and driver information.
|
||||
* - monitorName
|
||||
- String
|
||||
- 1
|
||||
- In case specifying “prometheus”, backend of monitoring feature is
|
||||
to be Prometheus.
|
||||
* - driverType
|
||||
- String
|
||||
- 1
|
||||
- “external”: SCP/SFTP for config file transfer.
|
||||
* - targetsInfo
|
||||
- Structure
|
||||
- 1..N
|
||||
- Information about the target monitoring system.
|
||||
* - prometheusHost
|
||||
- String
|
||||
- 1
|
||||
- FQDN or ip address of target PrometheusServer.
|
||||
* - prometheusHostPort
|
||||
- Int
|
||||
- 1
|
||||
- Port of the ssh target PrometheusServer.
|
||||
* - alertRuleConfigPath
|
||||
- String
|
||||
- 1
|
||||
- Path of alertRuleConfig path for target Prometheus.
|
||||
* - prometheusReloadApiEndpoint
|
||||
- String
|
||||
- 1
|
||||
- Endpoint url of reload API of target Prometheus.
|
||||
* - authInfo
|
||||
- Structure
|
||||
- 1
|
||||
- Define authentication information to access host.
|
||||
* - ssh_username
|
||||
- String
|
||||
- 1
|
||||
- The username of the target host for ssh.
|
||||
* - ssh_password
|
||||
- String
|
||||
- 1
|
||||
- The password of the target host for ssh.
|
||||
|
||||
.. note::
|
||||
|
||||
* If ``subObjectInstanceIds`` is present, the cardinality of the
|
||||
``objectInstanceIds`` attribute shall be 1.
|
||||
* ``performanceMetric`` and ``performanceMetricGroup``, at least one of
|
||||
the two attributes shall be present.
|
||||
* ``objectType`` has only the following values: ``Vnf``, ``Vnfc``,
|
||||
``VnfIntCp``, ``VnfExtCp``.
|
||||
|
||||
|
||||
|
||||
Create PM job can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job create sample_param_file.json --os-tacker-api-version 2
|
||||
|
||||
The content of the sample ``sample_param_file.json`` in this document is
|
||||
as follows:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceIds": ["495ffedf-2755-42c8-bf14-a5433701311e"],
|
||||
"subObjectInstanceIds": [],
|
||||
"criteria": {
|
||||
"performanceMetric": [
|
||||
"VcpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e"
|
||||
],
|
||||
"performanceMetricGroup": [
|
||||
"VirtualisedComputeResource"
|
||||
],
|
||||
"collectionPeriod": 5,
|
||||
"reportingPeriod": 10,
|
||||
"reportingBoundary": "2022-06-23T04:56:00.910Z"
|
||||
},
|
||||
"callbackUri": "http://localhost:9990/notification/callback/test_performancemanagement_interface_min_1",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC",
|
||||
"OAUTH2_CLIENT_CREDENTIALS",
|
||||
"OAUTH2_CLIENT_CERT"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"userName": "nfvo",
|
||||
"password": "nfvopwd"
|
||||
},
|
||||
"paramsOauth2ClientCredentials": {
|
||||
"clientId": "auth_user_name",
|
||||
"clientPassword": "auth_password",
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
},
|
||||
"paramsOauth2ClientCert": {
|
||||
"clientId": "auth_user_name",
|
||||
"certificateRef": {
|
||||
"type": "x5t#S256",
|
||||
"value": "certificate_fingerprint"
|
||||
},
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"monitoring": {
|
||||
"monitorName": "prometheus",
|
||||
"driverType": "external",
|
||||
"targetsInfo": [
|
||||
{
|
||||
"prometheusHost": "prometheusHost",
|
||||
"prometheusHostPort": "22",
|
||||
"authInfo": {
|
||||
"ssh_username": "ssh_username",
|
||||
"ssh_password": "ssh_password"
|
||||
},
|
||||
"alertRuleConfigPath": "/etc/prometheus/rules",
|
||||
"prometheusReloadApiEndpoint": "http://localhost:9990/-/reload"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Here is an example of create PM job:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job create sample_param_file.json --os-tacker-api-version 2
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback/test_performancemanagement_interface_min_1 |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": [ |
|
||||
| | "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ], |
|
||||
| | "collectionPeriod": 5, |
|
||||
| | "reportingPeriod": 10 |
|
||||
| | } |
|
||||
| ID | ca9b58cf-8493-44e3-9e76-678ea0e80a80 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | }, |
|
||||
| | "objects": [ |
|
||||
| | { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| Object Instance Ids | [ |
|
||||
| | "495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ] |
|
||||
| Object Type | Vnf |
|
||||
| Reports | [] |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
When creating a PM job, Tacker will modify the configuration file on the
|
||||
specified Prometheus based on ``metadata``.
|
||||
Then Prometheus will monitor the specified resource and send the monitored
|
||||
information to Tacker.
|
||||
Tacker converts the received monitoring information into a report and
|
||||
sends a notification request to NFVO.
|
||||
|
||||
The following is the request body of a sample notification request.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
{
|
||||
'id': 'c045dae8-cd94-4a29-b09c-96729060f2ad',
|
||||
'notificationType': 'PerformanceInformationAvailableNotification',
|
||||
'timeStamp': '2022-09-05T06:56:39Z',
|
||||
'pmJobId': '34f7a186-88fa-4a42-a35f-30ea9ad710f1',
|
||||
'objectType': 'Vnf',
|
||||
'objectInstanceId': 'e30f5f45-522c-4e84-9b2d-9e1669708fff',
|
||||
'_links': {
|
||||
'objectInstance': {
|
||||
'href': 'http://127.0.0.1:9890/vnflcm/v2/vnf_instances/e30f5f45-522c-4e84-9b2d-9e1669708fff'
|
||||
},
|
||||
'pmJob': {
|
||||
'href': 'http://127.0.0.1:9890/vnfpm/v2/pm_jobs/34f7a186-88fa-4a42-a35f-30ea9ad710f1'
|
||||
},
|
||||
'performanceReport': {
|
||||
'href': 'http://127.0.0.1:9890/vnfpm/v2/pm_jobs/34f7a186-88fa-4a42-a35f-30ea9ad710f1/reports/46e95584-7f11-4fd0-b59c-4688c37177ff'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.. note::
|
||||
|
||||
The target URL of this notification request is the ``Callback Uri``
|
||||
field in the PM job.
|
||||
|
||||
How does NFVO Auto Scale CNF
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
NFVO will send a get PM report request to Tacker according to the URL
|
||||
of the report in the notification request.
|
||||
|
||||
The response returned by Tacker is as follows:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
{
|
||||
'entries': [
|
||||
{
|
||||
'objectType': 'Vnf',
|
||||
'objectInstanceId': 'e30f5f45-522c-4e84-9b2d-9e1669708fff',
|
||||
'subObjectInstanceId': 'VDU2-curry-probe-test001-766bdd79bf-wgc7m',
|
||||
'performanceMetric': 'VCpuUsageMeanVnf.e30f5f45-522c-4e84-9b2d-9e1669708fff',
|
||||
'performanceValues': [
|
||||
{
|
||||
'timeStamp': '2022-09-05T08:02:58Z',
|
||||
'value': 99.0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
NFVO will determine whether a scale operation is required based on
|
||||
the report data. If needed, a scale request will be sent to Tacker.
|
||||
|
||||
How to use the CLI of PM interfaces
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Create a PM job
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
The creation of PM job has been introduced in the
|
||||
:ref:`Create PM job` above, and the use case of the CLI
|
||||
command can be referred to there.
|
||||
|
||||
Get all PM jobs
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Get all PM jobs can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job list --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting all PM jobs:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job list --os-tacker-api-version 2
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
| Id | Object Type | Links |
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
| b8b4095a-148d-42b5-b714-9d703e6c7c62 | Vnf | { |
|
||||
| | | "self": { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/b8b4095a-148d-42b5-b714-9d703e6c7c62" |
|
||||
| | | }, |
|
||||
| | | "objects": [ |
|
||||
| | | { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/97efce79-34c4-474d-87a0-38ad954f64af" |
|
||||
| | | } |
|
||||
| | | ] |
|
||||
| | | } |
|
||||
| ca9b58cf-8493-44e3-9e76-678ea0e80a80 | Vnf | { |
|
||||
| | | "self": { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | | }, |
|
||||
| | | "objects": [ |
|
||||
| | | { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | | } |
|
||||
| | | ] |
|
||||
| | | } |
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Get the specified PM job
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified PM job can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job show JOB_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified PM job:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job show ca9b58cf-8493-44e3-9e76-678ea0e80a80 --os-tacker-api-version 2
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback/test_performancemanagement_interface_min_1 |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": [ |
|
||||
| | "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ], |
|
||||
| | "collectionPeriod": 5, |
|
||||
| | "reportingPeriod": 10 |
|
||||
| | } |
|
||||
| ID | ca9b58cf-8493-44e3-9e76-678ea0e80a80 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | }, |
|
||||
| | "objects": [ |
|
||||
| | { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| Object Instance Ids | [ |
|
||||
| | "495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ] |
|
||||
| Object Type | Vnf |
|
||||
| Reports | [ |
|
||||
| | { |
|
||||
| | "href": "/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80/reports/53aafe25-7124-4880-8b58-47a93b3dc371", |
|
||||
| | "readyTime": "2022-08-30T08:02:58Z" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Change target PM job
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Updating a PM job can only change two fields, callbackUri and authentication.
|
||||
It can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job update JOB_ID sample_param_file.json --os-tacker-api-version 2
|
||||
|
||||
The content of the sample ``sample_param_file.json`` in this document is
|
||||
as follows:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"callbackUri": "http://localhost:9990/notification/callback",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC",
|
||||
"OAUTH2_CLIENT_CREDENTIALS",
|
||||
"OAUTH2_CLIENT_CERT"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"userName": "nfvo",
|
||||
"password": "nfvopwd"
|
||||
},
|
||||
"paramsOauth2ClientCredentials": {
|
||||
"clientId": "auth_user_name",
|
||||
"clientPassword": "auth_password",
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
},
|
||||
"paramsOauth2ClientCert": {
|
||||
"clientId": "auth_user_name",
|
||||
"certificateRef": {
|
||||
"type": "x5t#S256",
|
||||
"value": "certificate_fingerprint"
|
||||
},
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Here is an example of changing target PM job:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job update ca9b58cf-8493-44e3-9e76-678ea0e80a80 sample_param_file.json --os-tacker-api-version 2
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": [ |
|
||||
| | "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ], |
|
||||
| | "collectionPeriod": 5, |
|
||||
| | "reportingPeriod": 10 |
|
||||
| | } |
|
||||
| ID | ca9b58cf-8493-44e3-9e76-678ea0e80a80 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | }, |
|
||||
| | "objects": [ |
|
||||
| | { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| Object Instance Ids | [ |
|
||||
| | "495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ] |
|
||||
| Object Type | Vnf |
|
||||
| Reports | [] |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Delete the specified PM job
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Delete the specified PM job can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job delete JOB_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of deleting the specified PM job:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job delete ca9b58cf-8493-44e3-9e76-678ea0e80a80 --os-tacker-api-version 2
|
||||
VNF PM job 'ca9b58cf-8493-44e3-9e76-678ea0e80a80' deleted successfully
|
||||
|
||||
Get the specified PM report
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified PM report can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm report show JOB_ID REPORT_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified PM report:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm report show ca9b58cf-8493-44e3-9e76-678ea0e80a80 53aafe25-7124-4880-8b58-47a93b3dc371 --os-tacker-api-version 2
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
| Entries | [ |
|
||||
| | { |
|
||||
| | "objectType": "Vnf", |
|
||||
| | "objectInstanceId": "495ffedf-2755-42c8-bf14-a5433701311e", |
|
||||
| | "performanceMetric": "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e", |
|
||||
| | "performanceValues": [ |
|
||||
| | { |
|
||||
| | "timeStamp": "2022-08-30T08:02:58Z", |
|
||||
| | "value": "99.0" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
|
||||
.. _ETSI NFV-SOL 002 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf
|
||||
.. _ETSI NFV-SOL 003 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
||||
.. _official website : https://prometheus.io/docs/prometheus/latest/getting_started/
|
||||
.. _the sample : https://docs.openstack.org/tacker/latest/user/etsi_cnf_scaling.html#how-to-create-vnf-package-for-scaling
|
||||
.. _ETSI GS NFV-IFA 027 : https://www.etsi.org/deliver/etsi_gs/NFV-IFA/001_099/027/03.03.01_60/gs_nfv-ifa027v030301p.pdf
|
||||
.. _ETSI GS NFV-SOL 013 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/013/03.04.01_60/gs_nfv-sol013v030401p.pdf
|
||||
@@ -1,527 +0,0 @@
|
||||
=========================================================================
|
||||
ETSI NFV-SOL CNF Auto Scaling With Prometheus via PM Threshold Interfaces
|
||||
=========================================================================
|
||||
|
||||
This document describes how to auto scale CNF in Tacker with Prometheus
|
||||
via Performance Management Threshold Interfaces.
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
The diagram below shows an overview of the CNF auto scaling.
|
||||
|
||||
1. Create PM threshold
|
||||
|
||||
The NFVO sends a request to the Tacker to create a PM threshold.
|
||||
|
||||
2. Set PM threshold
|
||||
|
||||
Prometheus Plugin sets PM threshold to Prometheus.
|
||||
|
||||
3. Trigger threshold event
|
||||
|
||||
Prometheus collects metrics and decides whether triggering threshold event
|
||||
is needed or not.
|
||||
|
||||
4. POST threshold event
|
||||
|
||||
Prometheus sends POST request to Tacker with specified URI. Tacker
|
||||
collects data related to the PM threshold event.
|
||||
|
||||
5. Convert threshold event to threshold state
|
||||
|
||||
Tacker receives informed threshold event, converts it to threshold state,
|
||||
and saves it to DB.
|
||||
|
||||
6. Send threshold state notification
|
||||
|
||||
VnfPmDriverV2 finds all thresholds in the DB and matches the threshold
|
||||
state to threshold. If the crossingDirection of threshold state is ``UP``
|
||||
or ``DOWN``, the notification is sent to the specified path of the NFVO.
|
||||
If the match is not successful or the situation does not exist, the
|
||||
processing ends.
|
||||
|
||||
7. Scale
|
||||
|
||||
Upon receiving a request to scale VNF from NFVO, tacker-server
|
||||
redirects it to tacker-conductor.
|
||||
|
||||
8. Call Kubernetes API
|
||||
|
||||
In tacker-conductor, the request is redirected again to an
|
||||
appropriate infra-driver (in this case Kubernetes infra-driver)
|
||||
according to the contents of the instantiate parameters. Then,
|
||||
Kubernetes infra-driver calls Kubernetes APIs.
|
||||
|
||||
9. Change the number of Pods
|
||||
|
||||
Kubernetes Master change the number of Pods according to the
|
||||
API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_cnf_auto_scaling_pm_threshold.png
|
||||
:align: left
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
* The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
|
||||
At least one VNF instance with status of ``INSTANTIATED`` is required.
|
||||
You can refer to :doc:`./etsi_containerized_vnf_usage_guide` for the
|
||||
procedure to instantiate VNF.
|
||||
|
||||
The VNF Package used can refer to `the sample`_.
|
||||
|
||||
* The following third-party services should be installed
|
||||
|
||||
* NFVO
|
||||
* Prometheus(including Alertmanager)
|
||||
|
||||
Each operator has its own NFVO, there is no restriction here, as long as
|
||||
it conforms to `ETSI NFV-SOL 002 v3.3.1`_ and `ETSI NFV-SOL 003 v3.3.1`_,
|
||||
it can be used.
|
||||
|
||||
For the installation of Prometheus and Alertmanager, please refer to
|
||||
the `official website`_.
|
||||
|
||||
How to configure Prometheus Plugin
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Please refer to `How to configure Prometheus Plugin`_ to enable the
|
||||
Prometheus Plugin.
|
||||
|
||||
.. _Create PM threshold :
|
||||
|
||||
How to create a PM threshold
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
After having a CNF that can scale, we need to create a PM threshold. It
|
||||
determines the monitoring metrics and monitoring resources to be
|
||||
used by Prometheus.
|
||||
|
||||
.. note::
|
||||
|
||||
When having an NFVO client, the request is sent by NFVO.
|
||||
|
||||
The interface for creating PM thresholds is defined in both
|
||||
`ETSI NFV-SOL 002 v3.3.1`_ and `ETSI NFV-SOL 003 v3.3.1`_.
|
||||
|
||||
The following are the parameters required by this interface.
|
||||
|
||||
.. list-table:: additional params
|
||||
:widths: 18 18 10 50
|
||||
:header-rows: 1
|
||||
|
||||
* - Attribute name
|
||||
- Data type
|
||||
- Cardinality
|
||||
- Description
|
||||
* - objectType
|
||||
- String
|
||||
- 1
|
||||
- Type of the measured object. The applicable measured object type for a
|
||||
measurement is defined in clause 7.2 of `ETSI GS NFV-IFA 027`_.
|
||||
* - objectInstanceId
|
||||
- Identifier
|
||||
- 1
|
||||
- Identifiers of the measured object instances for which performance
|
||||
information is requested to be collected.
|
||||
* - subObjectInstanceIds
|
||||
- IdentifierInVnf
|
||||
- 0..N
|
||||
- Identifiers of the measured object instances in case of a structured
|
||||
measured object.
|
||||
* - criteria
|
||||
- ThresholdCriteria
|
||||
- 1
|
||||
- Criteria of the collection of performance information.
|
||||
* - performanceMetric
|
||||
- String
|
||||
- 1
|
||||
- This defines the types of performance metrics for the specified object
|
||||
instances. Valid values are specified as "Measurement Name" values in
|
||||
clause 7.2 of `ETSI GS NFV-IFA 027`_.
|
||||
* - thresholdType
|
||||
- String
|
||||
- 1
|
||||
- This defines the type of threshold. This attribute determines which other
|
||||
attributes are present in the data structure.
|
||||
* - simpleThresholdDetails
|
||||
- Structure
|
||||
- 0..1
|
||||
- Details of a simple threshold. Shall be present if
|
||||
thresholdType="SIMPLE".
|
||||
* - thresholdValue
|
||||
- Float
|
||||
- 1
|
||||
- The threshold value. Shall be represented as a floating point number.
|
||||
* - hysteresis
|
||||
- Float
|
||||
- 1
|
||||
- The hysteresis of the threshold. Shall be represented as a non-negative
|
||||
floating point number.
|
||||
* - callbackUri
|
||||
- Uri
|
||||
- 1
|
||||
- The URI of the endpoint to send the notification to.
|
||||
* - authentication
|
||||
- SubscriptionAuthentication
|
||||
- 0..1
|
||||
- Authentication parameters to configure the use of Authorization when
|
||||
sending notifications corresponding to this subscription. See as
|
||||
clause 8.3.4 of `ETSI GS NFV-SOL 013`_.
|
||||
* - metadata
|
||||
- Structure
|
||||
- 1
|
||||
- Additional parameters to create PM threshold.
|
||||
* - monitoring
|
||||
- Structure
|
||||
- 1
|
||||
- Treats to specify such as monitoring system and driver information.
|
||||
* - monitorName
|
||||
- String
|
||||
- 1
|
||||
- In case specifying "prometheus", backend of monitoring feature is
|
||||
to be Prometheus.
|
||||
* - driverType
|
||||
- String
|
||||
- 1
|
||||
- "external": SCP/SFTP for config file transfer.
|
||||
* - targetsInfo
|
||||
- Structure
|
||||
- 1..N
|
||||
- Information about the target monitoring system.
|
||||
* - prometheusHost
|
||||
- String
|
||||
- 1
|
||||
- FQDN or ip address of target PrometheusServer.
|
||||
* - prometheusHostPort
|
||||
- Int
|
||||
- 1
|
||||
- Port of the ssh target PrometheusServer.
|
||||
* - alertRuleConfigPath
|
||||
- String
|
||||
- 1
|
||||
- Path of alertRuleConfig path for target Prometheus.
|
||||
* - prometheusReloadApiEndpoint
|
||||
- String
|
||||
- 1
|
||||
- Endpoint url of reload API of target Prometheus.
|
||||
* - authInfo
|
||||
- Structure
|
||||
- 1
|
||||
- Define authentication information to access host.
|
||||
* - ssh_username
|
||||
- String
|
||||
- 1
|
||||
- The username of the target host for ssh.
|
||||
* - ssh_password
|
||||
- String
|
||||
- 1
|
||||
- The password of the target host for ssh.
|
||||
|
||||
.. note::
|
||||
|
||||
* ``objectType`` has only the following values: ``Vnf``, ``Vnfc``,
|
||||
``VnfIntCp``, ``VnfExtCp``.
|
||||
|
||||
Create PM threshold can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold create sample_param_file.json --os-tacker-api-version 2
|
||||
|
||||
The content of the sample ``sample_param_file.json`` in this document is
|
||||
as follows:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceId": "511a2d68-c975-4913-b7b8-d75468e3102b",
|
||||
"subObjectInstanceIds": [],
|
||||
"criteria": {
|
||||
"performanceMetric": "VMemoryUsageMeanVnf.511a2d68-c975-4913-b7b8-d75468e3102b",
|
||||
"thresholdType": "SIMPLE",
|
||||
"simpleThresholdDetails": {
|
||||
"thresholdValue": 55,
|
||||
"hysteresis": 30
|
||||
}
|
||||
},
|
||||
"callbackUri": "http://localhost:9990/notification/callbackuri/511a2d68-c975-4913-b7b8-d75468e3102b",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC",
|
||||
"OAUTH2_CLIENT_CREDENTIALS",
|
||||
"OAUTH2_CLIENT_CERT"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"userName": "nfvo",
|
||||
"password": "nfvopwd"
|
||||
},
|
||||
"paramsOauth2ClientCredentials": {
|
||||
"clientId": "auth_user_name",
|
||||
"clientPassword": "auth_password",
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
},
|
||||
"paramsOauth2ClientCert": {
|
||||
"clientId": "auth_user_name",
|
||||
"certificateRef": {
|
||||
"type": "x5t#S256",
|
||||
"value": "certificate_fingerprint"
|
||||
},
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"monitoring": {
|
||||
"monitorName": "prometheus",
|
||||
"driverType": "external",
|
||||
"targetsInfo": [
|
||||
{
|
||||
"prometheusHost": "prometheusHost",
|
||||
"prometheusHostPort": "22",
|
||||
"authInfo": {
|
||||
"ssh_username": "ssh_username",
|
||||
"ssh_password": "ssh_password"
|
||||
},
|
||||
"alertRuleConfigPath": "/etc/prometheus/rules",
|
||||
"prometheusReloadApiEndpoint": "http://localhost:9990/-/reload"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Here is an example of create PM threshold:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold create sample_param_file.json --os-tacker-api-version 2
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://127.0.0.1:9990/notification/callbackuri/511a2d68-c975-4913-b7b8-d75468e3102b |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": "VMemoryUsageMeanVnf.511a2d68-c975-4913-b7b8-d75468e3102b", |
|
||||
| | "thresholdType": "SIMPLE", |
|
||||
| | "simpleThresholdDetails": { |
|
||||
| | "thresholdValue": 55.0, |
|
||||
| | "hysteresis": 30.0 |
|
||||
| | } |
|
||||
| | } |
|
||||
| ID | 4787c544-c3d0-4aeb-bf60-1598125c3d4f |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/thresholds/4787c544-c3d0-4aeb-bf60-1598125c3d4f" |
|
||||
| | }, |
|
||||
| | "object": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/511a2d68-c975-4913-b7b8-d75468e3102b" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Object Instance Id | 511a2d68-c975-4913-b7b8-d75468e3102b |
|
||||
| Object Type | Vnf |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------+
|
||||
|
||||
When creating a PM threshold, Tacker will modify the configuration file on the
|
||||
specified Prometheus based on ``metadata``.
|
||||
Then Prometheus will monitor the specified resource and send the monitored
|
||||
information to Tacker.
|
||||
Tacker converts the received monitoring information into a threshold state and
|
||||
sends a notification request to NFVO.
|
||||
|
||||
The following is the request body of a sample notification request.
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"id": "ec3cfe7b-aef4-4d66-9b65-15fe6a589b2e",
|
||||
"notificationType": "PerformanceThresholdNotification",
|
||||
"timeStamp": "2023-02-10T02:39:07Z",
|
||||
"thresholdId": "4787c544-c3d0-4aeb-bf60-1598125c3d4f",
|
||||
"crossingDirection": "DOWN",
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceId": "511a2d68-c975-4913-b7b8-d75468e3102b",
|
||||
"performanceMetric": "VMemoryUsageMeanVnf.511a2d68-c975-4913-b7b8-d75468e3102b",
|
||||
"performanceValue": "0.0014381563014867896",
|
||||
"_links": {
|
||||
"objectInstance": {
|
||||
"href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/511a2d68-c975-4913-b7b8-d75468e3102b"
|
||||
},
|
||||
"threshold": {
|
||||
"href": "http://127.0.0.1:9890/vnfpm/v2/thresholds/4787c544-c3d0-4aeb-bf60-1598125c3d4f"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.. note::
|
||||
|
||||
The target URL of this notification request is the ``Callback Uri``
|
||||
field in the PM threshold.
|
||||
|
||||
How does NFVO Auto Scale CNF
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
NFVO will determine whether a scale operation is required based on
|
||||
the notification data. If needed, a scale request will be sent to Tacker.
|
||||
|
||||
How to use the CLI of PM interfaces
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Create a PM threshold
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The creation of PM threshold has been introduced in the
|
||||
:ref:`Create PM threshold` above, and the use case of the CLI
|
||||
command can be referred to there.
|
||||
|
||||
Get all PM thresholds
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get all PM thresholds can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold list --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting all PM thresholds:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold list --os-tacker-api-version 2
|
||||
+--------------------------------------+-------------+------------------------------------------------------------------------------------------------------+
|
||||
| ID | Object Type | Links |
|
||||
+--------------------------------------+-------------+------------------------------------------------------------------------------------------------------+
|
||||
| 682eb763-a976-4a7a-b6a6-a40787d25dbb | Vnf | { |
|
||||
| | | "self": { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/thresholds/682eb763-a976-4a7a-b6a6-a40787d25dbb" |
|
||||
| | | }, |
|
||||
| | | "object": { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/511a2d68-c975-4913-b7b8-d75468e3102b" |
|
||||
| | | } |
|
||||
| | | } |
|
||||
+--------------------------------------+-------------+------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Get the specified PM threshold
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified PM threshold can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold show THRESHOLD_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified PM threshold:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold show 682eb763-a976-4a7a-b6a6-a40787d25dbb --os-tacker-api-version 2
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://127.0.0.1:9990/notification/callbackuri/511a2d68-c975-4913-b7b8-d75468e3102b |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": "VMemoryUsageMeanVnf.511a2d68-c975-4913-b7b8-d75468e3102b", |
|
||||
| | "thresholdType": "SIMPLE", |
|
||||
| | "simpleThresholdDetails": { |
|
||||
| | "thresholdValue": 55.0, |
|
||||
| | "hysteresis": 30.0 |
|
||||
| | } |
|
||||
| | } |
|
||||
| ID | 682eb763-a976-4a7a-b6a6-a40787d25dbb |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/thresholds/682eb763-a976-4a7a-b6a6-a40787d25dbb" |
|
||||
| | }, |
|
||||
| | "object": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/511a2d68-c975-4913-b7b8-d75468e3102b" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Object Instance Id | 511a2d68-c975-4913-b7b8-d75468e3102b |
|
||||
| Object Type | Vnf |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Change target PM threshold
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Updating a PM threshold can only change two fields, callbackUri and
|
||||
authentication.
|
||||
It can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold update THRESHOLD_ID sample_param_file.json --os-tacker-api-version 2
|
||||
|
||||
The content of the sample ``sample_param_file.json`` in this document is
|
||||
as follows:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"callbackUri": "http://127.0.0.1:9990/notification/callbackuri/callbackUri",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC",
|
||||
"OAUTH2_CLIENT_CREDENTIALS",
|
||||
"OAUTH2_CLIENT_CERT"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"userName": "nfvo",
|
||||
"password": "nfvopwd"
|
||||
},
|
||||
"paramsOauth2ClientCredentials": {
|
||||
"clientId": "auth_user_name",
|
||||
"clientPassword": "password",
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
},
|
||||
"paramsOauth2ClientCert": {
|
||||
"clientId": "auth_user_name",
|
||||
"certificateRef": {
|
||||
"type": "x5t#S256",
|
||||
"value": "certificate_fingerprint"
|
||||
},
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Here is an example of changing target PM threshold:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold update 682eb763-a976-4a7a-b6a6-a40787d25dbb sample_param_file.json --os-tacker-api-version 2
|
||||
+----------------+------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+----------------+------------------------------------------------------------+
|
||||
| Callback Uri | http://127.0.0.1:9990/notification/callbackuri/callbackUri |
|
||||
+----------------+------------------------------------------------------------+
|
||||
|
||||
Delete the specified PM threshold
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Delete the specified PM threshold can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold delete THRESHOLD_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of deleting the specified PM threshold:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm threshold delete 682eb763-a976-4a7a-b6a6-a40787d25dbb --os-tacker-api-version 2
|
||||
VNF PM threshold '682eb763-a976-4a7a-b6a6-a40787d25dbb' deleted successfully
|
||||
|
||||
|
||||
.. _ETSI NFV-SOL 002 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf
|
||||
.. _ETSI NFV-SOL 003 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
||||
.. _official website : https://prometheus.io/docs/prometheus/latest/getting_started/
|
||||
.. _the sample : https://docs.openstack.org/tacker/latest/user/etsi_cnf_scaling.html#how-to-create-vnf-package-for-scaling
|
||||
.. _ETSI GS NFV-IFA 027 : https://www.etsi.org/deliver/etsi_gs/NFV-IFA/001_099/027/03.03.01_60/gs_nfv-ifa027v030301p.pdf
|
||||
.. _ETSI GS NFV-SOL 013 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/013/03.04.01_60/gs_nfv-sol013v030401p.pdf
|
||||
.. _How to configure Prometheus Plugin : https://docs.openstack.org/tacker/latest/user/etsi_cnf_auto_scaling_pm.html#how-to-configure-prometheus-plugin
|
||||
@@ -2,7 +2,13 @@
|
||||
ETSI NFV-SOL CNF Healing
|
||||
========================
|
||||
|
||||
This document describes how to heal CNF in Tacker.
|
||||
This document describes how to heal CNF in Tacker v1 API.
|
||||
|
||||
.. note::
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
See :doc:`/user/v2/cnf/heal/index` for Tacker v2 API.
|
||||
|
||||
|
||||
Overview
|
||||
--------
|
||||
@@ -17,17 +23,16 @@ The diagram below shows an overview of the CNF healing.
|
||||
2. Call Kubernetes API
|
||||
|
||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
an appropriate infra-driver (in this case Kubernetes infra-driver) according
|
||||
to the contents of the instantiate parameters. Then, Kubernetes
|
||||
to the contents of the instantiate parameters. Then, Kubernetes
|
||||
infra-driver calls Kubernetes APIs.
|
||||
|
||||
3. Re-create Pods
|
||||
|
||||
Kubernetes Master re-creates Pods according to the API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_cnf_healing.png
|
||||
:align: left
|
||||
.. figure:: /_images/etsi_cnf_healing.png
|
||||
|
||||
|
||||
Prerequisites
|
||||
@@ -40,10 +45,11 @@ The following packages should be installed:
|
||||
|
||||
The procedure of prepare for healing operation that from "register VIM" to
|
||||
"Instantiate VNF", basically refer to
|
||||
:doc:`./etsi_containerized_vnf_usage_guide`.
|
||||
:doc:`/user/etsi_containerized_vnf_usage_guide`.
|
||||
|
||||
This procedure uses an example using the sample VNF package.
|
||||
|
||||
|
||||
How to Create VNF Package for Healing
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Using `samples/tests/etc/samples/etsi/nfv/test_cnf_heal`_,
|
||||
@@ -59,19 +65,21 @@ on TOSCA specifications.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd Definitions
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_common_types.yaml
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_vnfd_types.yaml
|
||||
$ cd Definitions
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_common_types.yaml
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_vnfd_types.yaml
|
||||
|
||||
|
||||
CSAR Package should be compressed into a ZIP file for uploading.
|
||||
Following commands are an example of compressing a VNF Package:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd -
|
||||
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/
|
||||
$ ls
|
||||
Definitions deployment.zip Files TOSCA-Metadata
|
||||
$ cd -
|
||||
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/
|
||||
$ ls
|
||||
Definitions deployment.zip Files TOSCA-Metadata
|
||||
|
||||
|
||||
After creating a vnf package with :command:`openstack vnf package create`,
|
||||
some information including ID, Links,
|
||||
@@ -79,26 +87,28 @@ Onboarding State, Operational State, and Usage State will be returned.
|
||||
When the Onboarding State is CREATED, the Operational State is DISABLED,
|
||||
and the Usage State is NOT_IN_USE, indicate the creation is successful.
|
||||
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package create
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| ID | 08d00a5c-e8aa-4219-9412-411458eaa7d2 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2" |
|
||||
| | }, |
|
||||
| | "packageContent": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2/package_content" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Onboarding State | CREATED |
|
||||
| Operational State | DISABLED |
|
||||
| Usage State | NOT_IN_USE |
|
||||
| User Defined Data | {} |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
$ openstack vnf package create
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| ID | 094c8abf-b5c8-45a1-9332-3952a710c65c |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/094c8abf-b5c8-45a1-9332-3952a710c65c" |
|
||||
| | }, |
|
||||
| | "packageContent": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/094c8abf-b5c8-45a1-9332-3952a710c65c/package_content" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Onboarding State | CREATED |
|
||||
| Operational State | DISABLED |
|
||||
| Usage State | NOT_IN_USE |
|
||||
| User Defined Data | {} |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Upload the CSAR zip file to the VNF Package by running the following command
|
||||
:command:`openstack vnf package upload --path <path of vnf package> <vnf package ID>`.
|
||||
@@ -106,8 +116,9 @@ Here is an example of uploading VNF package:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package upload --path deployment.zip 08d00a5c-e8aa-4219-9412-411458eaa7d2
|
||||
Upload request for VNF package 08d00a5c-e8aa-4219-9412-411458eaa7d2 has been accepted.
|
||||
$ openstack vnf package upload --path deployment.zip 094c8abf-b5c8-45a1-9332-3952a710c65c
|
||||
Upload request for VNF package 094c8abf-b5c8-45a1-9332-3952a710c65c has been accepted.
|
||||
|
||||
|
||||
Create VNF instance by running :command:`openstack vnflcm create <VNFD ID>`.
|
||||
|
||||
@@ -116,27 +127,29 @@ Here is an example of creating VNF :
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
||||
| Instantiation State | NOT_INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
||||
| | }, |
|
||||
| | "instantiate": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/instantiate" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | None |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||
| Instantiation State | NOT_INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959" |
|
||||
| | }, |
|
||||
| | "instantiate": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/instantiate" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VNF Configurable Properties | |
|
||||
| VNF Instance Description | |
|
||||
| VNF Instance Name | vnf-2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| vnfPkgId | |
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
After the command is executed, instantiate VNF.
|
||||
@@ -148,31 +161,28 @@ described in ``deployment_heal_simple.yaml``. Please note that ``additionalParam
|
||||
includes path of Kubernetes resource definition file and that
|
||||
``lcm-kubernetes-def-files`` should be a list.
|
||||
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cat ./instance_kubernetes.json
|
||||
{
|
||||
"flavourId": "simple",
|
||||
"additionalParams": {
|
||||
"lcm-kubernetes-def-files": [
|
||||
"Files/kubernetes/deployment_heal_simple.yaml"
|
||||
]
|
||||
},
|
||||
"vimConnectionInfo": [
|
||||
{
|
||||
"id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
|
||||
"vimId": "8d8373fe-6977-49ff-83ac-7756572ed186",
|
||||
"vimType": "kubernetes"
|
||||
}
|
||||
$ cat ./instance_kubernetes.json
|
||||
{
|
||||
"flavourId": "simple",
|
||||
"additionalParams": {
|
||||
"lcm-kubernetes-def-files": [
|
||||
"Files/kubernetes/deployment_heal_simple.yaml"
|
||||
]
|
||||
}
|
||||
$ openstack vnflcm instantiate 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 instance_kubernetes.json
|
||||
Instantiate request for VNF Instance 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 has been accepted.
|
||||
},
|
||||
"vimConnectionInfo": [
|
||||
{
|
||||
"id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
|
||||
"vimId": "43176042-ca97-4954-9bd5-0a9c054885e1",
|
||||
"vimType": "kubernetes"
|
||||
}
|
||||
]
|
||||
}
|
||||
$ openstack vnflcm instantiate 2a9a1197-953b-4f0a-b510-5ab4ab979959 instance_kubernetes.json
|
||||
Instantiate request for VNF Instance 2a9a1197-953b-4f0a-b510-5ab4ab979959 has been accepted.
|
||||
|
||||
.. note::
|
||||
|
||||
In the case of version 2 API, you can also set
|
||||
``vimType`` as ``ETSINFV.KUBERNETES.V_1`` in ``vimConnectionInfo``.
|
||||
|
||||
CNF Healing Procedure
|
||||
---------------------
|
||||
@@ -180,7 +190,7 @@ CNF Healing Procedure
|
||||
As mentioned in Prerequisites and Healing target VNF instance, the VNF must be
|
||||
instantiated before healing.
|
||||
|
||||
Details of CLI commands are described in :doc:`../cli/cli-etsi-vnflcm`.
|
||||
Details of CLI commands are described in :doc:`/cli/cli-etsi-vnflcm`.
|
||||
|
||||
There are two main methods for CNF healing.
|
||||
|
||||
@@ -194,11 +204,12 @@ There are two main methods for CNF healing.
|
||||
resources of Kubernetes such as Deployment, DaemonSet, StatefulSet and
|
||||
ReplicaSet.
|
||||
|
||||
.. note:: A VNFC is a 'VNF Component', and one VNFC basically corresponds to
|
||||
one VDU in the VNF. For more information on VNFC, see
|
||||
`NFV-SOL002 v2.6.1`_.
|
||||
.. note::
|
||||
|
||||
A VNFC is a 'VNF Component', and one VNFC basically corresponds to
|
||||
one VDU in the VNF. For more information on VNFC, see
|
||||
`NFV-SOL002 v2.6.1`_.
|
||||
|
||||
.. _labelCapHealingtargetVNFinstance:
|
||||
|
||||
Healing Target VNF Instance
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -211,77 +222,98 @@ This instance will be healed.
|
||||
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "scaleStatus": [ |
|
||||
| | { |
|
||||
| | "aspectId": "vdu1_aspect", |
|
||||
| | "scaleLevel": 0 |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extCpInfo": [], |
|
||||
| | "vnfcResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "686b356f-8096-4e24-99e5-3c81d36341be", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-75b5566444-wgc7m", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "73cb41e7-31ae-494b-b4d0-66b8168c257e", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-75b5566444-wwzcm", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "additionalParams": {} |
|
||||
| | } |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
||||
| | }, |
|
||||
| | "terminate": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/terminate" |
|
||||
| | }, |
|
||||
| | "heal": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/heal" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VIM Connection Info | [ |
|
||||
| | { |
|
||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||
| | "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {} |
|
||||
| | } |
|
||||
| | ] |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | None |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "scaleStatus": [ |
|
||||
| | { |
|
||||
| | "aspectId": "vdu1_aspect", |
|
||||
| | "scaleLevel": 0 |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extCpInfo": [], |
|
||||
| | "vnfcResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "da087f50-521a-4f71-a3e4-3464a196d4e6", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-dcjpn", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "4e66f5d3-a4c5-4025-8ad8-6ad21414cffa", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-hmsbh", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "additionalParams": { |
|
||||
| | "lcm-kubernetes-def-files": [ |
|
||||
| | "Files/kubernetes/deployment_heal_simple.yaml" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | } |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959" |
|
||||
| | }, |
|
||||
| | "terminate": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/terminate" |
|
||||
| | }, |
|
||||
| | "heal": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/heal" |
|
||||
| | }, |
|
||||
| | "changeExtConn": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/change_ext_conn" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VIM Connection Info | [ |
|
||||
| | { |
|
||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {}, |
|
||||
| | "extra": {} |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "f1e70f72-0e1f-427e-a672-b447d45ee52e", |
|
||||
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {}, |
|
||||
| | "extra": {} |
|
||||
| | } |
|
||||
| | ] |
|
||||
| VNF Configurable Properties | |
|
||||
| VNF Instance Description | |
|
||||
| VNF Instance Name | vnf-2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| metadata | namespace=default, tenant=default |
|
||||
| vnfPkgId | |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
How to Heal of the Entire VNF
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -296,8 +328,9 @@ Pod information before heal:
|
||||
|
||||
$ kubectl get pod
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
vdu1-heal-simple-75b5566444-wgc7m 1/1 Running 0 20m
|
||||
vdu1-heal-simple-75b5566444-wwzcm 1/1 Running 0 20m
|
||||
vdu1-heal-simple-6d649fd6f7-dcjpn 1/1 Running 0 11m
|
||||
vdu1-heal-simple-6d649fd6f7-hmsbh 1/1 Running 0 11m
|
||||
|
||||
|
||||
Heal entire VNF can be executed by the following CLI command.
|
||||
|
||||
@@ -305,11 +338,13 @@ Heal entire VNF can be executed by the following CLI command.
|
||||
|
||||
$ openstack vnflcm heal VNF_INSTANCE_ID
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Heal request for VNF Instance 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 has been accepted.
|
||||
Heal request for VNF Instance 2a9a1197-953b-4f0a-b510-5ab4ab979959 has been accepted.
|
||||
|
||||
|
||||
Pod information after heal:
|
||||
|
||||
@@ -317,91 +352,113 @@ Pod information after heal:
|
||||
|
||||
$ kubectl get pod
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
vdu1-heal-simple-75b5566444-ks785 1/1 Running 0 60s
|
||||
vdu1-heal-simple-75b5566444-p5mjv 1/1 Running 0 60s
|
||||
vdu1-heal-simple-6d649fd6f7-2wvxj 1/1 Running 0 17s
|
||||
vdu1-heal-simple-6d649fd6f7-tj4vx 1/1 Running 0 17s
|
||||
|
||||
|
||||
All ``vnfcResourceInfo`` in ``Instantiated Vnf Info`` will be updated from
|
||||
the VNF Instance displayed in :ref:`labelCapHealingtargetVNFinstance`.
|
||||
the VNF Instance displayed in `Healing Target VNF Instance`_.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "scaleStatus": [ |
|
||||
| | { |
|
||||
| | "aspectId": "vdu1_aspect", |
|
||||
| | "scaleLevel": 0 |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extCpInfo": [], |
|
||||
| | "vnfcResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "a77b9a8e-a672-492d-9459-81c7b6483947", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-75b5566444-j45qb", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "9463d02b-faba-41cb-8131-e90eaa319c83", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-75b5566444-p5mjv", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "additionalParams": {} |
|
||||
| | } |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
||||
| | }, |
|
||||
| | "terminate": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/terminate" |
|
||||
| | }, |
|
||||
| | "heal": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/heal" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VIM Connection Info | [ |
|
||||
| | { |
|
||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||
| | "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {} |
|
||||
| | } |
|
||||
| | ] |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | None |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "scaleStatus": [ |
|
||||
| | { |
|
||||
| | "aspectId": "vdu1_aspect", |
|
||||
| | "scaleLevel": 0 |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extCpInfo": [], |
|
||||
| | "vnfcResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "63a16aa7-ab36-4bfb-a6e3-724636155c4f", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-2wvxj", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "ca211f05-2509-4abf-b6f2-a553d18a6863", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-tj4vx", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "additionalParams": { |
|
||||
| | "lcm-kubernetes-def-files": [ |
|
||||
| | "Files/kubernetes/deployment_heal_simple.yaml" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | } |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959" |
|
||||
| | }, |
|
||||
| | "terminate": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/terminate" |
|
||||
| | }, |
|
||||
| | "heal": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/heal" |
|
||||
| | }, |
|
||||
| | "changeExtConn": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/change_ext_conn" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VIM Connection Info | [ |
|
||||
| | { |
|
||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {}, |
|
||||
| | "extra": {} |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "f1e70f72-0e1f-427e-a672-b447d45ee52e", |
|
||||
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {}, |
|
||||
| | "extra": {} |
|
||||
| | } |
|
||||
| | ] |
|
||||
| VNF Configurable Properties | |
|
||||
| VNF Instance Description | |
|
||||
| VNF Instance Name | vnf-2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| metadata | namespace=default, tenant=default |
|
||||
| vnfPkgId | |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
How to Heal Specified with VNFC Instances
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Execute Heal of the partial CNF CLI command and check the name and age of pod
|
||||
information before and after healing.
|
||||
This is to confirm that the name has changed and age has been new after heal.
|
||||
@@ -412,30 +469,29 @@ Pod information before heal:
|
||||
|
||||
$ kubectl get pod
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
vdu1-heal-simple-75b5566444-wgc7m 1/1 Running 0 20m
|
||||
vdu1-heal-simple-75b5566444-wwzcm 1/1 Running 0 20m
|
||||
vdu1-heal-simple-6d649fd6f7-dcjpn 1/1 Running 0 22m
|
||||
vdu1-heal-simple-6d649fd6f7-hmsbh 1/1 Running 0 22m
|
||||
|
||||
|
||||
Heal specified with VNFC instances can be executed by running
|
||||
:command:`openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID`.
|
||||
|
||||
In the example of this procedure, specify the ID
|
||||
``686b356f-8096-4e24-99e5-3c81d36341be`` of the first ``vnfcResourceInfo`` as
|
||||
``da087f50-521a-4f71-a3e4-3464a196d4e6`` of the first ``vnfcResourceInfo`` as
|
||||
``VNFC_INSTANCE_ID``.
|
||||
|
||||
.. note:: In the case of version 1 API,
|
||||
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcResourceInfo.id``.
|
||||
In the case of version 2 API,
|
||||
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcInfo.id``.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm heal 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 --vnfc-instance 686b356f-8096-4e24-99e5-3c81d36341be
|
||||
$ openstack vnflcm heal 2a9a1197-953b-4f0a-b510-5ab4ab979959 --vnfc-instance da087f50-521a-4f71-a3e4-3464a196d4e6
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Heal request for VNF Instance 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 has been accepted.
|
||||
Heal request for VNF Instance 2a9a1197-953b-4f0a-b510-5ab4ab979959 has been accepted.
|
||||
|
||||
|
||||
Pod information after heal:
|
||||
|
||||
@@ -443,89 +499,122 @@ Pod information after heal:
|
||||
|
||||
$ kubectl get pod
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
vdu1-heal-simple-75b5566444-ks785 1/1 Running 0 24s
|
||||
vdu1-heal-simple-75b5566444-wwzcm 1/1 Running 0 20m
|
||||
vdu1-heal-simple-6d649fd6f7-2wvxj 1/1 Running 0 13s
|
||||
vdu1-heal-simple-6d649fd6f7-hmsbh 1/1 Running 0 22m
|
||||
|
||||
|
||||
Only the ``resourceId`` of target ``vnfcResourceInfo`` in
|
||||
``Instantiated Vnf Info`` will be updated from the VNF Instance displayed in
|
||||
:ref:`labelCapHealingtargetVNFinstance`.
|
||||
`Healing Target VNF Instance`_.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "scaleStatus": [ |
|
||||
| | { |
|
||||
| | "aspectId": "vdu1_aspect", |
|
||||
| | "scaleLevel": 0 |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extCpInfo": [], |
|
||||
| | "vnfcResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "686b356f-8096-4e24-99e5-3c81d36341be", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-75b5566444-ks785", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "73cb41e7-31ae-494b-b4d0-66b8168c257e", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-75b5566444-wwzcm", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "additionalParams": {} |
|
||||
| | } |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
||||
| | }, |
|
||||
| | "terminate": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/terminate" |
|
||||
| | }, |
|
||||
| | "heal": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/heal" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VIM Connection Info | [ |
|
||||
| | { |
|
||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||
| | "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {} |
|
||||
| | } |
|
||||
| | ] |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | None |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "scaleStatus": [ |
|
||||
| | { |
|
||||
| | "aspectId": "vdu1_aspect", |
|
||||
| | "scaleLevel": 0 |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extCpInfo": [], |
|
||||
| | "vnfcResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "da087f50-521a-4f71-a3e4-3464a196d4e6", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-2wvxj", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "4e66f5d3-a4c5-4025-8ad8-6ad21414cffa", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-hmsbh", |
|
||||
| | "vimLevelResourceType": "Deployment" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "additionalParams": { |
|
||||
| | "lcm-kubernetes-def-files": [ |
|
||||
| | "Files/kubernetes/deployment_heal_simple.yaml" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | } |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959" |
|
||||
| | }, |
|
||||
| | "terminate": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/terminate" |
|
||||
| | }, |
|
||||
| | "heal": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/heal" |
|
||||
| | }, |
|
||||
| | "changeExtConn": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/change_ext_conn" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VIM Connection Info | [ |
|
||||
| | { |
|
||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {}, |
|
||||
| | "extra": {} |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "f1e70f72-0e1f-427e-a672-b447d45ee52e", |
|
||||
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||
| | "vimType": "kubernetes", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {}, |
|
||||
| | "extra": {} |
|
||||
| | } |
|
||||
| | ] |
|
||||
| VNF Configurable Properties | |
|
||||
| VNF Instance Description | |
|
||||
| VNF Instance Name | vnf-2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| metadata | namespace=default, tenant=default |
|
||||
| vnfPkgId | |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
.. _NFV-SOL002 v2.6.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/02.06.01_60/gs_nfv-sol002v020601p.pdf
|
||||
.. _samples/tests/etc/samples/etsi/nfv/test_cnf_heal : https://opendev.org/openstack/tacker/src/branch/master/samples/tests/etc/samples/etsi/nfv/test_cnf_heal
|
||||
History of Checks
|
||||
-----------------
|
||||
|
||||
The content of this document has been confirmed to work
|
||||
using the following VNF Package.
|
||||
|
||||
* `test_cnf_heal for 2023.2 Bobcat`_
|
||||
|
||||
|
||||
.. _samples/tests/etc/samples/etsi/nfv/test_cnf_heal:
|
||||
https://opendev.org/openstack/tacker/src/branch/master/samples/tests/etc/samples/etsi/nfv/test_cnf_heal
|
||||
.. _NFV-SOL002 v2.6.1: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/02.06.01_60/gs_nfv-sol002v020601p.pdf
|
||||
.. _test_cnf_heal for 2023.2 Bobcat:
|
||||
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/etc/samples/etsi/nfv/test_cnf_heal
|
||||
@@ -2,7 +2,13 @@
|
||||
ETSI NFV-SOL CNF Scaling
|
||||
========================
|
||||
|
||||
This document describes how to scale CNF in Tacker.
|
||||
This document describes how to scale CNF in Tacker v1 API.
|
||||
|
||||
.. note::
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
See :doc:`/user/v2/cnf/scale/index` for Tacker v2 API.
|
||||
|
||||
|
||||
Overview
|
||||
--------
|
||||
@@ -17,17 +23,17 @@ The diagram below shows an overview of the CNF scaling.
|
||||
2. Call Kubernetes API
|
||||
|
||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
an appropriate infra-driver (in this case Kubernetes infra-driver) according
|
||||
to the contents of the instantiate parameters. Then, Kubernetes
|
||||
to the contents of the instantiate parameters. Then, Kubernetes
|
||||
infra-driver calls Kubernetes APIs.
|
||||
|
||||
3. Change the number of Pods
|
||||
|
||||
Kubernetes Master change the number of Pods according to the API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_cnf_scaling.png
|
||||
:align: left
|
||||
.. figure:: /_images/etsi_cnf_scaling.png
|
||||
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
@@ -39,10 +45,11 @@ The following packages should be installed:
|
||||
|
||||
The procedure of prepare for scaling operation that from "register VIM" to
|
||||
"Instantiate VNF", basically refer to
|
||||
:doc:`./etsi_containerized_vnf_usage_guide`.
|
||||
:doc:`/user/etsi_containerized_vnf_usage_guide`.
|
||||
|
||||
This procedure uses an example using the sample VNF package.
|
||||
|
||||
|
||||
How to Create VNF Package for Scaling
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Using `samples/tests/etc/samples/etsi/nfv/test_cnf_scale`_,
|
||||
@@ -50,7 +57,8 @@ describe how to create VNF package for scaling.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd samples/tests/etc/samples/etsi/nfv/test_cnf_scale
|
||||
$ cd samples/tests/etc/samples/etsi/nfv/test_cnf_scale
|
||||
|
||||
|
||||
Download official definition files from ETSI NFV.
|
||||
ETSI GS NFV-SOL 001 [i.4] specifies the structure and format of the VNFD based
|
||||
@@ -58,19 +66,21 @@ on TOSCA specifications.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd Definitions
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_common_types.yaml
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_vnfd_types.yaml
|
||||
$ cd Definitions
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_common_types.yaml
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_vnfd_types.yaml
|
||||
|
||||
|
||||
CSAR Package should be compressed into a ZIP file for uploading.
|
||||
Following commands are an example of compressing a VNF Package:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd -
|
||||
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/
|
||||
$ ls
|
||||
Definitions deployment.zip Files TOSCA-Metadata
|
||||
$ cd -
|
||||
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/
|
||||
$ ls
|
||||
Definitions deployment.zip Files TOSCA-Metadata
|
||||
|
||||
|
||||
After creating a vnf package with :command:`openstack vnf package create`, some
|
||||
information including ID, Links, Onboarding State, Operational State, and Usage
|
||||
@@ -80,24 +90,25 @@ successful.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package create
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| ID | 08d00a5c-e8aa-4219-9412-411458eaa7d2 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2" |
|
||||
| | }, |
|
||||
| | "packageContent": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2/package_content" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Onboarding State | CREATED |
|
||||
| Operational State | DISABLED |
|
||||
| Usage State | NOT_IN_USE |
|
||||
| User Defined Data | {} |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
$ openstack vnf package create
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| ID | 094c8abf-b5c8-45a1-9332-3952a710c65c |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/094c8abf-b5c8-45a1-9332-3952a710c65c" |
|
||||
| | }, |
|
||||
| | "packageContent": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/094c8abf-b5c8-45a1-9332-3952a710c65c/package_content" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Onboarding State | CREATED |
|
||||
| Operational State | DISABLED |
|
||||
| Usage State | NOT_IN_USE |
|
||||
| User Defined Data | {} |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Upload the CSAR zip file in to the VNF Package by running the following command
|
||||
:command:`openstack vnf package upload --path <path of vnf package> <vnf package ID>`
|
||||
@@ -106,8 +117,9 @@ Here is an example of uploading VNF package:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package upload --path deployment.zip 08d00a5c-e8aa-4219-9412-411458eaa7d2
|
||||
Upload request for VNF package 08d00a5c-e8aa-4219-9412-411458eaa7d2 has been accepted.
|
||||
$ openstack vnf package upload --path deployment.zip 094c8abf-b5c8-45a1-9332-3952a710c65c
|
||||
Upload request for VNF package 094c8abf-b5c8-45a1-9332-3952a710c65c has been accepted.
|
||||
|
||||
|
||||
Create VNF instance by running :command:`openstack vnflcm create <VNFD ID>`.
|
||||
|
||||
@@ -116,27 +128,30 @@ Here is an example of creating VNF :
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
||||
| Instantiation State | NOT_INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
||||
| | }, |
|
||||
| | "instantiate": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/instantiate" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | None |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | e9d7c08e-72ed-4c64-bc91-78cd82163969 |
|
||||
| Instantiation State | NOT_INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/e9d7c08e-72ed-4c64-bc91-78cd82163969" |
|
||||
| | }, |
|
||||
| | "instantiate": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/e9d7c08e-72ed-4c64-bc91-78cd82163969/instantiate" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VNF Configurable Properties | |
|
||||
| VNF Instance Description | |
|
||||
| VNF Instance Name | vnf-e9d7c08e-72ed-4c64-bc91-78cd82163969 |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| vnfPkgId | |
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
After the command is executed, instantiate VNF.
|
||||
Instantiate VNF by running the following command
|
||||
@@ -149,29 +164,25 @@ includes path of Kubernetes resource definition file and that
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cat ./instance_kubernetes.json
|
||||
{
|
||||
"flavourId": "simple",
|
||||
"additionalParams": {
|
||||
"lcm-kubernetes-def-files": [
|
||||
"Files/kubernetes/deployment_scale.yaml"
|
||||
]
|
||||
},
|
||||
"vimConnectionInfo": [
|
||||
{
|
||||
"id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
|
||||
"vimId": "8d8373fe-6977-49ff-83ac-7756572ed186",
|
||||
"vimType": "kubernetes"
|
||||
}
|
||||
$ cat ./instance_kubernetes.json
|
||||
{
|
||||
"flavourId": "simple",
|
||||
"additionalParams": {
|
||||
"lcm-kubernetes-def-files": [
|
||||
"Files/kubernetes/deployment_scale.yaml"
|
||||
]
|
||||
}
|
||||
$ openstack vnflcm instantiate 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 instance_kubernetes.json
|
||||
Instantiate request for VNF Instance 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 has been accepted.
|
||||
},
|
||||
"vimConnectionInfo": [
|
||||
{
|
||||
"id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
|
||||
"vimId": "43176042-ca97-4954-9bd5-0a9c054885e1",
|
||||
"vimType": "kubernetes"
|
||||
}
|
||||
]
|
||||
}
|
||||
$ openstack vnflcm instantiate e9d7c08e-72ed-4c64-bc91-78cd82163969 instance_kubernetes.json
|
||||
Instantiate request for VNF Instance e9d7c08e-72ed-4c64-bc91-78cd82163969 has been accepted.
|
||||
|
||||
.. note::
|
||||
|
||||
In the case of version 2 API, you can also set
|
||||
``vimType`` as ``ETSINFV.KUBERNETES.V_1`` in ``vimConnectionInfo``.
|
||||
|
||||
CNF Scaling Procedure
|
||||
---------------------
|
||||
@@ -181,18 +192,22 @@ scaling.
|
||||
Users can scale the number of pod replicas managed by controller resources such
|
||||
as Kubernetes Deployment, StatefulSet, and ReplicaSet.
|
||||
|
||||
.. note:: If kind is Stateful Set and not dynamic provisioning
|
||||
(no-provisioner), user must create the Persistent Volume for the
|
||||
maximum replicas in advance because the increased Persistent Volume
|
||||
is not created during the scale out operation.
|
||||
.. note::
|
||||
|
||||
Details of CLI commands are described in :doc:`../cli/cli-etsi-vnflcm`.
|
||||
If kind is Stateful Set and not dynamic provisioning
|
||||
(no-provisioner), user must create the Persistent Volume for the
|
||||
maximum replicas in advance because the increased Persistent Volume
|
||||
is not created during the scale out operation.
|
||||
|
||||
|
||||
Details of CLI commands are described in :doc:`/cli/cli-etsi-vnflcm`.
|
||||
|
||||
There are two main methods for CNF scaling.
|
||||
|
||||
* Scale out CNF
|
||||
* Scale in CNF
|
||||
|
||||
|
||||
How to Identify ASPECT_ID
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -278,7 +293,11 @@ In the following VNFD excerpt, **vdu1_aspect** corresponds to ``ASPECT_ID``.
|
||||
|
||||
...snip VNFD...
|
||||
|
||||
.. note:: See `NFV-SOL001 v2.6.1`_ annex A.6 for details about ``ASPECT_ID``.
|
||||
|
||||
.. note::
|
||||
|
||||
See `NFV-SOL001 v2.6.1`_ annex A.6 for details about ``ASPECT_ID``.
|
||||
|
||||
|
||||
How to Scale Out CNF
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -296,17 +315,20 @@ Replicas information before scale-out:
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
vdu1 1/1 1 1 2d
|
||||
|
||||
|
||||
Scale-out CNF can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm scale --type SCALE_OUT --aspect-id vdu1_aspect VNF_INSTANCE_ID
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Scale request for VNF Instance edd306c3-647c-412c-a033-74aa40118038 has been accepted.
|
||||
Scale request for VNF Instance e9d7c08e-72ed-4c64-bc91-78cd82163969 has been accepted.
|
||||
|
||||
|
||||
Replicas information after scale-out:
|
||||
|
||||
@@ -316,6 +338,7 @@ Replicas information after scale-out:
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
vdu1 2/2 2 2 2d
|
||||
|
||||
|
||||
How to Scale in CNF
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -332,18 +355,20 @@ Replicas information before scale-out:
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
vdu1 2/2 2 2 2d
|
||||
|
||||
|
||||
Scale-in VNF can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm scale --type SCALE_IN --aspect-id vdu1_aspect VNF_INSTANCE_ID
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Scale request for VNF Instance
|
||||
edd306c3-647c-412c-a033-74aa40118038 has been accepted.
|
||||
Scale request for VNF Instance e9d7c08e-72ed-4c64-bc91-78cd82163969 has been accepted.
|
||||
|
||||
|
||||
Replicas information after scale-in:
|
||||
|
||||
@@ -353,5 +378,18 @@ Replicas information after scale-in:
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
vdu1 1/1 1 1 2d
|
||||
|
||||
.. _NFV-SOL001 v2.6.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/001/02.06.01_60/gs_NFV-SOL001v020601p.pdf
|
||||
.. _samples/tests/etc/samples/etsi/nfv/test_cnf_scale : https://opendev.org/openstack/tacker/src/branch/master/samples/tests/etc/samples/etsi/nfv/test_cnf_scale
|
||||
|
||||
History of Checks
|
||||
-----------------
|
||||
|
||||
The content of this document has been confirmed to work
|
||||
using the following VNF Package.
|
||||
|
||||
* `test_cnf_scale for 2023.2 Bobcat`_
|
||||
|
||||
|
||||
.. _samples/tests/etc/samples/etsi/nfv/test_cnf_scale:
|
||||
https://opendev.org/openstack/tacker/src/branch/master/samples/tests/etc/samples/etsi/nfv/test_cnf_scale
|
||||
.. _NFV-SOL001 v2.6.1: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/001/02.06.01_60/gs_NFV-SOL001v020601p.pdf
|
||||
.. _test_cnf_scale for 2023.2 Bobcat:
|
||||
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/etc/samples/etsi/nfv/test_cnf_scale
|
||||
@@ -23,28 +23,36 @@ Summary
|
||||
|
||||
This lecture enables you to:
|
||||
|
||||
- create & delete a sample VNF on the OpenStack with Tacker
|
||||
- create & delete a sample VNF on the OpenStack with Tacker v1 API
|
||||
|
||||
.. note::
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
See :doc:`/user/v2/getting_started/index` for Tacker v2 API.
|
||||
|
||||
|
||||
Following two types of VNF deployment supported by Tacker are introduced in
|
||||
this lecture.
|
||||
|
||||
- VNF Deployment with TOSCA [#f1]_
|
||||
- VNF Deployment with LCM Operation User Data (optional) [#f2]_
|
||||
- :doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`
|
||||
- :doc:`/user/etsi_vnf_deployment_as_vm_with_user_data`
|
||||
|
||||
"VNF Deployment with LCM Operation User Data" is optional.
|
||||
The part will be clarified with the notation [This is UserData specific part].
|
||||
|
||||
The following figure shows a sample VNF used in this lecture.
|
||||
|
||||
.. figure:: ../_images/etsi-getting-started-sample-vnf.png
|
||||
.. figure:: /_images/etsi-getting-started-sample-vnf.png
|
||||
:align: left
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
VIM config, a VNF package, and instantiation parameters used in this tutorial are placed at the repository.
|
||||
|
||||
- VNF Deployment with TOSCA [#f3]_
|
||||
- VNF Deployment with LCM Operation User Data [#f4]_
|
||||
- `samples/etsi_getting_started/tosca`_
|
||||
- `samples/etsi_getting_started/userdata`_
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -59,7 +67,7 @@ The following figure shows a sample VNF used in this lecture.
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
The following packages should be installed [#f5]_:
|
||||
The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
@@ -70,8 +78,28 @@ Configuration
|
||||
Load credentials for client operations
|
||||
""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
Before any Tacker commands can be run, your credentials need to be sourced
|
||||
[#f6]_.
|
||||
Before any Tacker commands can be run, your credentials need to be sourced.
|
||||
|
||||
.. note::
|
||||
|
||||
See `Create OpenStack client environment scripts`_ for details.
|
||||
In this document, the settings are as follows:
|
||||
|
||||
.. code-block::
|
||||
|
||||
OS_REGION_NAME=RegionOne
|
||||
OS_PROJECT_DOMAIN_ID=default
|
||||
OS_CACERT=
|
||||
OS_AUTH_URL=http://192.168.56.10/identity
|
||||
OS_TENANT_NAME=admin
|
||||
OS_USER_DOMAIN_ID=default
|
||||
OS_USERNAME=admin
|
||||
OS_VOLUME_API_VERSION=3
|
||||
OS_AUTH_TYPE=password
|
||||
OS_PROJECT_NAME=admin
|
||||
OS_PASSWORD=devstack
|
||||
OS_IDENTITY_API_VERSION=3
|
||||
|
||||
|
||||
You can confirm that Tacker is available by checking this command works without
|
||||
error:
|
||||
@@ -80,9 +108,10 @@ error:
|
||||
|
||||
$ openstack vim list
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
See CLI reference [#f7]_ to find all the available commands.
|
||||
See :doc:`/cli/index` to find all the available commands.
|
||||
|
||||
|
||||
Register VIM
|
||||
@@ -91,7 +120,7 @@ Register VIM
|
||||
#. Prepare VIM configuration file:
|
||||
|
||||
You can use a setup script for generating VIM configuration or edit it from
|
||||
scratch as described in :doc:`here </reference/vim_config>`.
|
||||
scratch as described in :doc:`/reference/vim_config`.
|
||||
This script finds parameters for the configuration, such as user
|
||||
name or password, from your environment variables.
|
||||
Here is an example of generating OpenStack VIM configuration as
|
||||
@@ -103,6 +132,7 @@ Register VIM
|
||||
$ bash TACKER_ROOT/tools/gen_vim_config.sh
|
||||
Config for OpenStack VIM 'vim_config.yaml' generated.
|
||||
|
||||
|
||||
There are several options for configuring parameters from command
|
||||
line supported. Refer help with ``-h`` for details.
|
||||
|
||||
@@ -114,8 +144,10 @@ Register VIM
|
||||
$ cp TACKER_ROOT/samples/etsi_getting_started/tosca/vim/vim_config.yaml ./
|
||||
$ vi vim_config.yaml
|
||||
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/vim/vim_config.yaml
|
||||
:language: yaml
|
||||
:language: yaml
|
||||
|
||||
|
||||
#. Register Default VIM:
|
||||
|
||||
@@ -126,57 +158,55 @@ Register VIM
|
||||
|
||||
$ openstack vim register --config-file ./vim_config.yaml \
|
||||
--is-default --fit-width openstack-admin-vim
|
||||
+----------------+-----------------------------------------------------+
|
||||
| Field | Value |
|
||||
+----------------+-----------------------------------------------------+
|
||||
| auth_cred | { |
|
||||
| | "username": "admin", |
|
||||
| | "user_domain_name": "default", |
|
||||
| | "cert_verify": "True", |
|
||||
| | "project_id": null, |
|
||||
| | "project_name": "admin", |
|
||||
| | "project_domain_name": "default", |
|
||||
| | "auth_url": "http://192.168.56.10/identity/v3", |
|
||||
| | "key_type": "barbican_key", |
|
||||
| | "secret_uuid": "***", |
|
||||
| | "password": "***" |
|
||||
| | } |
|
||||
| auth_url | http://192.168.56.10/identity/v3 |
|
||||
| created_at | 2023-12-21 07:39:09.617234 |
|
||||
| description | |
|
||||
| extra | |
|
||||
| id | 662e5f4f-3b16-4ca6-b560-28b62dd0e13b |
|
||||
| is_default | True |
|
||||
| name | openstack-admin-vim |
|
||||
| placement_attr | { |
|
||||
| | "regions": [ |
|
||||
| | "RegionOne" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| project_id | 1994d69783d64c00aadab564038c2fd7 |
|
||||
| status | ACTIVE |
|
||||
| type | openstack |
|
||||
| updated_at | None |
|
||||
| vim_project | { |
|
||||
| | "name": "admin", |
|
||||
| | "project_domain_name": "default" |
|
||||
| | } |
|
||||
+----------------+-----------------------------------------------------+
|
||||
|
||||
+----------------+-------------------------------------------------+
|
||||
| Field | Value |
|
||||
+----------------+-------------------------------------------------+
|
||||
| auth_cred | { |
|
||||
| | "username": "admin", |
|
||||
| | "user_domain_name": "Default", |
|
||||
| | "cert_verify": "True", |
|
||||
| | "project_id": null, |
|
||||
| | "project_name": "admin", |
|
||||
| | "project_domain_name": "Default", |
|
||||
| | "auth_url": "http://127.0.0.1/identity/v3", |
|
||||
| | "key_type": "barbican_key", |
|
||||
| | "secret_uuid": "***", |
|
||||
| | "password": "***" |
|
||||
| | } |
|
||||
| auth_url | http://127.0.0.1/identity/v3 |
|
||||
| created_at | 2020-05-24 07:00:25.923831 |
|
||||
| description | |
|
||||
| id | 4bb57004-9e33-4c52-b5f9-629f876b4168 |
|
||||
| is_default | True |
|
||||
| name | openstack-admin-vim |
|
||||
| placement_attr | { |
|
||||
| | "regions": [ |
|
||||
| | "RegionOne" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| project_id | d413421abf074c9b8f54a1403857038c |
|
||||
| status | PENDING |
|
||||
| type | openstack |
|
||||
| updated_at | None |
|
||||
| vim_project | { |
|
||||
| | "name": "admin", |
|
||||
| | "project_domain_name": "Default" |
|
||||
| | } |
|
||||
+----------------+-------------------------------------------------+
|
||||
|
||||
#. Confirm that the status of registered VIM is ``REACHABLE`` as ready to use:
|
||||
#. Confirm that the status of registered VIM is ``ACTIVE`` as ready to use:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vim list
|
||||
+--------------------------------------+---------------------+----------------------------------+-----------+------------+--------+
|
||||
| ID | Name | Tenant_id | Type | Is Default | Status |
|
||||
+--------------------------------------+---------------------+----------------------------------+-----------+------------+--------+
|
||||
| 662e5f4f-3b16-4ca6-b560-28b62dd0e13b | openstack-admin-vim | 1994d69783d64c00aadab564038c2fd7 | openstack | True | ACTIVE |
|
||||
+--------------------------------------+---------------------+----------------------------------+-----------+------------+--------+
|
||||
|
||||
+------------+------------+------------+-----------+------------+-----------+
|
||||
| ID | Name | Tenant_id | Type | Is Default | Status |
|
||||
+------------+------------+------------+-----------+------------+-----------+
|
||||
| 4bb57004-9 | openstack- | d413421abf | openstack | True | REACHABLE |
|
||||
| e33-4c52-b | admin-vim | 074c9b8f54 | | | |
|
||||
| 5f9-629f87 | | a140385703 | | | |
|
||||
| 6b4168 | | 8c | | | |
|
||||
+------------+------------+------------+-----------+------------+-----------+
|
||||
|
||||
Create and Upload VNF Package
|
||||
-----------------------------
|
||||
@@ -189,15 +219,17 @@ Prepare VNF Package
|
||||
.. code-block:: console
|
||||
|
||||
$ mkdir -p ./sample_vnf_package_csar/TOSCA-Metadata \
|
||||
./sample_vnf_package_csar/Definitions \
|
||||
./sample_vnf_package_csar/Files
|
||||
./sample_vnf_package_csar/Definitions \
|
||||
./sample_vnf_package_csar/Files/images
|
||||
|
||||
|
||||
[This is UserData specific part] When using UserData, create the following directories in addition.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ mkdir -p ./sample_vnf_package_csar/BaseHOT/simple \
|
||||
./sample_vnf_package_csar/UserData
|
||||
./sample_vnf_package_csar/UserData
|
||||
|
||||
|
||||
#. Create a ``TOSCA.meta`` file:
|
||||
|
||||
@@ -205,25 +237,39 @@ Prepare VNF Package
|
||||
|
||||
$ vi ./sample_vnf_package_csar/TOSCA-Metadata/TOSCA.meta
|
||||
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/TOSCA-Metadata/TOSCA.meta
|
||||
:language: text
|
||||
:language: text
|
||||
|
||||
|
||||
#. Download image file:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd ./sample_vnf_package_csar/Files/images
|
||||
$ wget https://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img
|
||||
|
||||
|
||||
#. Download ETSI definition files:
|
||||
|
||||
You should set ``${TOSCA_VERSION}`` to one of the appropriate TOSCA service
|
||||
template versions [#f8]_, e.g., ``export TOSCA_VERSION=v2.6.1``.
|
||||
template versions (`SOL001`_), e.g., ``export TOSCA_VERSION=v2.6.1``.
|
||||
|
||||
.. important::
|
||||
|
||||
You should also check if the version of TOSCA service template is
|
||||
supported by tacker [#f9]_.
|
||||
supported by tacker.
|
||||
See :doc:`/user/vnfd-sol001` for supported version.
|
||||
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd -
|
||||
$ cd ./sample_vnf_package_csar/Definitions
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/${TOSCA_VERSION}/etsi_nfv_sol001_common_types.yaml
|
||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/${TOSCA_VERSION}/etsi_nfv_sol001_vnfd_types.yaml
|
||||
|
||||
|
||||
#. Create VNFD files:
|
||||
|
||||
- Create ``sample_vnfd_top.yaml``
|
||||
@@ -233,7 +279,8 @@ Prepare VNF Package
|
||||
$ vi ./sample_vnfd_top.yaml
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/sample_vnfd_top.yaml
|
||||
:language: yaml
|
||||
:language: yaml
|
||||
|
||||
|
||||
- Create ``sample_vnfd_types.yaml``
|
||||
|
||||
@@ -241,22 +288,27 @@ Prepare VNF Package
|
||||
|
||||
$ vi ./sample_vnfd_types.yaml
|
||||
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/sample_vnfd_types.yaml
|
||||
:language: yaml
|
||||
:language: yaml
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
``description_id`` shall be globally unique, i.e., you cannot create
|
||||
multiple VNFDs with the same ``description_id``.
|
||||
|
||||
|
||||
- Create ``sample_vnfd_df_simple.yaml``
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ vi ./sample_vnfd_df_simple.yaml
|
||||
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/sample_vnfd_df_simple.yaml
|
||||
:language: yaml
|
||||
:language: yaml
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -264,6 +316,7 @@ Prepare VNF Package
|
||||
Tacker cannot handle it. After the instantiation, the default value in
|
||||
``sample_vnfd_types.yaml`` is always used.
|
||||
|
||||
|
||||
#. [This is UserData specific part] Create BaseHOT files:
|
||||
|
||||
.. code-block:: console
|
||||
@@ -271,8 +324,10 @@ Prepare VNF Package
|
||||
$ cd -
|
||||
$ vi ./sample_vnf_package_csar/BaseHOT/simple/sample_lcm_with_user_data_hot.yaml
|
||||
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/userdata/sample_vnf_package_csar/BaseHOT/simple/sample_lcm_with_user_data_hot.yaml
|
||||
:language: yaml
|
||||
:language: yaml
|
||||
|
||||
|
||||
#. [This is UserData specific part] Create UserData files:
|
||||
|
||||
@@ -282,8 +337,10 @@ Prepare VNF Package
|
||||
$ touch ./__init__.py
|
||||
$ vi ./lcm_user_data.py
|
||||
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/userdata/sample_vnf_package_csar/UserData/lcm_user_data.py
|
||||
:language: python
|
||||
:language: python
|
||||
|
||||
|
||||
#. Compress the VNF Package CSAR to zip:
|
||||
|
||||
@@ -311,12 +368,14 @@ Prepare VNF Package
|
||||
TOSCA-Metadata/
|
||||
TOSCA-Metadata/TOSCA.meta
|
||||
|
||||
|
||||
- [This is UserData specific part] When using UserData, add ``BaseHOT`` and ``UserData`` directories.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ zip sample_vnf_package_csar.zip -r BaseHOT/ UserData/
|
||||
|
||||
|
||||
The contents of the zip file should look something like this.
|
||||
|
||||
.. code-block:: console
|
||||
@@ -340,10 +399,10 @@ Prepare VNF Package
|
||||
UserData/lcm_user_data.py
|
||||
UserData/__init__.py
|
||||
|
||||
|
||||
Here, you can find the structure of the sample VNF Package CSAR as a
|
||||
zip file.
|
||||
|
||||
.. _Create VNF Package:
|
||||
|
||||
Create VNF Package
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
@@ -358,36 +417,42 @@ Create VNF Package
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package create --fit-width
|
||||
$ openstack vnf package create
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| ID | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d" |
|
||||
| | }, |
|
||||
| | "packageContent": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Onboarding State | CREATED |
|
||||
| Operational State | DISABLED |
|
||||
| Usage State | NOT_IN_USE |
|
||||
| User Defined Data | {} |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
|
||||
+-------------------+----------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------+----------------------------------------------------------------------------------------------------------------+
|
||||
| ID | e712a702-741f-4093-a971-b3ad69411ac1 |
|
||||
| Links | packageContent=href=/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1/package_content, |
|
||||
| | self=href=/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1 |
|
||||
| Onboarding State | CREATED |
|
||||
| Operational State | DISABLED |
|
||||
| Usage State | NOT_IN_USE |
|
||||
| User Defined Data | |
|
||||
+-------------------+----------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Upload VNF Package
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
#. Execute vnfpkgm upload:
|
||||
|
||||
The "VNF Package ID" ``e712a702-741f-4093-a971-b3ad69411ac1`` needs to be
|
||||
replaced with the appropriate one that was obtained from :ref:`Create VNF
|
||||
The "VNF Package ID" ``156f1c4f-bfe2-492b-a079-a1bad32c0c3d`` needs to be
|
||||
replaced with the appropriate one that was obtained from `Create VNF
|
||||
Package`.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package upload \
|
||||
--path ./sample_vnf_package_csar/sample_vnf_package_csar.zip \
|
||||
e712a702-741f-4093-a971-b3ad69411ac1
|
||||
--path ./sample_vnf_package_csar/sample_vnf_package_csar.zip \
|
||||
156f1c4f-bfe2-492b-a079-a1bad32c0c3d
|
||||
Upload request for VNF package 156f1c4f-bfe2-492b-a079-a1bad32c0c3d has been accepted.
|
||||
|
||||
Upload request for VNF package e712a702-741f-4093-a971-b3ad69411ac1 has been accepted.
|
||||
|
||||
Check the created VNF Package
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -398,20 +463,33 @@ Check the created VNF Package
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package list
|
||||
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
| e712a702-741f-4093-a971-b3ad69411ac1 | | PROCESSING | NOT_IN_USE | DISABLED |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State | Links |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| 156f1c4f-bfe2-492b-a079-a1bad32c0c3d | | PROCESSING | NOT_IN_USE | DISABLED | { |
|
||||
| | | | | | "self": { |
|
||||
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d" |
|
||||
| | | | | | }, |
|
||||
| | | | | | "packageContent": { |
|
||||
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
|
||||
| | | | | | } |
|
||||
| | | | | | } |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
|
||||
$ openstack vnf package list
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State | Links |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| 156f1c4f-bfe2-492b-a079-a1bad32c0c3d | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED | { |
|
||||
| | | | | | "self": { |
|
||||
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d" |
|
||||
| | | | | | }, |
|
||||
| | | | | | "packageContent": { |
|
||||
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
|
||||
| | | | | | } |
|
||||
| | | | | | } |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
| e712a702-741f-4093-a971-b3ad69411ac1 | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
|
||||
Create & Instantiate VNF
|
||||
------------------------
|
||||
@@ -427,14 +505,14 @@ Create VNF
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package show \
|
||||
e712a702-741f-4093-a971-b3ad69411ac1 -c 'VNFD ID'
|
||||
|
||||
156f1c4f-bfe2-492b-a079-a1bad32c0c3d -c 'VNFD ID'
|
||||
+---------+--------------------------------------+
|
||||
| Field | Value |
|
||||
+---------+--------------------------------------+
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
+---------+--------------------------------------+
|
||||
|
||||
|
||||
#. Create VNF:
|
||||
|
||||
The "VNFD ID" ``b1bb0ce7-ebca-4fa7-95ed-4840d70a1177`` needs to be replaced
|
||||
@@ -442,24 +520,31 @@ Create VNF
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm create \
|
||||
b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 --fit-width
|
||||
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 810d8c9b-e467-4b06-9265-ac9dce015fce |
|
||||
| Instantiation State | NOT_INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce" |
|
||||
| | }, |
|
||||
| | "instantiate": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/instantiate" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VNF Configurable Properties | |
|
||||
| VNF Instance Description | |
|
||||
| VNF Instance Name | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| vnfPkgId | |
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 725f625e-f6b7-4bcd-b1b7-7184039fde45 |
|
||||
| Instantiation State | NOT_INSTANTIATED |
|
||||
| Links | instantiate=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45/instantiate, |
|
||||
| | self=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45 |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | None |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Instantiate VNF
|
||||
^^^^^^^^^^^^^^^
|
||||
@@ -481,6 +566,7 @@ Instantiate VNF
|
||||
|
||||
You can skip ``vimConnectionInfo`` only when you have the default VIM.
|
||||
|
||||
|
||||
A sample ``<param-file>`` named as ``sample_param_file.json`` with
|
||||
minimal parametes:
|
||||
|
||||
@@ -488,27 +574,33 @@ Instantiate VNF
|
||||
|
||||
$ vi ./sample_param_file.json
|
||||
|
||||
|
||||
- When using TOSCA, use the following parameters.
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/lcm_instantiate_request/sample_param_file.json
|
||||
:language: json
|
||||
:language: json
|
||||
|
||||
|
||||
- [This is UserData specific part] When using UserData, use the following parameters instead.
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/userdata/lcm_instantiate_request/sample_param_file.json
|
||||
:language: json
|
||||
:language: json
|
||||
|
||||
|
||||
``${network_uuid}``, ``${subnet_uuid}`` and ``${vim_uuid}`` should be
|
||||
replaced with the uuid of the network to use, the uuid of the subnet to use
|
||||
and the uuid of the VIM to use, respectively.
|
||||
|
||||
.. hint::
|
||||
You can find uuids of the network and the corresponding subnet with this command [#f10]_:
|
||||
|
||||
You can find uuids of the network and the corresponding subnet with
|
||||
`network command`_:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack network list
|
||||
|
||||
|
||||
#. Instantiate VNF:
|
||||
|
||||
The "ID of vnf instance" and "path to <param-file>" are needed to
|
||||
@@ -517,48 +609,126 @@ Instantiate VNF
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm instantiate \
|
||||
725f625e-f6b7-4bcd-b1b7-7184039fde45 ./sample_param_file.json
|
||||
810d8c9b-e467-4b06-9265-ac9dce015fce ./sample_param_file.json
|
||||
Instantiate request for VNF Instance 810d8c9b-e467-4b06-9265-ac9dce015fce has been accepted.
|
||||
|
||||
instantiate request for vnf instance 725f625e-f6b7-4bcd-b1b7-7184039fde45 has been accepted.
|
||||
|
||||
Check the details of the instantiated vnf.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm list
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| 810d8c9b-e467-4b06-9265-ac9dce015fce | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
|
||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| 725f625e-f6b7-4bcd-b1b7-7184039fde45 | None | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
$ openstack vnflcm show 810d8c9b-e467-4b06-9265-ac9dce015fce
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 810d8c9b-e467-4b06-9265-ac9dce015fce |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "extCpInfo": [], |
|
||||
| | "vnfcResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "6894448f-4a88-45ec-801f-4ef455e8a613", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b", |
|
||||
| | "resourceId": "cfb5d6de-90a1-433a-9af4-1159ca279e27", |
|
||||
| | "vimLevelResourceType": "OS::Nova::Server" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [], |
|
||||
| | "vnfcCpInfo": [ |
|
||||
| | { |
|
||||
| | "id": "b6dffe31-2e4b-44e6-8ddd-b94608a9210b", |
|
||||
| | "cpdId": "CP1", |
|
||||
| | "vnfExtCpId": null, |
|
||||
| | "vnfLinkPortId": "5040ae0d-ef8b-4d12-b96b-d9d05a0ba7fe" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfVirtualLinkResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "4b67e6f9-8133-4f7d-b384-abd64f9bcbac", |
|
||||
| | "vnfVirtualLinkDescId": "internalVL1", |
|
||||
| | "networkResource": { |
|
||||
| | "vimConnectionId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b", |
|
||||
| | "resourceId": "d04beb5f-b29a-4f7e-b32b-7ea669afa3eb", |
|
||||
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||
| | }, |
|
||||
| | "vnfLinkPorts": [ |
|
||||
| | { |
|
||||
| | "id": "5040ae0d-ef8b-4d12-b96b-d9d05a0ba7fe", |
|
||||
| | "resourceHandle": { |
|
||||
| | "vimConnectionId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b", |
|
||||
| | "resourceId": "84edd7c7-a02f-4f25-be2a-a0ee5b1c8dc7", |
|
||||
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||
| | }, |
|
||||
| | "cpInstanceId": "b6dffe31-2e4b-44e6-8ddd-b94608a9210b" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfcInfo": [ |
|
||||
| | { |
|
||||
| | "id": "6c0ba2a3-3f26-4ba0-9b4f-db609b2e843c", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "vnfcState": "STARTED" |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "additionalParams": {} |
|
||||
| | } |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce" |
|
||||
| | }, |
|
||||
| | "terminate": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/terminate" |
|
||||
| | }, |
|
||||
| | "heal": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/heal" |
|
||||
| | }, |
|
||||
| | "changeExtConn": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/change_ext_conn" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VIM Connection Info | [ |
|
||||
| | { |
|
||||
| | "id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1", |
|
||||
| | "vimId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b", |
|
||||
| | "vimType": "ETSINFV.OPENSTACK_KEYSTONE.v_2", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {}, |
|
||||
| | "extra": {} |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "67820f17-a82a-4e3a-b200-8ef119646749", |
|
||||
| | "vimId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b", |
|
||||
| | "vimType": "openstack", |
|
||||
| | "interfaceInfo": {}, |
|
||||
| | "accessInfo": {}, |
|
||||
| | "extra": {} |
|
||||
| | } |
|
||||
| | ] |
|
||||
| VNF Configurable Properties | |
|
||||
| VNF Instance Description | |
|
||||
| VNF Instance Name | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| metadata | tenant=admin |
|
||||
| vnfPkgId | |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
$ openstack vnflcm show \
|
||||
725f625e-f6b7-4bcd-b1b7-7184039fde45 --fit-width
|
||||
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 725f625e-f6b7-4bcd-b1b7-7184039fde45 |
|
||||
| Instantiated Vnf Info | , extCpInfo='[]', flavourId='simple', vnfState='STARTED', vnfVirtualLinkResourceInfo='[{'id': '0163cea3-af88-4ef8-ae43-ef3e5e7e827d', |
|
||||
| | 'vnfVirtualLinkDescId': 'internalVL1', 'networkResource': {'resourceId': '073c74b9-670d-4764-a933-6fe4f2f991c1', 'vimLevelResourceType': |
|
||||
| | 'OS::Neutron::Net'}, 'vnfLinkPorts': [{'id': '3b667826-336c-4919-889e-e6c63d959ee6', 'resourceHandle': {'resourceId': |
|
||||
| | '5d3255b5-e9fb-449f-9c5f-5242049ce2fa', 'vimLevelResourceType': 'OS::Neutron::Port'}, 'cpInstanceId': '3091f046-de63-44c8-ad23-f86128409b27'}]}]', |
|
||||
| | vnfcResourceInfo='[{'id': '2a66f545-c90d-49e7-8f17-fb4e57b19c92', 'vduId': 'VDU1', 'computeResource': {'resourceId': |
|
||||
| | '6afc547d-0e19-46fc-b171-a3d9a0a80513', 'vimLevelResourceType': 'OS::Nova::Server'}, 'storageResourceIds': [], 'vnfcCpInfo': [{'id': |
|
||||
| | '3091f046-de63-44c8-ad23-f86128409b27', 'cpdId': 'CP1', 'vnfExtCpId': None, 'vnfLinkPortId': '3b667826-336c-4919-889e-e6c63d959ee6'}]}]' |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | heal=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45/heal, self=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45, |
|
||||
| | terminate=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45/terminate |
|
||||
| VIM Connection Info | [] |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | None |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Terminate & Delete VNF
|
||||
----------------------
|
||||
@@ -571,12 +741,12 @@ Terminate VNF
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm list
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| 810d8c9b-e467-4b06-9265-ac9dce015fce | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
|
||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| 725f625e-f6b7-4bcd-b1b7-7184039fde45 | None | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
|
||||
#. Terminate VNF Instance:
|
||||
|
||||
@@ -584,22 +754,21 @@ Terminate VNF
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm terminate 725f625e-f6b7-4bcd-b1b7-7184039fde45
|
||||
$ openstack vnflcm terminate 810d8c9b-e467-4b06-9265-ac9dce015fce
|
||||
Terminate request for VNF Instance '810d8c9b-e467-4b06-9265-ac9dce015fce' has been accepted.
|
||||
|
||||
Terminate request for VNF Instance '725f625e-f6b7-4bcd-b1b7-7184039fde45' has been accepted.
|
||||
|
||||
Check the status of VNF Instance:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm list --fit-width
|
||||
$ openstack vnflcm list
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
| 810d8c9b-e467-4b06-9265-ac9dce015fce | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce | NOT_INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||
|
||||
+----------------------+-------------------+---------------------+--------------+----------------------+------------------+-----------------------+
|
||||
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||
+----------------------+-------------------+---------------------+--------------+----------------------+------------------+-----------------------+
|
||||
| 725f625e-f6b7-4bcd-b | None | NOT_INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95 |
|
||||
| 1b7-7184039fde45 | | | | | | ed-4840d70a1177 |
|
||||
+----------------------+-------------------+---------------------+--------------+----------------------+------------------+-----------------------+
|
||||
|
||||
Delete VNF
|
||||
^^^^^^^^^^
|
||||
@@ -608,9 +777,9 @@ Delete VNF
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm delete 725f625e-f6b7-4bcd-b1b7-7184039fde45
|
||||
$ openstack vnflcm delete 810d8c9b-e467-4b06-9265-ac9dce015fce
|
||||
Vnf instance '810d8c9b-e467-4b06-9265-ac9dce015fce' is deleted successfully
|
||||
|
||||
Vnf instance '725f625e-f6b7-4bcd-b1b7-7184039fde45' deleted successfully
|
||||
|
||||
Delete VNF Package
|
||||
------------------
|
||||
@@ -622,47 +791,60 @@ Delete VNF Package
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package list
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State | Links |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| 156f1c4f-bfe2-492b-a079-a1bad32c0c3d | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED | { |
|
||||
| | | | | | "self": { |
|
||||
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d" |
|
||||
| | | | | | }, |
|
||||
| | | | | | "packageContent": { |
|
||||
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
|
||||
| | | | | | } |
|
||||
| | | | | | } |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
| e712a702-741f-4093-a971-b3ad69411ac1 | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
|
||||
Update the Operational State to ``DISABLED``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package update \
|
||||
--operational-state 'DISABLED' \
|
||||
e712a702-741f-4093-a971-b3ad69411ac1
|
||||
|
||||
$ openstack vnf package update --operational-state 'DISABLED' \
|
||||
156f1c4f-bfe2-492b-a079-a1bad32c0c3d
|
||||
+-------------------+----------+
|
||||
| Field | Value |
|
||||
+-------------------+----------+
|
||||
| Operational State | DISABLED |
|
||||
+-------------------+----------+
|
||||
|
||||
|
||||
Check the Operational State to be changed:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package list
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State | Links |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| 156f1c4f-bfe2-492b-a079-a1bad32c0c3d | Sample VNF | ONBOARDED | NOT_IN_USE | DISABLED | { |
|
||||
| | | | | | "self": { |
|
||||
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d" |
|
||||
| | | | | | }, |
|
||||
| | | | | | "packageContent": { |
|
||||
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
|
||||
| | | | | | } |
|
||||
| | | | | | } |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
| e712a702-741f-4093-a971-b3ad69411ac1 | Sample VNF | ONBOARDED | NOT_IN_USE | DISABLED |
|
||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
||||
|
||||
Delete the VNF Package:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package delete e712a702-741f-4093-a971-b3ad69411ac1
|
||||
|
||||
$ openstack vnf package delete 156f1c4f-bfe2-492b-a079-a1bad32c0c3d
|
||||
All specified vnf-package(s) deleted successfully
|
||||
|
||||
|
||||
Trouble Shooting
|
||||
----------------
|
||||
|
||||
@@ -670,7 +852,7 @@ Trouble Shooting
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
devstack tacker-conductor[8132]: 2020-05-25 09:17:12.976 TRACE oslo_messaging.rpc.server tacker.common.exceptions.VnfInstantiationFailed: Vnf instantiation failed for vnf ca2fe9cb-afba-40a5-aec6-b7ef643b0208, error: ERROR: HEAT-E99001 Service neutron is not available for resource type OS::Neutron::QoSPolicy, reason: Required extension qos in neutron service is not available.
|
||||
Vnf instantiation failed for vnf 810d8c9b-e467-4b06-9265-ac9dce015fce, error: ERROR: HEAT-E99001 Service neutron is not available for resource type OS::Neutron::QoSPolicy, reason: Required extension qos in neutron service is not available.
|
||||
|
||||
|
||||
#. Edit ``/etc/neutron/neutron.conf``:
|
||||
@@ -679,28 +861,33 @@ Trouble Shooting
|
||||
|
||||
$ sudo vi /etc/neutron/neutron.conf
|
||||
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
- service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin
|
||||
+ service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin,neutron.services.qos.qos_plugin.QoSPlugin,qos
|
||||
|
||||
|
||||
#. Edit ``/etc/neutron/plugins/ml2/ml2_conf.ini``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
|
||||
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
- extension_drivers = port_security
|
||||
+ extension_drivers = port_security,qos
|
||||
|
||||
|
||||
#. Restart neutron services:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo systemctl restart devstack@q-*
|
||||
|
||||
|
||||
- Error in networking-sfc
|
||||
|
||||
#. Disable networking-sfc by editting ``/etc/neutron/neutron.conf``:
|
||||
@@ -709,6 +896,7 @@ Trouble Shooting
|
||||
|
||||
$ sudo vi /etc/neutron/neutron.conf
|
||||
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
- service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin,neutron.services.qos.qos_plugin.QoSPlugin,qos
|
||||
@@ -719,31 +907,34 @@ Trouble Shooting
|
||||
- [flowclassifier]
|
||||
- drivers = ovs
|
||||
|
||||
|
||||
#. Edit ``/etc/neutron/plugins/ml2/ml2_conf.ini``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
|
||||
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
- [agent]
|
||||
- extensions = sfc
|
||||
|
||||
|
||||
#. Restart neutron services:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo systemctl restart devstack@q-*
|
||||
|
||||
.. [#] https://docs.openstack.org/tacker/latest/user/etsi_vnf_deployment_as_vm_with_tosca.html
|
||||
.. [#] https://docs.openstack.org/tacker/latest/user/etsi_vnf_deployment_as_vm_with_user_data.html
|
||||
.. [#] https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/tosca
|
||||
.. [#] https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/userdata
|
||||
.. [#] https://docs.openstack.org/tacker/latest/install/index.html
|
||||
.. [#] https://docs.openstack.org/liberty/install-guide-ubuntu/keystone-openrc.html
|
||||
.. [#] https://docs.openstack.org/tacker/latest/cli/index.html
|
||||
.. [#] https://forge.etsi.org/rep/nfv/SOL001
|
||||
.. [#] https://docs.openstack.org/tacker/latest/user/vnfd-sol001.html
|
||||
.. [#] https://docs.openstack.org/python-openstackclient/pike/cli/command-objects/network.html
|
||||
.. _vim_config.yaml: https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/tosca/vim/vim_config.yaml
|
||||
|
||||
.. _samples/etsi_getting_started/tosca:
|
||||
https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/tosca
|
||||
.. _samples/etsi_getting_started/userdata:
|
||||
https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/userdata
|
||||
.. _Create OpenStack client environment scripts:
|
||||
https://docs.openstack.org/keystone/latest/install/keystone-openrc-rdo.html
|
||||
.. _vim_config.yaml:
|
||||
https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/tosca/vim/vim_config.yaml
|
||||
.. _SOL001: https://forge.etsi.org/rep/nfv/SOL001
|
||||
.. _network command: https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/network.html
|
||||
@@ -1,6 +1,11 @@
|
||||
======================
|
||||
v1/v2 Tacker Use Cases
|
||||
======================
|
||||
===================
|
||||
v1 Tacker Use Cases
|
||||
===================
|
||||
|
||||
.. note::
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
See :doc:`/user/v2/use_case_guide` for Tacker v2 API.
|
||||
|
||||
|
||||
VNF
|
||||
@@ -25,7 +30,7 @@ Container
|
||||
:maxdepth: 1
|
||||
|
||||
etsi_containerized_vnf_usage_guide
|
||||
etsi_cnf_helm_v2
|
||||
|
||||
|
||||
Scale
|
||||
^^^^^
|
||||
@@ -76,14 +81,6 @@ VM
|
||||
|
||||
etsi_vnf_update
|
||||
|
||||
Container
|
||||
~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
etsi_cnf_update
|
||||
|
||||
Change External VNF Connectivity
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
@@ -95,26 +92,6 @@ VM
|
||||
|
||||
etsi_vnf_change_external_vnf_connectivity
|
||||
|
||||
Change Current VNF Package
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
VM
|
||||
~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
etsi_vnf_change_current_vnf_package
|
||||
etsi_vnf_change_current_vnf_package_with_standard_user_data
|
||||
coordinate_api_client_in_coordinatevnf_script
|
||||
|
||||
Container
|
||||
~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
etsi_cnf_change_current_vnf_package
|
||||
|
||||
Error Handling
|
||||
^^^^^^^^^^^^^^
|
||||
@@ -123,8 +100,6 @@ Error Handling
|
||||
:maxdepth: 1
|
||||
|
||||
etsi_vnf_error_handling
|
||||
db_sync_error_handling
|
||||
placement_error_handling
|
||||
|
||||
.. TODO(h-asahina): add `Action Driver`
|
||||
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs
|
||||
@@ -135,8 +110,8 @@ Management Driver
|
||||
.. TODO(h-asahina): add `Overview`
|
||||
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs
|
||||
|
||||
Kubernetes Cluster VNF (v1 API)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Kubernetes Cluster VNF
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
@@ -147,48 +122,22 @@ Kubernetes Cluster VNF (v1 API)
|
||||
mgmt_driver_deploy_k8s_pv_usage_guide
|
||||
mgmt_driver_deploy_k8s_kubespary_usage_guide
|
||||
|
||||
Ansible Driver (v1 API)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Ansible Driver
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
mgmt_driver_for_ansible_driver_usage_guide
|
||||
|
||||
Container Update (v1/v2 API)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Container Update
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
mgmt_driver_for_container_update
|
||||
|
||||
FaultNotification AutoHealing (v2 API)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
fault_notification_use_case_guide
|
||||
|
||||
Prometheus Plugin
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
prometheus_plugin_use_case_guide
|
||||
|
||||
Container
|
||||
~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
etsi_cnf_auto_scaling_pm
|
||||
etsi_cnf_auto_scaling_pm_threshold
|
||||
etsi_cnf_auto_healing_fm
|
||||
|
||||
|
||||
VNF Package
|
||||
___________
|
||||
|
||||
@@ -1,1000 +0,0 @@
|
||||
===========================================
|
||||
ETSI NFV-SOL VNF Change Current VNF Package
|
||||
===========================================
|
||||
|
||||
This document describes how to change current VNF package for VNF in Tacker.
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
The diagram below shows an overview of changing current VNF package.
|
||||
|
||||
1. Request Change Current VNF Package
|
||||
|
||||
A user requests tacker-server to change current VNF package for VNF instance
|
||||
with tacker-client by requesting ``change current vnf package``.
|
||||
|
||||
2. Call OpenStack Heat API
|
||||
|
||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
an appropriate infra-driver (in this case OpenStack infra-driver) according
|
||||
to the contents of VNF instance. Then, OpenStack infra-driver calls
|
||||
OpenStack Heat APIs.
|
||||
|
||||
3. Change the image of VMs
|
||||
|
||||
OpenStack Heat change the image of VMs according to the API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_vnf_change_current_vnf_package.png
|
||||
:align: left
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
|
||||
At least one VNF instance with status of ``INSTANTIATED`` is required.
|
||||
You can refer to :doc:`./etsi_vnf_deployment_as_vm_with_tosca` for the
|
||||
procedure to instantiate VNF.
|
||||
|
||||
You can refer to :doc:`./vnf-package` for the operation of uploading
|
||||
VNF package.
|
||||
|
||||
|
||||
.. note::
|
||||
You can deploy a VM directly by image or volume.
|
||||
Therefore, when updating the
|
||||
image of the VM, there will be two cases.
|
||||
|
||||
Use the common VNF package and the flavor_id to instantiate,
|
||||
and then use the VNF package in the corresponding link to
|
||||
execute ``change current vnf package`` operation,
|
||||
you can update the image of the VM in the following two ways.
|
||||
|
||||
1. change VM created by image to VM created by new image
|
||||
|
||||
2. change VM created by volume to VM created by new volume
|
||||
|
||||
Change Current VNF Package
|
||||
--------------------------
|
||||
|
||||
As mentioned in Prerequisites, the VNF must be created
|
||||
before performing change current VNF package.
|
||||
|
||||
You need to upload the VNF package you want to change to before
|
||||
executing change current vnf package.
|
||||
|
||||
Details of CLI commands are described in
|
||||
:doc:`../cli/cli-etsi-vnflcm`.
|
||||
|
||||
For changing current VNF package, you need to prepare a JSON-formatted
|
||||
definition file before running command for changing the VNF package.
|
||||
|
||||
``sample_param_file_for_multi_resources.json:``
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
|
||||
"additionalParams": {
|
||||
"upgrade_type": "RollingUpdate",
|
||||
"lcm-operation-coordinate-old-vnf": "./Scripts/coordinate_old_vnf.py",
|
||||
"lcm-operation-coordinate-new-vnf": "./Scripts/coordinate_new_vnf.py",
|
||||
"vdu_params": [{
|
||||
"vdu_id": "VDU1",
|
||||
"old_vnfc_param": {
|
||||
"cp_name": "VDU1_CP1",
|
||||
"username": "ubuntu",
|
||||
"password": "ubuntu"
|
||||
},
|
||||
"new_vnfc_param": {
|
||||
"cp_name": "VDU1_CP1",
|
||||
"username": "ubuntu",
|
||||
"password": "ubuntu"
|
||||
}
|
||||
}, {
|
||||
"vdu_id": "VDU2",
|
||||
"old_vnfc_param": {
|
||||
"cp_name": "VDU2_CP1",
|
||||
"username": "ubuntu",
|
||||
"password": "ubuntu"
|
||||
},
|
||||
"new_vnfc_param": {
|
||||
"cp_name": "VDU2_CP1",
|
||||
"username": "ubuntu",
|
||||
"password": "ubuntu"
|
||||
}
|
||||
}]
|
||||
},
|
||||
"vimConnectionInfo": {
|
||||
"vim1": {
|
||||
"accessInfo": {
|
||||
"password": "devstack",
|
||||
"project": "nfv",
|
||||
"projectDomain": "Default",
|
||||
"region": "RegionOne",
|
||||
"userDomain": "Default",
|
||||
"username": "nfv_user"
|
||||
},
|
||||
"extra": {
|
||||
"new-key": "new-val"
|
||||
},
|
||||
"interfaceInfo": {
|
||||
"endpoint": "http://localhost/identity/v3"
|
||||
},
|
||||
"vimId": "defb2f96-5670-4bef-8036-27bf61267fc1",
|
||||
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3"
|
||||
}
|
||||
},
|
||||
"vnfConfigurableProperties": {
|
||||
"key": "value"
|
||||
},
|
||||
"extensions": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
|
||||
``sample_param_file_for_single_resource.json:``
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
|
||||
"additionalParams": {
|
||||
"upgrade_type": "RollingUpdate",
|
||||
"lcm-operation-coordinate-old-vnf": "./Scripts/coordinate_old_vnf.py",
|
||||
"lcm-operation-coordinate-new-vnf": "./Scripts/coordinate_new_vnf.py",
|
||||
"vdu_params": [{
|
||||
"vdu_id": "VDU2",
|
||||
"old_vnfc_param": {
|
||||
"cp_name": "VDU2_CP1",
|
||||
"username": "ubuntu",
|
||||
"password": "ubuntu"
|
||||
},
|
||||
"new_vnfc_param": {
|
||||
"cp_name": "VDU2_CP1",
|
||||
"username": "ubuntu",
|
||||
"password": "ubuntu"
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
You can set following parameter in additionalParams:
|
||||
|
||||
.. list-table:: additionalParams
|
||||
:widths: 15 10 30
|
||||
:header-rows: 1
|
||||
|
||||
* - Attribute name
|
||||
- Cardinality
|
||||
- Parameter description
|
||||
* - upgrade_type
|
||||
- 1
|
||||
- Type of file update operation method. Specify Blue-Green or Rolling update.
|
||||
* - lcm-operation-coordinate-old-vnf
|
||||
- 0..1
|
||||
- The file path of the script that simulates the behavior of CoordinateVNF for old VNF.
|
||||
* - lcm-operation-coordinate-new-vnf
|
||||
- 0..1
|
||||
- The file path of the script that simulates the behavior of CoordinateVNF for new VNF.
|
||||
* - vdu_params
|
||||
- 1..N
|
||||
- VDU information of target VDU to update.
|
||||
* - > vdu_id
|
||||
- 1
|
||||
- VDU name of target VDU to update.
|
||||
* - > old_vnfc_param
|
||||
- 0..1
|
||||
- Old VNFC connection information. Required for ssh connection in CoordinateVNF operation for application configuration to VNFC.
|
||||
* - >> cp_name
|
||||
- 1
|
||||
- Connection point name of old VNFC to update.
|
||||
* - >> username
|
||||
- 1
|
||||
- User name of old VNFC to update.
|
||||
* - >> password
|
||||
- 1
|
||||
- Password of old VNFC to update.
|
||||
* - > new_vnfc_param
|
||||
- 0..1
|
||||
- New VNFC connection information. Required for ssh connection in CoordinateVNF operation for application configuration to VNFC.
|
||||
* - >> cp_name
|
||||
- 1
|
||||
- Connection point name of new VNFC to update.
|
||||
* - >> username
|
||||
- 1
|
||||
- User name of new VNFC to update.
|
||||
* - >> password
|
||||
- 1
|
||||
- Password of new VNFC to update.
|
||||
* - external_lb_param
|
||||
- 0..1
|
||||
- Load balancer information that requires configuration changes. Required only for the Blue-Green deployment process of OpenStack VIM.
|
||||
* - > ip_address
|
||||
- 1
|
||||
- IP address of load balancer server.
|
||||
* - > username
|
||||
- 1
|
||||
- User name of load balancer server.
|
||||
* - > password
|
||||
- 1
|
||||
- Password of load balancer server.
|
||||
* - lcm-operation-user-data
|
||||
- 0..1
|
||||
- File name of UserData to use.
|
||||
* - lcm-operation-user-data-class
|
||||
- 0..1
|
||||
- Class name of UserData to use.
|
||||
|
||||
.. note::
|
||||
``sample_param_file_for_multi_resources.json`` contains all optional
|
||||
parameters. It can be used to change image for both VDU created by
|
||||
``OS::Heat::AutoScalingGroup`` and single VDU.
|
||||
``sample_param_file_for_single_resource.json`` only used to change image for
|
||||
single VDU.
|
||||
|
||||
* ``vnfdId`` is the VNFD id of the new VNF package you uploaded.
|
||||
* ``lcm-operation-coordinate-old-vnf`` and
|
||||
``lcm-operation-coordinate-new-vnf`` are unique implementations of Tacker
|
||||
to simulate the coordination interface in `ETSI SOL002 v3.5.1`_. Mainly a
|
||||
script that can communicate with the VM after the VM is created, perform
|
||||
special customization of the VM or confirm the status of the VM.
|
||||
* ``vimConnectionInfo`` is an optional parameter.
|
||||
This operation can specify the ``vimConnectionInfo`` for
|
||||
the VNF instance.
|
||||
Even if this operation specify multiple ``vimConnectionInfo``
|
||||
associated with one VNF instance, only one of them will be used
|
||||
for life cycle management operations.
|
||||
It is not possible to delete the key of registered ``vimConnectionInfo``.
|
||||
* ``vnfConfigurableProperties`` and ``extensions`` are optional
|
||||
parameter.
|
||||
As with the update operation, these values are updated by performing
|
||||
JSON Merge Patch with the values set in the request parameter to the
|
||||
current values.
|
||||
For ``metadata``, the value set before this operation is maintained.
|
||||
|
||||
.. note::
|
||||
Currently, this operation only supports some functions of
|
||||
``Change Current VNF Package``.
|
||||
|
||||
* There are several ways to update VDUs, but Bobcat version Tacker only
|
||||
supports ``RollingUpdate`` type. You can set it via ``upgrade_type``
|
||||
param.
|
||||
|
||||
* Currently only support update images of VMs and modify external networks.
|
||||
|
||||
* Currently unsupported updates:
|
||||
|
||||
* This API currently does not support increasing or decreasing the number
|
||||
of VNFcs according to the VNF package.
|
||||
* The add and delete operations of the entire VDU are not supported.
|
||||
* In the definition of ETSI, external and internal networks
|
||||
(e.g. extVirtualLinks, extManagedVirtualLinks) can be modified.
|
||||
This current API supports the operations of modifying external
|
||||
networks only and does not support the following operations.
|
||||
|
||||
* Adding and deleting external networks.
|
||||
* Modifying, adding, and deleting internal networks.
|
||||
|
||||
How to Change VM created by image to VM created by new image
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Execute Change Current VNF Package CLI command. After complete this change
|
||||
operation you should check resource status by Heat CLI commands.
|
||||
|
||||
1. check 'ID' and 'Stack Status' of the stack before and after operation.
|
||||
This is to confirm that stack 'ID' has changed before and after operation,
|
||||
and that the Stack update has been updated successfully.
|
||||
|
||||
2. check 'physical_resource_id' and 'resource_status' of the VDU and VDU's
|
||||
parent resource. This is to confirm that 'physical_resource_id' has no change
|
||||
before and after operation, and that the resource_status has been updated
|
||||
successfully.
|
||||
|
||||
3. check 'image' information of VDU before and after operation. This is to
|
||||
confirm that VDU's has changed successfully.
|
||||
See `Heat CLI reference`_. for details on Heat CLI commands.
|
||||
|
||||
.. note::
|
||||
Both single VM and VM created by ``OS::Heat::AutoScalingGroup`` support
|
||||
change from image to image.
|
||||
The single VM is created directly by ``OS::Nova::Server`` defined in the
|
||||
top heat template.
|
||||
|
||||
* Check point 1 before operation
|
||||
|
||||
Stack information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| ID | Stack Name | Stack Status |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| 5330ea82-0fd6-4a29-a796-0646e7c6815f | vnf-7f8e5afa-101e-4e0b-a936-62fe01ef1b25 | CREATE_COMPLETE |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
|
||||
* Check point 2 before operation
|
||||
|
||||
Stack resource information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 5330ea82-0fd6-4a29-a796-0646e7c6815f \
|
||||
--filter type='OS::Heat::AutoScalingGroup'
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| VDU1_scale | 2ebbff6f-cd91-489b-a758-1c98e7ff5153 | OS::Heat::AutoScalingGroup | CREATE_COMPLETE | 2022-03-16T07:02:51Z |
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``)'s parent information
|
||||
before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 2ebbff6f-cd91-489b-a758-1c98e7ff5153
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
| xgaeg5oul435 | f96d0234-1486-47e4-8fd5-ec986e46c01e | base_hot_nested_VDU1.yaml | CREATE_COMPLETE | 2022-03-16T07:02:51Z |
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``) information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list f96d0234-1486-47e4-8fd5-ec986e46c01e
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||
| VDU1 | 0810da4d-3466-4852-aa92-60ad05027b5a | OS::Nova::Server | CREATE_COMPLETE | 2022-03-16T07:02:52Z |
|
||||
| VDU1_CP1 | 0bb0a091-b53f-484c-8050-77a44c2537f6 | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-16T07:02:52Z |
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||
|
||||
VDU(single) information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 5330ea82-0fd6-4a29-a796-0646e7c6815f
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+--------------------------------------------------------------------------------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time | stack_name |
|
||||
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+--------------------------------------------------------------------------------------------+
|
||||
| VDU2 | 2fefd9f9-b4d0-4313-a80f-e3db7df9a6bc | OS::Nova::Server | CREATE_COMPLETE | 2022-03-16T07:02:49Z | vnf-7f8e5afa-101e-4e0b-a936-62fe01ef1b25 |
|
||||
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+--------------------------------------------------------------------------------------------+
|
||||
|
||||
* Check point 3 before operation
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``) detailed information before
|
||||
operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show f96d0234-1486-47e4-8fd5-ec986e46c01e VDU1 \
|
||||
-c attributes --fit-width
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '0810da4d-3466-4852-aa92-60ad05027b5a', 'name': 'VDU1', 'status': 'ACTIVE', 'tenant_id': '11ee4693b37c4b7995ab2ae331e9adf3', 'user_id': '26ee3a6213f049b18e88b09ff282e817', 'metadata': {}, 'hostId': |
|
||||
| | '8e3b497672d982efde3d3f6abaab5c8c1cd770ed8b95a24daf914d5c', 'image': {'id': '3f87132d-0c98-42a6-aa7b-b7db1f25e4fa', 'links': [{'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.10.115/compute/images/3f87132d-0c98-42a6-aa7b-b7db1f25e4fa'}]}, 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, |
|
||||
| | 'created': '2022-03-16T07:02:54Z', 'updated': '2022-03-16T07:03:02Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.250', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:00:b8:21'}]}, 'accessIPv4': |
|
||||
| | '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.10.115/compute/v2.1/servers/0810da4d-3466-4852-aa92-60ad05027b5a'}, {'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.10.115/compute/servers/0810da4d-3466-4852-aa92-60ad05027b5a'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
|
||||
| | USG:launched_at': '2022-03-16T07:07:07.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute01', 'OS-EXT-SRV-ATTR:instance_name': 'instance-00000649', 'OS-EXT- |
|
||||
| | SRV-ATTR:hypervisor_hostname': 'compute01', 'OS-EXT-SRV-ATTR:reservation_id': 'r-9amm9w8i', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vdu1', 'OS-EXT-SRV-ATTR:kernel_id': '', 'OS-EXT-SRV- |
|
||||
| | ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': '...' |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
VDU(single) detailed information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show 5330ea82-0fd6-4a29-a796-0646e7c6815f VDU2 \
|
||||
-c attributes --fit-width
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '2fefd9f9-b4d0-4313-a80f-e3db7df9a6bc', 'name': 'vn-5afa-101e-4e0b-a936-62fe01ef1b25-VDU2-hvcqmgvy3btj', 'status': 'ACTIVE', 'tenant_id': '11ee4693b37c4b7995ab2ae331e9adf3', 'user_id': |
|
||||
| | '26ee3a6213f049b18e88b09ff282e817', 'metadata': {}, 'hostId': '8e3b497672d982efde3d3f6abaab5c8c1cd770ed8b95a24daf914d5c', 'image': {'id': '3f87132d-0c98-42a6-aa7b-b7db1f25e4fa', 'links': [{'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.10.115/compute/images/18fd7e66-c81f-48bb-bf18-d523996ce59c'}]}, 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, |
|
||||
| | 'created': '2022-03-16T07:02:53Z', 'updated': '2022-03-16T07:03:53Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.101', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:7e:04:de'}]}, 'accessIPv4': |
|
||||
| | '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.10.115/compute/v2.1/servers/2fefd9f9-b4d0-4313-a80f-e3db7df9a6bc'}, {'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.10.115/compute/servers/2fefd9f9-b4d0-4313-a80f-e3db7df9a6bc'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
|
||||
| | USG:launched_at': '2022-03-16T07:07:10.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute01', 'OS-EXT-SRV-ATTR:instance_name': 'instance-00000648', 'OS-EXT- |
|
||||
| | SRV-ATTR:hypervisor_hostname': 'compute01', 'OS-EXT-SRV-ATTR:reservation_id': 'r-dgt54f2r', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vn-5afa-101e-4e0b-a936-62fe01ef1b25-vdu2-hvcqmgvy3btj', 'OS-EXT-SRV- |
|
||||
| | ATTR:kernel_id': '', 'OS-EXT-SRV-ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': '...' |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
* Execute Change Current VNF Package
|
||||
|
||||
Change Current VNF Package execution of the entire VNF:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \
|
||||
./sample_param_file_for_multi_resources.json \
|
||||
--os-tacker-api-version 2
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Change Current VNF Package for VNF Instance 7f8e5afa-101e-4e0b-a936-62fe01ef1b25 has been accepted.
|
||||
|
||||
* Check point 1 after operation
|
||||
|
||||
Stack information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| ID | Stack Name | Stack Status |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| 5330ea82-0fd6-4a29-a796-0646e7c6815f | vnf-7f8e5afa-101e-4e0b-a936-62fe01ef1b25 | UPDATE_COMPLETE |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
.. note::
|
||||
'Stack Status' transitions to UPDATE_COMPLETE.
|
||||
|
||||
* Check point 2 after operation
|
||||
|
||||
Stack resource information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 5330ea82-0fd6-4a29-a796-0646e7c6815f \
|
||||
--filter type='OS::Heat::AutoScalingGroup'
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| VDU1_scale | 2ebbff6f-cd91-489b-a758-1c98e7ff5153 | OS::Heat::AutoScalingGroup | UPDATE_COMPLETE | 2022-03-16T07:14:19Z |
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``)'s parent information
|
||||
after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 2ebbff6f-cd91-489b-a758-1c98e7ff5153
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
| xgaeg5oul435 | f96d0234-1486-47e4-8fd5-ec986e46c01e | base_hot_nested_VDU1.yaml | UPDATE_COMPLETE | 2022-03-16T07:14:19Z |
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
.. note::
|
||||
'resource_status' transitions to UPDATE_COMPLETE.
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``) information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list f96d0234-1486-47e4-8fd5-ec986e46c01e
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||
| VDU1 | 0810da4d-3466-4852-aa92-60ad05027b5a | OS::Nova::Server | UPDATE_COMPLETE | 2022-03-16T07:13:32Z |
|
||||
| VDU1_CP1 | 0bb0a091-b53f-484c-8050-77a44c2537f6 | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-16T07:02:52Z |
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||
|
||||
.. note::
|
||||
'resource_status' transitions to UPDATE_COMPLETE.
|
||||
|
||||
VDU(single) information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 5330ea82-0fd6-4a29-a796-0646e7c6815f
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+--------------------------------------------------------------------------------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time | stack_name |
|
||||
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+--------------------------------------------------------------------------------------------+
|
||||
| VDU2 | 2fefd9f9-b4d0-4313-a80f-e3db7df9a6bc | OS::Nova::Server | UPDATE_COMPLETE | 2022-03-16T07:13:58Z | vnf-7f8e5afa-101e-4e0b-a936-62fe01ef1b25 |
|
||||
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+--------------------------------------------------------------------------------------------+
|
||||
|
||||
* Check point 3 after operation
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``) detailed information after
|
||||
operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show f96d0234-1486-47e4-8fd5-ec986e46c01e VDU1 \
|
||||
-c attributes --fit-width
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '0810da4d-3466-4852-aa92-60ad05027b5a', 'name': 'VDU1', 'status': 'ACTIVE', 'tenant_id': '11ee4693b37c4b7995ab2ae331e9adf3', 'user_id': '26ee3a6213f049b18e88b09ff282e817', 'metadata': {}, 'hostId': |
|
||||
| | '8e3b497672d982efde3d3f6abaab5c8c1cd770ed8b95a24daf914d5c', 'image': {'id': '68da152a-13af-43f6-aaaa-a7b88123d654', 'links': [{'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.10.115/compute/images/68da152a-13af-43f6-aaaa-a7b88123d654'}]}, 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, |
|
||||
| | 'created': '2022-03-16T07:02:54Z', 'updated': '2022-03-16T07:13:41Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.250', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:00:b8:21'}]}, 'accessIPv4': |
|
||||
| | '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.10.115/compute/v2.1/servers/0810da4d-3466-4852-aa92-60ad05027b5a'}, {'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.10.115/compute/servers/0810da4d-3466-4852-aa92-60ad05027b5a'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
|
||||
| | USG:launched_at': '2022-03-16T07:17:46.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute01', 'OS-EXT-SRV-ATTR:instance_name': 'instance-00000649', 'OS-EXT- |
|
||||
| | SRV-ATTR:hypervisor_hostname': 'compute01', 'OS-EXT-SRV-ATTR:reservation_id': 'r-9amm9w8i', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vdu1', 'OS-EXT-SRV-ATTR:kernel_id': '', 'OS-EXT-SRV- |
|
||||
| | ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': '...' |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
.. note::
|
||||
You can check 'image'->'id' has changed from
|
||||
'3f87132d-0c98-42a6-aa7b-b7db1f25e4fa' to
|
||||
'68da152a-13af-43f6-aaaa-a7b88123d654'.
|
||||
|
||||
VDU(single) detailed information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show 5330ea82-0fd6-4a29-a796-0646e7c6815f VDU2 \
|
||||
-c attributes --fit-width
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '2fefd9f9-b4d0-4313-a80f-e3db7df9a6bc', 'name': 'vn-5afa-101e-4e0b-a936-62fe01ef1b25-VDU2-hvcqmgvy3btj', 'status': 'ACTIVE', 'tenant_id': '11ee4693b37c4b7995ab2ae331e9adf3', 'user_id': |
|
||||
| | '26ee3a6213f049b18e88b09ff282e817', 'metadata': {}, 'hostId': '8e3b497672d982efde3d3f6abaab5c8c1cd770ed8b95a24daf914d5c', 'image': {'id': '18fd7e66-c81f-48bb-bf18-d523996ce59c', 'links': [{'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.10.115/compute/images/18fd7e66-c81f-48bb-bf18-d523996ce59c'}]}, 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, |
|
||||
| | 'created': '2022-03-16T07:02:53Z', 'updated': '2022-03-16T07:14:05Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.101', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:7e:04:de'}]}, 'accessIPv4': |
|
||||
| | '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.10.115/compute/v2.1/servers/2fefd9f9-b4d0-4313-a80f-e3db7df9a6bc'}, {'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.10.115/compute/servers/2fefd9f9-b4d0-4313-a80f-e3db7df9a6bc'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
|
||||
| | USG:launched_at': '2022-03-16T07:18:10.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute01', 'OS-EXT-SRV-ATTR:instance_name': 'instance-00000648', 'OS-EXT- |
|
||||
| | SRV-ATTR:hypervisor_hostname': 'compute01', 'OS-EXT-SRV-ATTR:reservation_id': 'r-dgt54f2r', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vn-5afa-101e-4e0b-a936-62fe01ef1b25-vdu2-hvcqmgvy3btj', 'OS-EXT-SRV- |
|
||||
| | ATTR:kernel_id': '', 'OS-EXT-SRV-ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': '...' |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
.. note::
|
||||
You can check 'image'->'id' has changed from
|
||||
'3f87132d-0c98-42a6-aa7b-b7db1f25e4fa' to
|
||||
'18fd7e66-c81f-48bb-bf18-d523996ce59c'.
|
||||
|
||||
How to Change VM created by volume to VM created by volume
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Execute Change Current VNF Package CLI command. After complete this change
|
||||
operation you should check resource status by Heat CLI commands.
|
||||
|
||||
1. check 'ID' and 'Stack Status' of the stack before and after operation.
|
||||
This is to confirm that stack 'ID' has changed before and after operation,
|
||||
and that the Stack update has been updated successfully.
|
||||
|
||||
2. check 'physical_resource_id' and 'resource_status' of the VDU and VDU's
|
||||
parent resource. This is to confirm that 'physical_resource_id' of VDU has
|
||||
changed before and after operation, 'physical_resource_id' of VDU's parent
|
||||
resource has no change before and after operation, and that the
|
||||
'resource_status' of VDU has been created successfully, 'resource_status' of
|
||||
VDU's parent resource has been updated successfully,
|
||||
|
||||
3. check 'volume' information of VDU before and after operation. This is to
|
||||
confirm that VDU's has changed successfully.
|
||||
|
||||
.. note::
|
||||
Both single VM and VM created by ``OS::Heat::AutoScalingGroup`` support
|
||||
change from image to image.
|
||||
|
||||
* Check point 1 before operation
|
||||
|
||||
Stack information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| ID | Stack Name | Stack Status |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| 9112aa96-c15c-4e79-a86e-dd0d4d0ca971 | vnf-cab27275-4b9d-43ba-be17-fab9b1ba6a43 | CREATE_COMPLETE |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
|
||||
* Check point 2 before operation
|
||||
|
||||
Stack resource information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 9112aa96-c15c-4e79-a86e-dd0d4d0ca971 \
|
||||
--filter type='OS::Heat::AutoScalingGroup'
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| VDU1_scale | 0aaba3e7-b2e1-49ee-98fa-ff7c4380663b | OS::Heat::AutoScalingGroup | CREATE_COMPLETE | 2022-03-18T05:19:06Z |
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``)'s parent information
|
||||
before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 0aaba3e7-b2e1-49ee-98fa-ff7c4380663b
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
| qkrp3rzmsnrp | cdf81724-b4a7-4b9f-9dd3-35fddece9c89 | base_hot_nested_VDU1.yaml | CREATE_COMPLETE | 2022-03-18T05:19:06Z |
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``) information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list cdf81724-b4a7-4b9f-9dd3-35fddece9c89
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||
| VDU1 | 3f3fa0d8-b948-45fe-bd86-41d5d3e28974 | OS::Nova::Server | CREATE_COMPLETE | 2022-03-18T05:19:07Z |
|
||||
| VDU1-VirtualStorage | bbc1786c-cde0-491d-9f39-fcc6ca610146 | OS::Cinder::Volume | CREATE_COMPLETE | 2022-03-18T05:19:07Z |
|
||||
| multi | 317c1afb-92c5-408f-9709-7a9dbb3b300d | OS::Cinder::VolumeType | CREATE_COMPLETE | 2022-03-18T05:19:07Z |
|
||||
| VDU1_CP1 | ebce7083-f345-424b-aa0f-605e7f4a010c | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-18T05:19:07Z |
|
||||
+---------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||
|
||||
VDU(single) information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 9112aa96-c15c-4e79-a86e-dd0d4d0ca971
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| VDU1_scale_in | 98ee6547b76e4389a6089cd79becd826 | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T05:19:01Z |
|
||||
| VDU1_scale_out | f9f70e79b7eb4ddd945e5de66764398b | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
| VDU1_scale | 0aaba3e7-b2e1-49ee-98fa-ff7c4380663b | OS::Heat::AutoScalingGroup | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
| VDU2 | 23122c2d-d51d-422a-8ad6-6c3625c761b6 | OS::Nova::Server | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
| VDU2-VirtualStorage | 68a53b24-83eb-4e88-a605-1e9d922e3ec0 | OS::Cinder::Volume | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
| multi | 04a32f7b-b9b6-484c-a279-37452f807f6d | OS::Cinder::VolumeType | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
| VDU2_CP1 | 2637ef79-881e-4c21-9360-86bb232a634d | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
|
||||
* Check point 3 before operation
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``) detailed information before
|
||||
operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show cdf81724-b4a7-4b9f-9dd3-35fddece9c89 VDU1 \
|
||||
-c attributes --fit-width
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '3f3fa0d8-b948-45fe-bd86-41d5d3e28974', 'name': 'VDU1', 'status': 'ACTIVE', 'tenant_id': 'b7457dcef9374c2fa72e22c452bb04e9', 'user_id': 'ed6a354ef25041ac92c0e445e91cc9a9', 'metadata': {}, 'hostId': |
|
||||
| | '9ffb36d3d791f739fa98677bb1f6baddb01221443abf50c2aabad442', 'image': '', 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, |
|
||||
| | 'created': '2022-03-18T05:19:22Z', 'updated': '2022-03-18T05:19:35Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.25', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:c4:68:6f'}]}, 'accessIPv4': |
|
||||
| | '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.2.100/compute/v2.1/servers/3f3fa0d8-b948-45fe-bd86-41d5d3e28974'}, {'rel': 'bookmark', 'href': 'http://192.168.2.100/compute/servers/3f3fa0d8-b948-45fe- |
|
||||
| | bd86-41d5d3e28974'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'osaka', 'config_drive': '', 'key_name': None, 'OS-SRV-USG:launched_at': '2022-03-18T05:19:23.000000', 'OS-SRV- |
|
||||
| | USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute102', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000007c2', 'OS-EXT-SRV-ATTR:hypervisor_hostname': 'compute102', 'OS-EXT- |
|
||||
| | SRV-ATTR:reservation_id': 'r-r0zmi6q4', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vdu1', 'OS-EXT-SRV-ATTR:kernel_id': '', 'OS-EXT-SRV-ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': |
|
||||
| | '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': 'Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT04MzE3NTc1OTA5Njg2OTM3MzgxPT0iCk1JTUUtVmVyc2lvbjogMS4wCgotLT09PT09PT09PT09PT09PTgzMTc1NzU5MDk2ODY5MzczODE9PQ |
|
||||
| | ', 'os-extended-volumes:volumes_attached': [{'id': 'bbc1786c-cde0-491d-9f39-fcc6ca610146', 'delete_on_termination': False}], 'host_status': 'UP', 'locked': False, 'locked_reason': None, 'description': None, 'tags': [], |
|
||||
| | 'trusted_image_certificates': None, 'server_groups': [], 'os_collect_config': {}} |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
VDU(single) detailed information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show 9112aa96-c15c-4e79-a86e-dd0d4d0ca971 VDU2 \
|
||||
-c attributes --fit-width
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '23122c2d-d51d-422a-8ad6-6c3625c761b6', 'name': 'vn-7275-4b9d-43ba-be17-fab9b1ba6a43-VDU2-ngkljvkbmvhp', 'status': 'ACTIVE', 'tenant_id': 'b7457dcef9374c2fa72e22c452bb04e9', 'user_id': |
|
||||
| | 'ed6a354ef25041ac92c0e445e91cc9a9', 'metadata': {}, 'hostId': 'd2de6a234a80a445a7ee385f445e6084358f3aef2e110d7bc888ccf2', 'image': '', 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': |
|
||||
| | 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, 'created': '2022-03-18T05:19:16Z', 'updated': '2022-03-18T05:19:30Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.101', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT- |
|
||||
| | IPS-MAC:mac_addr': 'fa:16:3e:30:1a:92'}]}, 'accessIPv4': '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.2.100/compute/v2.1/servers/23122c2d-d51d-422a-8ad6-6c3625c761b6'}, {'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.2.100/compute/servers/23122c2d-d51d-422a-8ad6-6c3625c761b6'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
|
||||
| | USG:launched_at': '2022-03-18T05:19:44.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute101', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000007c1', 'OS-EXT- |
|
||||
| | SRV-ATTR:hypervisor_hostname': 'compute101', 'OS-EXT-SRV-ATTR:reservation_id': 'r-98ncwx8e', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vn-7275-4b9d-43ba-be17-fab9b1ba6a43-vdu2-ngkljvkbmvhp', 'OS-EXT- |
|
||||
| | SRV-ATTR:kernel_id': '', 'OS-EXT-SRV-ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': 'Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0xNjQ2NzE4OTM |
|
||||
| | ', 'OS-EXT-STS:task_state': None, 'OS-EXT-STS:vm_state': 'active', 'OS-EXT-STS:power_state': 1, 'os-extended-volumes:volumes_attached': [{'id': '68a53b24-83eb-4e88-a605-1e9d922e3ec0', 'delete_on_termination': False}], |
|
||||
| | 'host_status': 'UP', 'locked': False, 'locked_reason': None, 'description': None, 'tags': [], 'trusted_image_certificates': None, 'server_groups': [], 'os_collect_config': {}} |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
* Execute Change Current VNF Package
|
||||
|
||||
Change Current VNF Package execution of the entire VNF:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \
|
||||
./sample_param_file_for_multi_resources.json \
|
||||
--os-tacker-api-version 2
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Change Current VNF Package for VNF Instance cab27275-4b9d-43ba-be17-fab9b1ba6a43 has been accepted.
|
||||
|
||||
* Check point 1 after operation
|
||||
|
||||
Stack information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| ID | Stack Name | Stack Status |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| 9112aa96-c15c-4e79-a86e-dd0d4d0ca971 | vnf-cab27275-4b9d-43ba-be17-fab9b1ba6a43 | UPDATE_COMPLETE |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
|
||||
.. note::
|
||||
'Stack Status' transitions to UPDATE_COMPLETE.
|
||||
|
||||
* Check point 2 after operation
|
||||
|
||||
Stack resource information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 9112aa96-c15c-4e79-a86e-dd0d4d0ca971 \
|
||||
--filter type='OS::Heat::AutoScalingGroup'
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| VDU1_scale | 0aaba3e7-b2e1-49ee-98fa-ff7c4380663b | OS::Heat::AutoScalingGroup | UPDATE_COMPLETE | 2022-03-18T05:32:02Z |
|
||||
+---------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``)'s parent information
|
||||
after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 0aaba3e7-b2e1-49ee-98fa-ff7c4380663b
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
| qkrp3rzmsnrp | cdf81724-b4a7-4b9f-9dd3-35fddece9c89 | base_hot_nested_VDU1.yaml | UPDATE_COMPLETE | 2022-03-18T05:32:02Z |
|
||||
+---------------+--------------------------------------+---------------------------+-----------------+----------------------+
|
||||
|
||||
.. note::
|
||||
'resource_status' transitions to UPDATE_COMPLETE.
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``) information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list cdf81724-b4a7-4b9f-9dd3-35fddece9c89
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||
| multi | 317c1afb-92c5-408f-9709-7a9dbb3b300d | OS::Cinder::VolumeType | CREATE_COMPLETE | 2022-03-18T05:19:07Z |
|
||||
| VDU1_CP1 | ebce7083-f345-424b-aa0f-605e7f4a010c | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-18T05:19:07Z |
|
||||
| VDU1-VirtualStorage | 21f9aa89-4456-42a6-8888-f08c8f70933f | OS::Cinder::Volume | CREATE_COMPLETE | 2022-03-18T05:29:58Z |
|
||||
| VDU1 | 7d19f797-eb11-4af5-ba3b-d35349136786 | OS::Nova::Server | CREATE_COMPLETE | 2022-03-18T05:30:21Z |
|
||||
+---------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||
|
||||
.. note::
|
||||
'resource_status' transitions to CREATE_COMPLETE.
|
||||
'physical_resource_id' changes from
|
||||
'3f3fa0d8-b948-45fe-bd86-41d5d3e28974' to
|
||||
'7d19f797-eb11-4af5-ba3b-d35349136786'.
|
||||
|
||||
VDU(single) information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list 9112aa96-c15c-4e79-a86e-dd0d4d0ca971
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
| VDU1_scale_in | 98ee6547b76e4389a6089cd79becd826 | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T05:19:01Z |
|
||||
| VDU1_scale_out | f9f70e79b7eb4ddd945e5de66764398b | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
| VDU1_scale | 0aaba3e7-b2e1-49ee-98fa-ff7c4380663b | OS::Heat::AutoScalingGroup | UPDATE_COMPLETE | 2022-03-18T05:31:55Z |
|
||||
| multi | 04a32f7b-b9b6-484c-a279-37452f807f6d | OS::Cinder::VolumeType | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
| VDU2_CP1 | 2637ef79-881e-4c21-9360-86bb232a634d | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-18T05:19:02Z |
|
||||
| VDU2-VirtualStorage | fc0e0fcf-8eb9-4ddc-8194-2df6c1b43a7b | OS::Cinder::Volume | CREATE_COMPLETE | 2022-03-18T05:31:01Z |
|
||||
| VDU2 | 9aeae773-0f5b-4809-a83b-dee09214db90 | OS::Nova::Server | CREATE_COMPLETE | 2022-03-18T05:31:15Z |
|
||||
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
|
||||
|
||||
.. note::
|
||||
'resource_status' transitions to CREATE_COMPLETE.
|
||||
'physical_resource_id' changes from
|
||||
'23122c2d-d51d-422a-8ad6-6c3625c761b6' to
|
||||
'9aeae773-0f5b-4809-a83b-dee09214db90'.
|
||||
|
||||
* Check point 3 after operation
|
||||
|
||||
VDU(created by ``OS::Heat::AutoScalingGroup``) detailed information after
|
||||
operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show cdf81724-b4a7-4b9f-9dd3-35fddece9c89 VDU1 \
|
||||
-c attributes --fit-width
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '7d19f797-eb11-4af5-ba3b-d35349136786', 'name': 'VDU1', 'status': 'ACTIVE', 'tenant_id': 'b7457dcef9374c2fa72e22c452bb04e9', 'user_id': 'ed6a354ef25041ac92c0e445e91cc9a9', 'metadata': {}, 'hostId': |
|
||||
| | 'd2de6a234a80a445a7ee385f445e6084358f3aef2e110d7bc888ccf2', 'image': '', 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, |
|
||||
| | 'created': '2022-03-18T05:30:22Z', 'updated': '2022-03-18T05:30:36Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.25', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:c4:68:6f'}]}, 'accessIPv4': |
|
||||
| | '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.2.100/compute/v2.1/servers/7d19f797-eb11-4af5-ba3b-d35349136786'}, {'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.2.100/compute/servers/7d19f797-eb11-4af5-ba3b-d35349136786'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
|
||||
| | USG:launched_at': '2022-03-18T05:30:50.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute101', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000007c3', 'OS-EXT- |
|
||||
| | SRV-ATTR:hypervisor_hostname': 'compute101', 'OS-EXT-SRV-ATTR:reservation_id': 'r-nlqgnld4', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vdu1', 'OS-EXT-SRV-ATTR:kernel_id': '', 'OS-EXT-SRV- |
|
||||
| | ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': 'Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT04MjE3MDExNTU4', 'OS-EXT-STS:task_state': None, |
|
||||
| | 'OS-EXT-STS:vm_state': 'active', 'OS-EXT-STS:power_state': 1, 'os-extended-volumes:volumes_attached': [{'id': '21f9aa89-4456-42a6-8888-f08c8f70933f', 'delete_on_termination': False}], 'host_status': 'UP', 'locked': False, |
|
||||
| | 'locked_reason': None, 'description': None, 'tags': [], 'trusted_image_certificates': None, 'server_groups': [], 'os_collect_config': {}} |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
.. note::
|
||||
You can check 'os-extended-volumes:volumes_attached'->'id'
|
||||
has changed from '68a53b24-83eb-4e88-a605-1e9d922e3ec0' to
|
||||
'21f9aa89-4456-42a6-8888-f08c8f70933f'.
|
||||
|
||||
VDU(single) detailed information after operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show 9112aa96-c15c-4e79-a86e-dd0d4d0ca971 VDU2 \
|
||||
-c attributes --fit-width
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '9aeae773-0f5b-4809-a83b-dee09214db90', 'name': 'vn-7275-4b9d-43ba-be17-fab9b1ba6a43-VDU2-k4inik5wcz3y', 'status': 'ACTIVE', 'tenant_id': 'b7457dcef9374c2fa72e22c452bb04e9', 'user_id': |
|
||||
| | 'ed6a354ef25041ac92c0e445e91cc9a9', 'metadata': {}, 'hostId': 'd2de6a234a80a445a7ee385f445e6084358f3aef2e110d7bc888ccf2', 'image': '', 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': |
|
||||
| | 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, 'created': '2022-03-18T05:31:16Z', 'updated': '2022-03-18T05:31:29Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.101', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT- |
|
||||
| | IPS-MAC:mac_addr': 'fa:16:3e:30:1a:92'}]}, 'accessIPv4': '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.2.100/compute/v2.1/servers/9aeae773-0f5b-4809-a83b-dee09214db90'}, {'rel': 'bookmark', 'href': |
|
||||
| | 'http://192.168.2.100/compute/servers/9aeae773-0f5b-4809-a83b-dee09214db90'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
|
||||
| | USG:launched_at': '2022-03-18T05:31:43.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute101', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000007c4', 'OS-EXT- |
|
||||
| | SRV-ATTR:hypervisor_hostname': 'compute101', 'OS-EXT-SRV-ATTR:reservation_id': 'r-gonky2fj', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vn-7275-4b9d-43ba-be17-fab9b1ba6a43-vdu2-k4inik5wcz3y', 'OS-EXT- |
|
||||
| | S', 'OS-EXT-STS:task_state': None, 'OS-EXT-STS:vm_state': 'active', 'OS-EXT-STS:power_state': 1, 'os-extended-volumes:volumes_attached': [{'id': 'fc0e0fcf-8eb9-4ddc-8194-2df6c1b43a7b', 'delete_on_termination': False}], |
|
||||
| | 'host_status': 'UP', 'locked': False, 'locked_reason': None, 'description': None, 'tags': [], 'trusted_image_certificates': None, 'server_groups': [], 'os_collect_config': {}} |
|
||||
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
.. note::
|
||||
You can check 'os-extended-volumes:volumes_attached'->'id' has
|
||||
changed from '68a53b24-83eb-4e88-a605-1e9d922e3ec0' to
|
||||
'fc0e0fcf-8eb9-4ddc-8194-2df6c1b43a7b'.
|
||||
|
||||
.. _Heat CLI reference : https://docs.openstack.org/python-openstackclient/latest/cli/plugin-commands/heat.html
|
||||
.. _VNF Package for Common instantiate: https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_v2_common/test_instantiate_vnf_with_old_image_or_volume/contents
|
||||
.. _change from image to image: https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_v2_common/test_change_vnf_pkg_with_new_image/contents
|
||||
.. _change from image to volume: https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_v2_common/test_change_vnf_pkg_with_new_volume/contents
|
||||
.. _change from volume to image: https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_v2_common/test_change_vnf_pkg_with_new_image/contents
|
||||
.. _change from volume to volume: https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_v2_common/test_change_vnf_pkg_with_new_volume/contents
|
||||
.. _ETSI SOL002 v3.5.1: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.05.01_60/gs_nfv-sol002v030501p.pdf
|
||||
@@ -2,7 +2,14 @@
|
||||
ETSI NFV-SOL Change External VNF Connectivity
|
||||
=============================================
|
||||
|
||||
This document describes how to change external VNF connectivity in Tacker.
|
||||
This document describes how to change external VNF connectivity
|
||||
in Tacker v1 API.
|
||||
|
||||
.. note::
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
See :doc:`/user/v2/vnf/chg_ext_conn` for Tacker v2 API.
|
||||
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
@@ -13,13 +20,16 @@ The following packages should be installed:
|
||||
* python-tackerclient
|
||||
|
||||
A default VIM should be registered according to
|
||||
:doc:`../cli/cli-legacy-vim`.
|
||||
:doc:`/cli/cli-legacy-vim`.
|
||||
|
||||
The VNF Package(sample_vnf_pkg.zip) used below is prepared
|
||||
by referring to :doc:`./vnf-package`.
|
||||
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||
by referring to :doc:`/user/vnf-package`.
|
||||
|
||||
Execute before "Terminate VNF" in the procedure of
|
||||
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
The procedure of prepare for scaling operation that from "register VIM" to
|
||||
"Instantiate VNF", basically refer to
|
||||
:doc:`/user/etsi_vnf_deployment_as_vm_with_user_data`.
|
||||
|
||||
This procedure uses an example using the sample VNF package.
|
||||
|
||||
|
||||
Change External VNF Connectivity
|
||||
@@ -32,7 +42,7 @@ Assuming that the following VNF instance exists,
|
||||
this instance will be changed.
|
||||
|
||||
Details of CLI commands are described in
|
||||
:doc:`../cli/cli-etsi-vnflcm`.
|
||||
:doc:`/cli/cli-etsi-vnflcm`.
|
||||
|
||||
For changing external VNF connectivity, you need to prepare a JSON-formatted
|
||||
definition file before running command for changing the connectivity.
|
||||
@@ -41,60 +51,66 @@ definition file before running command for changing the connectivity.
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"extVirtualLinks": [
|
||||
{
|
||||
"id": "ce38f1e7-4aec-4325-bb78-9c4411f113b5",
|
||||
"resourceId": "1a4054c8-dd6b-444b-9604-7a8fc8c1cc0c",
|
||||
"extCps": [
|
||||
"extVirtualLinks": [
|
||||
{
|
||||
"cpdId": "VDU2_CP2",
|
||||
"cpConfig": [
|
||||
{
|
||||
"cpProtocolData": [
|
||||
"id": "a96d2f5b-c01a-48e1-813c-76132965042c",
|
||||
"resourceId": "3019b1e7-99d8-4748-97ac-104922bc78d9",
|
||||
"vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56",
|
||||
"extCps": [
|
||||
{
|
||||
"layerProtocol": "IP_OVER_ETHERNET",
|
||||
"ipOverEthernet":
|
||||
{
|
||||
"ipAddresses": [
|
||||
"cpdId": "VDU1_CP2",
|
||||
"cpConfig": [
|
||||
{
|
||||
"type": "IPV4",
|
||||
"fixedAddresses": ["22.22.2.200"],
|
||||
"subnetId": "25f4a13f-0c20-4fff-85aa-5349fc4efee8"
|
||||
"cpProtocolData": [
|
||||
{
|
||||
"layerProtocol": "IP_OVER_ETHERNET",
|
||||
"ipOverEthernet": {
|
||||
"ipAddresses": [
|
||||
{
|
||||
"type": "IPV4",
|
||||
"subnetId": "43c8f5fa-fefd-4bd4-a0df-f985b6969339"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"vimConnectionInfo": [
|
||||
{
|
||||
"id": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56",
|
||||
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.v_2",
|
||||
"vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56",
|
||||
"interfaceInfo": {
|
||||
"endpoint": "http://127.0.0.1/identity"
|
||||
},
|
||||
"accessInfo": {
|
||||
"username": "nfv_user",
|
||||
"region": "RegionOne",
|
||||
"password": "devstack",
|
||||
"tenant": "1994d69783d64c00aadab564038c2fd7"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"additionalParams": {
|
||||
"lcm-operation-user-data": "./UserData/lcm_user_data.py",
|
||||
"lcm-operation-user-data-class": "SampleUserData"
|
||||
}
|
||||
],
|
||||
"vimConnectionInfo": [
|
||||
{
|
||||
"id": "4405b1a4-d967-4f72-9bd5-12f2852bd56b",
|
||||
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.v_2",
|
||||
"vimConnectionId": "4405b1a4-d967-4f72-9bd5-12f2852bd56b",
|
||||
"interfaceInfo":
|
||||
{
|
||||
"endpoint": "http://127.0.0.1/identity"
|
||||
},
|
||||
"accessInfo":
|
||||
{
|
||||
"username": "nfv_user",
|
||||
"region": "RegionOne",
|
||||
"password": "devstack",
|
||||
"tenant": "6bdc3a89b3ee4cef9ff1676a22ae7f3b"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
.. note:: sample_param_file.json contains all the data of port resource information.
|
||||
if no setting is contained, it is treated as a change in information.
|
||||
|
||||
.. note::
|
||||
|
||||
sample_param_file.json contains all the data of port resource information.
|
||||
If no setting is contained, it is treated as a change in information.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
The change external VNF Connectivity operation can change the
|
||||
``vimConnectionInfo`` associated with an existing VNF instance.
|
||||
Even if change external VNF Connectivity operation specify multiple
|
||||
@@ -102,6 +118,7 @@ definition file before running command for changing the connectivity.
|
||||
them will be used for life cycle management operations.
|
||||
It is not possible to delete the key of registered ``vimConnectionInfo``.
|
||||
|
||||
|
||||
How to Change the Specific Port Setting
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -129,21 +146,54 @@ Result:
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
|
||||
|
||||
Port information before operation:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack port list --name PORT_NAME
|
||||
+--------------------------------------+-------------------------------------------------------------------------------------------+-------------------+---------------------------------------------------------------------------+--------+
|
||||
| ID | Name | MAC Address | Fixed IP Addresses | Status |
|
||||
+--------------------------------------+-------------------------------------------------------------------------------------------+-------------------+---------------------------------------------------------------------------+--------+
|
||||
| 0988d9dc-97ba-43be-944d-185e316785f9 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep- | fa:16:3e:fb:f9:87 | ip_address='22.22.1.16', subnet_id='d290cae3-0dbc-44a3-a043-1a50ded04a64' | ACTIVE |
|
||||
| | gfrxqjt6nfqb-2ufs4pbsedui-VDU1_CP2-riva4ygcbnyz | | | |
|
||||
+--------------------------------------+-------------------------------------------------------------------------------------------+-------------------+---------------------------------------------------------------------------+--------+
|
||||
|
||||
$ openstack stack resource list e9d4576f-950c-4076-a54d-35b5cf43ebdd -n 2 --filter name=VDU1_CP2
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time | stack_name |
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
| VDU1_CP2 | 0988d9dc-97ba-43be-944d-185e316785f9 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui |
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
$ openstack stack resource show \
|
||||
vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui \
|
||||
VDU1_CP2 -f json | jq .attributes.fixed_ips
|
||||
[
|
||||
{
|
||||
"subnet_id": "d290cae3-0dbc-44a3-a043-1a50ded04a64",
|
||||
"ip_address": "22.22.1.16"
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
See `Heat CLI reference`_ for details on Heat CLI commands.
|
||||
|
||||
Change External VNF Connectivity execution of the entire VNF:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm change-ext-conn VNF_INSTANCE_ID \
|
||||
./sample_param_file.json
|
||||
./sample_param_file.json
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Change External VNF Connectivity for VNF Instance 725f625e-f6b7-4bcd-b1b7-7184039fde45 has been accepted.
|
||||
Change External VNF Connectivity for VNF Instance 0c3644ff-b207-4a6a-9d3a-d1295cda153a has been accepted.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
Create a parameter file that describes the resource information to be changed in advance.
|
||||
|
||||
|
||||
@@ -158,84 +208,72 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| ID | Stack Name | Stack Status |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
| ad077101-b093-4785-9ca5-cc7c1379bb10 | vnf-9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 | UPDATE_COMPLETE |
|
||||
+--------------------------------------+------------------------------------------+-----------------+
|
||||
+--------------------------------------+---------------------------------------------+-----------------+
|
||||
| ID | Stack Name | Stack Status |
|
||||
+--------------------------------------+---------------------------------------------+-----------------+
|
||||
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a | UPDATE_COMPLETE |
|
||||
+--------------------------------------+---------------------------------------------+-----------------+
|
||||
|
||||
|
||||
.. note::
|
||||
'Stack Status' transitions to UPDATE_COMPLETE.
|
||||
|
||||
'Stack Status' transitions to UPDATE_COMPLETE.
|
||||
|
||||
|
||||
Stack resource information:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource list ad077101-b093-4785-9ca5-cc7c1379bb10 -n 2
|
||||
$ openstack stack resource list e9d4576f-950c-4076-a54d-35b5cf43ebdd \
|
||||
-n 2 --filter name=VDU1
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+----------------------+--------------------------------------+----------------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time | stack_name |
|
||||
+----------------------+--------------------------------------+----------------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------------+
|
||||
| 6mvcg7rftabt | 29f94441-bc14-4342-92f3-01eed02babb1 | VDU1.yaml | UPDATE_COMPLETE | 2021-03-25T06:02:42Z | vnflcm_8f054b70-93e9-46d5-a3bb-6404b99f91fb-VDU1_scale_group-gjwwa6637ur2 |
|
||||
| ijarluromf6z | 42b84c3e-c017-4386-9dfa-f366bef5f42b | VDU2.yaml | UPDATE_COMPLETE | 2021-03-25T06:03:23Z | vnflcm_8f054b70-93e9-46d5-a3bb-6404b99f91fb-VDU2_scale_group-kjap6b2asrne |
|
||||
| xmexppdgpb3d | 2a534d04-2f6a-4dd8-ba05-d79e0ced46e8 | VDU2.yaml | UPDATE_COMPLETE | 2021-03-25T06:03:24Z | vnflcm_8f054b70-93e9-46d5-a3bb-6404b99f91fb-VDU2_scale_group-kjap6b2asrne |
|
||||
+----------------------+--------------------------------------+----------------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------------+
|
||||
+---------------+--------------------------------------+------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time | stack_name |
|
||||
+---------------+--------------------------------------+------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
| VDU1 | f32848eb-598f-4158-8896-5ea9479456de | OS::Nova::Server | UPDATE_COMPLETE | 2023-12-28T07:12:36Z | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui |
|
||||
+---------------+--------------------------------------+------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Stack resource detailed information:
|
||||
Port resource information:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack stack resource show 42b84c3e-c017-4386-9dfa-f366bef5f42b VDU2_CP2 --fit-width
|
||||
$ openstack port list --name PORT_NAME
|
||||
+--------------------------------------+-------------------------------------------------------------------------------------------+-------------------+----------------------------------------------------------------------------+--------+
|
||||
| ID | Name | MAC Address | Fixed IP Addresses | Status |
|
||||
+--------------------------------------+-------------------------------------------------------------------------------------------+-------------------+----------------------------------------------------------------------------+--------+
|
||||
| 8fcc7ddf-45cb-4ff6-a17f-4b18b9ab6a63 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep- | fa:16:3e:75:50:e8 | ip_address='10.10.0.136', subnet_id='43c8f5fa-fefd-4bd4-a0df-f985b6969339' | ACTIVE |
|
||||
| | gfrxqjt6nfqb-2ufs4pbsedui-VDU1_CP2-gy4cxuefplkg | | | |
|
||||
+--------------------------------------+-------------------------------------------------------------------------------------------+-------------------+----------------------------------------------------------------------------+--------+
|
||||
|
||||
$ openstack stack resource list e9d4576f-950c-4076-a54d-35b5cf43ebdd -n 2 --filter name=VDU1_CP2
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time | stack_name |
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
| VDU1_CP2 | 8fcc7ddf-45cb-4ff6-a17f-4b18b9ab6a63 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T07:12:35Z | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui |
|
||||
+---------------+--------------------------------------+-------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||
$ openstack stack resource show \
|
||||
vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui \
|
||||
VDU1_CP2 -f json | jq .attributes.fixed_ips
|
||||
[
|
||||
{
|
||||
"subnet_id": "43c8f5fa-fefd-4bd4-a0df-f985b6969339",
|
||||
"ip_address": "10.10.0.136"
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
Result:
|
||||
.. note::
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| attributes | {'id': '958d4fd4-f579-4936-8898-04b6ec521a56', 'name': 'vnflcm_8f054b70-93e9-46d5-a3bb-6404b99f91fb-VDU2_scale_group-kjap6b2asrne-ijarluromf6z-zci6ve7ul27n-VDU2_CP2-i2k7w5mbvt7h', 'network_id': |
|
||||
| | 'b6cd5128-4dd8-4564-89b4-879db6e12ada', 'tenant_id': 'f76fec29816c470e92c9d88c529802b9', 'mac_address': 'fa:16:3e:f1:c9:93', 'admin_state_up': True, 'status': 'ACTIVE', 'device_id': '0edf0aa8-be46-41af- |
|
||||
| | abd6-6ba8440f1247', 'device_owner': 'compute:nova', 'fixed_ips': [{'subnet_id': '25f4a13f-0c20-4fff-85aa-5349fc4efee8', 'ip_address': '22.22.2.200'}], 'allowed_address_pairs': [], 'extra_dhcp_opts': [], |
|
||||
| | 'security_groups': ['20f992ca-ad73-4d41-a503-0ad5866f6a84'], 'description': '', 'binding:vnic_type': 'normal', 'binding:profile': {}, 'binding:host_id': 'tackerhost', 'binding:vif_type': 'ovs', |
|
||||
| | 'binding:vif_details': {'connectivity': 'l2', 'port_filter': True, 'ovs_hybrid_plug': False, 'datapath_type': 'system', 'bridge_name': 'tacker_bridge'}, 'port_security_enabled': True, 'qos_policy_id': None, |
|
||||
| | 'qos_network_policy_id': None, 'resource_request': None, 'tags': [], 'created_at': '2021-04-12T00:05:00Z', 'updated_at': '2021-04-12T00:10:00Z', 'revision_number': 4, 'project_id': |
|
||||
| | 'f76fec29816c470e92c9d88c529802b9'} |
|
||||
+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
.. note:: you can check "fixed_ips" in attributes field.
|
||||
|
||||
|
||||
Another way to check is by using "openstack port" command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack port list --sort-column Name --fit-width
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+-----------------------------------------------------------------------------------+-------------------+-----------------------------------------------------------------------------------+--------+
|
||||
| ID | Name | MAC Address | Fixed IP Addresses | Status |
|
||||
+--------------------------------------+-----------------------------------------------------------------------------------+-------------------+-----------------------------------------------------------------------------------+--------+
|
||||
| 958d4fd4-f579-4936-8898-04b6ec521a56 | vnflcm_8f054b70-93e9-46d5-a3bb-6404b99f91fb-VDU2_scale_group-kjap6b2asrne- | fa:16:3e:f1:c9:93 | ip_address='22.22.2.200', subnet_id='25f4a13f-0c20-4fff-85aa-5349fc4efee8' | ACTIVE |
|
||||
| | ijarluromf6z-zci6ve7ul27n-VDU2_CP2-i2k7w5mbvt7h | | | |
|
||||
+--------------------------------------+-----------------------------------------------------------------------------------+-------------------+-----------------------------------------------------------------------------------+--------+
|
||||
|
||||
|
||||
See `Heat CLI reference`_. for details on Heat CLI commands.
|
||||
'subnet_id' has been changed from 'd290cae3-0dbc-44a3-a043-1a50ded04a64'
|
||||
to '43c8f5fa-fefd-4bd4-a0df-f985b6969339'.
|
||||
'ip_address' has been changed from '22.22.1.16' to '10.10.0.136'.
|
||||
|
||||
|
||||
.. _NFV-SOL002 v2.6.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/02.06.01_60/gs_NFV-SOL002v020601p.pdf
|
||||
.. _Change External VNF Connectivity API reference : https://docs.openstack.org/api-ref/orchestration/v1/index.html
|
||||
.. _Heat CLI reference : https://docs.openstack.org/python-openstackclient/latest/cli/plugin-commands/heat.html
|
||||
@@ -3,7 +3,13 @@ ETSI NFV-SOL VNF Deployment as VM with TOSCA
|
||||
============================================
|
||||
|
||||
This document describes how to deploy VNF as VM with TOSCA
|
||||
in Tacker using CLI commands.
|
||||
in Tacker v1 API using CLI commands.
|
||||
|
||||
.. note::
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
Please note that this is not supported by Tacker v2 API.
|
||||
|
||||
|
||||
Overview
|
||||
--------
|
||||
@@ -13,9 +19,9 @@ The diagram below shows an overview of the VNF deployment.
|
||||
1. Request create VNF
|
||||
|
||||
A user requests tacker-server to create a VNF with tacker-client by
|
||||
uploading a VNF Package and requesting ``create VNF``. The VNF Package
|
||||
should contain ``VNFD``. The detailed explanation of ``VNFD`` can be found
|
||||
in :doc:`./vnf-package`.
|
||||
uploading a VNF Package and requesting ``create VNF``. The VNF Package
|
||||
should contain ``VNFD``. The detailed explanation of ``VNFD`` can be found
|
||||
in :doc:`/user/vnf-package`.
|
||||
|
||||
2. Request instantiate VNF
|
||||
|
||||
@@ -25,17 +31,16 @@ The diagram below shows an overview of the VNF deployment.
|
||||
3. Call OpenStack Heat API
|
||||
|
||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
an appropriate infra-driver (in this case OpenStack infra-driver) according
|
||||
to the contents of the instantiate parameters. Then, OpenStack infra-driver
|
||||
to the contents of the instantiate parameters. Then, OpenStack infra-driver
|
||||
calls OpenStack Heat APIs to create a VM as a VNF.
|
||||
|
||||
4. Create a VM
|
||||
|
||||
OpenStack Heat creates a VM according to the API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_vnf_deployment_as_vm_with_tosca.png
|
||||
:align: left
|
||||
.. figure:: /_images/etsi_vnf_deployment_as_vm_with_tosca.png
|
||||
|
||||
|
||||
Prerequisites
|
||||
@@ -47,10 +52,98 @@ The following packages should be installed:
|
||||
* python-tackerclient
|
||||
|
||||
A default VIM should be registered according to
|
||||
:doc:`../cli/cli-legacy-vim`.
|
||||
:doc:`/cli/cli-legacy-vim`.
|
||||
|
||||
The VNF Package(sample_vnf_pkg.zip) used below is prepared
|
||||
by referring to :doc:`./vnf-package`.
|
||||
As an example, you can register default VIM as follow.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cat vim_config.yaml
|
||||
auth_url: "http://192.168.56.10/identity"
|
||||
username: "admin"
|
||||
password: "devstack"
|
||||
project_name: "admin"
|
||||
domain_name: "default"
|
||||
project_domain_name: "default"
|
||||
user_domain_name: "default"
|
||||
cert_verify: "True"
|
||||
|
||||
$ openstack vim register --config-file vim_config.yaml \
|
||||
--is-default openstack-admin-vim
|
||||
+----------------+-----------------------------------------------------+
|
||||
| Field | Value |
|
||||
+----------------+-----------------------------------------------------+
|
||||
| auth_cred | { |
|
||||
| | "username": "admin", |
|
||||
| | "user_domain_name": "default", |
|
||||
| | "cert_verify": "True", |
|
||||
| | "project_id": null, |
|
||||
| | "project_name": "admin", |
|
||||
| | "project_domain_name": "default", |
|
||||
| | "auth_url": "http://192.168.56.10/identity/v3", |
|
||||
| | "key_type": "barbican_key", |
|
||||
| | "secret_uuid": "***", |
|
||||
| | "password": "***" |
|
||||
| | } |
|
||||
| auth_url | http://192.168.56.10/identity/v3 |
|
||||
| created_at | 2023-12-21 07:39:09.617234 |
|
||||
| description | |
|
||||
| extra | |
|
||||
| id | 662e5f4f-3b16-4ca6-b560-28b62dd0e13b |
|
||||
| is_default | True |
|
||||
| name | openstack-admin-vim |
|
||||
| placement_attr | { |
|
||||
| | "regions": [ |
|
||||
| | "RegionOne" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| project_id | 1994d69783d64c00aadab564038c2fd7 |
|
||||
| status | ACTIVE |
|
||||
| type | openstack |
|
||||
| updated_at | None |
|
||||
| vim_project | { |
|
||||
| | "name": "admin", |
|
||||
| | "project_domain_name": "default" |
|
||||
| | } |
|
||||
+----------------+-----------------------------------------------------+
|
||||
|
||||
|
||||
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||
by referring to :doc:`/user/vnf-package`.
|
||||
|
||||
As an example, you can create a VNF Package as follow.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd TACKER_ROOT/samples/etsi_getting_started/tosca/sample_vnf_package_csar
|
||||
$ zip sample_vnf_package_csar.zip -r Definitions/ Files/ TOSCA-Metadata/
|
||||
updating: Definitions/ (stored 0%)
|
||||
updating: Definitions/sample_vnfd_types.yaml (deflated 71%)
|
||||
updating: Definitions/etsi_nfv_sol001_vnfd_types.yaml (deflated 84%)
|
||||
updating: Definitions/etsi_nfv_sol001_common_types.yaml (deflated 77%)
|
||||
updating: Definitions/sample_vnfd_df_simple.yaml (deflated 66%)
|
||||
updating: Definitions/sample_vnfd_top.yaml (deflated 55%)
|
||||
updating: Files/ (stored 0%)
|
||||
updating: Files/images/ (stored 0%)
|
||||
updating: Files/images/cirros-0.5.2-x86_64-disk.img (deflated 3%)
|
||||
updating: TOSCA-Metadata/ (stored 0%)
|
||||
updating: TOSCA-Metadata/TOSCA.meta (deflated 15%)
|
||||
$ ll
|
||||
...
|
||||
drwxr-xr-x 2 stack stack 4096 Dec 21 08:50 Definitions/
|
||||
drwxr-xr-x 3 stack stack 4096 Dec 21 03:53 Files/
|
||||
-rw-rw-r-- 1 stack stack 15761428 Dec 21 08:50 sample_vnf_package_csar.zip
|
||||
drwxr-xr-x 2 stack stack 4096 Dec 21 07:41 TOSCA-Metadata/
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
In this document, ``TACKER_ROOT`` is the root of tacker's repository on
|
||||
the server.
|
||||
|
||||
|
||||
After you have done the above, you will have the sample VNF package
|
||||
`sample_vnf_package_csar.zip`.
|
||||
|
||||
|
||||
VNF Deployment Procedure as VM
|
||||
@@ -59,7 +152,7 @@ VNF Deployment Procedure as VM
|
||||
In order to deploy VNF as VM, it is necessary to execute
|
||||
the following procedure.
|
||||
Details of CLI commands are described in
|
||||
:doc:`../cli/cli-etsi-vnfpkgm` and :doc:`../cli/cli-etsi-vnflcm`.
|
||||
:doc:`/cli/cli-etsi-vnfpkgm` and :doc:`/cli/cli-etsi-vnflcm`.
|
||||
|
||||
|
||||
1. Create VNF Package Info
|
||||
@@ -76,17 +169,23 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+-------------------+----------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------+----------------------------------------------------------------------------------------------------+
|
||||
| ID | e712a702-741f-4093-a971-b3ad69411ac1 |
|
||||
| Links | packageContent=href=/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1/package_content, |
|
||||
| | self=href=s/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1 |
|
||||
| Onboarding State | CREATED |
|
||||
| Operational State | DISABLED |
|
||||
| Usage State | NOT_IN_USE |
|
||||
| User Defined Data | |
|
||||
+-------------------+----------------------------------------------------------------------------------------------------+
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
| ID | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d" |
|
||||
| | }, |
|
||||
| | "packageContent": { |
|
||||
| | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Onboarding State | CREATED |
|
||||
| Operational State | DISABLED |
|
||||
| Usage State | NOT_IN_USE |
|
||||
| User Defined Data | {} |
|
||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
After that, execute the following CLI command and confirm that
|
||||
@@ -99,7 +198,7 @@ VNF Package creation was successful.
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package show VNF_PACKAGE_ID \
|
||||
-c 'Onboarding State' -c 'Operational State' -c 'Usage State'
|
||||
-c 'Onboarding State' -c 'Operational State' -c 'Usage State'
|
||||
|
||||
|
||||
Result:
|
||||
@@ -122,14 +221,14 @@ Execute the following CLI command to upload VNF Package.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package upload --path sample_csar.zip VNF_PACKAGE_ID
|
||||
$ openstack vnf package upload --path sample_vnf_package_csar.zip VNF_PACKAGE_ID
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Upload request for VNF package e712a702-741f-4093-a971-b3ad69411ac1 has been accepted.
|
||||
Upload request for VNF package 156f1c4f-bfe2-492b-a079-a1bad32c0c3d has been accepted.
|
||||
|
||||
|
||||
After that, execute the following CLI command and confirm that
|
||||
@@ -142,13 +241,15 @@ VNF Package uploading was successful.
|
||||
'Create VNF Identifier'.
|
||||
|
||||
.. note::
|
||||
The state of 'Onboarding State' changes in the order of
|
||||
'UPLOADING', 'PROCESSING', 'ONBOARDED'.
|
||||
|
||||
The state of 'Onboarding State' changes in the order of
|
||||
'UPLOADING', 'PROCESSING', 'ONBOARDED'.
|
||||
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package show VNF_PACKAGE_ID \
|
||||
-c 'Onboarding State' -c 'Operational State' -c 'Usage State' -c 'VNFD ID'
|
||||
-c 'Onboarding State' -c 'Operational State' -c 'Usage State' -c 'VNFD ID'
|
||||
|
||||
|
||||
Result:
|
||||
@@ -179,21 +280,29 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------+----------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+----------------------------------------------------------------------------------------------+
|
||||
| ID | 725f625e-f6b7-4bcd-b1b7-7184039fde45 |
|
||||
| Instantiation State | NOT_INSTANTIATED |
|
||||
| Links | instantiate=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45/instantiate, |
|
||||
| | self=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45 |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | None |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
+--------------------------+----------------------------------------------------------------------------------------------+
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | 810d8c9b-e467-4b06-9265-ac9dce015fce |
|
||||
| Instantiation State | NOT_INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce" |
|
||||
| | }, |
|
||||
| | "instantiate": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/instantiate" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VNF Configurable Properties | |
|
||||
| VNF Instance Description | |
|
||||
| VNF Instance Name | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| vnfPkgId | |
|
||||
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
After that, execute the following CLI command and confirm that
|
||||
@@ -205,8 +314,7 @@ VNF instance creation was successful.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package show VNF_PACKAGE_ID \
|
||||
-c 'Usage State'
|
||||
$ openstack vnf package show VNF_PACKAGE_ID -c 'Usage State'
|
||||
|
||||
|
||||
Result:
|
||||
@@ -222,8 +330,7 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID \
|
||||
-c 'Instantiation State'
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID -c 'Instantiation State'
|
||||
|
||||
|
||||
Result:
|
||||
@@ -246,10 +353,12 @@ These parameters will be set in the body of the instantiate request.
|
||||
|
||||
Required parameter:
|
||||
|
||||
* flavourID
|
||||
* flavourId
|
||||
|
||||
.. note::
|
||||
Details of flavourID is described in :doc:`./vnfd-sol001`.
|
||||
|
||||
Details of flavourId is described in :doc:`/user/vnfd-sol001`.
|
||||
|
||||
|
||||
Optional parameters:
|
||||
|
||||
@@ -257,28 +366,35 @@ Optional parameters:
|
||||
* extVirtualLinks
|
||||
* extManagedVirtualLinks
|
||||
* vimConnectionInfo
|
||||
* localizationLanguage
|
||||
* additionalParams
|
||||
* extensions
|
||||
|
||||
.. note::
|
||||
You can skip ``vimConnectionInfo`` only when you have
|
||||
the default VIM described in :doc:`../cli/cli-legacy-vim`.
|
||||
|
||||
You can skip ``vimConnectionInfo`` only when you have
|
||||
the default VIM described in :doc:`/cli/cli-legacy-vim`.
|
||||
|
||||
|
||||
.. note::
|
||||
This operation can specify the ``vimConnectionInfo``
|
||||
for the VNF instance.
|
||||
Even if this operation specify multiple ``vimConnectionInfo``
|
||||
associated with one VNF instance, only one of them will be used for
|
||||
life cycle management operations.
|
||||
|
||||
This operation can specify the ``vimConnectionInfo``
|
||||
for the VNF instance.
|
||||
Even if this operation specify multiple ``vimConnectionInfo``
|
||||
associated with one VNF instance, only one of them will be used for
|
||||
life cycle management operations.
|
||||
|
||||
|
||||
Param file with only required parameters:
|
||||
An example of a param file with only required parameters:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
{
|
||||
"flavourId":"simple"
|
||||
"flavourId": "simple"
|
||||
}
|
||||
|
||||
Param file with optional parameters:
|
||||
|
||||
An example of a param file with optional parameters:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
@@ -287,47 +403,89 @@ Param file with optional parameters:
|
||||
"instantiationLevelId": "instantiation_level_1",
|
||||
"extVirtualLinks": [
|
||||
{
|
||||
"id": "net0",
|
||||
"resourceId": "4bf3e646-7a24-4f04-a985-d8f4bb1203de", #Set the uuid of the network to use
|
||||
"id": "279b0e12-2cc7-48d3-89dc-c58369841763",
|
||||
"vimConnectionId": "4db40866-054f-472d-b559-811e5aa7195c",
|
||||
"resourceProviderId": "Company",
|
||||
"resourceId": "6a3aeb3a-fb8b-4d27-a5f1-4f148aeb303f",
|
||||
"extCps": [
|
||||
{
|
||||
"cpdId": "CP1",
|
||||
"cpConfig": [
|
||||
{
|
||||
"cpdId": "VDU1_CP1",
|
||||
"cpConfig": {
|
||||
"VDU1_CP1": {
|
||||
"parentCpConfigId": "a9d72e2b-9b2f-48b8-9ca0-217ab3ba6f33",
|
||||
"cpProtocolData": [
|
||||
{
|
||||
"layerProtocol": "IP_OVER_ETHERNET"
|
||||
"layerProtocol": "IP_OVER_ETHERNET",
|
||||
"ipOverEthernet": {
|
||||
"ipAddresses": [
|
||||
{
|
||||
"type": "IPV4",
|
||||
"numDynamicAddresses": 1,
|
||||
"subnetId": "649c956c-1516-4d92-a6bc-ce936d8a880d"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"extLinkPorts": [
|
||||
{
|
||||
"id": "2871f033-5e38-4f5f-af26-09c6390648a8",
|
||||
"resourceHandle": {
|
||||
"resourceId": "389ade82-7618-4b42-bc90-5ebbac0863cf"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"extManagedVirtualLinks": [
|
||||
{
|
||||
"id": "c381e923-6208-43ac-acc9-f3afec76535a",
|
||||
"vnfVirtualLinkDescId": "internalVL1",
|
||||
"vimConnectionId": "4db40866-054f-472d-b559-811e5aa7195c",
|
||||
"resourceProviderId": "Company",
|
||||
"resourceId": "9a94da3c-239f-469d-8cf9-5313a4e3961a",
|
||||
"extManagedMultisiteVirtualLinkId": "f850522e-c124-4ed9-8027-f15abc22e21d"
|
||||
}
|
||||
],
|
||||
"vimConnectionInfo": [
|
||||
{
|
||||
"id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1", #Set a random uuid.
|
||||
"vimId": "8a0fd79d-e224-4c27-85f5-ee79c6e0d870", #Set the uuid of the VIM to use
|
||||
"id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1",
|
||||
"vimId": "8a0fd79d-e224-4c27-85f5-ee79c6e0d870",
|
||||
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.v_2"
|
||||
}
|
||||
]
|
||||
],
|
||||
"localizationLanguage": "ja",
|
||||
"additionalParams": {
|
||||
"key": "value"
|
||||
},
|
||||
"extensions": {
|
||||
"key": "value"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
samlple_param_file.json used in this document is below.
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/lcm_instantiate_request/sample_param_file.json
|
||||
:language: json
|
||||
|
||||
|
||||
Execute the following CLI command to instantiate VNF instance.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm instantiate VNF_INSTANCE_ID \
|
||||
./sample_param_file.json
|
||||
$ openstack vnflcm instantiate VNF_INSTANCE_ID ./sample_param_file.json
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Instantiate request for VNF Instance 725f625e-f6b7-4bcd-b1b7-7184039fde45 has been accepted.
|
||||
Instantiate request for VNF Instance 810d8c9b-e467-4b06-9265-ac9dce015fce has been accepted.
|
||||
|
||||
|
||||
After that, execute the following CLI command and confirm that
|
||||
@@ -337,8 +495,7 @@ VNF instance instantiation was successful.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID \
|
||||
-c 'Instantiation State'
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID -c 'Instantiation State'
|
||||
|
||||
|
||||
Result:
|
||||
@@ -352,7 +509,7 @@ Result:
|
||||
+---------------------+--------------+
|
||||
|
||||
|
||||
5. Terminate VNF
|
||||
1. Terminate VNF
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
Execute the following CLI command to terminate the VNF instance.
|
||||
@@ -366,7 +523,7 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Terminate request for VNF Instance '725f625e-f6b7-4bcd-b1b7-7184039fde45' has been accepted.
|
||||
Terminate request for VNF Instance '810d8c9b-e467-4b06-9265-ac9dce015fce' has been accepted.
|
||||
|
||||
|
||||
After that, execute the following CLI command and confirm that
|
||||
@@ -377,7 +534,7 @@ VNF instance termination was successful.
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID \
|
||||
-c 'Instantiation State'
|
||||
-c 'Instantiation State'
|
||||
|
||||
|
||||
Result:
|
||||
@@ -405,7 +562,7 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Vnf instance '725f625e-f6b7-4bcd-b1b7-7184039fde45' deleted successfully
|
||||
Vnf instance '810d8c9b-e467-4b06-9265-ac9dce015fce' is deleted successfully
|
||||
|
||||
|
||||
After that, execute the following CLI command and confirm that
|
||||
@@ -417,7 +574,7 @@ VNF instance deletion was successful.
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnf package show VNF_PACKAGE_ID \
|
||||
-c 'Usage State'
|
||||
-c 'Usage State'
|
||||
|
||||
|
||||
Result:
|
||||
@@ -440,4 +597,5 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Can not find requested vnf instance: 725f625e-f6b7-4bcd-b1b7-7184039fde45
|
||||
Can not find requested vnf instance: 810d8c9b-e467-4b06-9265-ac9dce015fce
|
||||
|
||||
@@ -3,14 +3,24 @@ ETSI NFV-SOL VNF Deployment as VM with LCM Operation User Data
|
||||
==============================================================
|
||||
|
||||
This document describes how to deploy VNF as VM with
|
||||
LCM operation user data in Tacker using CLI commands.
|
||||
LCM operation user data in Tacker v1 API using CLI commands.
|
||||
Please check `LCM-user-data spec`_ and `NFV-SOL014 v2.8.1`_
|
||||
for more information on LCM operation user data.
|
||||
|
||||
.. note::
|
||||
Most of the content is the same as :doc:`./etsi_vnf_deployment_as_vm_with_tosca`,
|
||||
but some have 'LCM operation user data' specific descriptions.
|
||||
The part will be clarified with the notation [This is UserData specific part].
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
See :doc:`/user/v2/vnf/deployment_with_user_data/index`
|
||||
for Tacker v2 API.
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
Most of the content is the same as
|
||||
:doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`,
|
||||
but some have 'LCM operation user data' specific descriptions.
|
||||
The part will be clarified with the notation [This is UserData specific part].
|
||||
|
||||
|
||||
Overview
|
||||
--------
|
||||
@@ -20,9 +30,10 @@ The diagram below shows an overview of the VNF deployment.
|
||||
1. Request create VNF
|
||||
|
||||
A user requests tacker-server to create a VNF with tacker-client by
|
||||
uploading a VNF Package and requesting ``create VNF``. The VNF Package
|
||||
should contain ``BaseHOT`` and ``UserData`` in addition to ``VNFD``. The
|
||||
detailed explanation of these contents can be found in :doc:`./vnf-package`.
|
||||
uploading a VNF Package and requesting ``create VNF``. The VNF Package
|
||||
should contain ``BaseHOT`` and ``UserData`` in addition to ``VNFD``.
|
||||
The detailed explanation of these contents can be found in
|
||||
:doc:`/user/vnf-package`.
|
||||
|
||||
2. Request instantiate VNF
|
||||
|
||||
@@ -34,15 +45,15 @@ The diagram below shows an overview of the VNF deployment.
|
||||
Upon receiving a request, tacker-server redirects it to tacker-conductor.
|
||||
In tacker-conductor, the request is redirected again to an appropriate
|
||||
infra-driver (in this case OpenStack infra-driver) according to the contents
|
||||
of the instantiate parameters. Then, OpenStack infra-driver calls OpenStack
|
||||
of the instantiate parameters. Then, OpenStack infra-driver calls OpenStack
|
||||
Heat APIs to create a VM as a VNF.
|
||||
|
||||
4. Create a VM
|
||||
|
||||
OpenStack Heat creates a VM according to the API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_vnf_deployment_as_vm_with_user_data.png
|
||||
:align: left
|
||||
.. figure:: /_images/etsi_vnf_deployment_as_vm_with_user_data.png
|
||||
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
@@ -53,16 +64,18 @@ The following packages should be installed:
|
||||
* python-tackerclient
|
||||
|
||||
A default VIM should be registered according to
|
||||
:doc:`../cli/cli-legacy-vim`.
|
||||
:doc:`/cli/cli-legacy-vim`.
|
||||
|
||||
|
||||
The VNF Package(sample_vnf_pkg.zip) used below is prepared
|
||||
by referring to :doc:`./vnf-package`.
|
||||
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||
by referring to :doc:`/user/vnf-package`.
|
||||
|
||||
.. note:: [This is UserData specific part]
|
||||
In order to deploy VNF using LCM operation user data,
|
||||
it is necessary to include BaseHOT and UserData in the VNF Package,
|
||||
which are optional in :doc:`./vnf-package`.
|
||||
.. note::
|
||||
|
||||
[This is UserData specific part]
|
||||
In order to deploy VNF using LCM operation user data,
|
||||
it is necessary to include BaseHOT and UserData in the VNF Package,
|
||||
which are optional in :doc:`/user/vnf-package`.
|
||||
|
||||
|
||||
VNF Deployment Procedure as VM
|
||||
@@ -71,28 +84,29 @@ VNF Deployment Procedure as VM
|
||||
In order to deploy VNF as a VM, it is necessary to execute
|
||||
the following procedure.
|
||||
Details of CLI commands are described in
|
||||
:doc:`../cli/cli-etsi-vnfpkgm` and :doc:`../cli/cli-etsi-vnflcm`.
|
||||
:doc:`/cli/cli-etsi-vnfpkgm` and :doc:`/cli/cli-etsi-vnflcm`.
|
||||
|
||||
Many procedures are the same as :doc:`./etsi_vnf_deployment_as_vm_with_tosca`,
|
||||
Many procedures are the same as
|
||||
:doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`,
|
||||
so refer to the doc for those procedures.
|
||||
|
||||
|
||||
1. Create VNF Package Info
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
See procedure in :doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
See procedure in :doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
|
||||
|
||||
2. Upload VNF Package
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
See procedure in :doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
See procedure in :doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
|
||||
|
||||
3. Create VNF Identifier
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
See procedure in :doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
See procedure in :doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
|
||||
|
||||
4. Instantiate VNF
|
||||
@@ -108,18 +122,21 @@ Required parameter:
|
||||
* additionalParams
|
||||
|
||||
.. note::
|
||||
Details of flavourId is described in :doc:`./vnfd-sol001`.
|
||||
|
||||
Details of flavourId is described in :doc:`/user/vnfd-sol001`.
|
||||
|
||||
.. note::
|
||||
[This is UserData specific part]
|
||||
additionalParams is a parameter that can be described by KeyValuePairs.
|
||||
By setting the following two parameters in this parameter,
|
||||
instantiate using LCM operation user data becomes possible.
|
||||
For file_name.py and class_name, set the file name and class name
|
||||
described in Prerequisites.
|
||||
|
||||
* lcm-operation-user-data: ./UserData/file_name.py
|
||||
* lcm-operation-user-data-class: class_name
|
||||
[This is UserData specific part]
|
||||
additionalParams is a parameter that can be described by KeyValuePairs.
|
||||
By setting the following two parameters in this parameter,
|
||||
instantiate using LCM operation user data becomes possible.
|
||||
For file_name.py and class_name, set the file name and class name
|
||||
described in Prerequisites.
|
||||
|
||||
* lcm-operation-user-data: ./UserData/file_name.py
|
||||
* lcm-operation-user-data-class: class_name
|
||||
|
||||
|
||||
Optional parameters:
|
||||
|
||||
@@ -129,17 +146,21 @@ Optional parameters:
|
||||
* vimConnectionInfo
|
||||
|
||||
.. note::
|
||||
You can skip ``vimConnectionInfo`` only when you have
|
||||
the default VIM described in :doc:`../cli/cli-legacy-vim`.
|
||||
|
||||
You can skip ``vimConnectionInfo`` only when you have
|
||||
the default VIM described in :doc:`/cli/cli-legacy-vim`.
|
||||
|
||||
|
||||
.. note::
|
||||
This operation can specify the ``vimConnectionInfo``
|
||||
for the VNF instance.
|
||||
Even if this operation specify multiple ``vimConnectionInfo``
|
||||
associated with one VNF instance, only one of them will be used for
|
||||
life cycle management operations.
|
||||
|
||||
Param file with only required parameters:
|
||||
This operation can specify the ``vimConnectionInfo``
|
||||
for the VNF instance.
|
||||
Even if this operation specify multiple ``vimConnectionInfo``
|
||||
associated with one VNF instance, only one of them will be used for
|
||||
life cycle management operations.
|
||||
|
||||
|
||||
An example of a param file with only required parameters:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
@@ -151,7 +172,8 @@ Param file with only required parameters:
|
||||
}
|
||||
}
|
||||
|
||||
Param file with optional parameters:
|
||||
|
||||
An example of a param file with optional parameters:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
@@ -203,19 +225,24 @@ Param file with optional parameters:
|
||||
}
|
||||
|
||||
|
||||
samlple_param_file.json used in this document is below.
|
||||
|
||||
.. literalinclude:: ../../../samples/etsi_getting_started/userdata/lcm_instantiate_request/sample_param_file.json
|
||||
:language: json
|
||||
|
||||
|
||||
Execute the following CLI command to instantiate the VNF instance.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm instantiate VNF_INSTANCE_ID \
|
||||
./sample_param_file.json
|
||||
$ openstack vnflcm instantiate VNF_INSTANCE_ID ./sample_param_file.json
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Instantiate request for VNF Instance 725f625e-f6b7-4bcd-b1b7-7184039fde45 has been accepted.
|
||||
Instantiate request for VNF Instance 810d8c9b-e467-4b06-9265-ac9dce015fce has been accepted.
|
||||
|
||||
|
||||
After that, execute the following CLI command and confirm that
|
||||
@@ -225,8 +252,7 @@ VNF instance instantiation was successful.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID \
|
||||
-c 'Instantiation State'
|
||||
$ openstack vnflcm show VNF_INSTANCE_ID -c 'Instantiation State'
|
||||
|
||||
|
||||
Result:
|
||||
@@ -243,14 +269,14 @@ Result:
|
||||
5. Terminate VNF
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
See procedure in :doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
See procedure in :doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
|
||||
|
||||
6. Delete VNF Identifier
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
See procedure in :doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
See procedure in :doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
|
||||
|
||||
.. _LCM-user-data spec : https://specs.openstack.org/openstack/tacker-specs/specs/ussuri/lcm-operation-with-lcm-operation-user-data.html
|
||||
.. _NFV-SOL014 v2.8.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/014/02.08.01_60/gs_NFV-SOL014v020801p.pdf
|
||||
|
||||
@@ -2,7 +2,13 @@
|
||||
ETSI NFV-SOL VNF error-handling
|
||||
===============================
|
||||
|
||||
This document describes how to error-handling VNF in Tacker.
|
||||
This document describes how to error-handling VNF in Tacker v1 API.
|
||||
|
||||
.. note::
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
See :doc:`/user/v2/error_handling` for Tacker v2 API.
|
||||
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
@@ -13,14 +19,17 @@ The following packages should be installed:
|
||||
* python-tackerclient
|
||||
|
||||
A default VIM should be registered according to
|
||||
:doc:`../cli/cli-legacy-vim`.
|
||||
:doc:`/cli/cli-legacy-vim`.
|
||||
|
||||
The VNF Package(sample_vnf_pkg.zip) used below is prepared
|
||||
by referring to :doc:`./vnf-package`.
|
||||
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||
by referring to :doc:`/user/vnf-package`.
|
||||
|
||||
Execute up to "Instantiate VNF" in the procedure of
|
||||
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
In other words, the procedure after "Terminate VNF" is not executed.
|
||||
The procedure of prepare for healing operation that from "register VIM" to
|
||||
"Instantiate VNF", basically refer to
|
||||
:doc:`/user/etsi_vnf_deployment_as_vm_with_tosca` or
|
||||
:doc:`/user/etsi_vnf_deployment_as_vm_with_user_data`.
|
||||
|
||||
This procedure uses an example using the sample VNF package.
|
||||
|
||||
|
||||
VNF Error-handling Procedures
|
||||
@@ -30,7 +39,7 @@ As mentioned in Prerequisites, the VNF must be created
|
||||
before performing error-handling.
|
||||
|
||||
Details of CLI commands are described in
|
||||
:doc:`../cli/cli-etsi-vnflcm`.
|
||||
:doc:`/cli/cli-etsi-vnflcm`.
|
||||
|
||||
There are some operations to error-handling VNF.
|
||||
|
||||
@@ -46,17 +55,10 @@ First, the method of specifying the ID will be described.
|
||||
Identify VNF_LCM_OP_OCC_ID
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To identify the VNF_LCM_OP_OCC_ID, you can get with the following ways.
|
||||
|
||||
* to check with CLI
|
||||
* to check with notification API body
|
||||
|
||||
You can choose both ways.
|
||||
|
||||
This case uses openstack CLI:
|
||||
The VNF_LCM_OP_OCC_ID can be obtained via CLI.
|
||||
|
||||
Details of CLI commands are described in
|
||||
:doc:`../cli/cli-etsi-vnflcm`.
|
||||
:doc:`/cli/cli-etsi-vnflcm`.
|
||||
|
||||
Before checking the "VNF_LCM_OP_OCC_ID", you should get VNF_INSTANCE_ID first.
|
||||
|
||||
@@ -69,232 +71,49 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+-----------------+--------------------------------------+-----------------+
|
||||
| ID | Operation State | VNF Instance ID | Operation |
|
||||
+--------------------------------------+-----------------+--------------------------------------+-----------------+
|
||||
| 304538dd-d754-4661-9f17-5496dab9693d | FAILED_TEMP | 3aa5c054-c162-4d5e-9808-0bc30f92a4c7 | INSTANTIATE |
|
||||
+--------------------------------------+-----------------+--------------------------------------+-----------------+
|
||||
|
||||
|
||||
For this case, check notification API body:
|
||||
|
||||
In checking with Notification API, you should execute the following steps:
|
||||
|
||||
* Create a new subscription
|
||||
* Execute LCM operations, such as 'Creates a new VNF instance resource'.
|
||||
|
||||
The procedure for executing the API using the curl command is shown below.
|
||||
|
||||
First, the method of generating Keystone-tokens will be described.
|
||||
See `Keystone API reference`_. for details on Keystone APIs.
|
||||
For **<username>** and **<password>**, **<project_name>**,
|
||||
set values according to your environment.
|
||||
|
||||
Prepare get_token.json file to get token:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"auth": {
|
||||
"identity": {
|
||||
"methods": [
|
||||
"password"
|
||||
],
|
||||
"password": {
|
||||
"user": {
|
||||
"name": "<username>",
|
||||
"password": "<password>",
|
||||
"domain": {
|
||||
"name": "Default"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"scope": {
|
||||
"project": {
|
||||
"name": "<project_name>",
|
||||
"domain": {
|
||||
"name": "Default"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Get token:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ curl -i -X POST -H "Content-Type: application/json" -d @./get_token.json "$OS_AUTH_URL/v3/auth/tokens"
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
HTTP/1.1 201 CREATED
|
||||
Date: Tue, 17 Nov 2020 08:01:44 GMT
|
||||
Server: Apache/2.4.41 (Ubuntu)
|
||||
Content-Type: application/json
|
||||
Content-Length: 7187
|
||||
X-Subject-Token: gAAAAABfs4No8WVYIPagnJvnnImNHq_918oLgOiJwSXqXGJKfv_FEcgfeZajIl0NCk7Pr6YMn1Sa96ZhOnWioKGrOxBSEGVxgYqBFx3bFfKAHVmzgoEaN6zfHZvbm1QJgoeg1QV5i-VjfeeQRWZptYqd3yWMLzrWSfVBER9pL-nRi0CvMXJM0yE
|
||||
Vary: X-Auth-Token
|
||||
x-openstack-request-id: req-6b19a1ee-0eb0-4aa8-97e7-c54d750c9b64
|
||||
Connection: close
|
||||
...snip response-body...
|
||||
|
||||
|
||||
Set the value of **X-Subject-Token** included in the above result to
|
||||
the environment variable **$OS_AUTH_TOKEN**.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ export OS_AUTH_TOKEN="gAAAAABfs4No8WVYIPagnJvnnImNHq_918oLgOiJwSXqXGJKfv_FEcgfeZajIl0NCk7Pr6YMn1Sa96ZhOnWioKGrOxBSEGVxgYqBFx3bFfKAHVmzgoEaN6zfHZvbm1QJgoeg1QV5i-VjfeeQRWZptYqd3yWMLzrWSfVBER9pL-nRi0CvMXJM0yE"
|
||||
|
||||
|
||||
Create subscription:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ curl -g -i -X POST http://127.0.0.1:9890/vnflcm/v1/subscriptions \
|
||||
-H "Accept: application/json" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-Auth-Token: $OS_AUTH_TOKEN" \
|
||||
-d '{"callbackUri": "http://127.0.0.1/"}'
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
HTTP/1.1 201 Created
|
||||
Content-Length: 199
|
||||
Location: http://localhost:9890//vnflcm/v1/subscriptions/5bd3b81d-a6e9-45e7-922e-adc26328322d
|
||||
Content-Type: application/json
|
||||
X-Openstack-Request-Id: req-5f98782d-ca47-4144-a413-bd9641302f77
|
||||
Date: Mon, 21 Dec 2020 08:21:47 GMT
|
||||
|
||||
{"id": "5bd3b81d-a6e9-45e7-922e-adc26328322d", "callbackUri": "http://127.0.0.1/", "_links": {"self": {"href": "http://localhost:9890//vnflcm/v1/subscriptions/5bd3b81d-a6e9-45e7-922e-adc26328322d"}}}
|
||||
|
||||
|
||||
Show subscription:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ curl -g -i -X GET http://127.0.0.1:9890/vnflcm/v1/subscriptions/{subscriptionId} \
|
||||
-H "Accept: application/json" \
|
||||
-H "X-Auth-Token: $OS_AUTH_TOKEN"
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
Content-Length: 213
|
||||
Content-Type: application/json
|
||||
X-Openstack-Request-Id: req-2d7503dc-1f75-40de-9d75-7c01180aee89
|
||||
Date: Mon, 21 Dec 2020 08:22:59 GMT
|
||||
|
||||
{"id": "5bd3b81d-a6e9-45e7-922e-adc26328322d", "filter": {}, "callbackUri": "http://127.0.0.1/", "_links": {"self": {"href": "http://localhost:9890//vnflcm/v1/subscriptions/5bd3b81d-a6e9-45e7-922e-adc26328322d"}}}
|
||||
|
||||
|
||||
Show VNF LCM operation occurrence:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ curl -g -i -X GET http://127.0.0.1:9890/vnflcm/v1/vnf_lcm_op_occs/{vnfLcmOpOccId} \
|
||||
-H "Accept: application/json" \
|
||||
-H "X-Auth-Token: $OS_AUTH_TOKEN"
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
Content-Length: 3082
|
||||
Content-Type: application/json
|
||||
X-Openstack-Request-Id: req-d0720ffc-e7ee-4ee2-af61-a9a4a91c67cb
|
||||
Date: Mon, 21 Dec 2020 08:30:25 GMT
|
||||
|
||||
{"id": "e3dc7530-e699-46ed-b65e-32911af1e414", "operationState": "FAILED_TEMP", "stateEnteredTime": "2020-12-21 06:52:06+00:00",
|
||||
...snip response-body...
|
||||
$ openstack vnflcm op list
|
||||
+--------------------------------------+-----------------+--------------------------------------+-------------+
|
||||
| ID | Operation State | VNF Instance ID | Operation |
|
||||
+--------------------------------------+-----------------+--------------------------------------+-------------+
|
||||
| c7afb90a-351b-4d33-a945-8f937deeadb4 | FAILED_TEMP | d45ae5cb-121b-4420-bc97-6a00f5fa63b6 | INSTANTIATE |
|
||||
+--------------------------------------+-----------------+--------------------------------------+-------------+
|
||||
|
||||
|
||||
Error-handling can be executed only when **operationState** is **FAILED_TMP**.
|
||||
|
||||
With the above LCM operation trigger, 'Notification' is sent to
|
||||
the **callbackUri** set in 'Create a new subscription'.
|
||||
If the Subscription is registered, the above operation trigger
|
||||
that caused the FAILED_TEMP send a 'Notification' to the **callbackUri**
|
||||
of the Subscription.
|
||||
|
||||
**vnfLcmOpOccId** included in this 'Notification' corresponds
|
||||
to VNF_LCM_OP_OCC_ID.
|
||||
|
||||
See `VNF LCM v1 API`_ and `VNF LCM v2 API`_
|
||||
for details on the APIs used here.
|
||||
See `VNF LCM v1 API`_ for details on the APIs used here.
|
||||
|
||||
|
||||
Rollback VNF LCM Operation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. note::
|
||||
Rollback of Scale-Out has a difference in operation result between v1 and v2.
|
||||
In v1, the oldest VNFc(VM) is deleted. In v2, the newest VNFc(VM) is deleted.
|
||||
|
||||
.. list-table::
|
||||
:widths: 10 40 15 15 10 10
|
||||
:widths: 10 40 15 15
|
||||
:header-rows: 1
|
||||
|
||||
* - LCM Operation
|
||||
- Description of Rollback
|
||||
- Precondition
|
||||
- Postcondition
|
||||
- Support in v1
|
||||
- Support in v2
|
||||
* - Instantiate
|
||||
- | VNFM removes all VMs and resources.
|
||||
| e.g. Tacker executes Heat stack-delete for deletion of the target VM.
|
||||
- FAILED_TEMP
|
||||
- ROLLED_BACK or FAILED_TEMP
|
||||
- X
|
||||
- X
|
||||
* - Scale-out
|
||||
- | VNFM reverts changes of VMs and resources specified in the middle of scale-out operation.
|
||||
| There are differences in the operation results of v1 and v2. See note.
|
||||
| As a result, the oldest VNFc(VM) is deleted.
|
||||
| e.g. Tacker reverts desired_capacity and executes Heat stack-update.
|
||||
- FAILED_TEMP
|
||||
- ROLLED_BACK or FAILED_TEMP
|
||||
- X
|
||||
- X
|
||||
* - Modify
|
||||
- VNFM reverts the update of the VNF instance information.
|
||||
- FAILED_TEMP
|
||||
- ROLLED_BACK or FAILED_TEMP
|
||||
-
|
||||
- X
|
||||
* - Change external connectivity
|
||||
- | VNFM reverts changes of the external connectivity for VNF instances.
|
||||
| e.g. Tacker reverts stack parameters and executes Heat stack-update.
|
||||
- FAILED_TEMP
|
||||
- ROLLED_BACK or FAILED_TEMP
|
||||
-
|
||||
- X
|
||||
* - Change Current VNF Package
|
||||
- | VNFM reverts changes of current vnf package for VNF instances.
|
||||
| e.g. Tacker reverts stack parameters and executes Heat stack-update.
|
||||
- FAILED_TEMP
|
||||
- ROLLED_BACK or FAILED_TEMP
|
||||
-
|
||||
- X
|
||||
|
||||
.. note::
|
||||
| In some cases, Rollback of Change external connectivity cannot recover
|
||||
the IP address and Port Id of virtual resources.
|
||||
| If the operation fails before performing VIM processing: updating stack,
|
||||
the IP address and Port Id will be recovered by its rollback operation.
|
||||
| Otherwise, dynamic IP address and Port Id are not recovered
|
||||
by rollback operation.
|
||||
|
||||
This manual describes the following operations as use cases for
|
||||
rollback operations.
|
||||
@@ -315,7 +134,8 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Failed to delete vnf instance with ID '3aa5c054-c162-4d5e-9808-0bc30f92a4c7': Vnf 3aa5c054-c162-4d5e-9808-0bc30f92a4c7 in status ERROR. Cannot delete while the vnf is in this state.
|
||||
Failed to delete vnf instance with ID 'd45ae5cb-121b-4420-bc97-6a00f5fa63b6': Vnf d45ae5cb-121b-4420-bc97-6a00f5fa63b6 in status ERROR. Cannot delete while the vnf is in this state.
|
||||
Failed to delete 1 of 1 vnf instances.
|
||||
|
||||
|
||||
Therefore, "Rollback VNF lifecycle management operation" with
|
||||
@@ -330,7 +150,7 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Rollback request for LCM operation 304538dd-d754-4661-9f17-5496dab9693d has been accepted
|
||||
Rollback request for LCM operation c7afb90a-351b-4d33-a945-8f937deeadb4 has been accepted
|
||||
|
||||
|
||||
If "Rollback VNF lifecycle management operation" is successful,
|
||||
@@ -345,64 +165,45 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Vnf instance '3aa5c054-c162-4d5e-9808-0bc30f92a4c7' deleted successfully
|
||||
Vnf instance 'd45ae5cb-121b-4420-bc97-6a00f5fa63b6' is deleted successfully
|
||||
|
||||
|
||||
Fail VNF LCM Operation
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:widths: 10 40 15 15 10 10
|
||||
:widths: 10 40 15 15
|
||||
:header-rows: 1
|
||||
|
||||
* - LCM Operation
|
||||
- Description of Fail
|
||||
- Precondition
|
||||
- Postcondition
|
||||
- Support in v1
|
||||
- Support in v2
|
||||
* - Instantiate
|
||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||
- FAILED_TEMP
|
||||
- FAILED
|
||||
- X
|
||||
- X
|
||||
* - Terminate
|
||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||
- FAILED_TEMP
|
||||
- FAILED
|
||||
- X
|
||||
- X
|
||||
* - Heal
|
||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||
- FAILED_TEMP
|
||||
- FAILED
|
||||
- X
|
||||
- X
|
||||
* - Scale
|
||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||
- FAILED_TEMP
|
||||
- FAILED
|
||||
- X
|
||||
- X
|
||||
* - Modify
|
||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||
- FAILED_TEMP
|
||||
- FAILED
|
||||
- X
|
||||
- X
|
||||
* - Change external connectivity
|
||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||
- FAILED_TEMP
|
||||
- FAILED
|
||||
- X
|
||||
- X
|
||||
* - Change Current VNF Package
|
||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||
- FAILED_TEMP
|
||||
- FAILED
|
||||
-
|
||||
- X
|
||||
|
||||
|
||||
This manual describes the following operations as use cases for
|
||||
fail operations.
|
||||
@@ -423,7 +224,8 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Failed to delete vnf instance with ID '3aa5c054-c162-4d5e-9808-0bc30f92a4c7': Vnf 3aa5c054-c162-4d5e-9808-0bc30f92a4c7 in status ERROR. Cannot delete while the vnf is in this state.
|
||||
Failed to delete vnf instance with ID 'd45ae5cb-121b-4420-bc97-6a00f5fa63b6': Vnf d45ae5cb-121b-4420-bc97-6a00f5fa63b6 in status ERROR. Cannot delete while the vnf is in this state.
|
||||
Failed to delete 1 of 1 vnf instances.
|
||||
|
||||
|
||||
Therefore, "Fail VNF lifecycle management operation" with
|
||||
@@ -438,7 +240,59 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Fail request for LCM operation 304538dd-d754-4661-9f17-5496dab9693d has been accepted
|
||||
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| Error | { |
|
||||
| | "title": "", |
|
||||
| | "status": 500, |
|
||||
| | "detail": "ProblemDetails(created_at=<?>,deleted=0,deleted_at=<?>,detail='Vnf instantiation wait failed for vnf d45ae5cb-121b-4420-bc97-6a00f5fa63b6, error: VNF Create Resource CREATE failed: ResourceInError: |
|
||||
| | resources.VDU1.resources.ril4bssciahp.resources.VDU1: Went to status ERROR due to \"Message: Build of instance 6dacc4a4-948f-4f40-97cf-2caeecbba013 aborted: privsep helper command exited non-zero (1), Code: |
|
||||
| | 500\"',status=500,title='',updated_at=<?>)" |
|
||||
| | } |
|
||||
| ID | c7afb90a-351b-4d33-a945-8f937deeadb4 |
|
||||
| Is Automatic Invocation | False |
|
||||
| Is Cancel Pending | False |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4" |
|
||||
| | }, |
|
||||
| | "vnfInstance": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/d45ae5cb-121b-4420-bc97-6a00f5fa63b6" |
|
||||
| | }, |
|
||||
| | "retry": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4/retry" |
|
||||
| | }, |
|
||||
| | "rollback": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4/rollback" |
|
||||
| | }, |
|
||||
| | "grant": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4/grant" |
|
||||
| | }, |
|
||||
| | "fail": { |
|
||||
| | "href": "http://localhost:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4/fail" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Operation | INSTANTIATE |
|
||||
| Operation State | FAILED |
|
||||
| Start Time | 2023-12-27 07:05:59+00:00 |
|
||||
| State Entered Time | 2024-01-18 01:40:55.105358+00:00 |
|
||||
| VNF Instance ID | d45ae5cb-121b-4420-bc97-6a00f5fa63b6 |
|
||||
| grantId | None |
|
||||
| operationParams | "{\"flavourId\": \"simple\", \"instantiationLevelId\": \"instantiation_level_1\", \"extVirtualLinks\": [{\"id\": \"91bcff6d-4703-4ba9-b1c2-009e6db92a9c\", \"resourceId\": \"3019b1e7-99d8-4748-97ac-104922bc78d9\", |
|
||||
| | \"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", \"extCps\": [{\"cpdId\": \"VDU1_CP1\", \"cpConfig\": [{\"linkPortId\": \"6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f\"}]}, {\"cpdId\": \"VDU2_CP1\", \"cpConfig\": |
|
||||
| | [{\"linkPortId\": \"02d867e7-b955-4b4a-b92f-c78c7ede63bf\"}]}], \"extLinkPorts\": [{\"id\": \"6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f\", \"resourceHandle\": {\"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", |
|
||||
| | \"resourceId\": \"972a375d-921f-46f5-bfdb-19af95fc49e1\"}}, {\"id\": \"02d867e7-b955-4b4a-b92f-c78c7ede63bf\", \"resourceHandle\": {\"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", \"resourceId\": |
|
||||
| | \"b853b5c5-cd97-4dfb-8750-cac6e5c62477\"}}]}, {\"id\": \"a96d2f5b-c01a-48e1-813c-76132965042c\", \"resourceId\": \"589a045a-65d9-4f4d-a9b3-35aa655374d0\", \"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", |
|
||||
| | \"extCps\": [{\"cpdId\": \"VDU1_CP2\", \"cpConfig\": [{\"cpProtocolData\": [{\"layerProtocol\": \"IP_OVER_ETHERNET\", \"ipOverEthernet\": {\"ipAddresses\": [{\"type\": \"IPV4\", \"fixedAddresses\": [\"22.22.1.10\"], |
|
||||
| | \"subnetId\": \"d290cae3-0dbc-44a3-a043-1a50ded04a64\"}]}}]}]}, {\"cpdId\": \"VDU2_CP2\", \"cpConfig\": [{\"cpProtocolData\": [{\"layerProtocol\": \"IP_OVER_ETHERNET\", \"ipOverEthernet\": {\"ipAddresses\": [{\"type\": |
|
||||
| | \"IPV4\", \"fixedAddresses\": [\"22.22.1.20\"], \"subnetId\": \"d290cae3-0dbc-44a3-a043-1a50ded04a64\"}]}}]}]}]}], \"extManagedVirtualLinks\": [{\"id\": \"8f9d8da0-2386-4f00-bbb0-860f50d32a5a\", \"vnfVirtualLinkDescId\": |
|
||||
| | \"internalVL1\", \"resourceId\": \"0e498d08-ed3a-4212-83e0-1b6808f6fcb6\"}, {\"id\": \"11d68761-aab7-419c-955c-0c6497f13692\", \"vnfVirtualLinkDescId\": \"internalVL2\", \"resourceId\": \"38a8d4ba- |
|
||||
| | ac1b-41a2-a92b-ff2a3e5e9b12\"}], \"vimConnectionInfo\": [{\"id\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", \"vimType\": \"ETSINFV.OPENSTACK_KEYSTONE.v_2\", \"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", |
|
||||
| | \"interfaceInfo\": {\"endpoint\": \"http://127.0.0.1/identity\"}, \"accessInfo\": {\"username\": \"nfv_user\", \"region\": \"RegionOne\", \"password\": \"devstack\", \"tenant\": \"1994d69783d64c00aadab564038c2fd7\"}}], |
|
||||
| | \"additionalParams\": {\"lcm-operation-user-data\": \"./UserData/lcm_user_data.py\", \"lcm-operation-user-data-class\": \"SampleUserData\"}}" |
|
||||
| resourceChanges | {} |
|
||||
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
If "Fail VNF lifecycle management operation" is successful,
|
||||
@@ -453,64 +307,45 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Vnf instance '3aa5c054-c162-4d5e-9808-0bc30f92a4c7' deleted successfully
|
||||
Vnf instance 'd45ae5cb-121b-4420-bc97-6a00f5fa63b6' is deleted successfully
|
||||
|
||||
|
||||
Retry VNF LCM Operation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:widths: 10 40 15 15 10 10
|
||||
:widths: 10 40 15 15
|
||||
:header-rows: 1
|
||||
|
||||
* - LCM Operation
|
||||
- Description of Fail
|
||||
- Precondition
|
||||
- Postcondition
|
||||
- Support in v1
|
||||
- Support in v2
|
||||
* - Instantiate
|
||||
- VNFM retries a Instantiate operation.
|
||||
- FAILED_TEMP
|
||||
- COMPLETED or FAILED_TEMP
|
||||
- X
|
||||
- X
|
||||
* - Terminate
|
||||
- VNFM retries a Terminate operation.
|
||||
- FAILED_TEMP
|
||||
- COMPLETED or FAILED_TEMP
|
||||
- X
|
||||
- X
|
||||
* - Heal
|
||||
- VNFM retries a Heal operation.
|
||||
- FAILED_TEMP
|
||||
- COMPLETED or FAILED_TEMP
|
||||
- X
|
||||
- X
|
||||
* - Scale
|
||||
- VNFM retries a Scale operation.
|
||||
- FAILED_TEMP
|
||||
- COMPLETED or FAILED_TEMP
|
||||
- X
|
||||
- X
|
||||
* - Modify
|
||||
- VNFM retries a Modify operation.
|
||||
- FAILED_TEMP
|
||||
- COMPLETED or FAILED_TEMP
|
||||
- X
|
||||
- X
|
||||
* - Change external connectivity
|
||||
- VNFM retries a Change external connectivity operation.
|
||||
- FAILED_TEMP
|
||||
- COMPLETED or FAILED_TEMP
|
||||
- X
|
||||
- X
|
||||
* - Change Current VNF Package
|
||||
- VNFM retries a Change Current VNF Package operation.
|
||||
- FAILED_TEMP
|
||||
- COMPLETED or FAILED_TEMP
|
||||
-
|
||||
- X
|
||||
|
||||
|
||||
This manual describes the following operations as use cases for
|
||||
retry operations.
|
||||
@@ -533,193 +368,11 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Retry request for LCM operation 304538dd-d754-4661-9f17-5496dab9693d has been accepted
|
||||
Retry request for LCM operation c7afb90a-351b-4d33-a945-8f937deeadb4 has been accepted
|
||||
|
||||
|
||||
If "Retry VNF lifecycle management operation" is successful,
|
||||
then another LCM can be operational.
|
||||
|
||||
Error-handling of MgmtDriver
|
||||
----------------------------
|
||||
|
||||
This section only applies to the `VNF LCM v2 API`_.
|
||||
Error-handling includes Retry, Rollback and Fail operations.
|
||||
|
||||
* For the fail operation, it will not perform LCM when it is executed,
|
||||
so there is no need to use MgmtDriver.
|
||||
|
||||
* For the retry operation, it will perform the LCM again when it is executed,
|
||||
so as long as the LCM is configured with MgmtDriver, the MgmtDriver will
|
||||
also be called during the retry operation, and no additional configuration
|
||||
is required.
|
||||
|
||||
* For the rollback operation,
|
||||
because there is no definition of ``rollback_start`` and ``rollback_end`` in
|
||||
``6.7 Interface Types`` of `NFV-SOL001 v3.3.1`_, so when the rollback
|
||||
operation is performed, MgmtDriver will not be called.
|
||||
|
||||
The VNFD in the VNF Package must be modified before calling MgmtDriver in the
|
||||
rollback operation.
|
||||
|
||||
.. note::
|
||||
|
||||
In the MgmtDriver, the user saves the data that needs to be kept
|
||||
when the LCM fails in the ``user_script_err_handling_data`` variable.
|
||||
It is saved in the corresponding VNF_LCM_OP_OCC, and can be viewed through
|
||||
`Show VNF LCM OP OCC`_.
|
||||
|
||||
During error-handling (retry or rollback), use the data in the
|
||||
``user_script_err_handling_data`` variable to perform corresponding
|
||||
processing.
|
||||
|
||||
Modifications of VNF Package
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Users need to make the following modifications when creating a `VNF Package`_.
|
||||
|
||||
The rollback operation currently supports multiple `LCM operations`_.
|
||||
The following takes the rollback operations of instantiate and scale-out
|
||||
as examples to demonstrate how to modify VNFD.
|
||||
|
||||
.. note::
|
||||
|
||||
The following provides the sample files ``v2_sample2_df_simple.yaml`` and
|
||||
``v2_sample2_types.yaml`` that need to be modified, which are stored in
|
||||
the Definitions directory of the VNF Package.
|
||||
|
||||
* ``v2_sample2_df_simple.yaml`` corresponds to
|
||||
`Topology Template Files`_ in VNFD.
|
||||
|
||||
* ``v2_sample2_types.yaml`` corresponds to
|
||||
`User defined types definition file`_ in VNFD.
|
||||
|
||||
* In ``v2_sample2_df_simple.yaml``, ``xxx_rollback_start`` and
|
||||
``xxx_rollback_end`` need to be added under
|
||||
``topology_template.node_templates.VNF.interfaces.Vnflcm``.
|
||||
|
||||
The following is the content of ``v2_sample2_df_simple.yaml``, the unmodified
|
||||
part is replaced by "``...``" :
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
topology_template:
|
||||
...
|
||||
node_templates:
|
||||
VNF:
|
||||
type: company.provider.VNF
|
||||
properties:
|
||||
flavour_description: A simple flavour
|
||||
interfaces:
|
||||
Vnflcm:
|
||||
instantiate_start:
|
||||
implementation: mgmt-driver-script
|
||||
instantiate_end:
|
||||
implementation: mgmt-driver-script
|
||||
heal_start:
|
||||
implementation: mgmt-driver-script
|
||||
heal_end:
|
||||
implementation: mgmt-driver-script
|
||||
scale_start:
|
||||
implementation: mgmt-driver-script
|
||||
scale_end:
|
||||
implementation: mgmt-driver-script
|
||||
terminate_start:
|
||||
implementation: mgmt-driver-script
|
||||
terminate_end:
|
||||
implementation: mgmt-driver-script
|
||||
change_external_connectivity_start:
|
||||
implementation: mgmt-driver-script
|
||||
change_external_connectivity_end:
|
||||
implementation: mgmt-driver-script
|
||||
modify_information_start:
|
||||
implementation: mgmt-driver-script
|
||||
modify_information_end:
|
||||
implementation: mgmt-driver-script
|
||||
instantiate_rollback_start:
|
||||
implementation: mgmt-driver-script
|
||||
instantiate_rollback_end:
|
||||
implementation: mgmt-driver-script
|
||||
scale_rollback_start:
|
||||
implementation: mgmt-driver-script
|
||||
scale_rollback_end:
|
||||
implementation: mgmt-driver-script
|
||||
artifacts:
|
||||
mgmt-driver-script:
|
||||
description: Sample MgmtDriver Script
|
||||
type: tosca.artifacts.Implementation.Python
|
||||
file: ../Scripts/mgmt_driver_script.py
|
||||
|
||||
.. note::
|
||||
|
||||
If some definitions of ``xxx_start`` and ``xxx_end`` are added in VNFD,
|
||||
corresponding ``xxx_start`` and ``xxx_end`` functions must also be
|
||||
added in MgmtDriver.
|
||||
|
||||
* In ``v2_sample2_types.yaml``, the definition of ``interface_types`` needs to
|
||||
be added, and the definition of ``type`` needs to be modified under
|
||||
``node_types.company.provider.VNF.interfaces.Vnflcm``.
|
||||
|
||||
The following is the content of ``v2_sample2_types.yaml``, the unmodified
|
||||
part is replaced by "``...``" :
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
interface_types:
|
||||
sample.test.Vnflcm:
|
||||
derived_from: tosca.interfaces.nfv.Vnflcm
|
||||
instantiate_start:
|
||||
description: Invoked before instantiate
|
||||
instantiate_end:
|
||||
description: Invoked after instantiate
|
||||
heal_start:
|
||||
description: Invoked before heal
|
||||
heal_end:
|
||||
description: Invoked after heal
|
||||
scale_start:
|
||||
description: Invoked before scale
|
||||
scale_end:
|
||||
description: Invoked after scale
|
||||
terminate_start:
|
||||
description: Invoked before terminate
|
||||
terminate_end:
|
||||
description: Invoked after terminate
|
||||
change_external_connectivity_start:
|
||||
description: Invoked before change_external_connectivity
|
||||
change_external_connectivity_end:
|
||||
description: Invoked after change_external_connectivity
|
||||
modify_information_start:
|
||||
description: Invoked before modify_information
|
||||
modify_information_end:
|
||||
description: Invoked after modify_information
|
||||
instantiate_rollback_start:
|
||||
description: Invoked before instantiate_rollback
|
||||
instantiate_rollback_end:
|
||||
description: Invoked after instantiate_rollback
|
||||
scale_rollback_start:
|
||||
description: Invoked before scale_rollback
|
||||
scale_rollback_end:
|
||||
description: Invoked after scale_rollback
|
||||
|
||||
node_types:
|
||||
company.provider.VNF:
|
||||
...
|
||||
interfaces:
|
||||
Vnflcm:
|
||||
type: sample.test.Vnflcm
|
||||
|
||||
After the above modification, MgmtDriver can also be called in error-handling.
|
||||
|
||||
.. note::
|
||||
|
||||
In the process of error-handling, the specific action of MgmtDriver
|
||||
needs to be customized by the user or provider.
|
||||
|
||||
.. _VNF LCM v1 API : https://docs.openstack.org/api-ref/nfv-orchestration/v1/vnflcm.html
|
||||
.. _VNF LCM v2 API : https://docs.openstack.org/api-ref/nfv-orchestration/v2/vnflcm.html
|
||||
.. _Keystone API reference : https://docs.openstack.org/api-ref/identity/v3/#password-authentication-with-scoped-authorization
|
||||
.. _NFV-SOL001 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/001/03.03.01_60/gs_nfv-sol001v030301p.pdf
|
||||
.. _Show VNF LCM OP OCC : https://docs.openstack.org/api-ref/nfv-orchestration/v2/vnflcm.html#show-vnf-lcm-operation-occurrence-v2
|
||||
.. _VNF Package : https://docs.openstack.org/tacker/latest/user/vnf-package.html
|
||||
.. _LCM operations : https://docs.openstack.org/tacker/latest/user/etsi_vnf_error_handling.html#rollback-vnf-lcm-operation
|
||||
.. _User defined types definition file : https://docs.openstack.org/tacker/latest/user/vnfd-sol001.html#user-defined-types-definition-file
|
||||
.. _Topology Template Files : https://docs.openstack.org/tacker/latest/user/vnfd-sol001.html#topology-template-file-with-deployment-flavour
|
||||
.. _VNF LCM v1 API: https://docs.openstack.org/api-ref/nfv-orchestration/v1/vnflcm.html
|
||||
@@ -2,7 +2,13 @@
|
||||
ETSI NFV-SOL VNF Healing
|
||||
========================
|
||||
|
||||
This document describes how to heal VNF in Tacker.
|
||||
This document describes how to heal VNF in Tacker v1 API.
|
||||
|
||||
.. note::
|
||||
|
||||
This is a document for Tacker v1 API.
|
||||
See :doc:`/user/v2/vnf/heal/index` for Tacker v2 API.
|
||||
|
||||
|
||||
Overview
|
||||
--------
|
||||
@@ -17,17 +23,16 @@ The diagram below shows an overview of the VNF healing.
|
||||
2. Call OpenStack Heat API
|
||||
|
||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
tacker-conductor. In tacker-conductor, the request is redirected again to
|
||||
an appropriate infra-driver (in this case OpenStack infra-driver) according
|
||||
to the contents of the instantiate parameters. Then, OpenStack infra-driver
|
||||
to the contents of the instantiate parameters. Then, OpenStack infra-driver
|
||||
calls OpenStack Heat APIs.
|
||||
|
||||
3. Re-create VMs
|
||||
|
||||
OpenStack Heat re-creates VMs according to the API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_vnf_healing.png
|
||||
:align: left
|
||||
.. figure:: /_images/etsi_vnf_healing.png
|
||||
|
||||
|
||||
Prerequisites
|
||||
@@ -39,14 +44,17 @@ The following packages should be installed:
|
||||
* python-tackerclient
|
||||
|
||||
A default VIM should be registered according to
|
||||
:doc:`../cli/cli-legacy-vim`.
|
||||
:doc:`/cli/cli-legacy-vim`.
|
||||
|
||||
The VNF Package(sample_vnf_pkg.zip) used below is prepared
|
||||
by referring to :doc:`./vnf-package`.
|
||||
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||
by referring to :doc:`/user/vnf-package`.
|
||||
|
||||
Execute up to "Instantiate VNF" in the procedure of
|
||||
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
||||
In other words, the procedure after "Terminate VNF" is not executed.
|
||||
The procedure of prepare for healing operation that from "register VIM" to
|
||||
"Instantiate VNF", basically refer to
|
||||
:doc:`/user/etsi_vnf_deployment_as_vm_with_tosca` or
|
||||
:doc:`/user/etsi_vnf_deployment_as_vm_with_user_data`.
|
||||
|
||||
This procedure uses an example using the sample VNF package.
|
||||
|
||||
|
||||
Healing Target VNF Instance
|
||||
@@ -64,193 +72,525 @@ Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------+
|
||||
| ID | 9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "extCpInfo": [ |
|
||||
| | { |
|
||||
| | "id": "241e6022-c9be-4ad6-b7a7-ecb32de20475", |
|
||||
| | "cpdId": "CP1", |
|
||||
| | "extLinkPortId": null, |
|
||||
| | "associatedVnfcCpId": "b07ba349-1366-4d14-91e9-07842cdfa7ab", |
|
||||
| | "cpProtocolInfo": [ |
|
||||
| | { |
|
||||
| | "layerProtocol": "IP_OVER_ETHERNET" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extVirtualLinkInfo": [ |
|
||||
| | { |
|
||||
| | "id": "net0", |
|
||||
| | "resourceHandle": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d", |
|
||||
| | "vimLevelResourceType": null |
|
||||
| | } |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfcResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "b07ba349-1366-4d14-91e9-07842cdfa7ab", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
||||
| | "resourceId": "794b9460-d799-4398-98a4-413fb04d2051", |
|
||||
| | "vimLevelResourceType": "OS::Nova::Server" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [], |
|
||||
| | "vnfcCpInfo": [ |
|
||||
| | { |
|
||||
| | "id": "f7297196-a024-4a90-9393-aadeb7de1fb3", |
|
||||
| | "cpdId": "CP1", |
|
||||
| | "vnfExtCpId": null, |
|
||||
| | "vnfLinkPortId": "cf733c70-8dc2-46b8-8d76-2ebd0bb5bd07", |
|
||||
| | "cpProtocolInfo": [ |
|
||||
| | { |
|
||||
| | "layerProtocol": "IP_OVER_ETHERNET" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "f3851831-ed25-4e73-b913-6725085c7484", |
|
||||
| | "cpdId": "CP2", |
|
||||
| | "vnfExtCpId": null, |
|
||||
| | "vnfLinkPortId": "8cc28f47-ee72-420e-b4e8-26913d60bf55" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "aae43bc1-a54e-46e8-9371-59c1ef5fc84d", |
|
||||
| | "vduId": "VDU2", |
|
||||
| | "computeResource": { |
|
||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
||||
| | "resourceId": "20e10aed-16e9-4f7c-ad0c-1e885cc1200e", |
|
||||
| | "vimLevelResourceType": "OS::Nova::Server" |
|
||||
| | }, |
|
||||
| | "storageResourceIds": [ |
|
||||
| | "21703823-33b3-4f06-a52c-28b455146a4a" |
|
||||
| | ], |
|
||||
| | "vnfcCpInfo": [ |
|
||||
| | { |
|
||||
| | "id": "d0088ed3-1639-4f3b-a369-3baae7e86540", |
|
||||
| | "cpdId": "CP3", |
|
||||
| | "vnfExtCpId": null, |
|
||||
| | "vnfLinkPortId": "d5fe9f7b-f50d-49dc-a3c8-ded2843005e4" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfVirtualLinkResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "45588051-a413-41a0-a55c-b31fb50fb351", |
|
||||
| | "vnfVirtualLinkDescId": "internalVL2", |
|
||||
| | "networkResource": { |
|
||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
||||
| | "resourceId": "f45802ae-7fff-4c6e-b62f-3d55baec4c6b", |
|
||||
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||
| | }, |
|
||||
| | "vnfLinkPorts": [ |
|
||||
| | { |
|
||||
| | "id": "8cc28f47-ee72-420e-b4e8-26913d60bf55", |
|
||||
| | "resourceHandle": { |
|
||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
||||
| | "resourceId": "e020ad8f-3f85-4d13-98c1-3ea476bf2d1a", |
|
||||
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||
| | }, |
|
||||
| | "cpInstanceId": "f3851831-ed25-4e73-b913-6725085c7484" |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "d5fe9f7b-f50d-49dc-a3c8-ded2843005e4", |
|
||||
| | "resourceHandle": { |
|
||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
||||
| | "resourceId": "8f1588e5-4410-40eb-84ee-28336a6a0212", |
|
||||
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||
| | }, |
|
||||
| | "cpInstanceId": "d0088ed3-1639-4f3b-a369-3baae7e86540" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "66f3fa97-4046-4fa4-b1ff-19295501021f", |
|
||||
| | "vnfVirtualLinkDescId": "net0", |
|
||||
| | "networkResource": { |
|
||||
| | "vimConnectionId": null, |
|
||||
| | "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d", |
|
||||
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||
| | }, |
|
||||
| | "vnfLinkPorts": [ |
|
||||
| | { |
|
||||
| | "id": "cf733c70-8dc2-46b8-8d76-2ebd0bb5bd07", |
|
||||
| | "resourceHandle": { |
|
||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
||||
| | "resourceId": "1db39a17-bbae-4074-8623-8a8026b51647", |
|
||||
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||
| | }, |
|
||||
| | "cpInstanceId": "f7297196-a024-4a90-9393-aadeb7de1fb3" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "virtualStorageResourceInfo": [ |
|
||||
| | { |
|
||||
| | "id": "21703823-33b3-4f06-a52c-28b455146a4a", |
|
||||
| | "virtualStorageDescId": "VirtualStorage", |
|
||||
| | "storageResource": { |
|
||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
||||
| | "resourceId": "c6231ea2-6a90-4ba4-b38b-778a5d7110ee", |
|
||||
| | "vimLevelResourceType": "OS::Cinder::Volume" |
|
||||
| | } |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfcInfo": [ |
|
||||
| | { |
|
||||
| | "id": "4c999b33-3004-4b44-a826-49d07f5becb9", |
|
||||
| | "vduId": "VDU1", |
|
||||
| | "vnfcState": "STARTED" |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "d8f83af0-1b4d-4f57-b53c-fd028849be8f", |
|
||||
| | "vduId": "VDU2", |
|
||||
| | "vnfcState": "STARTED" |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "additionalParams": {} |
|
||||
| | } |
|
||||
| Instantiation State | INSTANTIATED |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/9e086f34-b3c9-4986-b5e5-609a5ac4c1f9" |
|
||||
| | }, |
|
||||
| | "terminate": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/9e086f34-b3c9-4986-b5e5-609a5ac4c1f9/terminate" |
|
||||
| | }, |
|
||||
| | "heal": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/9e086f34-b3c9-4986-b5e5-609a5ac4c1f9/heal" |
|
||||
| | }, |
|
||||
| | "changeExtConn": { |
|
||||
| | "href": "/vnflcm/v1/vnf_instances/9e086f34-b3c9-4986-b5e5-609a5ac4c1f9/change_ext_conn" |
|
||||
| | } |
|
||||
| | } |
|
||||
| VIM Connection Info | [] |
|
||||
| VNF Instance Description | None |
|
||||
| VNF Instance Name | vnf-9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 |
|
||||
| VNF Product Name | Sample VNF |
|
||||
| VNF Provider | Company |
|
||||
| VNF Software Version | 1.0 |
|
||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||
| VNFD Version | 1.0 |
|
||||
| vnfPkgId | |
|
||||
+--------------------------+-------------------------------------------------------------------------------------------------+
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||
| ID | c3f9c200-7f52-42c5-9c64-6032faa3faf8 |
|
||||
| Instantiated Vnf Info | { |
|
||||
| | "flavourId": "simple", |
|
||||
| | "vnfState": "STARTED", |
|
||||
| | "scaleStatus": [ |
|
||||
| | { |
|
||||
| | "aspectId": "worker_instance", |
|
||||
| | "scaleLevel": 0 |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extCpInfo": [ |
|
||||
| | { |
|
||||
| | "id": "d7c14d6f-3bac-4e11-a512-5101b4933545", |
|
||||
| | "cpdId": "VDU1_CP1", |
|
||||
| | "extLinkPortId": null, |
|
||||
| | "associatedVnfcCpId": "b0f677ce-93db-416a-839b-998707338d14", |
|
||||
| | "cpProtocolInfo": [] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "e3513495-c555-4a1f-a9cc-07a0feae2720", |
|
||||
| | "cpdId": "VDU2_CP1", |
|
||||
| | "extLinkPortId": null, |
|
||||
| | "associatedVnfcCpId": "9da6945b-d9a3-4001-a03a-7b239b7e7084", |
|
||||
| | "cpProtocolInfo": [] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "53c187aa-d05c-4995-9518-3119ac02ee66", |
|
||||
| | "cpdId": "VDU1_CP2", |
|
||||
| | "extLinkPortId": null, |
|
||||
| | "associatedVnfcCpId": "b0f677ce-93db-416a-839b-998707338d14", |
|
||||
| | "cpProtocolInfo": [ |
|
||||
| | { |
|
||||
| | "layerProtocol": "IP_OVER_ETHERNET", |
|
||||
| | "ipOverEthernet": { |
|
||||
| | "macAddress": null, |
|
||||
| | "ipAddresses": [ |
|
||||
| | { |
|
||||
| | "type": "IPV4", |
|
||||
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
|
||||
| | "isDynamic": false, |
|
||||
| | "addresses": [ |
|
||||
| | "22.22.1.10" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40", |
|
||||
| | "cpdId": "VDU2_CP2", |
|
||||
| | "extLinkPortId": null, |
|
||||
| | "associatedVnfcCpId": "9da6945b-d9a3-4001-a03a-7b239b7e7084", |
|
||||
| | "cpProtocolInfo": [ |
|
||||
| | { |
|
||||
| | "layerProtocol": "IP_OVER_ETHERNET", |
|
||||
| | "ipOverEthernet": { |
|
||||
| | "macAddress": null, |
|
||||
| | "ipAddresses": [ |
|
||||
| | { |
|
||||
| | "type": "IPV4", |
|
||||
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
|
||||
| | "isDynamic": false, |
|
||||
| | "addresses": [ |
|
||||
| | "22.22.1.20" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "extVirtualLinkInfo": [ |
|
||||
| | { |
|
||||
| | "id": "91bcff6d-4703-4ba9-b1c2-009e6db92a9c", |
|
||||
| | "resourceHandle": { |
|
||||
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||
| | "resourceId": "3019b1e7-99d8-4748-97ac-104922bc78d9", |
|
||||
| | "vimLevelResourceType": null |
|
||||
| | }, |
|
||||
| | "extLinkPorts": [ |
|
||||
| | { |
|
||||
| | "id": "6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f", |
|
||||
| | "resourceHandle": { |
|
||||
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||
| | "resourceId": "972a375d-921f-46f5-bfdb-19af95fc49e1", |
|
||||
| | "vimLevelResourceType": null |
|
||||
| | }, |
|
||||
| | "cpInstanceId": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40" |
|
||||
| | }, |
|
||||
| | { |
|
||||
| | "id": "02d867e7-b955-4b4a-b92f-c78c7ede63bf", |
|
||||
| | "resourceHandle": { |
|
||||
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||
| | "resourceId": "b853b5c5-cd97-4dfb-8750-cac6e5c62477", |
|
||||
| | "vimLevelResourceType": null |
|
||||
| | }, |
|
||||
| | "cpInstanceId": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40" |
|
||||