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
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
|
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
|
Overview
|
||||||
--------
|
--------
|
||||||
@ -17,17 +23,16 @@ The diagram below shows an overview of the CNF healing.
|
|||||||
2. Call Kubernetes API
|
2. Call Kubernetes API
|
||||||
|
|
||||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
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
|
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.
|
infra-driver calls Kubernetes APIs.
|
||||||
|
|
||||||
3. Re-create Pods
|
3. Re-create Pods
|
||||||
|
|
||||||
Kubernetes Master re-creates Pods according to the API calls.
|
Kubernetes Master re-creates Pods according to the API calls.
|
||||||
|
|
||||||
.. figure:: ../_images/etsi_cnf_healing.png
|
.. figure:: /_images/etsi_cnf_healing.png
|
||||||
:align: left
|
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
@ -40,10 +45,11 @@ The following packages should be installed:
|
|||||||
|
|
||||||
The procedure of prepare for healing operation that from "register VIM" to
|
The procedure of prepare for healing operation that from "register VIM" to
|
||||||
"Instantiate VNF", basically refer 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.
|
This procedure uses an example using the sample VNF package.
|
||||||
|
|
||||||
|
|
||||||
How to Create VNF Package for Healing
|
How to Create VNF Package for Healing
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Using `samples/tests/etc/samples/etsi/nfv/test_cnf_heal`_,
|
Using `samples/tests/etc/samples/etsi/nfv/test_cnf_heal`_,
|
||||||
@ -59,19 +65,21 @@ on TOSCA specifications.
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ cd Definitions
|
$ 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_common_types.yaml
|
||||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_vnfd_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.
|
CSAR Package should be compressed into a ZIP file for uploading.
|
||||||
Following commands are an example of compressing a VNF Package:
|
Following commands are an example of compressing a VNF Package:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ cd -
|
$ cd -
|
||||||
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/
|
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/
|
||||||
$ ls
|
$ ls
|
||||||
Definitions deployment.zip Files TOSCA-Metadata
|
Definitions deployment.zip Files TOSCA-Metadata
|
||||||
|
|
||||||
|
|
||||||
After creating a vnf package with :command:`openstack vnf package create`,
|
After creating a vnf package with :command:`openstack vnf package create`,
|
||||||
some information including ID, Links,
|
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,
|
When the Onboarding State is CREATED, the Operational State is DISABLED,
|
||||||
and the Usage State is NOT_IN_USE, indicate the creation is successful.
|
and the Usage State is NOT_IN_USE, indicate the creation is successful.
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package create
|
$ openstack vnf package create
|
||||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
| ID | 08d00a5c-e8aa-4219-9412-411458eaa7d2 |
|
| ID | 094c8abf-b5c8-45a1-9332-3952a710c65c |
|
||||||
| Links | { |
|
| Links | { |
|
||||||
| | "self": { |
|
| | "self": { |
|
||||||
| | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2" |
|
| | "href": "/vnfpkgm/v1/vnf_packages/094c8abf-b5c8-45a1-9332-3952a710c65c" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "packageContent": { |
|
| | "packageContent": { |
|
||||||
| | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2/package_content" |
|
| | "href": "/vnfpkgm/v1/vnf_packages/094c8abf-b5c8-45a1-9332-3952a710c65c/package_content" |
|
||||||
| | } |
|
| | } |
|
||||||
| | } |
|
| | } |
|
||||||
| Onboarding State | CREATED |
|
| Onboarding State | CREATED |
|
||||||
| Operational State | DISABLED |
|
| Operational State | DISABLED |
|
||||||
| Usage State | NOT_IN_USE |
|
| Usage State | NOT_IN_USE |
|
||||||
| User Defined Data | {} |
|
| User Defined Data | {} |
|
||||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
Upload the CSAR zip file to the VNF Package by running the following command
|
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>`.
|
: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
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package upload --path deployment.zip 08d00a5c-e8aa-4219-9412-411458eaa7d2
|
$ openstack vnf package upload --path deployment.zip 094c8abf-b5c8-45a1-9332-3952a710c65c
|
||||||
Upload request for VNF package 08d00a5c-e8aa-4219-9412-411458eaa7d2 has been accepted.
|
Upload request for VNF package 094c8abf-b5c8-45a1-9332-3952a710c65c has been accepted.
|
||||||
|
|
||||||
|
|
||||||
Create VNF instance by running :command:`openstack vnflcm create <VNFD ID>`.
|
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
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
| ID | 2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||||
| Instantiation State | NOT_INSTANTIATED |
|
| Instantiation State | NOT_INSTANTIATED |
|
||||||
| Links | { |
|
| Links | { |
|
||||||
| | "self": { |
|
| | "self": { |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "instantiate": { |
|
| | "instantiate": { |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/instantiate" |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/instantiate" |
|
||||||
| | } |
|
| | } |
|
||||||
| | } |
|
| | } |
|
||||||
| VNF Instance Description | None |
|
| VNF Configurable Properties | |
|
||||||
| VNF Instance Name | None |
|
| VNF Instance Description | |
|
||||||
| VNF Product Name | Sample VNF |
|
| VNF Instance Name | vnf-2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||||
| VNF Provider | Company |
|
| VNF Product Name | Sample VNF |
|
||||||
| VNF Software Version | 1.0 |
|
| VNF Provider | Company |
|
||||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
| VNF Software Version | 1.0 |
|
||||||
| VNFD Version | 1.0 |
|
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
| VNFD Version | 1.0 |
|
||||||
|
| vnfPkgId | |
|
||||||
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
After the command is executed, instantiate VNF.
|
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
|
includes path of Kubernetes resource definition file and that
|
||||||
``lcm-kubernetes-def-files`` should be a list.
|
``lcm-kubernetes-def-files`` should be a list.
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ cat ./instance_kubernetes.json
|
$ cat ./instance_kubernetes.json
|
||||||
{
|
{
|
||||||
"flavourId": "simple",
|
"flavourId": "simple",
|
||||||
"additionalParams": {
|
"additionalParams": {
|
||||||
"lcm-kubernetes-def-files": [
|
"lcm-kubernetes-def-files": [
|
||||||
"Files/kubernetes/deployment_heal_simple.yaml"
|
"Files/kubernetes/deployment_heal_simple.yaml"
|
||||||
]
|
|
||||||
},
|
|
||||||
"vimConnectionInfo": [
|
|
||||||
{
|
|
||||||
"id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
|
|
||||||
"vimId": "8d8373fe-6977-49ff-83ac-7756572ed186",
|
|
||||||
"vimType": "kubernetes"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
$ openstack vnflcm instantiate 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 instance_kubernetes.json
|
"vimConnectionInfo": [
|
||||||
Instantiate request for VNF Instance 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 has been accepted.
|
{
|
||||||
|
"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
|
CNF Healing Procedure
|
||||||
---------------------
|
---------------------
|
||||||
@ -180,7 +190,7 @@ CNF Healing Procedure
|
|||||||
As mentioned in Prerequisites and Healing target VNF instance, the VNF must be
|
As mentioned in Prerequisites and Healing target VNF instance, the VNF must be
|
||||||
instantiated before healing.
|
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.
|
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
|
resources of Kubernetes such as Deployment, DaemonSet, StatefulSet and
|
||||||
ReplicaSet.
|
ReplicaSet.
|
||||||
|
|
||||||
.. note:: A VNFC is a 'VNF Component', and one VNFC basically corresponds to
|
.. note::
|
||||||
one VDU in the VNF. For more information on VNFC, see
|
|
||||||
`NFV-SOL002 v2.6.1`_.
|
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
|
Healing Target VNF Instance
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -211,77 +222,98 @@ This instance will be healed.
|
|||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID
|
$ openstack vnflcm show VNF_INSTANCE_ID
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
| ID | 2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||||
| Instantiated Vnf Info | { |
|
| Instantiated Vnf Info | { |
|
||||||
| | "flavourId": "simple", |
|
| | "flavourId": "simple", |
|
||||||
| | "vnfState": "STARTED", |
|
| | "vnfState": "STARTED", |
|
||||||
| | "scaleStatus": [ |
|
| | "scaleStatus": [ |
|
||||||
| | { |
|
| | { |
|
||||||
| | "aspectId": "vdu1_aspect", |
|
| | "aspectId": "vdu1_aspect", |
|
||||||
| | "scaleLevel": 0 |
|
| | "scaleLevel": 0 |
|
||||||
| | } |
|
| | } |
|
||||||
| | ], |
|
| | ], |
|
||||||
| | "extCpInfo": [], |
|
| | "extCpInfo": [], |
|
||||||
| | "vnfcResourceInfo": [ |
|
| | "vnfcResourceInfo": [ |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "686b356f-8096-4e24-99e5-3c81d36341be", |
|
| | "id": "da087f50-521a-4f71-a3e4-3464a196d4e6", |
|
||||||
| | "vduId": "VDU1", |
|
| | "vduId": "VDU1", |
|
||||||
| | "computeResource": { |
|
| | "computeResource": { |
|
||||||
| | "vimConnectionId": null, |
|
| | "vimConnectionId": null, |
|
||||||
| | "resourceId": "vdu1-heal-simple-75b5566444-wgc7m", |
|
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-dcjpn", |
|
||||||
| | "vimLevelResourceType": "Deployment" |
|
| | "vimLevelResourceType": "Deployment" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "storageResourceIds": [] |
|
| | "storageResourceIds": [] |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "73cb41e7-31ae-494b-b4d0-66b8168c257e", |
|
| | "id": "4e66f5d3-a4c5-4025-8ad8-6ad21414cffa", |
|
||||||
| | "vduId": "VDU1", |
|
| | "vduId": "VDU1", |
|
||||||
| | "computeResource": { |
|
| | "computeResource": { |
|
||||||
| | "vimConnectionId": null, |
|
| | "vimConnectionId": null, |
|
||||||
| | "resourceId": "vdu1-heal-simple-75b5566444-wwzcm", |
|
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-hmsbh", |
|
||||||
| | "vimLevelResourceType": "Deployment" |
|
| | "vimLevelResourceType": "Deployment" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "storageResourceIds": [] |
|
| | "storageResourceIds": [] |
|
||||||
| | } |
|
| | } |
|
||||||
| | ], |
|
| | ], |
|
||||||
| | "additionalParams": {} |
|
| | "additionalParams": { |
|
||||||
| | } |
|
| | "lcm-kubernetes-def-files": [ |
|
||||||
| Instantiation State | INSTANTIATED |
|
| | "Files/kubernetes/deployment_heal_simple.yaml" |
|
||||||
| Links | { |
|
| | ] |
|
||||||
| | "self": { |
|
| | } |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
| | } |
|
||||||
| | }, |
|
| Instantiation State | INSTANTIATED |
|
||||||
| | "terminate": { |
|
| Links | { |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/terminate" |
|
| | "self": { |
|
||||||
| | }, |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959" |
|
||||||
| | "heal": { |
|
| | }, |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/heal" |
|
| | "terminate": { |
|
||||||
| | } |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/terminate" |
|
||||||
| | } |
|
| | }, |
|
||||||
| VIM Connection Info | [ |
|
| | "heal": { |
|
||||||
| | { |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/heal" |
|
||||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
| | }, |
|
||||||
| | "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186", |
|
| | "changeExtConn": { |
|
||||||
| | "vimType": "kubernetes", |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/change_ext_conn" |
|
||||||
| | "interfaceInfo": {}, |
|
| | } |
|
||||||
| | "accessInfo": {} |
|
| | } |
|
||||||
| | } |
|
| VIM Connection Info | [ |
|
||||||
| | ] |
|
| | { |
|
||||||
| VNF Instance Description | None |
|
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||||
| VNF Instance Name | None |
|
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||||
| VNF Product Name | Sample VNF |
|
| | "vimType": "kubernetes", |
|
||||||
| VNF Provider | Company |
|
| | "interfaceInfo": {}, |
|
||||||
| VNF Software Version | 1.0 |
|
| | "accessInfo": {}, |
|
||||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
| | "extra": {} |
|
||||||
| VNFD Version | 1.0 |
|
| | }, |
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
| | { |
|
||||||
|
| | "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
|
How to Heal of the Entire VNF
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -296,8 +328,9 @@ Pod information before heal:
|
|||||||
|
|
||||||
$ kubectl get pod
|
$ kubectl get pod
|
||||||
NAME READY STATUS RESTARTS AGE
|
NAME READY STATUS RESTARTS AGE
|
||||||
vdu1-heal-simple-75b5566444-wgc7m 1/1 Running 0 20m
|
vdu1-heal-simple-6d649fd6f7-dcjpn 1/1 Running 0 11m
|
||||||
vdu1-heal-simple-75b5566444-wwzcm 1/1 Running 0 20m
|
vdu1-heal-simple-6d649fd6f7-hmsbh 1/1 Running 0 11m
|
||||||
|
|
||||||
|
|
||||||
Heal entire VNF can be executed by the following CLI command.
|
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
|
$ openstack vnflcm heal VNF_INSTANCE_ID
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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:
|
Pod information after heal:
|
||||||
|
|
||||||
@ -317,91 +352,113 @@ Pod information after heal:
|
|||||||
|
|
||||||
$ kubectl get pod
|
$ kubectl get pod
|
||||||
NAME READY STATUS RESTARTS AGE
|
NAME READY STATUS RESTARTS AGE
|
||||||
vdu1-heal-simple-75b5566444-ks785 1/1 Running 0 60s
|
vdu1-heal-simple-6d649fd6f7-2wvxj 1/1 Running 0 17s
|
||||||
vdu1-heal-simple-75b5566444-p5mjv 1/1 Running 0 60s
|
vdu1-heal-simple-6d649fd6f7-tj4vx 1/1 Running 0 17s
|
||||||
|
|
||||||
|
|
||||||
All ``vnfcResourceInfo`` in ``Instantiated Vnf Info`` will be updated from
|
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
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID
|
$ openstack vnflcm show VNF_INSTANCE_ID
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
| ID | 2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||||
| Instantiated Vnf Info | { |
|
| Instantiated Vnf Info | { |
|
||||||
| | "flavourId": "simple", |
|
| | "flavourId": "simple", |
|
||||||
| | "vnfState": "STARTED", |
|
| | "vnfState": "STARTED", |
|
||||||
| | "scaleStatus": [ |
|
| | "scaleStatus": [ |
|
||||||
| | { |
|
| | { |
|
||||||
| | "aspectId": "vdu1_aspect", |
|
| | "aspectId": "vdu1_aspect", |
|
||||||
| | "scaleLevel": 0 |
|
| | "scaleLevel": 0 |
|
||||||
| | } |
|
| | } |
|
||||||
| | ], |
|
| | ], |
|
||||||
| | "extCpInfo": [], |
|
| | "extCpInfo": [], |
|
||||||
| | "vnfcResourceInfo": [ |
|
| | "vnfcResourceInfo": [ |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "a77b9a8e-a672-492d-9459-81c7b6483947", |
|
| | "id": "63a16aa7-ab36-4bfb-a6e3-724636155c4f", |
|
||||||
| | "vduId": "VDU1", |
|
| | "vduId": "VDU1", |
|
||||||
| | "computeResource": { |
|
| | "computeResource": { |
|
||||||
| | "vimConnectionId": null, |
|
| | "vimConnectionId": null, |
|
||||||
| | "resourceId": "vdu1-heal-simple-75b5566444-j45qb", |
|
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-2wvxj", |
|
||||||
| | "vimLevelResourceType": "Deployment" |
|
| | "vimLevelResourceType": "Deployment" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "storageResourceIds": [] |
|
| | "storageResourceIds": [] |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "9463d02b-faba-41cb-8131-e90eaa319c83", |
|
| | "id": "ca211f05-2509-4abf-b6f2-a553d18a6863", |
|
||||||
| | "vduId": "VDU1", |
|
| | "vduId": "VDU1", |
|
||||||
| | "computeResource": { |
|
| | "computeResource": { |
|
||||||
| | "vimConnectionId": null, |
|
| | "vimConnectionId": null, |
|
||||||
| | "resourceId": "vdu1-heal-simple-75b5566444-p5mjv", |
|
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-tj4vx", |
|
||||||
| | "vimLevelResourceType": "Deployment" |
|
| | "vimLevelResourceType": "Deployment" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "storageResourceIds": [] |
|
| | "storageResourceIds": [] |
|
||||||
| | } |
|
| | } |
|
||||||
| | ], |
|
| | ], |
|
||||||
| | "additionalParams": {} |
|
| | "additionalParams": { |
|
||||||
| | } |
|
| | "lcm-kubernetes-def-files": [ |
|
||||||
| Instantiation State | INSTANTIATED |
|
| | "Files/kubernetes/deployment_heal_simple.yaml" |
|
||||||
| Links | { |
|
| | ] |
|
||||||
| | "self": { |
|
| | } |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
| | } |
|
||||||
| | }, |
|
| Instantiation State | INSTANTIATED |
|
||||||
| | "terminate": { |
|
| Links | { |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/terminate" |
|
| | "self": { |
|
||||||
| | }, |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959" |
|
||||||
| | "heal": { |
|
| | }, |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/heal" |
|
| | "terminate": { |
|
||||||
| | } |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/terminate" |
|
||||||
| | } |
|
| | }, |
|
||||||
| VIM Connection Info | [ |
|
| | "heal": { |
|
||||||
| | { |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/heal" |
|
||||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
| | }, |
|
||||||
| | "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186", |
|
| | "changeExtConn": { |
|
||||||
| | "vimType": "kubernetes", |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/change_ext_conn" |
|
||||||
| | "interfaceInfo": {}, |
|
| | } |
|
||||||
| | "accessInfo": {} |
|
| | } |
|
||||||
| | } |
|
| VIM Connection Info | [ |
|
||||||
| | ] |
|
| | { |
|
||||||
| VNF Instance Description | None |
|
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||||
| VNF Instance Name | None |
|
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||||
| VNF Product Name | Sample VNF |
|
| | "vimType": "kubernetes", |
|
||||||
| VNF Provider | Company |
|
| | "interfaceInfo": {}, |
|
||||||
| VNF Software Version | 1.0 |
|
| | "accessInfo": {}, |
|
||||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
| | "extra": {} |
|
||||||
| VNFD Version | 1.0 |
|
| | }, |
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
| | { |
|
||||||
|
| | "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
|
How to Heal Specified with VNFC Instances
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Execute Heal of the partial CNF CLI command and check the name and age of pod
|
Execute Heal of the partial CNF CLI command and check the name and age of pod
|
||||||
information before and after healing.
|
information before and after healing.
|
||||||
This is to confirm that the name has changed and age has been new after heal.
|
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
|
$ kubectl get pod
|
||||||
NAME READY STATUS RESTARTS AGE
|
NAME READY STATUS RESTARTS AGE
|
||||||
vdu1-heal-simple-75b5566444-wgc7m 1/1 Running 0 20m
|
vdu1-heal-simple-6d649fd6f7-dcjpn 1/1 Running 0 22m
|
||||||
vdu1-heal-simple-75b5566444-wwzcm 1/1 Running 0 20m
|
vdu1-heal-simple-6d649fd6f7-hmsbh 1/1 Running 0 22m
|
||||||
|
|
||||||
|
|
||||||
Heal specified with VNFC instances can be executed by running
|
Heal specified with VNFC instances can be executed by running
|
||||||
:command:`openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID`.
|
:command:`openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID`.
|
||||||
|
|
||||||
In the example of this procedure, specify the 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``.
|
``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
|
.. 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:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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:
|
Pod information after heal:
|
||||||
|
|
||||||
@ -443,89 +499,122 @@ Pod information after heal:
|
|||||||
|
|
||||||
$ kubectl get pod
|
$ kubectl get pod
|
||||||
NAME READY STATUS RESTARTS AGE
|
NAME READY STATUS RESTARTS AGE
|
||||||
vdu1-heal-simple-75b5566444-ks785 1/1 Running 0 24s
|
vdu1-heal-simple-6d649fd6f7-2wvxj 1/1 Running 0 13s
|
||||||
vdu1-heal-simple-75b5566444-wwzcm 1/1 Running 0 20m
|
vdu1-heal-simple-6d649fd6f7-hmsbh 1/1 Running 0 22m
|
||||||
|
|
||||||
|
|
||||||
Only the ``resourceId`` of target ``vnfcResourceInfo`` in
|
Only the ``resourceId`` of target ``vnfcResourceInfo`` in
|
||||||
``Instantiated Vnf Info`` will be updated from the VNF Instance displayed in
|
``Instantiated Vnf Info`` will be updated from the VNF Instance displayed in
|
||||||
:ref:`labelCapHealingtargetVNFinstance`.
|
`Healing Target VNF Instance`_.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID
|
$ openstack vnflcm show VNF_INSTANCE_ID
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
| ID | 2a9a1197-953b-4f0a-b510-5ab4ab979959 |
|
||||||
| Instantiated Vnf Info | { |
|
| Instantiated Vnf Info | { |
|
||||||
| | "flavourId": "simple", |
|
| | "flavourId": "simple", |
|
||||||
| | "vnfState": "STARTED", |
|
| | "vnfState": "STARTED", |
|
||||||
| | "scaleStatus": [ |
|
| | "scaleStatus": [ |
|
||||||
| | { |
|
| | { |
|
||||||
| | "aspectId": "vdu1_aspect", |
|
| | "aspectId": "vdu1_aspect", |
|
||||||
| | "scaleLevel": 0 |
|
| | "scaleLevel": 0 |
|
||||||
| | } |
|
| | } |
|
||||||
| | ], |
|
| | ], |
|
||||||
| | "extCpInfo": [], |
|
| | "extCpInfo": [], |
|
||||||
| | "vnfcResourceInfo": [ |
|
| | "vnfcResourceInfo": [ |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "686b356f-8096-4e24-99e5-3c81d36341be", |
|
| | "id": "da087f50-521a-4f71-a3e4-3464a196d4e6", |
|
||||||
| | "vduId": "VDU1", |
|
| | "vduId": "VDU1", |
|
||||||
| | "computeResource": { |
|
| | "computeResource": { |
|
||||||
| | "vimConnectionId": null, |
|
| | "vimConnectionId": null, |
|
||||||
| | "resourceId": "vdu1-heal-simple-75b5566444-ks785", |
|
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-2wvxj", |
|
||||||
| | "vimLevelResourceType": "Deployment" |
|
| | "vimLevelResourceType": "Deployment" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "storageResourceIds": [] |
|
| | "storageResourceIds": [] |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "73cb41e7-31ae-494b-b4d0-66b8168c257e", |
|
| | "id": "4e66f5d3-a4c5-4025-8ad8-6ad21414cffa", |
|
||||||
| | "vduId": "VDU1", |
|
| | "vduId": "VDU1", |
|
||||||
| | "computeResource": { |
|
| | "computeResource": { |
|
||||||
| | "vimConnectionId": null, |
|
| | "vimConnectionId": null, |
|
||||||
| | "resourceId": "vdu1-heal-simple-75b5566444-wwzcm", |
|
| | "resourceId": "vdu1-heal-simple-6d649fd6f7-hmsbh", |
|
||||||
| | "vimLevelResourceType": "Deployment" |
|
| | "vimLevelResourceType": "Deployment" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "storageResourceIds": [] |
|
| | "storageResourceIds": [] |
|
||||||
| | } |
|
| | } |
|
||||||
| | ], |
|
| | ], |
|
||||||
| | "additionalParams": {} |
|
| | "additionalParams": { |
|
||||||
| | } |
|
| | "lcm-kubernetes-def-files": [ |
|
||||||
| Instantiation State | INSTANTIATED |
|
| | "Files/kubernetes/deployment_heal_simple.yaml" |
|
||||||
| Links | { |
|
| | ] |
|
||||||
| | "self": { |
|
| | } |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
| | } |
|
||||||
| | }, |
|
| Instantiation State | INSTANTIATED |
|
||||||
| | "terminate": { |
|
| Links | { |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/terminate" |
|
| | "self": { |
|
||||||
| | }, |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959" |
|
||||||
| | "heal": { |
|
| | }, |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/heal" |
|
| | "terminate": { |
|
||||||
| | } |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/terminate" |
|
||||||
| | } |
|
| | }, |
|
||||||
| VIM Connection Info | [ |
|
| | "heal": { |
|
||||||
| | { |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/heal" |
|
||||||
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
| | }, |
|
||||||
| | "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186", |
|
| | "changeExtConn": { |
|
||||||
| | "vimType": "kubernetes", |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/2a9a1197-953b-4f0a-b510-5ab4ab979959/change_ext_conn" |
|
||||||
| | "interfaceInfo": {}, |
|
| | } |
|
||||||
| | "accessInfo": {} |
|
| | } |
|
||||||
| | } |
|
| VIM Connection Info | [ |
|
||||||
| | ] |
|
| | { |
|
||||||
| VNF Instance Description | None |
|
| | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", |
|
||||||
| VNF Instance Name | None |
|
| | "vimId": "43176042-ca97-4954-9bd5-0a9c054885e1", |
|
||||||
| VNF Product Name | Sample VNF |
|
| | "vimType": "kubernetes", |
|
||||||
| VNF Provider | Company |
|
| | "interfaceInfo": {}, |
|
||||||
| VNF Software Version | 1.0 |
|
| | "accessInfo": {}, |
|
||||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
| | "extra": {} |
|
||||||
| VNFD Version | 1.0 |
|
| | }, |
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------+
|
| | { |
|
||||||
|
| | "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
|
History of Checks
|
||||||
.. _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
|
-----------------
|
||||||
|
|
||||||
|
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
|
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
|
Overview
|
||||||
--------
|
--------
|
||||||
@ -17,17 +23,17 @@ The diagram below shows an overview of the CNF scaling.
|
|||||||
2. Call Kubernetes API
|
2. Call Kubernetes API
|
||||||
|
|
||||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
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
|
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.
|
infra-driver calls Kubernetes APIs.
|
||||||
|
|
||||||
3. Change the number of Pods
|
3. Change the number of Pods
|
||||||
|
|
||||||
Kubernetes Master change the number of Pods according to the API calls.
|
Kubernetes Master change the number of Pods according to the API calls.
|
||||||
|
|
||||||
.. figure:: ../_images/etsi_cnf_scaling.png
|
.. figure:: /_images/etsi_cnf_scaling.png
|
||||||
:align: left
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
@ -39,10 +45,11 @@ The following packages should be installed:
|
|||||||
|
|
||||||
The procedure of prepare for scaling operation that from "register VIM" to
|
The procedure of prepare for scaling operation that from "register VIM" to
|
||||||
"Instantiate VNF", basically refer 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.
|
This procedure uses an example using the sample VNF package.
|
||||||
|
|
||||||
|
|
||||||
How to Create VNF Package for Scaling
|
How to Create VNF Package for Scaling
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Using `samples/tests/etc/samples/etsi/nfv/test_cnf_scale`_,
|
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
|
.. 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.
|
Download official definition files from ETSI NFV.
|
||||||
ETSI GS NFV-SOL 001 [i.4] specifies the structure and format of the VNFD based
|
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
|
.. code-block:: console
|
||||||
|
|
||||||
$ cd Definitions
|
$ 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_common_types.yaml
|
||||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_vnfd_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.
|
CSAR Package should be compressed into a ZIP file for uploading.
|
||||||
Following commands are an example of compressing a VNF Package:
|
Following commands are an example of compressing a VNF Package:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ cd -
|
$ cd -
|
||||||
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/
|
$ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/
|
||||||
$ ls
|
$ ls
|
||||||
Definitions deployment.zip Files TOSCA-Metadata
|
Definitions deployment.zip Files TOSCA-Metadata
|
||||||
|
|
||||||
|
|
||||||
After creating a vnf package with :command:`openstack vnf package create`, some
|
After creating a vnf package with :command:`openstack vnf package create`, some
|
||||||
information including ID, Links, Onboarding State, Operational State, and Usage
|
information including ID, Links, Onboarding State, Operational State, and Usage
|
||||||
@ -80,24 +90,25 @@ successful.
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package create
|
$ openstack vnf package create
|
||||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
| ID | 08d00a5c-e8aa-4219-9412-411458eaa7d2 |
|
| ID | 094c8abf-b5c8-45a1-9332-3952a710c65c |
|
||||||
| Links | { |
|
| Links | { |
|
||||||
| | "self": { |
|
| | "self": { |
|
||||||
| | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2" |
|
| | "href": "/vnfpkgm/v1/vnf_packages/094c8abf-b5c8-45a1-9332-3952a710c65c" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "packageContent": { |
|
| | "packageContent": { |
|
||||||
| | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2/package_content" |
|
| | "href": "/vnfpkgm/v1/vnf_packages/094c8abf-b5c8-45a1-9332-3952a710c65c/package_content" |
|
||||||
| | } |
|
| | } |
|
||||||
| | } |
|
| | } |
|
||||||
| Onboarding State | CREATED |
|
| Onboarding State | CREATED |
|
||||||
| Operational State | DISABLED |
|
| Operational State | DISABLED |
|
||||||
| Usage State | NOT_IN_USE |
|
| Usage State | NOT_IN_USE |
|
||||||
| User Defined Data | {} |
|
| User Defined Data | {} |
|
||||||
+-------------------+-------------------------------------------------------------------------------------------------+
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
Upload the CSAR zip file in to the VNF Package by running the following command
|
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>`
|
: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
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package upload --path deployment.zip 08d00a5c-e8aa-4219-9412-411458eaa7d2
|
$ openstack vnf package upload --path deployment.zip 094c8abf-b5c8-45a1-9332-3952a710c65c
|
||||||
Upload request for VNF package 08d00a5c-e8aa-4219-9412-411458eaa7d2 has been accepted.
|
Upload request for VNF package 094c8abf-b5c8-45a1-9332-3952a710c65c has been accepted.
|
||||||
|
|
||||||
|
|
||||||
Create VNF instance by running :command:`openstack vnflcm create <VNFD ID>`.
|
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
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
| ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 |
|
| ID | e9d7c08e-72ed-4c64-bc91-78cd82163969 |
|
||||||
| Instantiation State | NOT_INSTANTIATED |
|
| Instantiation State | NOT_INSTANTIATED |
|
||||||
| Links | { |
|
| Links | { |
|
||||||
| | "self": { |
|
| | "self": { |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/e9d7c08e-72ed-4c64-bc91-78cd82163969" |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | "instantiate": { |
|
| | "instantiate": { |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/instantiate" |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/e9d7c08e-72ed-4c64-bc91-78cd82163969/instantiate" |
|
||||||
| | } |
|
| | } |
|
||||||
| | } |
|
| | } |
|
||||||
| VNF Instance Description | None |
|
| VNF Configurable Properties | |
|
||||||
| VNF Instance Name | None |
|
| VNF Instance Description | |
|
||||||
| VNF Product Name | Sample VNF |
|
| VNF Instance Name | vnf-e9d7c08e-72ed-4c64-bc91-78cd82163969 |
|
||||||
| VNF Provider | Company |
|
| VNF Product Name | Sample VNF |
|
||||||
| VNF Software Version | 1.0 |
|
| VNF Provider | Company |
|
||||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
| VNF Software Version | 1.0 |
|
||||||
| VNFD Version | 1.0 |
|
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||||
+--------------------------+---------------------------------------------------------------------------------------------+
|
| VNFD Version | 1.0 |
|
||||||
|
| vnfPkgId | |
|
||||||
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
After the command is executed, instantiate VNF.
|
After the command is executed, instantiate VNF.
|
||||||
Instantiate VNF by running the following command
|
Instantiate VNF by running the following command
|
||||||
@ -149,29 +164,25 @@ includes path of Kubernetes resource definition file and that
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ cat ./instance_kubernetes.json
|
$ cat ./instance_kubernetes.json
|
||||||
{
|
{
|
||||||
"flavourId": "simple",
|
"flavourId": "simple",
|
||||||
"additionalParams": {
|
"additionalParams": {
|
||||||
"lcm-kubernetes-def-files": [
|
"lcm-kubernetes-def-files": [
|
||||||
"Files/kubernetes/deployment_scale.yaml"
|
"Files/kubernetes/deployment_scale.yaml"
|
||||||
]
|
|
||||||
},
|
|
||||||
"vimConnectionInfo": [
|
|
||||||
{
|
|
||||||
"id": "8a3adb69-0784-43c7-833e-aab0b6ab4470",
|
|
||||||
"vimId": "8d8373fe-6977-49ff-83ac-7756572ed186",
|
|
||||||
"vimType": "kubernetes"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
$ openstack vnflcm instantiate 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 instance_kubernetes.json
|
"vimConnectionInfo": [
|
||||||
Instantiate request for VNF Instance 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 has been accepted.
|
{
|
||||||
|
"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
|
CNF Scaling Procedure
|
||||||
---------------------
|
---------------------
|
||||||
@ -181,18 +192,22 @@ scaling.
|
|||||||
Users can scale the number of pod replicas managed by controller resources such
|
Users can scale the number of pod replicas managed by controller resources such
|
||||||
as Kubernetes Deployment, StatefulSet, and ReplicaSet.
|
as Kubernetes Deployment, StatefulSet, and ReplicaSet.
|
||||||
|
|
||||||
.. note:: If kind is Stateful Set and not dynamic provisioning
|
.. note::
|
||||||
(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`.
|
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.
|
There are two main methods for CNF scaling.
|
||||||
|
|
||||||
* Scale out CNF
|
* Scale out CNF
|
||||||
* Scale in CNF
|
* Scale in CNF
|
||||||
|
|
||||||
|
|
||||||
How to Identify ASPECT_ID
|
How to Identify ASPECT_ID
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -278,7 +293,11 @@ In the following VNFD excerpt, **vdu1_aspect** corresponds to ``ASPECT_ID``.
|
|||||||
|
|
||||||
...snip VNFD...
|
...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
|
How to Scale Out CNF
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -296,17 +315,20 @@ Replicas information before scale-out:
|
|||||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
vdu1 1/1 1 1 2d
|
vdu1 1/1 1 1 2d
|
||||||
|
|
||||||
|
|
||||||
Scale-out CNF can be executed by the following CLI command.
|
Scale-out CNF can be executed by the following CLI command.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm scale --type SCALE_OUT --aspect-id vdu1_aspect VNF_INSTANCE_ID
|
$ openstack vnflcm scale --type SCALE_OUT --aspect-id vdu1_aspect VNF_INSTANCE_ID
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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:
|
Replicas information after scale-out:
|
||||||
|
|
||||||
@ -316,6 +338,7 @@ Replicas information after scale-out:
|
|||||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
vdu1 2/2 2 2 2d
|
vdu1 2/2 2 2 2d
|
||||||
|
|
||||||
|
|
||||||
How to Scale in CNF
|
How to Scale in CNF
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -332,18 +355,20 @@ Replicas information before scale-out:
|
|||||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
vdu1 2/2 2 2 2d
|
vdu1 2/2 2 2 2d
|
||||||
|
|
||||||
|
|
||||||
Scale-in VNF can be executed by the following CLI command.
|
Scale-in VNF can be executed by the following CLI command.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm scale --type SCALE_IN --aspect-id vdu1_aspect VNF_INSTANCE_ID
|
$ openstack vnflcm scale --type SCALE_IN --aspect-id vdu1_aspect VNF_INSTANCE_ID
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Scale request for VNF Instance
|
Scale request for VNF Instance e9d7c08e-72ed-4c64-bc91-78cd82163969 has been accepted.
|
||||||
edd306c3-647c-412c-a033-74aa40118038 has been accepted.
|
|
||||||
|
|
||||||
Replicas information after scale-in:
|
Replicas information after scale-in:
|
||||||
|
|
||||||
@ -353,5 +378,18 @@ Replicas information after scale-in:
|
|||||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
vdu1 1/1 1 1 2d
|
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:
|
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
|
Following two types of VNF deployment supported by Tacker are introduced in
|
||||||
this lecture.
|
this lecture.
|
||||||
|
|
||||||
- VNF Deployment with TOSCA [#f1]_
|
- :doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`
|
||||||
- VNF Deployment with LCM Operation User Data (optional) [#f2]_
|
- :doc:`/user/etsi_vnf_deployment_as_vm_with_user_data`
|
||||||
|
|
||||||
"VNF Deployment with LCM Operation User Data" is optional.
|
"VNF Deployment with LCM Operation User Data" is optional.
|
||||||
The part will be clarified with the notation [This is UserData specific part].
|
The part will be clarified with the notation [This is UserData specific part].
|
||||||
|
|
||||||
The following figure shows a sample VNF used in this lecture.
|
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
|
:align: left
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
VIM config, a VNF package, and instantiation parameters used in this tutorial are placed at the repository.
|
VIM config, a VNF package, and instantiation parameters used in this tutorial are placed at the repository.
|
||||||
|
|
||||||
- VNF Deployment with TOSCA [#f3]_
|
- `samples/etsi_getting_started/tosca`_
|
||||||
- VNF Deployment with LCM Operation User Data [#f4]_
|
- `samples/etsi_getting_started/userdata`_
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
@ -59,7 +67,7 @@ The following figure shows a sample VNF used in this lecture.
|
|||||||
Prerequisites
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
The following packages should be installed [#f5]_:
|
The following packages should be installed:
|
||||||
|
|
||||||
* tacker
|
* tacker
|
||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
@ -70,8 +78,28 @@ Configuration
|
|||||||
Load credentials for client operations
|
Load credentials for client operations
|
||||||
""""""""""""""""""""""""""""""""""""""
|
""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
Before any Tacker commands can be run, your credentials need to be sourced
|
Before any Tacker commands can be run, your credentials need to be sourced.
|
||||||
[#f6]_.
|
|
||||||
|
.. 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
|
You can confirm that Tacker is available by checking this command works without
|
||||||
error:
|
error:
|
||||||
@ -80,9 +108,10 @@ error:
|
|||||||
|
|
||||||
$ openstack vim list
|
$ openstack vim list
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
See CLI reference [#f7]_ to find all the available commands.
|
See :doc:`/cli/index` to find all the available commands.
|
||||||
|
|
||||||
|
|
||||||
Register VIM
|
Register VIM
|
||||||
@ -91,7 +120,7 @@ Register VIM
|
|||||||
#. Prepare VIM configuration file:
|
#. Prepare VIM configuration file:
|
||||||
|
|
||||||
You can use a setup script for generating VIM configuration or edit it from
|
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
|
This script finds parameters for the configuration, such as user
|
||||||
name or password, from your environment variables.
|
name or password, from your environment variables.
|
||||||
Here is an example of generating OpenStack VIM configuration as
|
Here is an example of generating OpenStack VIM configuration as
|
||||||
@ -103,6 +132,7 @@ Register VIM
|
|||||||
$ bash TACKER_ROOT/tools/gen_vim_config.sh
|
$ bash TACKER_ROOT/tools/gen_vim_config.sh
|
||||||
Config for OpenStack VIM 'vim_config.yaml' generated.
|
Config for OpenStack VIM 'vim_config.yaml' generated.
|
||||||
|
|
||||||
|
|
||||||
There are several options for configuring parameters from command
|
There are several options for configuring parameters from command
|
||||||
line supported. Refer help with ``-h`` for details.
|
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 ./
|
$ cp TACKER_ROOT/samples/etsi_getting_started/tosca/vim/vim_config.yaml ./
|
||||||
$ vi vim_config.yaml
|
$ vi vim_config.yaml
|
||||||
|
|
||||||
|
|
||||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/vim/vim_config.yaml
|
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/vim/vim_config.yaml
|
||||||
:language: yaml
|
:language: yaml
|
||||||
|
|
||||||
|
|
||||||
#. Register Default VIM:
|
#. Register Default VIM:
|
||||||
|
|
||||||
@ -126,57 +158,55 @@ Register VIM
|
|||||||
|
|
||||||
$ openstack vim register --config-file ./vim_config.yaml \
|
$ openstack vim register --config-file ./vim_config.yaml \
|
||||||
--is-default --fit-width openstack-admin-vim
|
--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
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vim list
|
$ 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
|
Create and Upload VNF Package
|
||||||
-----------------------------
|
-----------------------------
|
||||||
@ -189,15 +219,17 @@ Prepare VNF Package
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ mkdir -p ./sample_vnf_package_csar/TOSCA-Metadata \
|
$ mkdir -p ./sample_vnf_package_csar/TOSCA-Metadata \
|
||||||
./sample_vnf_package_csar/Definitions \
|
./sample_vnf_package_csar/Definitions \
|
||||||
./sample_vnf_package_csar/Files
|
./sample_vnf_package_csar/Files/images
|
||||||
|
|
||||||
|
|
||||||
[This is UserData specific part] When using UserData, create the following directories in addition.
|
[This is UserData specific part] When using UserData, create the following directories in addition.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ mkdir -p ./sample_vnf_package_csar/BaseHOT/simple \
|
$ mkdir -p ./sample_vnf_package_csar/BaseHOT/simple \
|
||||||
./sample_vnf_package_csar/UserData
|
./sample_vnf_package_csar/UserData
|
||||||
|
|
||||||
|
|
||||||
#. Create a ``TOSCA.meta`` file:
|
#. Create a ``TOSCA.meta`` file:
|
||||||
|
|
||||||
@ -205,25 +237,39 @@ Prepare VNF Package
|
|||||||
|
|
||||||
$ vi ./sample_vnf_package_csar/TOSCA-Metadata/TOSCA.meta
|
$ vi ./sample_vnf_package_csar/TOSCA-Metadata/TOSCA.meta
|
||||||
|
|
||||||
|
|
||||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/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:
|
#. Download ETSI definition files:
|
||||||
|
|
||||||
You should set ``${TOSCA_VERSION}`` to one of the appropriate TOSCA service
|
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::
|
.. important::
|
||||||
|
|
||||||
You should also check if the version of TOSCA service template is
|
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
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd -
|
||||||
$ cd ./sample_vnf_package_csar/Definitions
|
$ 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_common_types.yaml
|
||||||
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/${TOSCA_VERSION}/etsi_nfv_sol001_vnfd_types.yaml
|
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/${TOSCA_VERSION}/etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
|
||||||
|
|
||||||
#. Create VNFD files:
|
#. Create VNFD files:
|
||||||
|
|
||||||
- Create ``sample_vnfd_top.yaml``
|
- Create ``sample_vnfd_top.yaml``
|
||||||
@ -233,7 +279,8 @@ Prepare VNF Package
|
|||||||
$ vi ./sample_vnfd_top.yaml
|
$ vi ./sample_vnfd_top.yaml
|
||||||
|
|
||||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/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``
|
- Create ``sample_vnfd_types.yaml``
|
||||||
|
|
||||||
@ -241,22 +288,27 @@ Prepare VNF Package
|
|||||||
|
|
||||||
$ vi ./sample_vnfd_types.yaml
|
$ vi ./sample_vnfd_types.yaml
|
||||||
|
|
||||||
|
|
||||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/sample_vnfd_types.yaml
|
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/sample_vnfd_types.yaml
|
||||||
:language: yaml
|
:language: yaml
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
``description_id`` shall be globally unique, i.e., you cannot create
|
``description_id`` shall be globally unique, i.e., you cannot create
|
||||||
multiple VNFDs with the same ``description_id``.
|
multiple VNFDs with the same ``description_id``.
|
||||||
|
|
||||||
|
|
||||||
- Create ``sample_vnfd_df_simple.yaml``
|
- Create ``sample_vnfd_df_simple.yaml``
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ vi ./sample_vnfd_df_simple.yaml
|
$ vi ./sample_vnfd_df_simple.yaml
|
||||||
|
|
||||||
|
|
||||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/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::
|
.. note::
|
||||||
|
|
||||||
@ -264,6 +316,7 @@ Prepare VNF Package
|
|||||||
Tacker cannot handle it. After the instantiation, the default value in
|
Tacker cannot handle it. After the instantiation, the default value in
|
||||||
``sample_vnfd_types.yaml`` is always used.
|
``sample_vnfd_types.yaml`` is always used.
|
||||||
|
|
||||||
|
|
||||||
#. [This is UserData specific part] Create BaseHOT files:
|
#. [This is UserData specific part] Create BaseHOT files:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -271,8 +324,10 @@ Prepare VNF Package
|
|||||||
$ cd -
|
$ cd -
|
||||||
$ vi ./sample_vnf_package_csar/BaseHOT/simple/sample_lcm_with_user_data_hot.yaml
|
$ 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
|
.. 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:
|
#. [This is UserData specific part] Create UserData files:
|
||||||
|
|
||||||
@ -282,8 +337,10 @@ Prepare VNF Package
|
|||||||
$ touch ./__init__.py
|
$ touch ./__init__.py
|
||||||
$ vi ./lcm_user_data.py
|
$ vi ./lcm_user_data.py
|
||||||
|
|
||||||
|
|
||||||
.. literalinclude:: ../../../samples/etsi_getting_started/userdata/sample_vnf_package_csar/UserData/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:
|
#. Compress the VNF Package CSAR to zip:
|
||||||
|
|
||||||
@ -311,12 +368,14 @@ Prepare VNF Package
|
|||||||
TOSCA-Metadata/
|
TOSCA-Metadata/
|
||||||
TOSCA-Metadata/TOSCA.meta
|
TOSCA-Metadata/TOSCA.meta
|
||||||
|
|
||||||
|
|
||||||
- [This is UserData specific part] When using UserData, add ``BaseHOT`` and ``UserData`` directories.
|
- [This is UserData specific part] When using UserData, add ``BaseHOT`` and ``UserData`` directories.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ zip sample_vnf_package_csar.zip -r BaseHOT/ UserData/
|
$ zip sample_vnf_package_csar.zip -r BaseHOT/ UserData/
|
||||||
|
|
||||||
|
|
||||||
The contents of the zip file should look something like this.
|
The contents of the zip file should look something like this.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -340,10 +399,10 @@ Prepare VNF Package
|
|||||||
UserData/lcm_user_data.py
|
UserData/lcm_user_data.py
|
||||||
UserData/__init__.py
|
UserData/__init__.py
|
||||||
|
|
||||||
|
|
||||||
Here, you can find the structure of the sample VNF Package CSAR as a
|
Here, you can find the structure of the sample VNF Package CSAR as a
|
||||||
zip file.
|
zip file.
|
||||||
|
|
||||||
.. _Create VNF Package:
|
|
||||||
|
|
||||||
Create VNF Package
|
Create VNF Package
|
||||||
^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^
|
||||||
@ -358,36 +417,42 @@ Create VNF Package
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
Upload VNF Package
|
||||||
^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
#. Execute vnfpkgm upload:
|
#. Execute vnfpkgm upload:
|
||||||
|
|
||||||
The "VNF Package ID" ``e712a702-741f-4093-a971-b3ad69411ac1`` needs to be
|
The "VNF Package ID" ``156f1c4f-bfe2-492b-a079-a1bad32c0c3d`` needs to be
|
||||||
replaced with the appropriate one that was obtained from :ref:`Create VNF
|
replaced with the appropriate one that was obtained from `Create VNF
|
||||||
Package`.
|
Package`.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package upload \
|
$ openstack vnf package upload \
|
||||||
--path ./sample_vnf_package_csar/sample_vnf_package_csar.zip \
|
--path ./sample_vnf_package_csar/sample_vnf_package_csar.zip \
|
||||||
e712a702-741f-4093-a971-b3ad69411ac1
|
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
|
Check the created VNF Package
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -398,20 +463,33 @@ Check the created VNF Package
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package list
|
$ openstack vnf package list
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State | Links |
|
||||||
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
+--------------------------------------+------------------+------------------+-------------+-------------------+
|
| 156f1c4f-bfe2-492b-a079-a1bad32c0c3d | | PROCESSING | NOT_IN_USE | DISABLED | { |
|
||||||
| e712a702-741f-4093-a971-b3ad69411ac1 | | 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
|
$ 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
|
Create & Instantiate VNF
|
||||||
------------------------
|
------------------------
|
||||||
@ -427,14 +505,14 @@ Create VNF
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package show \
|
$ openstack vnf package show \
|
||||||
e712a702-741f-4093-a971-b3ad69411ac1 -c 'VNFD ID'
|
156f1c4f-bfe2-492b-a079-a1bad32c0c3d -c 'VNFD ID'
|
||||||
|
|
||||||
+---------+--------------------------------------+
|
+---------+--------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+---------+--------------------------------------+
|
+---------+--------------------------------------+
|
||||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||||
+---------+--------------------------------------+
|
+---------+--------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
#. Create VNF:
|
#. Create VNF:
|
||||||
|
|
||||||
The "VNFD ID" ``b1bb0ce7-ebca-4fa7-95ed-4840d70a1177`` needs to be replaced
|
The "VNFD ID" ``b1bb0ce7-ebca-4fa7-95ed-4840d70a1177`` needs to be replaced
|
||||||
@ -442,24 +520,31 @@ Create VNF
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm create \
|
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||||
b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 --fit-width
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| 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
|
Instantiate VNF
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
@ -481,6 +566,7 @@ Instantiate VNF
|
|||||||
|
|
||||||
You can skip ``vimConnectionInfo`` only when you have the default VIM.
|
You can skip ``vimConnectionInfo`` only when you have the default VIM.
|
||||||
|
|
||||||
|
|
||||||
A sample ``<param-file>`` named as ``sample_param_file.json`` with
|
A sample ``<param-file>`` named as ``sample_param_file.json`` with
|
||||||
minimal parametes:
|
minimal parametes:
|
||||||
|
|
||||||
@ -488,27 +574,33 @@ Instantiate VNF
|
|||||||
|
|
||||||
$ vi ./sample_param_file.json
|
$ vi ./sample_param_file.json
|
||||||
|
|
||||||
|
|
||||||
- When using TOSCA, use the following parameters.
|
- When using TOSCA, use the following parameters.
|
||||||
|
|
||||||
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/lcm_instantiate_request/sample_param_file.json
|
.. 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.
|
- [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
|
.. 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
|
``${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
|
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.
|
and the uuid of the VIM to use, respectively.
|
||||||
|
|
||||||
.. hint::
|
.. 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
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack network list
|
$ openstack network list
|
||||||
|
|
||||||
|
|
||||||
#. Instantiate VNF:
|
#. Instantiate VNF:
|
||||||
|
|
||||||
The "ID of vnf instance" and "path to <param-file>" are needed to
|
The "ID of vnf instance" and "path to <param-file>" are needed to
|
||||||
@ -517,48 +609,126 @@ Instantiate VNF
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm instantiate \
|
$ 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.
|
Check the details of the instantiated vnf.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm list
|
$ 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 |
|
||||||
|
+--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
|
||||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
$ openstack vnflcm show 810d8c9b-e467-4b06-9265-ac9dce015fce
|
||||||
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
| Field | Value |
|
||||||
| 725f625e-f6b7-4bcd-b1b7-7184039fde45 | None | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
| 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
|
Terminate & Delete VNF
|
||||||
----------------------
|
----------------------
|
||||||
@ -571,12 +741,12 @@ Terminate VNF
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm list
|
$ 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:
|
#. Terminate VNF Instance:
|
||||||
|
|
||||||
@ -584,22 +754,21 @@ Terminate VNF
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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:
|
Check the status of VNF Instance:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
Delete VNF
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
@ -608,9 +777,9 @@ Delete VNF
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
Delete VNF Package
|
||||||
------------------
|
------------------
|
||||||
@ -622,47 +791,60 @@ Delete VNF Package
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package list
|
$ 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``:
|
Update the Operational State to ``DISABLED``:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package update \
|
$ openstack vnf package update --operational-state 'DISABLED' \
|
||||||
--operational-state 'DISABLED' \
|
156f1c4f-bfe2-492b-a079-a1bad32c0c3d
|
||||||
e712a702-741f-4093-a971-b3ad69411ac1
|
|
||||||
|
|
||||||
+-------------------+----------+
|
+-------------------+----------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+-------------------+----------+
|
+-------------------+----------+
|
||||||
| Operational State | DISABLED |
|
| Operational State | DISABLED |
|
||||||
+-------------------+----------+
|
+-------------------+----------+
|
||||||
|
|
||||||
|
|
||||||
Check the Operational State to be changed:
|
Check the Operational State to be changed:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package list
|
$ 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:
|
Delete the VNF Package:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
All specified vnf-package(s) deleted successfully
|
||||||
|
|
||||||
|
|
||||||
Trouble Shooting
|
Trouble Shooting
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
@ -670,7 +852,7 @@ Trouble Shooting
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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``:
|
#. Edit ``/etc/neutron/neutron.conf``:
|
||||||
@ -679,28 +861,33 @@ Trouble Shooting
|
|||||||
|
|
||||||
$ sudo vi /etc/neutron/neutron.conf
|
$ sudo vi /etc/neutron/neutron.conf
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: diff
|
.. 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
|
||||||
+ service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin,neutron.services.qos.qos_plugin.QoSPlugin,qos
|
+ 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``:
|
#. Edit ``/etc/neutron/plugins/ml2/ml2_conf.ini``:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
|
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: diff
|
.. code-block:: diff
|
||||||
|
|
||||||
- extension_drivers = port_security
|
- extension_drivers = port_security
|
||||||
+ extension_drivers = port_security,qos
|
+ extension_drivers = port_security,qos
|
||||||
|
|
||||||
|
|
||||||
#. Restart neutron services:
|
#. Restart neutron services:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ sudo systemctl restart devstack@q-*
|
$ sudo systemctl restart devstack@q-*
|
||||||
|
|
||||||
|
|
||||||
- Error in networking-sfc
|
- Error in networking-sfc
|
||||||
|
|
||||||
#. Disable networking-sfc by editting ``/etc/neutron/neutron.conf``:
|
#. Disable networking-sfc by editting ``/etc/neutron/neutron.conf``:
|
||||||
@ -709,6 +896,7 @@ Trouble Shooting
|
|||||||
|
|
||||||
$ sudo vi /etc/neutron/neutron.conf
|
$ sudo vi /etc/neutron/neutron.conf
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: diff
|
.. 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
|
- 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]
|
- [flowclassifier]
|
||||||
- drivers = ovs
|
- drivers = ovs
|
||||||
|
|
||||||
|
|
||||||
#. Edit ``/etc/neutron/plugins/ml2/ml2_conf.ini``:
|
#. Edit ``/etc/neutron/plugins/ml2/ml2_conf.ini``:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
|
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: diff
|
.. code-block:: diff
|
||||||
|
|
||||||
- [agent]
|
- [agent]
|
||||||
- extensions = sfc
|
- extensions = sfc
|
||||||
|
|
||||||
|
|
||||||
#. Restart neutron services:
|
#. Restart neutron services:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ sudo systemctl restart devstack@q-*
|
$ 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
|
.. _samples/etsi_getting_started/tosca:
|
||||||
.. [#] 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/tosca
|
||||||
.. [#] https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/userdata
|
.. _samples/etsi_getting_started/userdata:
|
||||||
.. [#] https://docs.openstack.org/tacker/latest/install/index.html
|
https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/userdata
|
||||||
.. [#] https://docs.openstack.org/liberty/install-guide-ubuntu/keystone-openrc.html
|
.. _Create OpenStack client environment scripts:
|
||||||
.. [#] https://docs.openstack.org/tacker/latest/cli/index.html
|
https://docs.openstack.org/keystone/latest/install/keystone-openrc-rdo.html
|
||||||
.. [#] https://forge.etsi.org/rep/nfv/SOL001
|
.. _vim_config.yaml:
|
||||||
.. [#] https://docs.openstack.org/tacker/latest/user/vnfd-sol001.html
|
https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/tosca/vim/vim_config.yaml
|
||||||
.. [#] https://docs.openstack.org/python-openstackclient/pike/cli/command-objects/network.html
|
.. _SOL001: https://forge.etsi.org/rep/nfv/SOL001
|
||||||
.. _vim_config.yaml: https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/tosca/vim/vim_config.yaml
|
.. _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
|
VNF
|
||||||
@ -25,7 +30,7 @@ Container
|
|||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
etsi_containerized_vnf_usage_guide
|
etsi_containerized_vnf_usage_guide
|
||||||
etsi_cnf_helm_v2
|
|
||||||
|
|
||||||
Scale
|
Scale
|
||||||
^^^^^
|
^^^^^
|
||||||
@ -76,14 +81,6 @@ VM
|
|||||||
|
|
||||||
etsi_vnf_update
|
etsi_vnf_update
|
||||||
|
|
||||||
Container
|
|
||||||
~~~~~~~~~
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
|
|
||||||
etsi_cnf_update
|
|
||||||
|
|
||||||
Change External VNF Connectivity
|
Change External VNF Connectivity
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -95,26 +92,6 @@ VM
|
|||||||
|
|
||||||
etsi_vnf_change_external_vnf_connectivity
|
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
|
Error Handling
|
||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
@ -123,8 +100,6 @@ Error Handling
|
|||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
etsi_vnf_error_handling
|
etsi_vnf_error_handling
|
||||||
db_sync_error_handling
|
|
||||||
placement_error_handling
|
|
||||||
|
|
||||||
.. TODO(h-asahina): add `Action Driver`
|
.. TODO(h-asahina): add `Action Driver`
|
||||||
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs
|
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs
|
||||||
@ -135,8 +110,8 @@ Management Driver
|
|||||||
.. TODO(h-asahina): add `Overview`
|
.. TODO(h-asahina): add `Overview`
|
||||||
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs
|
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs
|
||||||
|
|
||||||
Kubernetes Cluster VNF (v1 API)
|
Kubernetes Cluster VNF
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
@ -147,48 +122,22 @@ Kubernetes Cluster VNF (v1 API)
|
|||||||
mgmt_driver_deploy_k8s_pv_usage_guide
|
mgmt_driver_deploy_k8s_pv_usage_guide
|
||||||
mgmt_driver_deploy_k8s_kubespary_usage_guide
|
mgmt_driver_deploy_k8s_kubespary_usage_guide
|
||||||
|
|
||||||
Ansible Driver (v1 API)
|
Ansible Driver
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
mgmt_driver_for_ansible_driver_usage_guide
|
mgmt_driver_for_ansible_driver_usage_guide
|
||||||
|
|
||||||
Container Update (v1/v2 API)
|
Container Update
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
mgmt_driver_for_container_update
|
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
|
VNF Package
|
||||||
___________
|
___________
|
||||||
|
@ -2,7 +2,14 @@
|
|||||||
ETSI NFV-SOL Change External VNF Connectivity
|
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
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
@ -13,13 +20,16 @@ The following packages should be installed:
|
|||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
A default VIM should be registered according to
|
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
|
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||||
by referring to :doc:`./vnf-package`.
|
by referring to :doc:`/user/vnf-package`.
|
||||||
|
|
||||||
Execute before "Terminate VNF" in the procedure of
|
The procedure of prepare for scaling operation that from "register VIM" to
|
||||||
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
"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
|
Change External VNF Connectivity
|
||||||
@ -32,7 +42,7 @@ Assuming that the following VNF instance exists,
|
|||||||
this instance will be changed.
|
this instance will be changed.
|
||||||
|
|
||||||
Details of CLI commands are described in
|
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
|
For changing external VNF connectivity, you need to prepare a JSON-formatted
|
||||||
definition file before running command for changing the connectivity.
|
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
|
.. code-block:: json
|
||||||
|
|
||||||
{
|
{
|
||||||
"extVirtualLinks": [
|
"extVirtualLinks": [
|
||||||
{
|
|
||||||
"id": "ce38f1e7-4aec-4325-bb78-9c4411f113b5",
|
|
||||||
"resourceId": "1a4054c8-dd6b-444b-9604-7a8fc8c1cc0c",
|
|
||||||
"extCps": [
|
|
||||||
{
|
{
|
||||||
"cpdId": "VDU2_CP2",
|
"id": "a96d2f5b-c01a-48e1-813c-76132965042c",
|
||||||
"cpConfig": [
|
"resourceId": "3019b1e7-99d8-4748-97ac-104922bc78d9",
|
||||||
{
|
"vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56",
|
||||||
"cpProtocolData": [
|
"extCps": [
|
||||||
{
|
{
|
||||||
"layerProtocol": "IP_OVER_ETHERNET",
|
"cpdId": "VDU1_CP2",
|
||||||
"ipOverEthernet":
|
"cpConfig": [
|
||||||
{
|
|
||||||
"ipAddresses": [
|
|
||||||
{
|
{
|
||||||
"type": "IPV4",
|
"cpProtocolData": [
|
||||||
"fixedAddresses": ["22.22.2.200"],
|
{
|
||||||
"subnetId": "25f4a13f-0c20-4fff-85aa-5349fc4efee8"
|
"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::
|
.. 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
|
The change external VNF Connectivity operation can change the
|
||||||
``vimConnectionInfo`` associated with an existing VNF instance.
|
``vimConnectionInfo`` associated with an existing VNF instance.
|
||||||
Even if change external VNF Connectivity operation specify multiple
|
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.
|
them will be used for life cycle management operations.
|
||||||
It is not possible to delete the key of registered ``vimConnectionInfo``.
|
It is not possible to delete the key of registered ``vimConnectionInfo``.
|
||||||
|
|
||||||
|
|
||||||
How to Change the Specific Port Setting
|
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:
|
Change External VNF Connectivity execution of the entire VNF:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm change-ext-conn VNF_INSTANCE_ID \
|
$ openstack vnflcm change-ext-conn VNF_INSTANCE_ID \
|
||||||
./sample_param_file.json
|
./sample_param_file.json
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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::
|
.. note::
|
||||||
|
|
||||||
Create a parameter file that describes the resource information to be changed in advance.
|
Create a parameter file that describes the resource information to be changed in advance.
|
||||||
|
|
||||||
|
|
||||||
@ -158,84 +208,72 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
| ID | Stack Name | Stack Status |
|
| ID | Stack Name | Stack Status |
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
| ad077101-b093-4785-9ca5-cc7c1379bb10 | vnf-9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 | UPDATE_COMPLETE |
|
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a | UPDATE_COMPLETE |
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
'Stack Status' transitions to UPDATE_COMPLETE.
|
|
||||||
|
'Stack Status' transitions to UPDATE_COMPLETE.
|
||||||
|
|
||||||
|
|
||||||
Stack resource information:
|
Stack resource information:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+----------------------+--------------------------------------+----------------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------------+
|
+---------------+--------------------------------------+------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------+
|
||||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time | stack_name |
|
| 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 |
|
| 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 |
|
||||||
| 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 |
|
|
||||||
+----------------------+--------------------------------------+----------------------------+-----------------+----------------------+-----------------------------------------------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
Stack resource detailed information:
|
Port resource information:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
'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'.
|
||||||
| 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.
|
|
||||||
|
|
||||||
|
|
||||||
.. _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
|
.. _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
|
.. _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
|
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.
|
||||||
|
See :doc:`/user/v2/vnf/deployment_with_tosca/index` for Tacker v2 API.
|
||||||
|
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
--------
|
--------
|
||||||
@ -13,9 +19,9 @@ The diagram below shows an overview of the VNF deployment.
|
|||||||
1. Request create VNF
|
1. Request create VNF
|
||||||
|
|
||||||
A user requests tacker-server to create a VNF with tacker-client by
|
A user requests tacker-server to create a VNF with tacker-client by
|
||||||
uploading a VNF Package and requesting ``create VNF``. The VNF Package
|
uploading a VNF Package and requesting ``create VNF``. The VNF Package
|
||||||
should contain ``VNFD``. The detailed explanation of ``VNFD`` can be found
|
should contain ``VNFD``. The detailed explanation of ``VNFD`` can be found
|
||||||
in :doc:`./vnf-package`.
|
in :doc:`/user/vnf-package`.
|
||||||
|
|
||||||
2. Request instantiate VNF
|
2. Request instantiate VNF
|
||||||
|
|
||||||
@ -25,17 +31,16 @@ The diagram below shows an overview of the VNF deployment.
|
|||||||
3. Call OpenStack Heat API
|
3. Call OpenStack Heat API
|
||||||
|
|
||||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
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
|
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.
|
calls OpenStack Heat APIs to create a VM as a VNF.
|
||||||
|
|
||||||
4. Create a VM
|
4. Create a VM
|
||||||
|
|
||||||
OpenStack Heat creates a VM according to the API calls.
|
OpenStack Heat creates a VM according to the API calls.
|
||||||
|
|
||||||
.. figure:: ../_images/etsi_vnf_deployment_as_vm_with_tosca.png
|
.. figure:: /_images/etsi_vnf_deployment_as_vm_with_tosca.png
|
||||||
:align: left
|
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
@ -47,10 +52,98 @@ The following packages should be installed:
|
|||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
A default VIM should be registered according to
|
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
|
As an example, you can register default VIM as follow.
|
||||||
by referring to :doc:`./vnf-package`.
|
|
||||||
|
.. 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
|
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
|
In order to deploy VNF as VM, it is necessary to execute
|
||||||
the following procedure.
|
the following procedure.
|
||||||
Details of CLI commands are described in
|
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
|
1. Create VNF Package Info
|
||||||
@ -76,17 +169,23 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+-------------------+----------------------------------------------------------------------------------------------------+
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+-------------------+----------------------------------------------------------------------------------------------------+
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
| ID | e712a702-741f-4093-a971-b3ad69411ac1 |
|
| ID | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d |
|
||||||
| Links | packageContent=href=/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1/package_content, |
|
| Links | { |
|
||||||
| | self=href=s/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1 |
|
| | "self": { |
|
||||||
| Onboarding State | CREATED |
|
| | "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d" |
|
||||||
| Operational State | DISABLED |
|
| | }, |
|
||||||
| Usage State | NOT_IN_USE |
|
| | "packageContent": { |
|
||||||
| User Defined Data | |
|
| | "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
|
After that, execute the following CLI command and confirm that
|
||||||
@ -99,7 +198,7 @@ VNF Package creation was successful.
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package show VNF_PACKAGE_ID \
|
$ 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:
|
Result:
|
||||||
@ -122,14 +221,14 @@ Execute the following CLI command to upload VNF Package.
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
After that, execute the following CLI command and confirm that
|
||||||
@ -142,13 +241,15 @@ VNF Package uploading was successful.
|
|||||||
'Create VNF Identifier'.
|
'Create VNF Identifier'.
|
||||||
|
|
||||||
.. note::
|
.. 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
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package show VNF_PACKAGE_ID \
|
$ 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:
|
Result:
|
||||||
@ -179,21 +280,29 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------+----------------------------------------------------------------------------------------------+
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+--------------------------+----------------------------------------------------------------------------------------------+
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
| ID | 725f625e-f6b7-4bcd-b1b7-7184039fde45 |
|
| ID | 810d8c9b-e467-4b06-9265-ac9dce015fce |
|
||||||
| Instantiation State | NOT_INSTANTIATED |
|
| Instantiation State | NOT_INSTANTIATED |
|
||||||
| Links | instantiate=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45/instantiate, |
|
| Links | { |
|
||||||
| | self=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45 |
|
| | "self": { |
|
||||||
| VNF Instance Description | None |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce" |
|
||||||
| VNF Instance Name | None |
|
| | }, |
|
||||||
| VNF Product Name | Sample VNF |
|
| | "instantiate": { |
|
||||||
| VNF Provider | Company |
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/instantiate" |
|
||||||
| VNF Software Version | 1.0 |
|
| | } |
|
||||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
| | } |
|
||||||
| VNFD Version | 1.0 |
|
| 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
|
After that, execute the following CLI command and confirm that
|
||||||
@ -205,8 +314,7 @@ VNF instance creation was successful.
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package show VNF_PACKAGE_ID \
|
$ openstack vnf package show VNF_PACKAGE_ID -c 'Usage State'
|
||||||
-c 'Usage State'
|
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -222,8 +330,7 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID \
|
$ openstack vnflcm show VNF_INSTANCE_ID -c 'Instantiation State'
|
||||||
-c 'Instantiation State'
|
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -246,10 +353,12 @@ These parameters will be set in the body of the instantiate request.
|
|||||||
|
|
||||||
Required parameter:
|
Required parameter:
|
||||||
|
|
||||||
* flavourID
|
* flavourId
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Details of flavourID is described in :doc:`./vnfd-sol001`.
|
|
||||||
|
Details of flavourId is described in :doc:`/user/vnfd-sol001`.
|
||||||
|
|
||||||
|
|
||||||
Optional parameters:
|
Optional parameters:
|
||||||
|
|
||||||
@ -257,28 +366,35 @@ Optional parameters:
|
|||||||
* extVirtualLinks
|
* extVirtualLinks
|
||||||
* extManagedVirtualLinks
|
* extManagedVirtualLinks
|
||||||
* vimConnectionInfo
|
* vimConnectionInfo
|
||||||
|
* localizationLanguage
|
||||||
|
* additionalParams
|
||||||
|
* extensions
|
||||||
|
|
||||||
.. note::
|
.. 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::
|
.. note::
|
||||||
This operation can specify the ``vimConnectionInfo``
|
|
||||||
for the VNF instance.
|
This operation can specify the ``vimConnectionInfo``
|
||||||
Even if this operation specify multiple ``vimConnectionInfo``
|
for the VNF instance.
|
||||||
associated with one VNF instance, only one of them will be used for
|
Even if this operation specify multiple ``vimConnectionInfo``
|
||||||
life cycle management operations.
|
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
|
.. code-block:: console
|
||||||
|
|
||||||
{
|
{
|
||||||
"flavourId":"simple"
|
"flavourId": "simple"
|
||||||
}
|
}
|
||||||
|
|
||||||
Param file with optional parameters:
|
|
||||||
|
An example of a param file with optional parameters:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -287,47 +403,89 @@ Param file with optional parameters:
|
|||||||
"instantiationLevelId": "instantiation_level_1",
|
"instantiationLevelId": "instantiation_level_1",
|
||||||
"extVirtualLinks": [
|
"extVirtualLinks": [
|
||||||
{
|
{
|
||||||
"id": "net0",
|
"id": "279b0e12-2cc7-48d3-89dc-c58369841763",
|
||||||
"resourceId": "4bf3e646-7a24-4f04-a985-d8f4bb1203de", #Set the uuid of the network to use
|
"vimConnectionId": "4db40866-054f-472d-b559-811e5aa7195c",
|
||||||
|
"resourceProviderId": "Company",
|
||||||
|
"resourceId": "6a3aeb3a-fb8b-4d27-a5f1-4f148aeb303f",
|
||||||
"extCps": [
|
"extCps": [
|
||||||
{
|
{
|
||||||
"cpdId": "CP1",
|
"cpdId": "VDU1_CP1",
|
||||||
"cpConfig": [
|
"cpConfig": {
|
||||||
{
|
"VDU1_CP1": {
|
||||||
|
"parentCpConfigId": "a9d72e2b-9b2f-48b8-9ca0-217ab3ba6f33",
|
||||||
"cpProtocolData": [
|
"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": [
|
"vimConnectionInfo": [
|
||||||
{
|
{
|
||||||
"id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1", #Set a random uuid.
|
"id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1",
|
||||||
"vimId": "8a0fd79d-e224-4c27-85f5-ee79c6e0d870", #Set the uuid of the VIM to use
|
"vimId": "8a0fd79d-e224-4c27-85f5-ee79c6e0d870",
|
||||||
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.v_2"
|
"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.
|
Execute the following CLI command to instantiate VNF instance.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm instantiate VNF_INSTANCE_ID \
|
$ openstack vnflcm instantiate VNF_INSTANCE_ID ./sample_param_file.json
|
||||||
./sample_param_file.json
|
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
After that, execute the following CLI command and confirm that
|
||||||
@ -337,8 +495,7 @@ VNF instance instantiation was successful.
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID \
|
$ openstack vnflcm show VNF_INSTANCE_ID -c 'Instantiation State'
|
||||||
-c 'Instantiation State'
|
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -352,7 +509,7 @@ Result:
|
|||||||
+---------------------+--------------+
|
+---------------------+--------------+
|
||||||
|
|
||||||
|
|
||||||
5. Terminate VNF
|
1. Terminate VNF
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Execute the following CLI command to terminate the VNF instance.
|
Execute the following CLI command to terminate the VNF instance.
|
||||||
@ -366,7 +523,7 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
After that, execute the following CLI command and confirm that
|
||||||
@ -377,7 +534,7 @@ VNF instance termination was successful.
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID \
|
$ openstack vnflcm show VNF_INSTANCE_ID \
|
||||||
-c 'Instantiation State'
|
-c 'Instantiation State'
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -405,7 +562,7 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
After that, execute the following CLI command and confirm that
|
||||||
@ -417,7 +574,7 @@ VNF instance deletion was successful.
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnf package show VNF_PACKAGE_ID \
|
$ openstack vnf package show VNF_PACKAGE_ID \
|
||||||
-c 'Usage State'
|
-c 'Usage State'
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -440,4 +597,5 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
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`_
|
Please check `LCM-user-data spec`_ and `NFV-SOL014 v2.8.1`_
|
||||||
for more information on LCM operation user data.
|
for more information on LCM operation user data.
|
||||||
|
|
||||||
.. note::
|
.. 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.
|
This is a document for Tacker v1 API.
|
||||||
The part will be clarified with the notation [This is UserData specific part].
|
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
|
Overview
|
||||||
--------
|
--------
|
||||||
@ -20,9 +30,10 @@ The diagram below shows an overview of the VNF deployment.
|
|||||||
1. Request create VNF
|
1. Request create VNF
|
||||||
|
|
||||||
A user requests tacker-server to create a VNF with tacker-client by
|
A user requests tacker-server to create a VNF with tacker-client by
|
||||||
uploading a VNF Package and requesting ``create VNF``. The VNF Package
|
uploading a VNF Package and requesting ``create VNF``. The VNF Package
|
||||||
should contain ``BaseHOT`` and ``UserData`` in addition to ``VNFD``. The
|
should contain ``BaseHOT`` and ``UserData`` in addition to ``VNFD``.
|
||||||
detailed explanation of these contents can be found in :doc:`./vnf-package`.
|
The detailed explanation of these contents can be found in
|
||||||
|
:doc:`/user/vnf-package`.
|
||||||
|
|
||||||
2. Request instantiate VNF
|
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.
|
Upon receiving a request, tacker-server redirects it to tacker-conductor.
|
||||||
In tacker-conductor, the request is redirected again to an appropriate
|
In tacker-conductor, the request is redirected again to an appropriate
|
||||||
infra-driver (in this case OpenStack infra-driver) according to the contents
|
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.
|
Heat APIs to create a VM as a VNF.
|
||||||
|
|
||||||
4. Create a VM
|
4. Create a VM
|
||||||
|
|
||||||
OpenStack Heat creates a VM according to the API calls.
|
OpenStack Heat creates a VM according to the API calls.
|
||||||
|
|
||||||
.. figure:: ../_images/etsi_vnf_deployment_as_vm_with_user_data.png
|
.. figure:: /_images/etsi_vnf_deployment_as_vm_with_user_data.png
|
||||||
:align: left
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
@ -53,16 +64,18 @@ The following packages should be installed:
|
|||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
A default VIM should be registered according to
|
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
|
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||||
by referring to :doc:`./vnf-package`.
|
by referring to :doc:`/user/vnf-package`.
|
||||||
|
|
||||||
.. note:: [This is UserData specific part]
|
.. note::
|
||||||
In order to deploy VNF using LCM operation user data,
|
|
||||||
it is necessary to include BaseHOT and UserData in the VNF Package,
|
[This is UserData specific part]
|
||||||
which are optional in :doc:`./vnf-package`.
|
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
|
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
|
In order to deploy VNF as a VM, it is necessary to execute
|
||||||
the following procedure.
|
the following procedure.
|
||||||
Details of CLI commands are described in
|
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.
|
so refer to the doc for those procedures.
|
||||||
|
|
||||||
|
|
||||||
1. Create VNF Package Info
|
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
|
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
|
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
|
4. Instantiate VNF
|
||||||
@ -108,18 +122,21 @@ Required parameter:
|
|||||||
* additionalParams
|
* additionalParams
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Details of flavourId is described in :doc:`./vnfd-sol001`.
|
|
||||||
|
Details of flavourId is described in :doc:`/user/vnfd-sol001`.
|
||||||
|
|
||||||
.. note::
|
.. 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
|
[This is UserData specific part]
|
||||||
* lcm-operation-user-data-class: class_name
|
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:
|
Optional parameters:
|
||||||
|
|
||||||
@ -129,17 +146,21 @@ Optional parameters:
|
|||||||
* vimConnectionInfo
|
* vimConnectionInfo
|
||||||
|
|
||||||
.. note::
|
.. 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::
|
.. 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
|
.. 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
|
.. 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.
|
Execute the following CLI command to instantiate the VNF instance.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm instantiate VNF_INSTANCE_ID \
|
$ openstack vnflcm instantiate VNF_INSTANCE_ID ./sample_param_file.json
|
||||||
./sample_param_file.json
|
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
After that, execute the following CLI command and confirm that
|
||||||
@ -225,8 +252,7 @@ VNF instance instantiation was successful.
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID \
|
$ openstack vnflcm show VNF_INSTANCE_ID -c 'Instantiation State'
|
||||||
-c 'Instantiation State'
|
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -243,14 +269,14 @@ Result:
|
|||||||
5. Terminate VNF
|
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
|
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
|
.. _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
|
.. _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
|
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
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
@ -13,14 +19,17 @@ The following packages should be installed:
|
|||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
A default VIM should be registered according to
|
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
|
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||||
by referring to :doc:`./vnf-package`.
|
by referring to :doc:`/user/vnf-package`.
|
||||||
|
|
||||||
Execute up to "Instantiate VNF" in the procedure of
|
The procedure of prepare for healing operation that from "register VIM" to
|
||||||
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
"Instantiate VNF", basically refer to
|
||||||
In other words, the procedure after "Terminate VNF" is not executed.
|
: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
|
VNF Error-handling Procedures
|
||||||
@ -30,7 +39,7 @@ As mentioned in Prerequisites, the VNF must be created
|
|||||||
before performing error-handling.
|
before performing error-handling.
|
||||||
|
|
||||||
Details of CLI commands are described in
|
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.
|
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
|
Identify VNF_LCM_OP_OCC_ID
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
To identify the VNF_LCM_OP_OCC_ID, you can get with the following ways.
|
The VNF_LCM_OP_OCC_ID can be obtained via CLI.
|
||||||
|
|
||||||
* to check with CLI
|
|
||||||
* to check with notification API body
|
|
||||||
|
|
||||||
You can choose both ways.
|
|
||||||
|
|
||||||
This case uses openstack CLI:
|
|
||||||
|
|
||||||
Details of CLI commands are described in
|
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.
|
Before checking the "VNF_LCM_OP_OCC_ID", you should get VNF_INSTANCE_ID first.
|
||||||
|
|
||||||
@ -69,232 +71,49 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------------------+-----------------+--------------------------------------+-----------------+
|
$ openstack vnflcm op list
|
||||||
| ID | Operation State | VNF Instance ID | Operation |
|
+--------------------------------------+-----------------+--------------------------------------+-------------+
|
||||||
+--------------------------------------+-----------------+--------------------------------------+-----------------+
|
| ID | Operation State | VNF Instance ID | Operation |
|
||||||
| 304538dd-d754-4661-9f17-5496dab9693d | FAILED_TEMP | 3aa5c054-c162-4d5e-9808-0bc30f92a4c7 | INSTANTIATE |
|
+--------------------------------------+-----------------+--------------------------------------+-------------+
|
||||||
+--------------------------------------+-----------------+--------------------------------------+-----------------+
|
| c7afb90a-351b-4d33-a945-8f937deeadb4 | FAILED_TEMP | d45ae5cb-121b-4420-bc97-6a00f5fa63b6 | 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...
|
|
||||||
|
|
||||||
|
|
||||||
Error-handling can be executed only when **operationState** is **FAILED_TMP**.
|
Error-handling can be executed only when **operationState** is **FAILED_TMP**.
|
||||||
|
|
||||||
With the above LCM operation trigger, 'Notification' is sent to
|
If the Subscription is registered, the above operation trigger
|
||||||
the **callbackUri** set in 'Create a new subscription'.
|
that caused the FAILED_TEMP send a 'Notification' to the **callbackUri**
|
||||||
|
of the Subscription.
|
||||||
|
|
||||||
**vnfLcmOpOccId** included in this 'Notification' corresponds
|
**vnfLcmOpOccId** included in this 'Notification' corresponds
|
||||||
to VNF_LCM_OP_OCC_ID.
|
to VNF_LCM_OP_OCC_ID.
|
||||||
|
|
||||||
See `VNF LCM v1 API`_ and `VNF LCM v2 API`_
|
See `VNF LCM v1 API`_ for details on the APIs used here.
|
||||||
for details on the APIs used here.
|
|
||||||
|
|
||||||
|
|
||||||
Rollback VNF LCM Operation
|
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::
|
.. list-table::
|
||||||
:widths: 10 40 15 15 10 10
|
:widths: 10 40 15 15
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - LCM Operation
|
* - LCM Operation
|
||||||
- Description of Rollback
|
- Description of Rollback
|
||||||
- Precondition
|
- Precondition
|
||||||
- Postcondition
|
- Postcondition
|
||||||
- Support in v1
|
|
||||||
- Support in v2
|
|
||||||
* - Instantiate
|
* - Instantiate
|
||||||
- | VNFM removes all VMs and resources.
|
- | VNFM removes all VMs and resources.
|
||||||
| e.g. Tacker executes Heat stack-delete for deletion of the target VM.
|
| e.g. Tacker executes Heat stack-delete for deletion of the target VM.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- ROLLED_BACK or FAILED_TEMP
|
- ROLLED_BACK or FAILED_TEMP
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Scale-out
|
* - Scale-out
|
||||||
- | VNFM reverts changes of VMs and resources specified in the middle of scale-out operation.
|
- | 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.
|
| e.g. Tacker reverts desired_capacity and executes Heat stack-update.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- ROLLED_BACK or 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
|
This manual describes the following operations as use cases for
|
||||||
rollback operations.
|
rollback operations.
|
||||||
@ -315,7 +134,8 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
Therefore, "Rollback VNF lifecycle management operation" with
|
||||||
@ -330,7 +150,7 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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,
|
If "Rollback VNF lifecycle management operation" is successful,
|
||||||
@ -345,64 +165,45 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
Fail VNF LCM Operation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
:widths: 10 40 15 15 10 10
|
:widths: 10 40 15 15
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - LCM Operation
|
* - LCM Operation
|
||||||
- Description of Fail
|
- Description of Fail
|
||||||
- Precondition
|
- Precondition
|
||||||
- Postcondition
|
- Postcondition
|
||||||
- Support in v1
|
|
||||||
- Support in v2
|
|
||||||
* - Instantiate
|
* - Instantiate
|
||||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- FAILED
|
- FAILED
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Terminate
|
* - Terminate
|
||||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- FAILED
|
- FAILED
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Heal
|
* - Heal
|
||||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- FAILED
|
- FAILED
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Scale
|
* - Scale
|
||||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- FAILED
|
- FAILED
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Modify
|
* - Modify
|
||||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- FAILED
|
- FAILED
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Change external connectivity
|
* - Change external connectivity
|
||||||
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- FAILED
|
- 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
|
This manual describes the following operations as use cases for
|
||||||
fail operations.
|
fail operations.
|
||||||
@ -423,7 +224,8 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
Therefore, "Fail VNF lifecycle management operation" with
|
||||||
@ -438,7 +240,59 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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,
|
If "Fail VNF lifecycle management operation" is successful,
|
||||||
@ -453,64 +307,45 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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
|
Retry VNF LCM Operation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
:widths: 10 40 15 15 10 10
|
:widths: 10 40 15 15
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - LCM Operation
|
* - LCM Operation
|
||||||
- Description of Fail
|
- Description of Fail
|
||||||
- Precondition
|
- Precondition
|
||||||
- Postcondition
|
- Postcondition
|
||||||
- Support in v1
|
|
||||||
- Support in v2
|
|
||||||
* - Instantiate
|
* - Instantiate
|
||||||
- VNFM retries a Instantiate operation.
|
- VNFM retries a Instantiate operation.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- COMPLETED or FAILED_TEMP
|
- COMPLETED or FAILED_TEMP
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Terminate
|
* - Terminate
|
||||||
- VNFM retries a Terminate operation.
|
- VNFM retries a Terminate operation.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- COMPLETED or FAILED_TEMP
|
- COMPLETED or FAILED_TEMP
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Heal
|
* - Heal
|
||||||
- VNFM retries a Heal operation.
|
- VNFM retries a Heal operation.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- COMPLETED or FAILED_TEMP
|
- COMPLETED or FAILED_TEMP
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Scale
|
* - Scale
|
||||||
- VNFM retries a Scale operation.
|
- VNFM retries a Scale operation.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- COMPLETED or FAILED_TEMP
|
- COMPLETED or FAILED_TEMP
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Modify
|
* - Modify
|
||||||
- VNFM retries a Modify operation.
|
- VNFM retries a Modify operation.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- COMPLETED or FAILED_TEMP
|
- COMPLETED or FAILED_TEMP
|
||||||
- X
|
|
||||||
- X
|
|
||||||
* - Change external connectivity
|
* - Change external connectivity
|
||||||
- VNFM retries a Change external connectivity operation.
|
- VNFM retries a Change external connectivity operation.
|
||||||
- FAILED_TEMP
|
- FAILED_TEMP
|
||||||
- COMPLETED or 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
|
This manual describes the following operations as use cases for
|
||||||
retry operations.
|
retry operations.
|
||||||
@ -533,193 +368,11 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. 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,
|
If "Retry VNF lifecycle management operation" is successful,
|
||||||
then another LCM can be operational.
|
then another LCM can be operational.
|
||||||
|
|
||||||
Error-handling of MgmtDriver
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
This section only applies to the `VNF LCM v2 API`_.
|
.. _VNF LCM v1 API: https://docs.openstack.org/api-ref/nfv-orchestration/v1/vnflcm.html
|
||||||
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
|
|
||||||
|
@ -2,7 +2,13 @@
|
|||||||
ETSI NFV-SOL VNF Healing
|
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
|
Overview
|
||||||
--------
|
--------
|
||||||
@ -17,17 +23,16 @@ The diagram below shows an overview of the VNF healing.
|
|||||||
2. Call OpenStack Heat API
|
2. Call OpenStack Heat API
|
||||||
|
|
||||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
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
|
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.
|
calls OpenStack Heat APIs.
|
||||||
|
|
||||||
3. Re-create VMs
|
3. Re-create VMs
|
||||||
|
|
||||||
OpenStack Heat re-creates VMs according to the API calls.
|
OpenStack Heat re-creates VMs according to the API calls.
|
||||||
|
|
||||||
.. figure:: ../_images/etsi_vnf_healing.png
|
.. figure:: /_images/etsi_vnf_healing.png
|
||||||
:align: left
|
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
@ -39,14 +44,17 @@ The following packages should be installed:
|
|||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
A default VIM should be registered according to
|
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
|
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||||
by referring to :doc:`./vnf-package`.
|
by referring to :doc:`/user/vnf-package`.
|
||||||
|
|
||||||
Execute up to "Instantiate VNF" in the procedure of
|
The procedure of prepare for healing operation that from "register VIM" to
|
||||||
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
"Instantiate VNF", basically refer to
|
||||||
In other words, the procedure after "Terminate VNF" is not executed.
|
: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
|
Healing Target VNF Instance
|
||||||
@ -64,193 +72,525 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
| ID | 9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 |
|
| ID | c3f9c200-7f52-42c5-9c64-6032faa3faf8 |
|
||||||
| Instantiated Vnf Info | { |
|
| Instantiated Vnf Info | { |
|
||||||
| | "flavourId": "simple", |
|
| | "flavourId": "simple", |
|
||||||
| | "vnfState": "STARTED", |
|
| | "vnfState": "STARTED", |
|
||||||
| | "extCpInfo": [ |
|
| | "scaleStatus": [ |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "241e6022-c9be-4ad6-b7a7-ecb32de20475", |
|
| | "aspectId": "worker_instance", |
|
||||||
| | "cpdId": "CP1", |
|
| | "scaleLevel": 0 |
|
||||||
| | "extLinkPortId": null, |
|
| | } |
|
||||||
| | "associatedVnfcCpId": "b07ba349-1366-4d14-91e9-07842cdfa7ab", |
|
| | ], |
|
||||||
| | "cpProtocolInfo": [ |
|
| | "extCpInfo": [ |
|
||||||
| | { |
|
| | { |
|
||||||
| | "layerProtocol": "IP_OVER_ETHERNET" |
|
| | "id": "d7c14d6f-3bac-4e11-a512-5101b4933545", |
|
||||||
| | } |
|
| | "cpdId": "VDU1_CP1", |
|
||||||
| | ] |
|
| | "extLinkPortId": null, |
|
||||||
| | } |
|
| | "associatedVnfcCpId": "b0f677ce-93db-416a-839b-998707338d14", |
|
||||||
| | ], |
|
| | "cpProtocolInfo": [] |
|
||||||
| | "extVirtualLinkInfo": [ |
|
| | }, |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "net0", |
|
| | "id": "e3513495-c555-4a1f-a9cc-07a0feae2720", |
|
||||||
| | "resourceHandle": { |
|
| | "cpdId": "VDU2_CP1", |
|
||||||
| | "vimConnectionId": null, |
|
| | "extLinkPortId": null, |
|
||||||
| | "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d", |
|
| | "associatedVnfcCpId": "9da6945b-d9a3-4001-a03a-7b239b7e7084", |
|
||||||
| | "vimLevelResourceType": null |
|
| | "cpProtocolInfo": [] |
|
||||||
| | } |
|
| | }, |
|
||||||
| | } |
|
| | { |
|
||||||
| | ], |
|
| | "id": "53c187aa-d05c-4995-9518-3119ac02ee66", |
|
||||||
| | "vnfcResourceInfo": [ |
|
| | "cpdId": "VDU1_CP2", |
|
||||||
| | { |
|
| | "extLinkPortId": null, |
|
||||||
| | "id": "b07ba349-1366-4d14-91e9-07842cdfa7ab", |
|
| | "associatedVnfcCpId": "b0f677ce-93db-416a-839b-998707338d14", |
|
||||||
| | "vduId": "VDU1", |
|
| | "cpProtocolInfo": [ |
|
||||||
| | "computeResource": { |
|
| | { |
|
||||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
| | "layerProtocol": "IP_OVER_ETHERNET", |
|
||||||
| | "resourceId": "794b9460-d799-4398-98a4-413fb04d2051", |
|
| | "ipOverEthernet": { |
|
||||||
| | "vimLevelResourceType": "OS::Nova::Server" |
|
| | "macAddress": null, |
|
||||||
| | }, |
|
| | "ipAddresses": [ |
|
||||||
| | "storageResourceIds": [], |
|
| | { |
|
||||||
| | "vnfcCpInfo": [ |
|
| | "type": "IPV4", |
|
||||||
| | { |
|
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
|
||||||
| | "id": "f7297196-a024-4a90-9393-aadeb7de1fb3", |
|
| | "isDynamic": false, |
|
||||||
| | "cpdId": "CP1", |
|
| | "addresses": [ |
|
||||||
| | "vnfExtCpId": null, |
|
| | "22.22.1.10" |
|
||||||
| | "vnfLinkPortId": "cf733c70-8dc2-46b8-8d76-2ebd0bb5bd07", |
|
| | ] |
|
||||||
| | "cpProtocolInfo": [ |
|
| | } |
|
||||||
| | { |
|
| | ] |
|
||||||
| | "layerProtocol": "IP_OVER_ETHERNET" |
|
| | } |
|
||||||
| | } |
|
| | } |
|
||||||
| | ] |
|
| | ] |
|
||||||
| | }, |
|
| | }, |
|
||||||
| | { |
|
| | { |
|
||||||
| | "id": "f3851831-ed25-4e73-b913-6725085c7484", |
|
| | "id": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40", |
|
||||||
| | "cpdId": "CP2", |
|
| | "cpdId": "VDU2_CP2", |
|
||||||
| | "vnfExtCpId": null, |
|
| | "extLinkPortId": null, |
|
||||||
| | "vnfLinkPortId": "8cc28f47-ee72-420e-b4e8-26913d60bf55" |
|
| | "associatedVnfcCpId": "9da6945b-d9a3-4001-a03a-7b239b7e7084", |
|
||||||
| | } |
|
| | "cpProtocolInfo": [ |
|
||||||
| | ] |
|
| | { |
|
||||||
| | }, |
|
| | "layerProtocol": "IP_OVER_ETHERNET", |
|
||||||
| | { |
|
| | "ipOverEthernet": { |
|
||||||
| | "id": "aae43bc1-a54e-46e8-9371-59c1ef5fc84d", |
|
| | "macAddress": null, |
|
||||||
| | "vduId": "VDU2", |
|
| | "ipAddresses": [ |
|
||||||
| | "computeResource": { |
|
| | { |
|
||||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
| | "type": "IPV4", |
|
||||||
| | "resourceId": "20e10aed-16e9-4f7c-ad0c-1e885cc1200e", |
|
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
|
||||||
| | "vimLevelResourceType": "OS::Nova::Server" |
|
| | "isDynamic": false, |
|
||||||
| | }, |
|
| | "addresses": [ |
|
||||||
| | "storageResourceIds": [ |
|
| | "22.22.1.20" |
|
||||||
| | "21703823-33b3-4f06-a52c-28b455146a4a" |
|
| | ] |
|
||||||
| | ], |
|
| | } |
|
||||||
| | "vnfcCpInfo": [ |
|
| | ] |
|
||||||
| | { |
|
| | } |
|
||||||
| | "id": "d0088ed3-1639-4f3b-a369-3baae7e86540", |
|
| | } |
|
||||||
| | "cpdId": "CP3", |
|
| | ] |
|
||||||
| | "vnfExtCpId": null, |
|
| | } |
|
||||||
| | "vnfLinkPortId": "d5fe9f7b-f50d-49dc-a3c8-ded2843005e4" |
|
| | ], |
|
||||||
| | } |
|
| | "extVirtualLinkInfo": [ |
|
||||||
| | ] |
|
| | { |
|
||||||
| | } |
|
| | "id": "91bcff6d-4703-4ba9-b1c2-009e6db92a9c", |
|
||||||
| | ], |
|
| | "resourceHandle": { |
|
||||||
| | "vnfVirtualLinkResourceInfo": [ |
|
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||||
| | { |
|
| | "resourceId": "3019b1e7-99d8-4748-97ac-104922bc78d9", |
|
||||||
| | "id": "45588051-a413-41a0-a55c-b31fb50fb351", |
|
| | "vimLevelResourceType": null |
|
||||||
| | "vnfVirtualLinkDescId": "internalVL2", |
|
| | }, |
|
||||||
| | "networkResource": { |
|
| | "extLinkPorts": [ |
|
||||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
| | { |
|
||||||
| | "resourceId": "f45802ae-7fff-4c6e-b62f-3d55baec4c6b", |
|
| | "id": "6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f", |
|
||||||
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
| | "resourceHandle": { |
|
||||||
| | }, |
|
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||||
| | "vnfLinkPorts": [ |
|
| | "resourceId": "972a375d-921f-46f5-bfdb-19af95fc49e1", |
|
||||||
| | { |
|
| | "vimLevelResourceType": null |
|
||||||
| | "id": "8cc28f47-ee72-420e-b4e8-26913d60bf55", |
|
| | }, |
|
||||||
| | "resourceHandle": { |
|
| | "cpInstanceId": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40" |
|
||||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
| | }, |
|
||||||
| | "resourceId": "e020ad8f-3f85-4d13-98c1-3ea476bf2d1a", |
|
| | { |
|
||||||
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
| | "id": "02d867e7-b955-4b4a-b92f-c78c7ede63bf", |
|
||||||
| | }, |
|
| | "resourceHandle": { |
|
||||||
| | "cpInstanceId": "f3851831-ed25-4e73-b913-6725085c7484" |
|
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||||
| | }, |
|
| | "resourceId": "b853b5c5-cd97-4dfb-8750-cac6e5c62477", |
|
||||||
| | { |
|
| | "vimLevelResourceType": null |
|
||||||
| | "id": "d5fe9f7b-f50d-49dc-a3c8-ded2843005e4", |
|
| | }, |
|
||||||
| | "resourceHandle": { |
|
| | "cpInstanceId": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40" |
|
||||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
| | } |
|
||||||
| | "resourceId": "8f1588e5-4410-40eb-84ee-28336a6a0212", |
|
| | ] |
|
||||||
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
| | }, |
|
||||||
| | }, |
|
| | { |
|
||||||
| | "cpInstanceId": "d0088ed3-1639-4f3b-a369-3baae7e86540" |
|
| | "id": "a96d2f5b-c01a-48e1-813c-76132965042c", |
|
||||||
| | } |
|
| | "resourceHandle": { |
|
||||||
| | ] |
|
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||||
| | }, |
|
| | "resourceId": "589a045a-65d9-4f4d-a9b3-35aa655374d0", |
|
||||||
| | { |
|
| | "vimLevelResourceType": null |
|
||||||
| | "id": "66f3fa97-4046-4fa4-b1ff-19295501021f", |
|
| | } |
|
||||||
| | "vnfVirtualLinkDescId": "net0", |
|
| | } |
|
||||||
| | "networkResource": { |
|
| | ], |
|
||||||
| | "vimConnectionId": null, |
|
| | "extManagedVirtualLinkInfo": [ |
|
||||||
| | "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d", |
|
| | { |
|
||||||
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
| | "id": "8f9d8da0-2386-4f00-bbb0-860f50d32a5a", |
|
||||||
| | }, |
|
| | "vnfVirtualLinkDescId": "internalVL1", |
|
||||||
| | "vnfLinkPorts": [ |
|
| | "networkResource": { |
|
||||||
| | { |
|
| | "vimConnectionId": null, |
|
||||||
| | "id": "cf733c70-8dc2-46b8-8d76-2ebd0bb5bd07", |
|
| | "resourceId": "0e498d08-ed3a-4212-83e0-1b6808f6fcb6", |
|
||||||
| | "resourceHandle": { |
|
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
| | }, |
|
||||||
| | "resourceId": "1db39a17-bbae-4074-8623-8a8026b51647", |
|
| | "vnfLinkPorts": [ |
|
||||||
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
| | { |
|
||||||
| | }, |
|
| | "id": "f5de777b-22e9-480a-a044-5359cc8b6263", |
|
||||||
| | "cpInstanceId": "f7297196-a024-4a90-9393-aadeb7de1fb3" |
|
| | "resourceHandle": { |
|
||||||
| | } |
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
| | ] |
|
| | "resourceId": "ddb45b78-385d-4c18-aec3-10bf6bafb840", |
|
||||||
| | } |
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
| | ], |
|
| | }, |
|
||||||
| | "virtualStorageResourceInfo": [ |
|
| | "cpInstanceId": "a98f1c4b-f4c9-4603-8813-4a9dbb003950" |
|
||||||
| | { |
|
| | }, |
|
||||||
| | "id": "21703823-33b3-4f06-a52c-28b455146a4a", |
|
| | { |
|
||||||
| | "virtualStorageDescId": "VirtualStorage", |
|
| | "id": "d754bcb0-5ab4-4715-9469-e946ec69733e", |
|
||||||
| | "storageResource": { |
|
| | "resourceHandle": { |
|
||||||
| | "vimConnectionId": "13bef9df-7c54-4b37-9da0-1256953e7f60", |
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
| | "resourceId": "c6231ea2-6a90-4ba4-b38b-778a5d7110ee", |
|
| | "resourceId": "29de4ae6-1004-4607-9023-818efacba3ce", |
|
||||||
| | "vimLevelResourceType": "OS::Cinder::Volume" |
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
| | } |
|
| | }, |
|
||||||
| | } |
|
| | "cpInstanceId": "c408c3a8-924b-4570-a896-ddb5bd56d14a" |
|
||||||
| | ], |
|
| | } |
|
||||||
| | "vnfcInfo": [ |
|
| | ] |
|
||||||
| | { |
|
| | }, |
|
||||||
| | "id": "4c999b33-3004-4b44-a826-49d07f5becb9", |
|
| | { |
|
||||||
| | "vduId": "VDU1", |
|
| | "id": "11d68761-aab7-419c-955c-0c6497f13692", |
|
||||||
| | "vnfcState": "STARTED" |
|
| | "vnfVirtualLinkDescId": "internalVL2", |
|
||||||
| | }, |
|
| | "networkResource": { |
|
||||||
| | { |
|
| | "vimConnectionId": null, |
|
||||||
| | "id": "d8f83af0-1b4d-4f57-b53c-fd028849be8f", |
|
| | "resourceId": "38a8d4ba-ac1b-41a2-a92b-ff2a3e5e9b12", |
|
||||||
| | "vduId": "VDU2", |
|
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||||
| | "vnfcState": "STARTED" |
|
| | }, |
|
||||||
| | } |
|
| | "vnfLinkPorts": [ |
|
||||||
| | ], |
|
| | { |
|
||||||
| | "additionalParams": {} |
|
| | "id": "1b664cfb-6c8b-4f02-a535-f683fe414e31", |
|
||||||
| | } |
|
| | "resourceHandle": { |
|
||||||
| Instantiation State | INSTANTIATED |
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
| Links | { |
|
| | "resourceId": "2215cb28-9876-4c43-a71d-c63ae42a7ab4", |
|
||||||
| | "self": { |
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/9e086f34-b3c9-4986-b5e5-609a5ac4c1f9" |
|
| | }, |
|
||||||
| | }, |
|
| | "cpInstanceId": "f16e20d7-cb86-4b4d-a4fa-f27802eaf628" |
|
||||||
| | "terminate": { |
|
| | }, |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/9e086f34-b3c9-4986-b5e5-609a5ac4c1f9/terminate" |
|
| | { |
|
||||||
| | }, |
|
| | "id": "65c35b4c-1a8b-4495-a396-73d09f4cebea", |
|
||||||
| | "heal": { |
|
| | "resourceHandle": { |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/9e086f34-b3c9-4986-b5e5-609a5ac4c1f9/heal" |
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
| | }, |
|
| | "resourceId": "0019f288-38b3-4247-89fc-51ecf7663401", |
|
||||||
| | "changeExtConn": { |
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
| | "href": "/vnflcm/v1/vnf_instances/9e086f34-b3c9-4986-b5e5-609a5ac4c1f9/change_ext_conn" |
|
| | }, |
|
||||||
| | } |
|
| | "cpInstanceId": "269b2b44-7577-45b5-8038-1e67d34dea41" |
|
||||||
| | } |
|
| | } |
|
||||||
| VIM Connection Info | [] |
|
| | ] |
|
||||||
| VNF Instance Description | None |
|
| | } |
|
||||||
| VNF Instance Name | vnf-9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 |
|
| | ], |
|
||||||
| VNF Product Name | Sample VNF |
|
| | "vnfcResourceInfo": [ |
|
||||||
| VNF Provider | Company |
|
| | { |
|
||||||
| VNF Software Version | 1.0 |
|
| | "id": "b0f677ce-93db-416a-839b-998707338d14", |
|
||||||
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
| | "vduId": "VDU1", |
|
||||||
| VNFD Version | 1.0 |
|
| | "computeResource": { |
|
||||||
| vnfPkgId | |
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
+--------------------------+-------------------------------------------------------------------------------------------------+
|
| | "resourceId": "2bd41386-1971-425c-9f27-310c7a4d6181", |
|
||||||
|
| | "vimLevelResourceType": "OS::Nova::Server" |
|
||||||
|
| | }, |
|
||||||
|
| | "storageResourceIds": [], |
|
||||||
|
| | "vnfcCpInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "c86cef0a-150d-4eff-a21f-a48c6fcfa258", |
|
||||||
|
| | "cpdId": "VDU1_CP1", |
|
||||||
|
| | "vnfExtCpId": "6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f", |
|
||||||
|
| | "vnfLinkPortId": "f2105dd9-fed4-43dd-8d74-fcf0199cb716" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "426c0473-2de1-42dc-ae1f-ff4cf4d8b29b", |
|
||||||
|
| | "cpdId": "VDU1_CP2", |
|
||||||
|
| | "vnfExtCpId": null, |
|
||||||
|
| | "vnfLinkPortId": "9925668e-ceea-45ef-817a-25d19572a494", |
|
||||||
|
| | "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": "a98f1c4b-f4c9-4603-8813-4a9dbb003950", |
|
||||||
|
| | "cpdId": "VDU1_CP3", |
|
||||||
|
| | "vnfExtCpId": null, |
|
||||||
|
| | "vnfLinkPortId": "f5de777b-22e9-480a-a044-5359cc8b6263" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "f16e20d7-cb86-4b4d-a4fa-f27802eaf628", |
|
||||||
|
| | "cpdId": "VDU1_CP4", |
|
||||||
|
| | "vnfExtCpId": null, |
|
||||||
|
| | "vnfLinkPortId": "1b664cfb-6c8b-4f02-a535-f683fe414e31" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "89dd97c3-ef2d-4df5-a18a-f542e573a5bd", |
|
||||||
|
| | "cpdId": "VDU1_CP5", |
|
||||||
|
| | "vnfExtCpId": null, |
|
||||||
|
| | "vnfLinkPortId": "1a8d6c49-40bb-4f24-96e7-6efba6001671" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "9da6945b-d9a3-4001-a03a-7b239b7e7084", |
|
||||||
|
| | "vduId": "VDU2", |
|
||||||
|
| | "computeResource": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "777515dd-35c9-4f06-ad6b-f79323097e0f", |
|
||||||
|
| | "vimLevelResourceType": "OS::Nova::Server" |
|
||||||
|
| | }, |
|
||||||
|
| | "storageResourceIds": [], |
|
||||||
|
| | "vnfcCpInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "12ea4352-66a5-47a4-989f-d4d06d5bab1a", |
|
||||||
|
| | "cpdId": "VDU2_CP1", |
|
||||||
|
| | "vnfExtCpId": "02d867e7-b955-4b4a-b92f-c78c7ede63bf", |
|
||||||
|
| | "vnfLinkPortId": "6043706d-6173-40ef-8bc5-519868ce9fe4" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "b6a56d88-da99-4036-872f-f10759b00ed8", |
|
||||||
|
| | "cpdId": "VDU2_CP2", |
|
||||||
|
| | "vnfExtCpId": null, |
|
||||||
|
| | "vnfLinkPortId": "bfd0d3ad-1f9c-4102-b446-c7f33881b136", |
|
||||||
|
| | "cpProtocolInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "layerProtocol": "IP_OVER_ETHERNET", |
|
||||||
|
| | "ipOverEthernet": { |
|
||||||
|
| | "macAddress": null, |
|
||||||
|
| | "ipAddresses": [ |
|
||||||
|
| | { |
|
||||||
|
| | "type": "IPV4", |
|
||||||
|
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
|
||||||
|
| | "isDynamic": false, |
|
||||||
|
| | "addresses": [ |
|
||||||
|
| | "22.22.1.20" |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "c408c3a8-924b-4570-a896-ddb5bd56d14a", |
|
||||||
|
| | "cpdId": "VDU2_CP3", |
|
||||||
|
| | "vnfExtCpId": null, |
|
||||||
|
| | "vnfLinkPortId": "d754bcb0-5ab4-4715-9469-e946ec69733e" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "269b2b44-7577-45b5-8038-1e67d34dea41", |
|
||||||
|
| | "cpdId": "VDU2_CP4", |
|
||||||
|
| | "vnfExtCpId": null, |
|
||||||
|
| | "vnfLinkPortId": "65c35b4c-1a8b-4495-a396-73d09f4cebea" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "bb1ed2d3-da19-4b45-b326-cf9e76fd788a", |
|
||||||
|
| | "cpdId": "VDU2_CP5", |
|
||||||
|
| | "vnfExtCpId": null, |
|
||||||
|
| | "vnfLinkPortId": "46cd8f09-d877-491b-8928-345ec6461637" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "vnfVirtualLinkResourceInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "b3244c22-2365-476e-bc7b-40cbaee45ce1", |
|
||||||
|
| | "vnfVirtualLinkDescId": "internalVL1", |
|
||||||
|
| | "networkResource": { |
|
||||||
|
| | "vimConnectionId": null, |
|
||||||
|
| | "resourceId": "0e498d08-ed3a-4212-83e0-1b6808f6fcb6", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||||
|
| | }, |
|
||||||
|
| | "vnfLinkPorts": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "f5de777b-22e9-480a-a044-5359cc8b6263", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "ddb45b78-385d-4c18-aec3-10bf6bafb840", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "a98f1c4b-f4c9-4603-8813-4a9dbb003950" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "d754bcb0-5ab4-4715-9469-e946ec69733e", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "29de4ae6-1004-4607-9023-818efacba3ce", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "c408c3a8-924b-4570-a896-ddb5bd56d14a" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "c9182342-bfc4-4ba8-9e26-02fd0565db4d", |
|
||||||
|
| | "vnfVirtualLinkDescId": "internalVL2", |
|
||||||
|
| | "networkResource": { |
|
||||||
|
| | "vimConnectionId": null, |
|
||||||
|
| | "resourceId": "38a8d4ba-ac1b-41a2-a92b-ff2a3e5e9b12", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||||
|
| | }, |
|
||||||
|
| | "vnfLinkPorts": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "1b664cfb-6c8b-4f02-a535-f683fe414e31", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "2215cb28-9876-4c43-a71d-c63ae42a7ab4", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "f16e20d7-cb86-4b4d-a4fa-f27802eaf628" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "65c35b4c-1a8b-4495-a396-73d09f4cebea", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "0019f288-38b3-4247-89fc-51ecf7663401", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "269b2b44-7577-45b5-8038-1e67d34dea41" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "81ed1791-a1c2-46fb-a999-dd9d601b06ec", |
|
||||||
|
| | "vnfVirtualLinkDescId": "internalVL3", |
|
||||||
|
| | "networkResource": { |
|
||||||
|
| | "vimConnectionId": null, |
|
||||||
|
| | "resourceId": "", |
|
||||||
|
| | "vimLevelResourceType": null |
|
||||||
|
| | }, |
|
||||||
|
| | "vnfLinkPorts": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "1a8d6c49-40bb-4f24-96e7-6efba6001671", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "84d7fc8c-fb52-4593-875b-bf303ec5fc8c", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "89dd97c3-ef2d-4df5-a18a-f542e573a5bd" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "46cd8f09-d877-491b-8928-345ec6461637", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "65650d05-a562-4c5f-84d2-e9304ef68377", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "bb1ed2d3-da19-4b45-b326-cf9e76fd788a" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "1d1a0824-5c4d-461e-9a29-5e72db1e5855", |
|
||||||
|
| | "vnfVirtualLinkDescId": "91bcff6d-4703-4ba9-b1c2-009e6db92a9c", |
|
||||||
|
| | "networkResource": { |
|
||||||
|
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||||
|
| | "resourceId": "3019b1e7-99d8-4748-97ac-104922bc78d9", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||||
|
| | }, |
|
||||||
|
| | "vnfLinkPorts": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "f2105dd9-fed4-43dd-8d74-fcf0199cb716", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "f0cf8bfd-261a-4c54-b783-42cce6d90859", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "c86cef0a-150d-4eff-a21f-a48c6fcfa258" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "6043706d-6173-40ef-8bc5-519868ce9fe4", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "6a349003-66a1-4bfa-bd4b-83705957482a", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "12ea4352-66a5-47a4-989f-d4d06d5bab1a" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "d8fc6199-c9d6-4e74-b896-c44018fa4382", |
|
||||||
|
| | "vnfVirtualLinkDescId": "a96d2f5b-c01a-48e1-813c-76132965042c", |
|
||||||
|
| | "networkResource": { |
|
||||||
|
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||||
|
| | "resourceId": "589a045a-65d9-4f4d-a9b3-35aa655374d0", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||||
|
| | }, |
|
||||||
|
| | "vnfLinkPorts": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "9925668e-ceea-45ef-817a-25d19572a494", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "53700068-3c4b-444b-b4eb-bbaa887a0e28", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "426c0473-2de1-42dc-ae1f-ff4cf4d8b29b" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "bfd0d3ad-1f9c-4102-b446-c7f33881b136", |
|
||||||
|
| | "resourceHandle": { |
|
||||||
|
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "resourceId": "136f1448-feb7-480d-8d92-15d7e4d02f37", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Port" |
|
||||||
|
| | }, |
|
||||||
|
| | "cpInstanceId": "b6a56d88-da99-4036-872f-f10759b00ed8" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "vnfcInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "b9b73267-40ce-468f-87ab-a6653cee664f", |
|
||||||
|
| | "vduId": "VDU1", |
|
||||||
|
| | "vnfcState": "STARTED" |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "1842c052-b6af-45bb-b976-f99cd1212182", |
|
||||||
|
| | "vduId": "VDU2", |
|
||||||
|
| | "vnfcState": "STARTED" |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "additionalParams": { |
|
||||||
|
| | "lcm-operation-user-data": "./UserData/lcm_user_data.py", |
|
||||||
|
| | "lcm-operation-user-data-class": "SampleUserData" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| Instantiation State | INSTANTIATED |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8" |
|
||||||
|
| | }, |
|
||||||
|
| | "terminate": { |
|
||||||
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8/terminate" |
|
||||||
|
| | }, |
|
||||||
|
| | "heal": { |
|
||||||
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8/heal" |
|
||||||
|
| | }, |
|
||||||
|
| | "changeExtConn": { |
|
||||||
|
| | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8/change_ext_conn" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| VIM Connection Info | [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
|
||||||
|
| | "vimId": null, |
|
||||||
|
| | "vimType": "ETSINFV.OPENSTACK_KEYSTONE.v_2", |
|
||||||
|
| | "interfaceInfo": { |
|
||||||
|
| | "endpoint": "http://127.0.0.1/identity" |
|
||||||
|
| | }, |
|
||||||
|
| | "accessInfo": { |
|
||||||
|
| | "region": "RegionOne", |
|
||||||
|
| | "tenant": "1994d69783d64c00aadab564038c2fd7", |
|
||||||
|
| | "password": "devstack", |
|
||||||
|
| | "username": "nfv_user" |
|
||||||
|
| | }, |
|
||||||
|
| | "extra": {} |
|
||||||
|
| | }, |
|
||||||
|
| | { |
|
||||||
|
| | "id": "700a68db-0789-49e0-97d5-9824d5eeb272", |
|
||||||
|
| | "vimId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
|
||||||
|
| | "vimType": "openstack", |
|
||||||
|
| | "interfaceInfo": {}, |
|
||||||
|
| | "accessInfo": {}, |
|
||||||
|
| | "extra": {} |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| VNF Configurable Properties | |
|
||||||
|
| VNF Instance Description | |
|
||||||
|
| VNF Instance Name | vnf-c3f9c200-7f52-42c5-9c64-6032faa3faf8 |
|
||||||
|
| VNF Product Name | Sample VNF |
|
||||||
|
| VNF Provider | Company |
|
||||||
|
| VNF Software Version | 1.0 |
|
||||||
|
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d7000321 |
|
||||||
|
| VNFD Version | 1.0 |
|
||||||
|
| metadata | tenant=nfv |
|
||||||
|
| vnfPkgId | |
|
||||||
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The value set for 'VNF Instance Name' corresponds to 'Stack Name'
|
|
||||||
managed by Heat.
|
The value set for 'VNF Instance Name' corresponds to 'Stack Name'
|
||||||
In this manual, it corresponds to **vnf-9e086f34-b3c9-4986-b5e5-609a5ac4c1f9**.
|
managed by Heat.
|
||||||
|
In this manual, it corresponds to **vnf-c3f9c200-7f52-42c5-9c64-6032faa3faf8**.
|
||||||
|
|
||||||
|
|
||||||
VNF Healing Procedure
|
VNF Healing Procedure
|
||||||
@ -260,7 +600,7 @@ As mentioned in **Prerequisites** and **Healing target VNF instance**,
|
|||||||
the VNF must be instantiated before healing.
|
the VNF must be instantiated before healing.
|
||||||
|
|
||||||
Details of CLI commands are described in
|
Details of CLI commands are described in
|
||||||
:doc:`../cli/cli-etsi-vnflcm`.
|
:doc:`/cli/cli-etsi-vnflcm`.
|
||||||
|
|
||||||
There are two main methods for VNF healing.
|
There are two main methods for VNF healing.
|
||||||
|
|
||||||
@ -268,47 +608,11 @@ There are two main methods for VNF healing.
|
|||||||
* Healing specified with VNFC instances
|
* Healing specified with VNFC instances
|
||||||
|
|
||||||
.. note::
|
.. 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`_.
|
|
||||||
|
|
||||||
|
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`_.
|
||||||
|
|
||||||
The client can specify the target resources for healing
|
|
||||||
with two parameters in the API request.
|
|
||||||
|
|
||||||
- *vnfcInstanceId* is a list which indicates VNFC instances
|
|
||||||
for which a healing action is requested.
|
|
||||||
|
|
||||||
- *all* indicates whether network resources and storage resources
|
|
||||||
are included in the heal target. This is set in the attribute
|
|
||||||
of *additionalParams*.
|
|
||||||
|
|
||||||
With the combination of these parameters,
|
|
||||||
Tacker supports the following patterns of healing.
|
|
||||||
|
|
||||||
- Pattern A. *vnfcInstanceId* is included in the request.
|
|
||||||
|
|
||||||
- Pattern A-1. *all = False* is included in the request or *all* is not
|
|
||||||
included in the request.
|
|
||||||
|
|
||||||
- Only specified VNFC instances are healed.
|
|
||||||
- Pattern A-2. *all = True* are included in the request.
|
|
||||||
|
|
||||||
- Specified VNFC instances and storage resources are healed.
|
|
||||||
- Pattern B. *vnfcInstanceId* is not included in the request.
|
|
||||||
|
|
||||||
- Pattern B-1. *all = False* is included in the request or *all* is not
|
|
||||||
included in the request.
|
|
||||||
|
|
||||||
- All VNFC instances included in the VNF instance are healed.
|
|
||||||
- Pattern B-2. *all = True* are included in the request.
|
|
||||||
|
|
||||||
- All resources included in the VNF instance are healed.
|
|
||||||
It includes VNFC instances, network resources, and storage resources
|
|
||||||
but not external virtual networks.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
*all* option is not supported by the version 1 API.
|
|
||||||
|
|
||||||
How to Heal of the Entire VNF
|
How to Heal of the Entire VNF
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -339,11 +643,11 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
| ID | Stack Name | Stack Status |
|
| ID | Stack Name | Stack Status |
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
| 5322e9c4-b5ac-439e-8ed4-d0710816f318 | vnf-9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 | CREATE_COMPLETE |
|
| 00d1871d-4acc-4d6b-99bc-cc68ad0b8a6a | vnflcm_c3f9c200-7f52-42c5-9c64-6032faa3faf8 | CREATE_COMPLETE |
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
|
|
||||||
|
|
||||||
Healing execution of the entire VNF:
|
Healing execution of the entire VNF:
|
||||||
@ -357,7 +661,7 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Heal request for VNF Instance 9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 has been accepted.
|
Heal request for VNF Instance 0c3644ff-b207-4a6a-9d3a-d1295cda153a has been accepted.
|
||||||
|
|
||||||
|
|
||||||
Stack information after healing:
|
Stack information after healing:
|
||||||
@ -371,15 +675,16 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
| ID | Stack Name | Stack Status |
|
| ID | Stack Name | Stack Status |
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
| ad077101-b093-4785-9ca5-cc7c1379bb10 | vnf-9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 | CREATE_COMPLETE |
|
| c220dd92-034e-4e7f-bea3-e5e7e95b145c | vnflcm_c3f9c200-7f52-42c5-9c64-6032faa3faf8 | CREATE_COMPLETE |
|
||||||
+--------------------------------------+------------------------------------------+-----------------+
|
+--------------------------------------+---------------------------------------------+-----------------+
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
'ID' has changed from the ID before healing.
|
|
||||||
'Stack Status' transitions to CREATE_COMPLETE.
|
'ID' has changed from the ID before healing.
|
||||||
|
'Stack Status' transitions to CREATE_COMPLETE.
|
||||||
|
|
||||||
|
|
||||||
How to Heal Specified with VNFC Instances
|
How to Heal Specified with VNFC Instances
|
||||||
@ -389,18 +694,21 @@ Extract the value of vnfcResourceInfo -> id from 'Instantiated Vnf Info'
|
|||||||
in **Healing target VNF instance**.
|
in **Healing target VNF instance**.
|
||||||
This is the VNFC instance ID.
|
This is the VNFC instance ID.
|
||||||
|
|
||||||
This manual shows an example of healing VDU1 as VNFC.
|
.. code-block:: console
|
||||||
In this manual, **b07ba349-1366-4d14-91e9-07842cdfa7ab** corresponds to
|
|
||||||
the ``VNFC_instance_ID`` of VDU1.
|
|
||||||
|
|
||||||
.. note:: In the case of version 1 API,
|
$ openstack vnflcm show c3f9c200-7f52-42c5-9c64-6032faa3faf8 \
|
||||||
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcResourceInfo.id``.
|
-f json | jq '."Instantiated Vnf Info".vnfcResourceInfo[].id'
|
||||||
In the case of version 2 API,
|
"b0f677ce-93db-416a-839b-998707338d14"
|
||||||
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcInfo.id``.
|
"9da6945b-d9a3-4001-a03a-7b239b7e7084"
|
||||||
|
|
||||||
|
|
||||||
|
This manual shows an example of healing VDU1 as VNFC.
|
||||||
|
In this manual, **b0f677ce-93db-416a-839b-998707338d14** corresponds to
|
||||||
|
the VNFC instance ID of VDU1.
|
||||||
|
|
||||||
When healing specified with VNFC instances, the following
|
When healing specified with VNFC instances, the following
|
||||||
APIs are executed from Tacker to Heat.
|
APIs are executed from Tacker to Heat.
|
||||||
See `Heat API reference`_. for details on Heat APIs.
|
See `Heat API reference`_ for details on Heat APIs.
|
||||||
|
|
||||||
* stack resource mark unhealthy
|
* stack resource mark unhealthy
|
||||||
* stack update
|
* stack update
|
||||||
@ -410,11 +718,12 @@ resource_status of VDU1 before and after healing.
|
|||||||
This is to confirm that the resource ID of this VDU1 has changed
|
This is to confirm that the resource ID of this VDU1 has changed
|
||||||
before and after healing, and that the re-creation has been
|
before and after healing, and that the re-creation has been
|
||||||
completed successfully.
|
completed successfully.
|
||||||
See `Heat CLI reference`_. for details on Heat CLI commands.
|
See `Heat CLI reference`_ for details on Heat CLI commands.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Note that 'vnfc-instance-id' managed by Tacker and
|
|
||||||
'physical-resource-id' managed by Heat are different.
|
Note that 'vnfc-instance-id' managed by Tacker and
|
||||||
|
'physical-resource-id' managed by Heat are different.
|
||||||
|
|
||||||
|
|
||||||
VDU1 information before healing:
|
VDU1 information before healing:
|
||||||
@ -422,7 +731,7 @@ VDU1 information before healing:
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack stack resource show HEAT_STACK_ID \
|
$ openstack stack resource show HEAT_STACK_ID \
|
||||||
VDU_NAME -c physical_resource_id -c resource_status
|
VDU_NAME -c physical_resource_id -c resource_status
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -432,7 +741,7 @@ Result:
|
|||||||
+----------------------+--------------------------------------+
|
+----------------------+--------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+----------------------+--------------------------------------+
|
+----------------------+--------------------------------------+
|
||||||
| physical_resource_id | b3393a22-a064-43d0-b021-e8549a62b366 |
|
| physical_resource_id | 6b89f9c9-ebd8-49ca-8e2c-c01838daeb95 |
|
||||||
| resource_status | CREATE_COMPLETE |
|
| resource_status | CREATE_COMPLETE |
|
||||||
+----------------------+--------------------------------------+
|
+----------------------+--------------------------------------+
|
||||||
|
|
||||||
@ -441,27 +750,27 @@ Healing execution of VDU1:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm heal VNF_INSTANCE_ID \
|
$ openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID
|
||||||
--vnfc-instance VNFC_INSTANCE_ID
|
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Heal request for VNF Instance 9e086f34-b3c9-4986-b5e5-609a5ac4c1f9 has been accepted.
|
Heal request for VNF Instance c3f9c200-7f52-42c5-9c64-6032faa3faf8 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
It is possible to specify multiple VNFC instance IDs in '--vnfc-instance' option.
|
|
||||||
|
It is possible to specify multiple VNFC instance IDs in '--vnfc-instance' option.
|
||||||
|
|
||||||
|
|
||||||
VDU1 information before healing:
|
VDU1 information after healing:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack stack resource show HEAT_STACK_ID \
|
$ openstack stack resource show HEAT_STACK_ID \
|
||||||
VDU_NAME -c physical_resource_id -c resource_status
|
VDU_NAME -c physical_resource_id -c resource_status
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -471,13 +780,15 @@ Result:
|
|||||||
+----------------------+--------------------------------------+
|
+----------------------+--------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+----------------------+--------------------------------------+
|
+----------------------+--------------------------------------+
|
||||||
| physical_resource_id | 794b9460-d799-4398-98a4-413fb04d2051 |
|
| physical_resource_id | 6b89f9c9-ebd8-49ca-8e2c-c01838daeb95 |
|
||||||
| resource_status | CREATE_COMPLETE |
|
| resource_status | UPDATE_COMPLETE |
|
||||||
+----------------------+--------------------------------------+
|
+----------------------+--------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
'physical_resource_id' has changed from the ID before healing.
|
|
||||||
'resource_status' transitions to CREATE_COMPLETE.
|
'physical_resource_id' has not changed from the ID before healing.
|
||||||
|
'resource_status' transitions to UPDATE_COMPLETE.
|
||||||
|
|
||||||
|
|
||||||
.. _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
|
.. _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
|
||||||
|
@ -2,7 +2,13 @@
|
|||||||
ETSI NFV-SOL VNF Scaling
|
ETSI NFV-SOL VNF Scaling
|
||||||
========================
|
========================
|
||||||
|
|
||||||
This document describes how to scale VNF in Tacker.
|
This document describes how to scale VNF in Tacker v1 API.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This is a document for Tacker v1 API.
|
||||||
|
See :doc:`/user/v2/vnf/scale/index` for Tacker v2 API.
|
||||||
|
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
--------
|
--------
|
||||||
@ -17,22 +23,23 @@ The diagram below shows an overview of the VNF scaling.
|
|||||||
2. Call OpenStack Heat API
|
2. Call OpenStack Heat API
|
||||||
|
|
||||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
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
|
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.
|
calls OpenStack Heat APIs.
|
||||||
|
|
||||||
3. Change the number of VMs
|
3. Change the number of VMs
|
||||||
|
|
||||||
OpenStack Heat change the number of VMs according to the API calls.
|
OpenStack Heat change the number of VMs according to the API calls.
|
||||||
|
|
||||||
.. figure:: ../_images/etsi_vnf_scaling.png
|
.. figure:: /_images/etsi_vnf_scaling.png
|
||||||
:align: left
|
|
||||||
|
|
||||||
.. note:: Scale API version 1 supports is_reverse option.
|
|
||||||
Scale-in operation with this option deletes VNF from the last
|
.. note::
|
||||||
registered VM. Scale API version 2 does not support this option
|
|
||||||
because it deletes VM in this order by default.
|
Scale API version 1 supports is_reverse option.
|
||||||
|
Scale-in operation with this option deletes VNF from the last
|
||||||
|
registered VM.
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
@ -44,15 +51,16 @@ The following packages should be installed:
|
|||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
A default VIM should be registered according to
|
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
|
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||||
by referring to :doc:`./vnf-package`.
|
by referring to :doc:`/user/vnf-package`.
|
||||||
|
|
||||||
Execute up to "Instantiate VNF" in the procedure of
|
The procedure of prepare for scaling operation that from "register VIM" to
|
||||||
:doc:`./etsi_vnf_deployment_as_vm_with_tosca` or
|
"Instantiate VNF", basically refer to
|
||||||
:doc:`./etsi_vnf_deployment_as_vm_with_user_data`.
|
:doc:`/user/etsi_vnf_deployment_as_vm_with_user_data`.
|
||||||
In other words, the procedure after "Terminate VNF" is not executed.
|
|
||||||
|
This procedure uses an example using the sample VNF package.
|
||||||
|
|
||||||
|
|
||||||
VNF Scaling Procedure
|
VNF Scaling Procedure
|
||||||
@ -62,7 +70,7 @@ As mentioned in Prerequisites, the VNF must be instantiated
|
|||||||
before performing scaling.
|
before performing scaling.
|
||||||
|
|
||||||
Details of CLI commands are described in
|
Details of CLI commands are described in
|
||||||
:doc:`../cli/cli-etsi-vnflcm`.
|
:doc:`/cli/cli-etsi-vnflcm`.
|
||||||
|
|
||||||
There are two main methods for VNF scaling.
|
There are two main methods for VNF scaling.
|
||||||
|
|
||||||
@ -92,21 +100,6 @@ corresponds to ASPECT_ID.
|
|||||||
vdu_profile:
|
vdu_profile:
|
||||||
min_number_of_instances: 1
|
min_number_of_instances: 1
|
||||||
max_number_of_instances: 3
|
max_number_of_instances: 3
|
||||||
capabilities:
|
|
||||||
virtual_compute:
|
|
||||||
properties:
|
|
||||||
requested_additional_capabilities:
|
|
||||||
properties:
|
|
||||||
requested_additional_capability_name: m1.tiny
|
|
||||||
support_mandatory: true
|
|
||||||
target_performance_parameters:
|
|
||||||
entry_schema: test
|
|
||||||
virtual_memory:
|
|
||||||
virtual_mem_size: 512 MB
|
|
||||||
virtual_cpu:
|
|
||||||
num_virtual_cpu: 1
|
|
||||||
virtual_local_storage:
|
|
||||||
- size_of_storage: 3 GB
|
|
||||||
|
|
||||||
...snip VNFD...
|
...snip VNFD...
|
||||||
|
|
||||||
@ -167,7 +160,9 @@ corresponds to ASPECT_ID.
|
|||||||
...snip VNFD...
|
...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 VNF
|
How to Scale Out VNF
|
||||||
@ -191,13 +186,13 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
| ID | Stack Name | Stack Status | Parent |
|
| ID | Stack Name | Stack Status | Parent |
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
| 43b183c8-53cc-430f-b4e8-b0e1adc4e702 | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx-rlitsss7zfsx-oa4wsjz5yfcf | CREATE_COMPLETE | b96169b5-d692-4b5c-81b2-86010775180e |
|
| 3315a9f5-9c55-45ec-8b52-91875856c6e6 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep | CREATE_COMPLETE | e9d4576f-950c-4076-a54d-35b5cf43ebdd |
|
||||||
| b96169b5-d692-4b5c-81b2-86010775180e | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx | CREATE_COMPLETE | 6f48a8cf-0acb-4271-ae72-562c903f5381 |
|
| 1b0bd450-3154-4301-b004-46a8b21152c1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui | CREATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
|
||||||
| 6f48a8cf-0acb-4271-ae72-562c903f5381 | vnflcm_edd306c3-647c-412c-a033-74aa40118038 | CREATE_COMPLETE | None |
|
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a | CREATE_COMPLETE | None |
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
Scale-out VNF can be executed by the following CLI command.
|
Scale-out VNF can be executed by the following CLI command.
|
||||||
@ -211,7 +206,7 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Scale request for VNF Instance edd306c3-647c-412c-a033-74aa40118038 has been accepted.
|
Scale request for VNF Instance 0c3644ff-b207-4a6a-9d3a-d1295cda153a has been accepted.
|
||||||
|
|
||||||
|
|
||||||
Stack information after scale-out:
|
Stack information after scale-out:
|
||||||
@ -225,45 +220,55 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
| ID | Stack Name | Stack Status | Parent |
|
| ID | Stack Name | Stack Status | Parent |
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
| 44c364a0-1928-4717-bd95-43a74a5fe520 | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx-prjzcxxskx4i-bwx6egqcdlqg | CREATE_COMPLETE | b96169b5-d692-4b5c-81b2-86010775180e |
|
| 909dc6a6-f60a-4410-84a1-9cfbfb788be1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-cvfcy4h2rmuh-6zmqn6ason36 | CREATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
|
||||||
| 43b183c8-53cc-430f-b4e8-b0e1adc4e702 | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx-rlitsss7zfsx-oa4wsjz5yfcf | UPDATE_COMPLETE | b96169b5-d692-4b5c-81b2-86010775180e |
|
| 3315a9f5-9c55-45ec-8b52-91875856c6e6 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep | UPDATE_COMPLETE | e9d4576f-950c-4076-a54d-35b5cf43ebdd |
|
||||||
| b96169b5-d692-4b5c-81b2-86010775180e | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx | UPDATE_COMPLETE | 6f48a8cf-0acb-4271-ae72-562c903f5381 |
|
| 1b0bd450-3154-4301-b004-46a8b21152c1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui | UPDATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
|
||||||
| 6f48a8cf-0acb-4271-ae72-562c903f5381 | vnflcm_edd306c3-647c-412c-a033-74aa40118038 | CREATE_COMPLETE | None |
|
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a | CREATE_COMPLETE | None |
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
Stack details:
|
Stack details:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack stack resource list b96169b5-d692-4b5c-81b2-86010775180e
|
$ openstack stack resource list 3315a9f5-9c55-45ec-8b52-91875856c6e6
|
||||||
+---------------+--------------------------------------+---------------+-----------------+----------------------+
|
+---------------+--------------------------------------+---------------+-----------------+----------------------+
|
||||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||||
+---------------+--------------------------------------+---------------+-----------------+----------------------+
|
+---------------+--------------------------------------+---------------+-----------------+----------------------+
|
||||||
| rlitsss7zfsx | 43b183c8-53cc-430f-b4e8-b0e1adc4e702 | VDU1.yaml | UPDATE_COMPLETE | 2021-01-06T05:24:50Z |
|
| gfrxqjt6nfqb | 1b0bd450-3154-4301-b004-46a8b21152c1 | VDU1.yaml | UPDATE_COMPLETE | 2023-12-28T02:36:50Z |
|
||||||
| prjzcxxskx4i | 44c364a0-1928-4717-bd95-43a74a5fe520 | VDU1.yaml | CREATE_COMPLETE | 2021-01-06T05:24:49Z |
|
| cvfcy4h2rmuh | 909dc6a6-f60a-4410-84a1-9cfbfb788be1 | VDU1.yaml | CREATE_COMPLETE | 2023-12-28T02:36:50Z |
|
||||||
+---------------+--------------------------------------+---------------+-----------------+----------------------+
|
+---------------+--------------------------------------+---------------+-----------------+----------------------+
|
||||||
|
|
||||||
$ openstack stack resource list 43b183c8-53cc-430f-b4e8-b0e1adc4e702
|
$ openstack stack resource list 1b0bd450-3154-4301-b004-46a8b21152c1
|
||||||
+----------------+--------------------------------------+------------------------+-----------------+----------------------+
|
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||||
+----------------+--------------------------------------+------------------------+-----------------+----------------------+
|
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||||
| VDU1 | 82fd8c7d-7a55-449e-b563-457c6c59e9ac | OS::Nova::Server | CREATE_COMPLETE | 2021-01-06T05:15:35Z |
|
| VDU1 | f32848eb-598f-4158-8896-5ea9479456de | OS::Nova::Server | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
|
||||||
+----------------+--------------------------------------+------------------------+-----------------+----------------------+
|
| VDU1_CP4 | e21dc5cc-eb46-4cf9-a352-7aa3cf659af7 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
|
||||||
|
| VDU1_CP2 | 0988d9dc-97ba-43be-944d-185e316785f9 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
|
||||||
|
| VDU1_CP3 | d125eec4-4e85-43cb-9887-cd5373b0abae | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
|
||||||
|
| VDU1_CP5 | 16e66a58-c75c-4afe-be4f-e7eaafdfa506 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
|
||||||
|
| VDU1_CP1 | d581db6b-eac8-49cf-99e0-3c494450b33b | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:32:04Z |
|
||||||
|
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||||
|
|
||||||
$ openstack stack resource list 44c364a0-1928-4717-bd95-43a74a5fe520
|
$ openstack stack resource list 909dc6a6-f60a-4410-84a1-9cfbfb788be1
|
||||||
+----------------+--------------------------------------+------------------------+-----------------+----------------------+
|
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||||
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||||
+----------------+--------------------------------------+------------------------+-----------------+----------------------+
|
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||||
| VDU1 | 073fc301-49a5-41ff-953f-5fa6736414ed | OS::Nova::Server | CREATE_COMPLETE | 2021-01-06T05:24:49Z |
|
| VDU1 | e92cb6ca-72bb-46c8-91f1-531eb1d01315 | OS::Nova::Server | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
|
||||||
+----------------+--------------------------------------+------------------------+-----------------+----------------------+
|
| VDU1_CP4 | 838a673d-d684-4eaa-92ff-78f1d145b4e1 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
|
||||||
|
| VDU1_CP2 | e10f8b96-7e90-4232-b8aa-ec72b9a39d55 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
|
||||||
|
| VDU1_CP3 | 40960abd-5a3d-439f-8f2d-4ad70b5eb1ea | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
|
||||||
|
| VDU1_CP5 | b71a8b32-5ce4-48fb-9cf5-8bb6328b3679 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
|
||||||
|
| VDU1_CP1 | 35344427-eff6-47e3-820b-11782996e805 | OS::Neutron::Port | CREATE_COMPLETE | 2023-12-28T02:36:52Z |
|
||||||
|
+---------------+--------------------------------------+-------------------+-----------------+----------------------+
|
||||||
|
|
||||||
|
|
||||||
It can be seen that the child-stack (ID: 44c364a0-1928-4717-bd95-43a74a5fe520)
|
It can be seen that the child-stack (ID: 909dc6a6-f60a-4410-84a1-9cfbfb788be1)
|
||||||
with the parent-stack (ID: b96169b5-d692-4b5c-81b2-86010775180e)
|
with the parent-stack (ID: 3315a9f5-9c55-45ec-8b52-91875856c6e6)
|
||||||
is increased by the scaling out operation.
|
is increased by the scaling out operation.
|
||||||
|
|
||||||
|
|
||||||
@ -288,14 +293,14 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
| ID | Stack Name | Stack Status | Parent |
|
| ID | Stack Name | Stack Status | Parent |
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
| 44c364a0-1928-4717-bd95-43a74a5fe520 | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx-prjzcxxskx4i-bwx6egqcdlqg | CREATE_COMPLETE | b96169b5-d692-4b5c-81b2-86010775180e |
|
| 909dc6a6-f60a-4410-84a1-9cfbfb788be1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-cvfcy4h2rmuh-6zmqn6ason36 | CREATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
|
||||||
| 43b183c8-53cc-430f-b4e8-b0e1adc4e702 | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx-rlitsss7zfsx-oa4wsjz5yfcf | UPDATE_COMPLETE | b96169b5-d692-4b5c-81b2-86010775180e |
|
| 3315a9f5-9c55-45ec-8b52-91875856c6e6 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep | UPDATE_COMPLETE | e9d4576f-950c-4076-a54d-35b5cf43ebdd |
|
||||||
| b96169b5-d692-4b5c-81b2-86010775180e | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx | UPDATE_COMPLETE | 6f48a8cf-0acb-4271-ae72-562c903f5381 |
|
| 1b0bd450-3154-4301-b004-46a8b21152c1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-gfrxqjt6nfqb-2ufs4pbsedui | UPDATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
|
||||||
| 6f48a8cf-0acb-4271-ae72-562c903f5381 | vnflcm_edd306c3-647c-412c-a033-74aa40118038 | CREATE_COMPLETE | None |
|
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a | CREATE_COMPLETE | None |
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
Scale-in VNF can be executed by the following CLI command.
|
Scale-in VNF can be executed by the following CLI command.
|
||||||
@ -309,7 +314,7 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Scale request for VNF Instance edd306c3-647c-412c-a033-74aa40118038 has been accepted.
|
Scale request for VNF Instance 0c3644ff-b207-4a6a-9d3a-d1295cda153a has been accepted.
|
||||||
|
|
||||||
|
|
||||||
Stack information after scale-in:
|
Stack information after scale-in:
|
||||||
@ -323,18 +328,18 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
| ID | Stack Name | Stack Status | Parent |
|
| ID | Stack Name | Stack Status | Parent |
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
| 44c364a0-1928-4717-bd95-43a74a5fe520 | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx-prjzcxxskx4i-bwx6egqcdlqg | UPDATE_COMPLETE | b96169b5-d692-4b5c-81b2-86010775180e |
|
| 909dc6a6-f60a-4410-84a1-9cfbfb788be1 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep-cvfcy4h2rmuh-6zmqn6ason36 | UPDATE_COMPLETE | 3315a9f5-9c55-45ec-8b52-91875856c6e6 |
|
||||||
| b96169b5-d692-4b5c-81b2-86010775180e | vnflcm_edd306c3-647c-412c-a033-74aa40118038-VDU1_scale_group-5w6gwjuqjpsx | UPDATE_COMPLETE | 6f48a8cf-0acb-4271-ae72-562c903f5381 |
|
| 3315a9f5-9c55-45ec-8b52-91875856c6e6 | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a-VDU1_scale-3x6qwnzbj6ep | UPDATE_COMPLETE | e9d4576f-950c-4076-a54d-35b5cf43ebdd |
|
||||||
| 6f48a8cf-0acb-4271-ae72-562c903f5381 | vnflcm_edd306c3-647c-412c-a033-74aa40118038 | CREATE_COMPLETE | None |
|
| e9d4576f-950c-4076-a54d-35b5cf43ebdd | vnflcm_0c3644ff-b207-4a6a-9d3a-d1295cda153a | CREATE_COMPLETE | None |
|
||||||
+--------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
+--------------------------------------+-----------------------------------------------------------------------------------------------+-----------------+--------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
There were two child-stacks(ID: 44c364a0-1928-4717-bd95-43a74a5fe520
|
There were two child-stacks(ID: 1b0bd450-3154-4301-b004-46a8b21152c1
|
||||||
and ID: 43b183c8-53cc-430f-b4e8-b0e1adc4e702) with
|
and ID: 909dc6a6-f60a-4410-84a1-9cfbfb788be1) with
|
||||||
a parent-stack(ID: b96169b5-d692-4b5c-81b2-86010775180e),
|
a parent-stack(ID: 3315a9f5-9c55-45ec-8b52-91875856c6e6),
|
||||||
it can be seen that one of them is decreased by the scale-in operation.
|
it can be seen that one of them is decreased by the scale-in operation.
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,13 @@
|
|||||||
ETSI NFV-SOL VNF Update
|
ETSI NFV-SOL VNF Update
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
This document describes how to update VNF in Tacker.
|
This document describes how to update VNF in Tacker v1 API.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This is a document for Tacker v1 API.
|
||||||
|
See :doc:`/user/v2/vnf/update` for Tacker v2 API.
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
@ -13,13 +19,13 @@ The following packages should be installed:
|
|||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
A default VIM should be registered according to
|
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
|
The VNF Package(sample_vnf_package_csar.zip) used below is prepared
|
||||||
by referring to :doc:`./vnf-package`.
|
by referring to :doc:`/user/vnf-package`.
|
||||||
|
|
||||||
Execute before "Instantiate VNF" in the procedure of
|
Execute before "Instantiate VNF" in the procedure of
|
||||||
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
|
:doc:`/user/etsi_vnf_deployment_as_vm_with_tosca`.
|
||||||
|
|
||||||
|
|
||||||
VNF Update Procedures
|
VNF Update Procedures
|
||||||
@ -29,7 +35,7 @@ As mentioned in Prerequisites, the VNF must be created
|
|||||||
before performing update.
|
before performing update.
|
||||||
|
|
||||||
Details of CLI commands are described in
|
Details of CLI commands are described in
|
||||||
:doc:`../cli/cli-etsi-vnflcm`.
|
:doc:`/cli/cli-etsi-vnflcm`.
|
||||||
|
|
||||||
For update VNF instance, you need to prepare a JSON-formatted definition file.
|
For update VNF instance, you need to prepare a JSON-formatted definition file.
|
||||||
|
|
||||||
@ -39,7 +45,9 @@ For update VNF instance, you need to prepare a JSON-formatted definition file.
|
|||||||
"vnfInstanceName": "sample"
|
"vnfInstanceName": "sample"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
sample_param_file.json contains the VNF name as an example.
|
sample_param_file.json contains the VNF name as an example.
|
||||||
For v1 update operation, the following attributes of
|
For v1 update operation, the following attributes of
|
||||||
``VnfInfoModificationRequest`` are not supported.
|
``VnfInfoModificationRequest`` are not supported.
|
||||||
@ -50,14 +58,6 @@ For update VNF instance, you need to prepare a JSON-formatted definition file.
|
|||||||
* vnfcInfoModifications
|
* vnfcInfoModifications
|
||||||
* vimConnectionInfo
|
* vimConnectionInfo
|
||||||
|
|
||||||
.. note::
|
|
||||||
The v2 update operation can change the ``vimConnectionInfo``
|
|
||||||
associated with an existing VNF instance.
|
|
||||||
Even if update 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``.
|
|
||||||
|
|
||||||
|
|
||||||
How to Update VNF
|
How to Update VNF
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
@ -78,11 +78,11 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+-------------------+-------+
|
+-------------------+------------------------------------------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+-------------------+-------+
|
+-------------------+------------------------------------------+
|
||||||
| VNF Instance Name | None |
|
| VNF Instance Name | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce |
|
||||||
+-------------------+-------+
|
+-------------------+------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
Update VNF can be executed by the following CLI command.
|
Update VNF can be executed by the following CLI command.
|
||||||
@ -96,9 +96,11 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Update vnf:c64ea0fd-a90c-4754-95f4-dc0751db519d
|
Update vnf:810d8c9b-e467-4b06-9265-ac9dce015fce
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Create a parameter file that describes the resource information to be
|
Create a parameter file that describes the resource information to be
|
||||||
changed in advance.
|
changed in advance.
|
||||||
|
|
||||||
@ -114,25 +116,18 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+-------------------+---------+
|
+-------------------+--------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+-------------------+---------+
|
+-------------------+--------+
|
||||||
| VNF Instance Name | sample |
|
| VNF Instance Name | sample |
|
||||||
+-------------------+---------+
|
+-------------------+--------+
|
||||||
|
|
||||||
|
|
||||||
You can confirm that the VNF Instance Name has been changed by the update
|
You can confirm that the VNF Instance Name has been changed by the update
|
||||||
operation.
|
operation.
|
||||||
|
|
||||||
|
|
||||||
If the ``vnfdId`` is not changed by update operation, the current value
|
If the ``vnfdId`` is not changed by update operation, the current value
|
||||||
shall be updated using the request parameter.
|
shall be updated using the request parameter.
|
||||||
The following attributes are updated by performing JSON Merge Patch with the
|
|
||||||
values set in the request parameter to the current values.
|
|
||||||
|
|
||||||
* vnfConfigurableProperties
|
|
||||||
* metadata
|
|
||||||
* extensions
|
|
||||||
|
|
||||||
If the ``vnfdId`` is requested to be changed by v1 update operation, the
|
If the ``vnfdId`` is requested to be changed by v1 update operation, the
|
||||||
following attributes of VNF instance shall be updated in addition to those
|
following attributes of VNF instance shall be updated in addition to those
|
||||||
|
@ -24,6 +24,7 @@ Getting Started
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
|
v2/getting_started/index
|
||||||
etsi_getting_started
|
etsi_getting_started
|
||||||
|
|
||||||
|
|
||||||
@ -33,5 +34,6 @@ Use Case Guide
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 3
|
:maxdepth: 3
|
||||||
|
|
||||||
|
v2/use_case_guide
|
||||||
etsi_use_case_guide
|
etsi_use_case_guide
|
||||||
encrypt_vim_auth_with_barbican
|
encrypt_vim_auth_with_barbican
|
||||||
|
1
doc/source/user/v2/cnf/auto_heal_fm/img/auto_heal_fm.svg
Normal file
After Width: | Height: | Size: 20 KiB |
736
doc/source/user/v2/cnf/auto_heal_fm/index.rst
Normal file
@ -0,0 +1,736 @@
|
|||||||
|
===============================================================
|
||||||
|
ETSI NFV-SOL CNF Auto Healing With Prometheus via FM Interfaces
|
||||||
|
===============================================================
|
||||||
|
|
||||||
|
This document describes how to auto heal CNF in Tacker v2 API 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:: img/auto_heal_fm.svg
|
||||||
|
|
||||||
|
|
||||||
|
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:`/user/v2/cnf/deployment/index` 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.json``:
|
||||||
|
|
||||||
|
.. 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": "de8e74e8-1845-40dd-892c-cb7a67c26f9f",
|
||||||
|
"managedObjectId": "c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"vnfcInstanceIds": [
|
||||||
|
"VDU1-curry-probe-test001-798d577c96-5624p"
|
||||||
|
],
|
||||||
|
"alarmRaisedTime": "2023-12-08T13:16:30Z",
|
||||||
|
"alarmChangedTime": "",
|
||||||
|
"alarmClearedTime": "",
|
||||||
|
"alarmAcknowledgedTime": "",
|
||||||
|
"ackState": "UNACKNOWLEDGED",
|
||||||
|
"perceivedSeverity": "CRITICAL",
|
||||||
|
"eventTime": "2023-12-08T13:16:00Z",
|
||||||
|
"eventType": "PROCESSING_ERROR_ALARM",
|
||||||
|
"faultType": "fault_type",
|
||||||
|
"probableCause": "Process Terminated",
|
||||||
|
"isRootCause": "false",
|
||||||
|
"correlatedAlarmIds": [],
|
||||||
|
"faultDetails": [
|
||||||
|
"fingerprint: 5ee739bb8840a190",
|
||||||
|
"detail: fault_details"
|
||||||
|
],
|
||||||
|
"_links": {
|
||||||
|
"self": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnffm/v1/alarms/de8e74e8-1845-40dd-892c-cb7a67c26f9f"
|
||||||
|
},
|
||||||
|
"objectInstance": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c21fd71b-2866-45f6-89d0-70c458a5c32e"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
.. 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
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
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 | http://127.0.0.1:9890/vnffm/v1/subscriptions/407cb9c5-60f2-43e8-a43a-925c0323c3eb |
|
||||||
|
| 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": "c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"pod": "VDU1-curry-probe-test001-798d577c96-5624p",
|
||||||
|
"perceived_severity": "CRITICAL",
|
||||||
|
"event_type": "PROCESSING_ERROR_ALARM"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"fault_type": "fault_type",
|
||||||
|
"probable_cause": "Process Terminated",
|
||||||
|
"fault_details": "fault_details"
|
||||||
|
},
|
||||||
|
"startsAt": "2023-12-08T13:16:00Z",
|
||||||
|
"endsAt": "0001-01-01T00:00:00Z",
|
||||||
|
"generatorURL": "http://192.168.121.35:9090/graph?g0.expr=up%7Bjob%3D%22node%22%7D+%3D%3D+0&g0.tab=1",
|
||||||
|
"fingerprint": "5ee739bb8840a190"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groupLabels": {},
|
||||||
|
"commonLabels": {
|
||||||
|
"alertname": "NodeInstanceDown",
|
||||||
|
"job": "node"
|
||||||
|
},
|
||||||
|
"commonAnnotations": {
|
||||||
|
"description": "sample"
|
||||||
|
},
|
||||||
|
"externalURL": "http://192.168.121.35: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": "0ab777dc-b3a0-42d6-85c1-e5f80711b988",
|
||||||
|
"notificationType": "AlarmNotification",
|
||||||
|
"subscriptionId": "0155c914-8573-463c-a97a-aef5a3ca9c72",
|
||||||
|
"timeStamp": "2023-12-08T13:16:30Z",
|
||||||
|
"alarm": {
|
||||||
|
"id": "de8e74e8-1845-40dd-892c-cb7a67c26f9f",
|
||||||
|
"managedObjectId": "c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"vnfcInstanceIds": ["VDU1-curry-probe-test001-798d577c96-5624p"],
|
||||||
|
"alarmRaisedTime": "2023-12-08T13:16:30+00:00",
|
||||||
|
"ackState": "UNACKNOWLEDGED",
|
||||||
|
"perceivedSeverity": "CRITICAL",
|
||||||
|
"eventTime": "2023-12-08T13:16:00Z",
|
||||||
|
"eventType": "PROCESSING_ERROR_ALARM",
|
||||||
|
"faultType": "fault_type",
|
||||||
|
"probableCause": "Process Terminated",
|
||||||
|
"isRootCause": false,
|
||||||
|
"faultDetails": [
|
||||||
|
"fingerprint: 5ee739bb8840a190",
|
||||||
|
"detail: fault_details"
|
||||||
|
],
|
||||||
|
"_links": {
|
||||||
|
"self": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnffm/v1/alarms/de8e74e8-1845-40dd-892c-cb7a67c26f9f"
|
||||||
|
},
|
||||||
|
"objectInstance":{
|
||||||
|
"href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c21fd71b-2866-45f6-89d0-70c458a5c32e"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"_links": {
|
||||||
|
"subscription": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnffm/v1/subscriptions/0155c914-8573-463c-a97a-aef5a3ca9c72"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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 |
|
||||||
|
+--------------------------------------+--------------------------------------+----------------+------------------------+--------------------+--------------------+
|
||||||
|
| de8e74e8-1845-40dd-892c-cb7a67c26f9f | c21fd71b-2866-45f6-89d0-70c458a5c32e | UNACKNOWLEDGED | PROCESSING_ERROR_ALARM | CRITICAL | 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 de8e74e8-1845-40dd-892c-cb7a67c26f9f --os-tacker-api-version 2
|
||||||
|
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||||
|
| Ack State | UNACKNOWLEDGED |
|
||||||
|
| Alarm Acknowledged Time | |
|
||||||
|
| Alarm Changed Time | |
|
||||||
|
| Alarm Cleared Time | |
|
||||||
|
| Alarm Raised Time | 2023-12-08T13:16:30Z |
|
||||||
|
| Correlated Alarm Ids | |
|
||||||
|
| Event Time | 2023-12-08T13:16:00Z |
|
||||||
|
| Event Type | PROCESSING_ERROR_ALARM |
|
||||||
|
| Fault Details | [ |
|
||||||
|
| | "fingerprint: 5ee739bb8840a190", |
|
||||||
|
| | "detail: fault_details" |
|
||||||
|
| | ] |
|
||||||
|
| Fault Type | fault_type |
|
||||||
|
| ID | de8e74e8-1845-40dd-892c-cb7a67c26f9f |
|
||||||
|
| Is Root Cause | False |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnffm/v1/alarms/de8e74e8-1845-40dd-892c-cb7a67c26f9f" |
|
||||||
|
| | }, |
|
||||||
|
| | "objectInstance": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c21fd71b-2866-45f6-89d0-70c458a5c32e" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| Managed Object Id | c21fd71b-2866-45f6-89d0-70c458a5c32e |
|
||||||
|
| Perceived Severity | CRITICAL |
|
||||||
|
| Probable Cause | Process Terminated |
|
||||||
|
| Root Cause Faulty Resource | |
|
||||||
|
| Vnfc Instance Ids | [ |
|
||||||
|
| | "VDU1-curry-probe-test001-798d577c96-5624p" |
|
||||||
|
| | ] |
|
||||||
|
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
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 ACKNOWLEDGED --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 de8e74e8-1845-40dd-892c-cb7a67c26f9f --ack-state ACKNOWLEDGED --os-tacker-api-version 2
|
||||||
|
+-----------+--------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-----------+--------------+
|
||||||
|
| Ack State | ACKNOWLEDGED |
|
||||||
|
+-----------+--------------+
|
||||||
|
|
||||||
|
|
||||||
|
Create a new FM subscription
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The creation of FM subscription has been introduced in the
|
||||||
|
`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 |
|
||||||
|
+--------------------------------------+-------------------------------------------------------------------------------------+
|
||||||
|
| d6da0fff-a032-429e-8560-06e8af685e2c | http://127.0.0.1:9990/notification/callbackuri/c21fd71b-2866-45f6-89d0-70c458a5c32e |
|
||||||
|
+--------------------------------------+-------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
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 d6da0fff-a032-429e-8560-06e8af685e2c --os-tacker-api-version 2
|
||||||
|
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||||
|
| Callback Uri | http://127.0.0.1:9990/notification/callbackuri/c21fd71b-2866-45f6-89d0-70c458a5c32e |
|
||||||
|
| Filter | { |
|
||||||
|
| | "vnfInstanceSubscriptionFilter": { |
|
||||||
|
| | "vnfInstanceIds": [ |
|
||||||
|
| | "c21fd71b-2866-45f6-89d0-70c458a5c32e" |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| ID | d6da0fff-a032-429e-8560-06e8af685e2c |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnffm/v1/subscriptions/d6da0fff-a032-429e-8560-06e8af685e2c" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
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 d6da0fff-a032-429e-8560-06e8af685e2c --os-tacker-api-version 2
|
||||||
|
VNF FM subscription 'd6da0fff-a032-429e-8560-06e8af685e2c' deleted successfully
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using Prometheus 2.45 and Alertmanager 0.26.
|
||||||
|
|
||||||
|
|
||||||
|
.. _the sample:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_kubernetes_v2/test_instantiate_cnf_resources
|
||||||
|
.. _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
|
@ -15,7 +15,7 @@ frame "tacker" {
|
|||||||
component "VnflcmControllerV2" as lcm_ctl
|
component "VnflcmControllerV2" as lcm_ctl
|
||||||
}
|
}
|
||||||
component "tacker-conductor" {
|
component "tacker-conductor" {
|
||||||
component "Vnfpm\ndriver" as pm_driver
|
component "VnfPm\nDriverV2" as pm_driver
|
||||||
component "Kubernetes\ninfra-driver" as infra
|
component "Kubernetes\ninfra-driver" as infra
|
||||||
}
|
}
|
||||||
}
|
}
|
After Width: | Height: | Size: 20 KiB |
664
doc/source/user/v2/cnf/auto_scale_pm_job/index.rst
Normal file
@ -0,0 +1,664 @@
|
|||||||
|
===================================================================
|
||||||
|
ETSI NFV-SOL CNF Auto Scaling With Prometheus via PM Job Interfaces
|
||||||
|
===================================================================
|
||||||
|
|
||||||
|
This document describes how to auto scale CNF in Tacker v2 API 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 Cluster change the number of Pods according to the
|
||||||
|
API calls.
|
||||||
|
|
||||||
|
|
||||||
|
.. figure:: img/auto_scale_pm_job.svg
|
||||||
|
|
||||||
|
|
||||||
|
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:`/user/v2/cnf/deployment/index` 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`_.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Tacker reloads the Prometheus configuration by sending
|
||||||
|
an HTTP POST request to the ``/-/reload`` endpoint.
|
||||||
|
Therefore, the Prometheus needs the ``--web.enable-lifecycle`` flag
|
||||||
|
to be enabled.
|
||||||
|
Please see `Prometheus CONFIGURATION`_ for details.
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
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": ["a0205e7c-fdeb-4f6c-b266-962246e32626"],
|
||||||
|
"criteria": {
|
||||||
|
"performanceMetric": ["VCpuUsageMeanVnf.a0205e7c-fdeb-4f6c-b266-962246e32626"],
|
||||||
|
"performanceMetricGroup": [],
|
||||||
|
"collectionPeriod": 30,
|
||||||
|
"reportingPeriod": 60
|
||||||
|
},
|
||||||
|
"callbackUri": "http://127.0.0.1:9990/notification/callbackuri/a0205e7c-fdeb-4f6c-b266-962246e32626",
|
||||||
|
"metadata": {
|
||||||
|
"monitoring": {
|
||||||
|
"monitorName": "prometheus",
|
||||||
|
"driverType": "external",
|
||||||
|
"targetsInfo": [
|
||||||
|
{
|
||||||
|
"prometheusHost": "192.168.121.35",
|
||||||
|
"prometheusHostPort": 22,
|
||||||
|
"authInfo": {
|
||||||
|
"ssh_username": "vagrant",
|
||||||
|
"ssh_password": "vagrant"
|
||||||
|
},
|
||||||
|
"alertRuleConfigPath":
|
||||||
|
"/etc/prometheus/rules",
|
||||||
|
"prometheusReloadApiEndpoint":
|
||||||
|
"http://192.168.121.35:9090/-/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://127.0.0.1:9990/notification/callbackuri/a0205e7c-fdeb-4f6c-b266-962246e32626 |
|
||||||
|
| Criteria | { |
|
||||||
|
| | "performanceMetric": [ |
|
||||||
|
| | "VCpuUsageMeanVnf.a0205e7c-fdeb-4f6c-b266-962246e32626" |
|
||||||
|
| | ], |
|
||||||
|
| | "collectionPeriod": 30, |
|
||||||
|
| | "reportingPeriod": 60 |
|
||||||
|
| | } |
|
||||||
|
| ID | 84b227dc-5ed0-411a-aff6-c830528eaec5 |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/84b227dc-5ed0-411a-aff6-c830528eaec5" |
|
||||||
|
| | }, |
|
||||||
|
| | "objects": [ |
|
||||||
|
| | { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/a0205e7c-fdeb-4f6c-b266-962246e32626" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| Object Instance Ids | [ |
|
||||||
|
| | "a0205e7c-fdeb-4f6c-b266-962246e32626" |
|
||||||
|
| | ] |
|
||||||
|
| 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.
|
||||||
|
|
||||||
|
The following is an example of the request body that Prometheus sends
|
||||||
|
information:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"receiver": "receiver",
|
||||||
|
"status": "firing",
|
||||||
|
"alerts": [
|
||||||
|
{
|
||||||
|
"status": "firing",
|
||||||
|
"labels": {
|
||||||
|
"receiver_type": "tacker",
|
||||||
|
"function_type": "vnfpm",
|
||||||
|
"job_id": "84b227dc-5ed0-411a-aff6-c830528eaec5",
|
||||||
|
"metric": "VCpuUsageMeanVnf.a0205e7c-fdeb-4f6c-b266-962246e32626",
|
||||||
|
"object_instance_id": "a0205e7c-fdeb-4f6c-b266-962246e32626"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"value": 99
|
||||||
|
},
|
||||||
|
"startsAt": "2022-06-21T23:47:36.453Z",
|
||||||
|
"endsAt": "0001-01-01T00:00:00Z",
|
||||||
|
"generatorURL": "http://192.168.121.35: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://192.168.121.35:9093",
|
||||||
|
"version": "4",
|
||||||
|
"groupKey": "{}:{}",
|
||||||
|
"truncatedAlerts": 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"id": "29de3afc-0547-4f43-b921-1d6ceaf16bd4",
|
||||||
|
"notificationType": "PerformanceInformationAvailableNotification",
|
||||||
|
"timeStamp": "2023-11-20T14:25:04Z",
|
||||||
|
"pmJobId": "84b227dc-5ed0-411a-aff6-c830528eaec5",
|
||||||
|
"objectType": "Vnf",
|
||||||
|
"objectInstanceId": "a0205e7c-fdeb-4f6c-b266-962246e32626",
|
||||||
|
"_links": {
|
||||||
|
"objectInstance": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/a0205e7c-fdeb-4f6c-b266-962246e32626"
|
||||||
|
},
|
||||||
|
"pmJob": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/84b227dc-5ed0-411a-aff6-c830528eaec5"
|
||||||
|
},
|
||||||
|
"performanceReport": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/84b227dc-5ed0-411a-aff6-c830528eaec5/reports/eab93857-eb72-49ce-9173-628a3f00ba2d"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. 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:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"entries": [{
|
||||||
|
"objectType": "Vnf",
|
||||||
|
"objectInstanceId": "a0205e7c-fdeb-4f6c-b266-962246e32626",
|
||||||
|
"performanceMetric": "VCpuUsageMeanVnf.a0205e7c-fdeb-4f6c-b266-962246e32626",
|
||||||
|
"performanceValues": [{
|
||||||
|
"timeStamp": "2023-11-20T14:25:04Z",
|
||||||
|
"value": "1.0002889206831795"
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
`How to create a 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 |
|
||||||
|
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||||
|
| 84b227dc-5ed0-411a-aff6-c830528eaec5 | Vnf | { |
|
||||||
|
| | | "self": { |
|
||||||
|
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/84b227dc-5ed0-411a-aff6-c830528eaec5" |
|
||||||
|
| | | }, |
|
||||||
|
| | | "objects": [ |
|
||||||
|
| | | { |
|
||||||
|
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/a0205e7c-fdeb-4f6c-b266-962246e32626" |
|
||||||
|
| | | } |
|
||||||
|
| | | ] |
|
||||||
|
| | | } |
|
||||||
|
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
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 84b227dc-5ed0-411a-aff6-c830528eaec5 --os-tacker-api-version 2
|
||||||
|
+-------------------------+----------------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-------------------------+----------------------------------------------------------------------------------------------------------+
|
||||||
|
| Callback Uri | http://127.0.0.1:9990/notification/callbackuri/a0205e7c-fdeb-4f6c-b266-962246e32626 |
|
||||||
|
| Criteria | { |
|
||||||
|
| | "performanceMetric": [ |
|
||||||
|
| | "VCpuUsageMeanVnf.a0205e7c-fdeb-4f6c-b266-962246e32626" |
|
||||||
|
| | ], |
|
||||||
|
| | "collectionPeriod": 30, |
|
||||||
|
| | "reportingPeriod": 60 |
|
||||||
|
| | } |
|
||||||
|
| ID | 84b227dc-5ed0-411a-aff6-c830528eaec5 |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/84b227dc-5ed0-411a-aff6-c830528eaec5" |
|
||||||
|
| | }, |
|
||||||
|
| | "objects": [ |
|
||||||
|
| | { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/a0205e7c-fdeb-4f6c-b266-962246e32626" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| Object Instance Ids | [ |
|
||||||
|
| | "a0205e7c-fdeb-4f6c-b266-962246e32626" |
|
||||||
|
| | ] |
|
||||||
|
| Object Type | Vnf |
|
||||||
|
| Reports | [] |
|
||||||
|
| 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://127.0.0.1:9990/notification/callbackuri/a0205e7c-fdeb-4f6c-b266-962246e32626-update"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Here is an example of changing target PM job:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnfpm job update 84b227dc-5ed0-411a-aff6-c830528eaec5 sample_param_file.json --os-tacker-api-version 2
|
||||||
|
+----------------+--------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+----------------+--------------------------------------------------------------------------------------------+
|
||||||
|
| Authentication | |
|
||||||
|
| Callback Uri | http://127.0.0.1:9990/notification/callbackuri/a0205e7c-fdeb-4f6c-b266-962246e32626-update |
|
||||||
|
+----------------+--------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
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 84b227dc-5ed0-411a-aff6-c830528eaec5 --os-tacker-api-version 2
|
||||||
|
VNF PM job '84b227dc-5ed0-411a-aff6-c830528eaec5' 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 84b227dc-5ed0-411a-aff6-c830528eaec5 eab93857-eb72-49ce-9173-628a3f00ba2d --os-tacker-api-version 2
|
||||||
|
+---------+---------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+---------+---------------------------------------------------------------------------------------+
|
||||||
|
| Entries | [ |
|
||||||
|
| | { |
|
||||||
|
| | "objectType": "Vnf", |
|
||||||
|
| | "objectInstanceId": "a0205e7c-fdeb-4f6c-b266-962246e32626", |
|
||||||
|
| | "performanceMetric": "VCpuUsageMeanVnf.a0205e7c-fdeb-4f6c-b266-962246e32626", |
|
||||||
|
| | "performanceValues": [ |
|
||||||
|
| | { |
|
||||||
|
| | "timeStamp": "2023-11-20T14:25:04Z", |
|
||||||
|
| | "value": "1.0002889206831795" |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| | ] |
|
||||||
|
+---------+---------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using Prometheus 2.45 and Alertmanager 0.26.
|
||||||
|
|
||||||
|
|
||||||
|
.. _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/
|
||||||
|
.. _Prometheus CONFIGURATION:
|
||||||
|
https://prometheus.io/docs/prometheus/latest/configuration/configuration
|
||||||
|
.. _the sample:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_kubernetes_v2/test_instantiate_cnf_resources
|
||||||
|
.. _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
|
After Width: | Height: | Size: 20 KiB |
566
doc/source/user/v2/cnf/auto_scale_pm_th/index.rst
Normal file
@ -0,0 +1,566 @@
|
|||||||
|
=========================================================================
|
||||||
|
ETSI NFV-SOL CNF Auto Scaling With Prometheus via PM Threshold Interfaces
|
||||||
|
=========================================================================
|
||||||
|
|
||||||
|
This document describes how to auto scale CNF in Tacker v2 API 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:: img/auto_scale_pm_th.svg
|
||||||
|
|
||||||
|
|
||||||
|
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:`/user/v2/cnf/deployment/index` 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``
|
||||||
|
in :doc:`/user/v2/cnf/auto_scale_pm_job/index` to enable the
|
||||||
|
Prometheus Plugin.
|
||||||
|
|
||||||
|
|
||||||
|
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": "c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"criteria": {
|
||||||
|
"performanceMetric": "VCpuUsageMeanVnf.c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"thresholdType": "SIMPLE",
|
||||||
|
"simpleThresholdDetails": {
|
||||||
|
"thresholdValue": 1,
|
||||||
|
"hysteresis": 0.5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callbackUri": "http://127.0.0.1:9990/notification/callbackuri/c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"metadata": {
|
||||||
|
"monitoring": {
|
||||||
|
"monitorName": "prometheus",
|
||||||
|
"driverType": "external",
|
||||||
|
"targetsInfo": [
|
||||||
|
{
|
||||||
|
"prometheusHost": "192.168.121.35",
|
||||||
|
"prometheusHostPort": 22,
|
||||||
|
"authInfo": {
|
||||||
|
"ssh_username": "vagrant",
|
||||||
|
"ssh_password": "vagrant"
|
||||||
|
},
|
||||||
|
"alertRuleConfigPath":
|
||||||
|
"/etc/prometheus/rules",
|
||||||
|
"prometheusReloadApiEndpoint":
|
||||||
|
"http://192.168.121.35:9090/-/reload"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Tacker reloads the Prometheus configuration by sending
|
||||||
|
an HTTP POST request to the ``/-/reload`` endpoint.
|
||||||
|
Therefore, the Prometheus needs the ``--web.enable-lifecycle`` flag
|
||||||
|
to be enabled.
|
||||||
|
Please see `Prometheus CONFIGURATION`_ for details.
|
||||||
|
|
||||||
|
|
||||||
|
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/c21fd71b-2866-45f6-89d0-70c458a5c32e |
|
||||||
|
| Criteria | { |
|
||||||
|
| | "performanceMetric": "VCpuUsageMeanVnf.c21fd71b-2866-45f6-89d0-70c458a5c32e", |
|
||||||
|
| | "thresholdType": "SIMPLE", |
|
||||||
|
| | "simpleThresholdDetails": { |
|
||||||
|
| | "thresholdValue": 1.0, |
|
||||||
|
| | "hysteresis": 0.5 |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| ID | 135db472-4f7b-4d55-abaf-27a3ab4d7ba1 |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnfpm/v2/thresholds/135db472-4f7b-4d55-abaf-27a3ab4d7ba1" |
|
||||||
|
| | }, |
|
||||||
|
| | "object": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c21fd71b-2866-45f6-89d0-70c458a5c32e" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| Object Instance Id | c21fd71b-2866-45f6-89d0-70c458a5c32e |
|
||||||
|
| 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.
|
||||||
|
|
||||||
|
The following is an example of the request body that Prometheus sends
|
||||||
|
information:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"receiver": "receiver",
|
||||||
|
"status": "firing",
|
||||||
|
"alerts": [
|
||||||
|
{
|
||||||
|
"status": "firing",
|
||||||
|
"labels": {
|
||||||
|
"receiver_type": "tacker",
|
||||||
|
"function_type": "vnfpm_threshold",
|
||||||
|
"threshold_id": "135db472-4f7b-4d55-abaf-27a3ab4d7ba1",
|
||||||
|
"metric": "VCpuUsageMeanVnf.c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"object_instance_id": "c21fd71b-2866-45f6-89d0-70c458a5c32e"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"value": 99
|
||||||
|
},
|
||||||
|
"startsAt": "2022-12-15T23:47:36.453Z",
|
||||||
|
"endsAt": "0001-01-01T00:00:00Z",
|
||||||
|
"generatorURL": "http://192.168.121.35: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://192.168.121.35:9093",
|
||||||
|
"version": "4",
|
||||||
|
"groupKey": "{}:{}",
|
||||||
|
"truncatedAlerts": 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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": "0aa6500e-cdee-41f7-aadd-af80f7622ebc",
|
||||||
|
"notificationType": "ThresholdCrossedNotification",
|
||||||
|
"timeStamp": "2023-12-06T09:08:06Z",
|
||||||
|
"thresholdId": "135db472-4f7b-4d55-abaf-27a3ab4d7ba1",
|
||||||
|
"crossingDirection": "DOWN",
|
||||||
|
"objectType": "Vnf",
|
||||||
|
"objectInstanceId": "c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"performanceMetric": "VCpuUsageMeanVnf.c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"performanceValue": "0.0004428400000000465",
|
||||||
|
"_links": {
|
||||||
|
"objectInstance": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c21fd71b-2866-45f6-89d0-70c458a5c32e"
|
||||||
|
},
|
||||||
|
"threshold": {
|
||||||
|
"href": "http://127.0.0.1:9890/vnfpm/v2/thresholds/135db472-4f7b-4d55-abaf-27a3ab4d7ba1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. 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
|
||||||
|
`How to create a 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 |
|
||||||
|
+--------------------------------------+-------------+------------------------------------------------------------------------------------------------------+
|
||||||
|
| 135db472-4f7b-4d55-abaf-27a3ab4d7ba1 | Vnf | { |
|
||||||
|
| | | "self": { |
|
||||||
|
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/thresholds/135db472-4f7b-4d55-abaf-27a3ab4d7ba1" |
|
||||||
|
| | | }, |
|
||||||
|
| | | "object": { |
|
||||||
|
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c21fd71b-2866-45f6-89d0-70c458a5c32e" |
|
||||||
|
| | | } |
|
||||||
|
| | | } |
|
||||||
|
+--------------------------------------+-------------+------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
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 135db472-4f7b-4d55-abaf-27a3ab4d7ba1 --os-tacker-api-version 2
|
||||||
|
+-------------------------+------------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-------------------------+------------------------------------------------------------------------------------------------------+
|
||||||
|
| Callback Uri | http://127.0.0.1:9990/notification/callbackuri/c21fd71b-2866-45f6-89d0-70c458a5c32e |
|
||||||
|
| Criteria | { |
|
||||||
|
| | "performanceMetric": "VCpuUsageMeanVnf.c21fd71b-2866-45f6-89d0-70c458a5c32e", |
|
||||||
|
| | "thresholdType": "SIMPLE", |
|
||||||
|
| | "simpleThresholdDetails": { |
|
||||||
|
| | "thresholdValue": 1.0, |
|
||||||
|
| | "hysteresis": 0.5 |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| ID | 135db472-4f7b-4d55-abaf-27a3ab4d7ba1 |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnfpm/v2/thresholds/135db472-4f7b-4d55-abaf-27a3ab4d7ba1" |
|
||||||
|
| | }, |
|
||||||
|
| | "object": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c21fd71b-2866-45f6-89d0-70c458a5c32e" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| Object Instance Id | c21fd71b-2866-45f6-89d0-70c458a5c32e |
|
||||||
|
| 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/c21fd71b-2866-45f6-89d0-70c458a5c32e-update"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Here is an example of changing target PM threshold:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnfpm threshold update 135db472-4f7b-4d55-abaf-27a3ab4d7ba1 sample_param_file.json --os-tacker-api-version 2
|
||||||
|
+--------------+--------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+--------------+--------------------------------------------------------------------------------------------+
|
||||||
|
| Callback Uri | http://127.0.0.1:9990/notification/callbackuri/c21fd71b-2866-45f6-89d0-70c458a5c32e-update |
|
||||||
|
+--------------+--------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
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 135db472-4f7b-4d55-abaf-27a3ab4d7ba1 --os-tacker-api-version 2
|
||||||
|
VNF PM threshold '135db472-4f7b-4d55-abaf-27a3ab4d7ba1' deleted successfully
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using Prometheus 2.45 and Alertmanager 0.26.
|
||||||
|
|
||||||
|
|
||||||
|
.. _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://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_kubernetes_v2/test_instantiate_cnf_resources
|
||||||
|
.. _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
|
||||||
|
.. _Prometheus CONFIGURATION:
|
||||||
|
https://prometheus.io/docs/prometheus/latest/configuration/configuration
|
@ -1,25 +1,25 @@
|
|||||||
@startuml
|
@startuml
|
||||||
|
|
||||||
frame "python-tackerclient" {
|
frame "python-tackerclient" {
|
||||||
component "tacker-client" as client
|
component "tacker-client" as client
|
||||||
}
|
}
|
||||||
|
|
||||||
frame "tacker" {
|
frame "tacker" {
|
||||||
component "tacker-server" {
|
component "tacker-server" {
|
||||||
component "server" as serv
|
component "server" as serv
|
||||||
}
|
}
|
||||||
component "tacker-conductor" {
|
component "tacker-conductor" {
|
||||||
component "conductor" as cond
|
component "conductor" as cond
|
||||||
component "Kubernetes\ninfra-driver" as infra
|
component "Kubernetes\ninfra-driver" as infra
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
node "Kubernetes\nCluster\n(Master)" as k8s_m
|
node "Kubernetes\nCluster\n(Master)" as k8s_m
|
||||||
cloud "Hardware Resources" as hw {
|
cloud "Hardware Resources" as hw {
|
||||||
node "Kubernetes\nCluster\n(Worker)" as k8s_w {
|
node "Kubernetes\nCluster\n(Worker)" as k8s_w {
|
||||||
node "Deployment" as ins1
|
node "Deployment" as ins1
|
||||||
node "Deployment" as ins2
|
node "Deployment" as ins2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
doc/source/user/v2/cnf/chg_vnfpkg/img/chg_vnfpkg.svg
Normal file
After Width: | Height: | Size: 14 KiB |
@ -2,7 +2,9 @@
|
|||||||
ETSI NFV-SOL CNF Change Current VNF Package
|
ETSI NFV-SOL CNF Change Current VNF Package
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
This document describes how to change current VNF package for CNF in Tacker.
|
This document describes how to change current VNF package for CNF
|
||||||
|
in Tacker v2 API.
|
||||||
|
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
--------
|
--------
|
||||||
@ -12,14 +14,14 @@ The diagram below shows an overview of changing current VNF package.
|
|||||||
1. Request Change Current VNF Package
|
1. Request Change Current VNF Package
|
||||||
|
|
||||||
A user requests tacker-server to change current VNF package for VNF instance
|
A user requests tacker-server to change current VNF package for VNF instance
|
||||||
with tacker-client by requesting ``change current vnf package``.
|
with tacker-client by requesting ``change current VNF package``.
|
||||||
|
|
||||||
2. Call Kubernetes API
|
2. Call Kubernetes API
|
||||||
|
|
||||||
Upon receiving a request from tacker-client, tacker-server redirects it to
|
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
|
an appropriate infra-driver (in this case Kubernetes infra-driver) according
|
||||||
to the contents of VNF instance. Then, Kubernetes infra-driver calls
|
to the contents of VNF instance. Then, Kubernetes infra-driver calls
|
||||||
Kubernetes APIs.
|
Kubernetes APIs.
|
||||||
|
|
||||||
3. Change the image of Container defined in the manifest file of Deployment
|
3. Change the image of Container defined in the manifest file of Deployment
|
||||||
@ -27,8 +29,9 @@ The diagram below shows an overview of changing current VNF package.
|
|||||||
Kubernetes Master update the image of Container defined in the manifest
|
Kubernetes Master update the image of Container defined in the manifest
|
||||||
file of Deployment according to the API calls.
|
file of Deployment according to the API calls.
|
||||||
|
|
||||||
.. figure:: ../_images/etsi_cnf_change_current_vnf_package.png
|
|
||||||
:align: left
|
.. figure:: img/chg_vnfpkg.svg
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
@ -39,10 +42,10 @@ The following packages should be installed:
|
|||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
At least one VNF instance with status of ``INSTANTIATED`` is required.
|
At least one VNF instance with status of ``INSTANTIATED`` is required.
|
||||||
You can refer to :doc:`./etsi_containerized_vnf_usage_guide` for the
|
You can refer to :doc:`/user/v2/cnf/deployment/index` for the
|
||||||
procedure to instantiate VNF.
|
procedure to instantiate VNF.
|
||||||
|
|
||||||
You can also refer to :doc:`./vnf-package` for the operation of uploading
|
You can also refer to :doc:`/user/vnf-package` for the operation of uploading
|
||||||
VNF package.
|
VNF package.
|
||||||
|
|
||||||
The sample packages for CNF can be obtained from the following links.
|
The sample packages for CNF can be obtained from the following links.
|
||||||
@ -58,10 +61,10 @@ As mentioned in Prerequisites, the VNF must be created
|
|||||||
before performing change current VNF package.
|
before performing change current VNF package.
|
||||||
|
|
||||||
You need to upload the VNF package you want to change to before
|
You need to upload the VNF package you want to change to before
|
||||||
executing change current vnf package.
|
executing change current VNF package.
|
||||||
|
|
||||||
Details of CLI commands are described in
|
Details of CLI commands are described in
|
||||||
:doc:`../cli/cli-etsi-vnflcm`.
|
:doc:`/cli/cli-etsi-vnflcm`.
|
||||||
|
|
||||||
For changing current VNF package, you need to prepare a JSON-formatted
|
For changing current VNF package, you need to prepare a JSON-formatted
|
||||||
definition file before running command for changing the VNF package.
|
definition file before running command for changing the VNF package.
|
||||||
@ -74,7 +77,10 @@ definition file before running command for changing the VNF package.
|
|||||||
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
|
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
|
||||||
"additionalParams": {
|
"additionalParams": {
|
||||||
"upgrade_type": "RollingUpdate",
|
"upgrade_type": "RollingUpdate",
|
||||||
"lcm-kubernetes-def-files": ["Files/new_kubernetes/new_deployment.yaml"],
|
"lcm-kubernetes-def-files": [
|
||||||
|
"Files/kubernetes/namespace.yaml",
|
||||||
|
"Files/new_kubernetes/new_deployment.yaml"
|
||||||
|
],
|
||||||
"vdu_params": [{
|
"vdu_params": [{
|
||||||
"vdu_id": "VDU2"
|
"vdu_id": "VDU2"
|
||||||
}]
|
}]
|
||||||
@ -103,11 +109,13 @@ definition file before running command for changing the VNF package.
|
|||||||
}
|
}
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Unlike Change Current Vnf Package for VNF,
|
|
||||||
|
Unlike Change Current VNF Package for VNF,
|
||||||
coordination scripts are not supported for CNF.
|
coordination scripts are not supported for CNF.
|
||||||
Therefore, lcm-operation-coordinate files need not be
|
Therefore, lcm-operation-coordinate files need not be
|
||||||
specified by ``additionalParams``.
|
specified by ``additionalParams``.
|
||||||
|
|
||||||
|
|
||||||
You can set following parameter in additionalParams:
|
You can set following parameter in additionalParams:
|
||||||
|
|
||||||
.. list-table:: additionalParams
|
.. list-table:: additionalParams
|
||||||
@ -130,7 +138,9 @@ You can set following parameter in additionalParams:
|
|||||||
- 1
|
- 1
|
||||||
- VDU name of target VDU to update.
|
- VDU name of target VDU to update.
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
``sample_param_file_for_specified_resources.json`` contains
|
``sample_param_file_for_specified_resources.json`` contains
|
||||||
all optional parameters.
|
all optional parameters.
|
||||||
|
|
||||||
@ -152,16 +162,16 @@ You can set following parameter in additionalParams:
|
|||||||
current values.
|
current values.
|
||||||
For ``metadata``, the value set before this operation is maintained.
|
For ``metadata``, the value set before this operation is maintained.
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Currently, this operation only supports some functions of
|
Currently, this operation only supports some functions of
|
||||||
``Change Current VNF Package``.
|
``Change Current VNF Package``.
|
||||||
|
|
||||||
* There are several ways to update deployment, but Bobcat version Tacker only
|
* There are several ways to update deployment, but Bobcat version Tacker only
|
||||||
supports ``RollingUpdate`` type. You can set it via ``upgrade_type``
|
supports ``RollingUpdate`` type. You can set it via ``upgrade_type``
|
||||||
param.
|
param.
|
||||||
|
|
||||||
* Currently only support update images of deployment.
|
* Currently only support update images of deployment.
|
||||||
|
|
||||||
* Currently unsupported updates:
|
* Currently unsupported updates:
|
||||||
|
|
||||||
* This API currently does not support increasing or decreasing the number
|
* This API currently does not support increasing or decreasing the number
|
||||||
@ -203,12 +213,14 @@ Deployment information before operation:
|
|||||||
|
|
||||||
$ kubectl get deployment -o wide -n curry
|
$ kubectl get deployment -o wide -n curry
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
|
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
|
||||||
vdu2 2/2 2 2 20s nginx nginx app=webserver
|
vdu2 2/2 2 2 6m40s nginx nginx app=webserver
|
||||||
|
|
||||||
|
|
||||||
Deployment detailed information before operation:
|
Deployment detailed information before operation:
|
||||||
|
|
||||||
@ -216,13 +228,14 @@ Deployment detailed information before operation:
|
|||||||
|
|
||||||
$ kubectl describe deployment vdu2 -n curry
|
$ kubectl describe deployment vdu2 -n curry
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Name: vdu2
|
Name: vdu2
|
||||||
Namespace: curry
|
Namespace: curry
|
||||||
CreationTimestamp: Tue, 22 Mar 2022 03:04:03 +0000
|
CreationTimestamp: Thu, 07 Dec 2023 01:22:43 +0000
|
||||||
Labels: <none>
|
Labels: <none>
|
||||||
Annotations: deployment.kubernetes.io/revision: 1
|
Annotations: deployment.kubernetes.io/revision: 1
|
||||||
Selector: app=webserver
|
Selector: app=webserver
|
||||||
@ -250,11 +263,12 @@ Result:
|
|||||||
Available True MinimumReplicasAvailable
|
Available True MinimumReplicasAvailable
|
||||||
Progressing True NewReplicaSetAvailable
|
Progressing True NewReplicaSetAvailable
|
||||||
OldReplicaSets: <none>
|
OldReplicaSets: <none>
|
||||||
NewReplicaSet: vdu2-674d7d8766 (2/2 replicas created)
|
NewReplicaSet: vdu2-749bb6cbbf (2/2 replicas created)
|
||||||
Events:
|
Events:
|
||||||
Type Reason Age From Message
|
Type Reason Age From Message
|
||||||
---- ------ ---- ---- -------
|
---- ------ ---- ---- -------
|
||||||
Normal ScalingReplicaSet 37s deployment-controller Scaled up replica set vdu2-674d7d8766 to 2
|
Normal ScalingReplicaSet 7m21s deployment-controller Scaled up replica set vdu2-749bb6cbbf to 2
|
||||||
|
|
||||||
|
|
||||||
Pods information before operation:
|
Pods information before operation:
|
||||||
|
|
||||||
@ -267,24 +281,26 @@ Result:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
||||||
vdu2-674d7d8766-8mcb6 1/1 Running 0 72s 10.233.96.15 node2 <none> <none>
|
vdu2-749bb6cbbf-dcjpn 1/1 Running 0 9m11s 10.0.0.98 vagrant <none> <none>
|
||||||
vdu2-674d7d8766-tmlhd 1/1 Running 0 72s 10.233.96.14 node2 <none> <none>
|
vdu2-749bb6cbbf-hmsbh 1/1 Running 0 9m11s 10.0.0.116 vagrant <none> <none>
|
||||||
|
|
||||||
|
|
||||||
Change Current VNF Package execution of the entire VNF:
|
Change Current VNF Package execution of the entire VNF:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \
|
$ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \
|
||||||
./sample_param_file_for_specified_resources.json \
|
./sample_param_file_for_specified_resources.json \
|
||||||
--os-tacker-api-version 2
|
--os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Change Current VNF Package for VNF Instance f9bb1ad5-2e30-4074-86d9-3da3a636601a has been accepted.
|
Change Current VNF Package for VNF Instance 63936f24-d43c-42d9-b38d-3c8eff85c445 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
Deployment information after operation:
|
Deployment information after operation:
|
||||||
|
|
||||||
@ -292,12 +308,14 @@ Deployment information after operation:
|
|||||||
|
|
||||||
$ kubectl get deployment -o wide -n curry
|
$ kubectl get deployment -o wide -n curry
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
|
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
|
||||||
vdu2 2/2 2 2 6m23s nginx nginx:alpine app=webserver
|
vdu2 2/2 2 2 13m nginx nginx:alpine app=webserver
|
||||||
|
|
||||||
|
|
||||||
Deployment detailed information after operation:
|
Deployment detailed information after operation:
|
||||||
|
|
||||||
@ -305,13 +323,14 @@ Deployment detailed information after operation:
|
|||||||
|
|
||||||
$ kubectl describe deployment vdu2 -n curry
|
$ kubectl describe deployment vdu2 -n curry
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Name: vdu2
|
Name: vdu2
|
||||||
Namespace: curry
|
Namespace: curry
|
||||||
CreationTimestamp: Tue, 22 Mar 2022 03:04:03 +0000
|
CreationTimestamp: Thu, 07 Dec 2023 01:22:43 +0000
|
||||||
Labels: <none>
|
Labels: <none>
|
||||||
Annotations: deployment.kubernetes.io/revision: 2
|
Annotations: deployment.kubernetes.io/revision: 2
|
||||||
Selector: app=webserver
|
Selector: app=webserver
|
||||||
@ -339,40 +358,61 @@ Result:
|
|||||||
Available True MinimumReplicasAvailable
|
Available True MinimumReplicasAvailable
|
||||||
Progressing True NewReplicaSetAvailable
|
Progressing True NewReplicaSetAvailable
|
||||||
OldReplicaSets: <none>
|
OldReplicaSets: <none>
|
||||||
NewReplicaSet: vdu2-6696c74f5c (2/2 replicas created)
|
NewReplicaSet: vdu2-8556bbb5d8 (2/2 replicas created)
|
||||||
Events:
|
Events:
|
||||||
Type Reason Age From Message
|
Type Reason Age From Message
|
||||||
---- ------ ---- ---- -------
|
---- ------ ---- ---- -------
|
||||||
Normal ScalingReplicaSet 6m46s deployment-controller Scaled up replica set vdu2-674d7d8766 to 2
|
Normal ScalingReplicaSet 14m deployment-controller Scaled up replica set vdu2-749bb6cbbf to 2
|
||||||
Normal ScalingReplicaSet 78s deployment-controller Scaled up replica set vdu2-6696c74f5c to 1
|
Normal ScalingReplicaSet 104s deployment-controller Scaled up replica set vdu2-8556bbb5d8 to 1
|
||||||
Normal ScalingReplicaSet 67s deployment-controller Scaled down replica set vdu2-674d7d8766 to 1
|
Normal ScalingReplicaSet 91s deployment-controller Scaled down replica set vdu2-749bb6cbbf to 1 from 2
|
||||||
Normal ScalingReplicaSet 67s deployment-controller Scaled up replica set vdu2-6696c74f5c to 2
|
Normal ScalingReplicaSet 91s deployment-controller Scaled up replica set vdu2-8556bbb5d8 to 2 from 1
|
||||||
Normal ScalingReplicaSet 55s deployment-controller Scaled down replica set vdu2-674d7d8766 to 0
|
Normal ScalingReplicaSet 83s deployment-controller Scaled down replica set vdu2-749bb6cbbf to 0 from 1
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
``image`` has changed from ``nginx`` to ``nginx:alpine``.
|
``image`` has changed from ``nginx`` to ``nginx:alpine``.
|
||||||
The age of deployment ``vdu2`` has not been reset, so deployment ``vdu2``
|
The age of deployment ``vdu2`` has not been reset, so deployment ``vdu2``
|
||||||
has not redeployed.
|
has not redeployed.
|
||||||
|
|
||||||
|
|
||||||
Pods information after operation:
|
Pods information after operation:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ kubectl get pods -o wide -n curry
|
$ kubectl get pods -o wide -n curry
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
||||||
vdu2-6696c74f5c-9xwvv 1/1 Running 0 114s 10.233.96.17 node2 <none> <none>
|
vdu2-8556bbb5d8-2wvxj 1/1 Running 0 3m57s 10.0.0.76 vagrant <none> <none>
|
||||||
vdu2-6696c74f5c-kgtjt 1/1 Running 0 2m5s 10.233.96.16 node2 <none> <none>
|
vdu2-8556bbb5d8-tj4vx 1/1 Running 0 3m44s 10.0.0.120 vagrant <none> <none>
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
``name`` of pods has changed before and after operation.
|
``name`` of pods has changed before and after operation.
|
||||||
The age of pods under deployment has been reset, so pods under
|
The age of pods under deployment has been reset, so pods under
|
||||||
this deployment has redeployed before and after operation.
|
this deployment has redeployed before and after operation.
|
||||||
|
|
||||||
.. _VNF Package for Common instantiate: https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_kubernetes_v2/test_instantiate_cnf_resources/contents
|
|
||||||
.. _VNF Package for Change Current VNF Package: https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_kubernetes_v2/test_change_vnf_pkg_with_deployment/contents
|
History of Checks
|
||||||
.. _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
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using the following VNF Packages.
|
||||||
|
|
||||||
|
* `test_instantiate_cnf_resources for 2023.2 Bobcat`_
|
||||||
|
* `test_change_vnf_pkg_with_deployment for 2023.2 Bobcat`_
|
||||||
|
|
||||||
|
|
||||||
|
.. _VNF Package for Common instantiate:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_kubernetes_v2/test_instantiate_cnf_resources/contents
|
||||||
|
.. _VNF Package for Change Current VNF Package:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_kubernetes_v2/test_change_vnf_pkg_with_deployment/contents
|
||||||
|
.. _test_instantiate_cnf_resources for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_kubernetes_v2/samples/test_instantiate_cnf_resources
|
||||||
|
.. _test_change_vnf_pkg_with_deployment for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_kubernetes_v2/samples/test_change_vnf_pkg_with_deployment
|
38
doc/source/user/v2/cnf/deployment/img/deployment.pu
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
frame "python-tackerclient" {
|
||||||
|
component "tacker-client" as client {
|
||||||
|
package "VNF Package" as vnfpkg {
|
||||||
|
file "VNFD" as vnfd
|
||||||
|
file "CNF\nDefinition" as cnfd
|
||||||
|
}
|
||||||
|
file "Instantiate\nparameters" as inst_param
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
frame "tacker" {
|
||||||
|
component "tacker-server" {
|
||||||
|
component "server" as serv
|
||||||
|
}
|
||||||
|
component "tacker-conductor" {
|
||||||
|
component "conductor" as cond
|
||||||
|
component "Kubernetes\ninfra-driver" as infra
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node "Kubernetes\nCluster\n(Master)" as k8s_m
|
||||||
|
cloud "Hardware Resources" as hw {
|
||||||
|
node "Kubernetes\nCluster\n(Worker)" as k8s_w {
|
||||||
|
node "Pod" as ins1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
'# Relationships
|
||||||
|
vnfpkg --> serv: 1. Request\n create VNF
|
||||||
|
inst_param --> serv: 2. Request\n instantiate VNF
|
||||||
|
serv --> cond
|
||||||
|
cond --> infra
|
||||||
|
infra -right-> k8s_m: 3. Call Kubernetes\n API
|
||||||
|
k8s_m --> ins1: 4. Create a Pod
|
||||||
|
|
||||||
|
@enduml
|
1
doc/source/user/v2/cnf/deployment/img/deployment.svg
Normal file
After Width: | Height: | Size: 16 KiB |
1031
doc/source/user/v2/cnf/deployment/index.rst
Normal file
@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
frame "python-tackerclient" {
|
frame "python-tackerclient" {
|
||||||
component "tacker-client" as client {
|
component "tacker-client" as client {
|
||||||
package "VNF Package" as vnfpkg {
|
package "VNF Package" as vnfpkg {
|
||||||
file "VNFD" as vnfd
|
file "VNFD" as vnfd
|
||||||
file "CNF\nDefinition" as cnfd
|
file "CNF\nDefinition" as cnfd
|
||||||
|
}
|
||||||
|
file "Instantiate\nparameters" as inst_param
|
||||||
}
|
}
|
||||||
file "Instantiate\nparameters" as inst_param
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
frame "tacker" {
|
frame "tacker" {
|
After Width: | Height: | Size: 18 KiB |
1191
doc/source/user/v2/cnf/deployment_using_helm/index.rst
Normal file
35
doc/source/user/v2/cnf/heal/img/heal.pu
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
frame "python-tackerclient" {
|
||||||
|
component "tacker-client" as client
|
||||||
|
}
|
||||||
|
|
||||||
|
frame "tacker" {
|
||||||
|
component "tacker-server" {
|
||||||
|
component "server" as serv
|
||||||
|
}
|
||||||
|
component "tacker-conductor" {
|
||||||
|
component "conductor" as cond
|
||||||
|
component "Kubernetes\ninfra-driver" as infra
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node "Kubernetes\nCluster\n(Master)" as k8s_m
|
||||||
|
cloud "Hardware Resources" as hw {
|
||||||
|
node "Kubernetes\nCluster\n(Worker)" as k8s_w {
|
||||||
|
node "Pod" as ins1
|
||||||
|
node "Pod" as ins2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
'# Relationships
|
||||||
|
client --> serv: 1. Request\n heal VNF
|
||||||
|
serv --> cond
|
||||||
|
cond --> infra
|
||||||
|
infra -right-> k8s_m: 2. Call Kubernetes\n API
|
||||||
|
k8s_m --> ins1: 3. Re-create Pods
|
||||||
|
k8s_m --> ins2
|
||||||
|
ins1 -[hidden]right-> ins2
|
||||||
|
|
||||||
|
@enduml
|
1
doc/source/user/v2/cnf/heal/img/heal.svg
Normal file
After Width: | Height: | Size: 14 KiB |
259
doc/source/user/v2/cnf/heal/index.rst
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
========================
|
||||||
|
ETSI NFV-SOL CNF Healing
|
||||||
|
========================
|
||||||
|
|
||||||
|
This document describes how to heal CNF in Tacker v2 API.
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
The diagram below shows an overview of the CNF healing.
|
||||||
|
|
||||||
|
1. Request heal VNF
|
||||||
|
|
||||||
|
A user requests tacker-server to heal a VNF or all VNFs with tacker-client
|
||||||
|
by requesting ``heal VNF``.
|
||||||
|
|
||||||
|
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
|
||||||
|
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.
|
||||||
|
|
||||||
|
3. Re-create Pods
|
||||||
|
|
||||||
|
Kubernetes Master re-creates Pods according to the API calls.
|
||||||
|
|
||||||
|
.. figure:: img/heal.svg
|
||||||
|
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following packages should be installed:
|
||||||
|
|
||||||
|
* tacker
|
||||||
|
* python-tackerclient
|
||||||
|
|
||||||
|
Execute up to "Instantiate VNF" in the procedure of
|
||||||
|
:doc:`/user/v2/cnf/deployment/index`.
|
||||||
|
In other words, the procedure after "Terminate VNF" is not executed.
|
||||||
|
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
There are two main methods for CNF healing.
|
||||||
|
|
||||||
|
* Healing of the entire VNF
|
||||||
|
|
||||||
|
Heal entire VNF instance by termination and instantiation of the VNF.
|
||||||
|
|
||||||
|
* Healing specified with VNFC instances
|
||||||
|
|
||||||
|
Heal Pod (mapped as VNFC) that is singleton or created using controller
|
||||||
|
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 v3.3.1`_.
|
||||||
|
|
||||||
|
|
||||||
|
.. _Healing Target VNF Instance:
|
||||||
|
|
||||||
|
Healing Target VNF Instance
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Assuming that the following VNF instance exists,
|
||||||
|
this instance will be healed.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm show VNF_INSTANCE_ID --os-tacker-api-version 2 \
|
||||||
|
-f json | jq .'["Instantiated Vnf Info"]'.vnfcInfo
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "VDU1-vdu1-749bb6cbbf-dcjpn",
|
||||||
|
"vduId": "VDU1",
|
||||||
|
"vnfcResourceInfoId": "vdu1-749bb6cbbf-dcjpn",
|
||||||
|
"vnfcState": "STARTED"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "VDU1-vdu1-749bb6cbbf-hmsbh",
|
||||||
|
"vduId": "VDU1",
|
||||||
|
"vnfcResourceInfoId": "vdu1-749bb6cbbf-hmsbh",
|
||||||
|
"vnfcState": "STARTED"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
How to Heal of the Entire VNF
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Execute Heal of the entire CNF with 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.
|
||||||
|
|
||||||
|
Pod information before heal:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get pod
|
||||||
|
NAME READY STATUS RESTARTS AGE
|
||||||
|
vdu1-749bb6cbbf-dcjpn 1/1 Running 0 7h38m
|
||||||
|
vdu1-749bb6cbbf-hmsbh 1/1 Running 0 7h38m
|
||||||
|
|
||||||
|
|
||||||
|
Heal entire VNF can be executed by the following CLI command.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm heal VNF_INSTANCE_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Heal request for VNF Instance 431b94b5-d7ba-4d1c-aa26-ecec65d7ee53 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
Pod information after heal:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get pod
|
||||||
|
NAME READY STATUS RESTARTS AGE
|
||||||
|
vdu1-749bb6cbbf-jgjq9 1/1 Running 0 31s
|
||||||
|
vdu1-749bb6cbbf-tj4vx 1/1 Running 0 31s
|
||||||
|
|
||||||
|
|
||||||
|
All ``vnfcResourceInfo`` in ``Instantiated Vnf Info`` will be updated from
|
||||||
|
the VNF Instance displayed in :ref:`Healing Target VNF Instance`.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm show VNF_INSTANCE_ID --os-tacker-api-version 2 \
|
||||||
|
-f json | jq .'["Instantiated Vnf Info"]'.vnfcInfo
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "VDU1-vdu1-749bb6cbbf-jgjq9",
|
||||||
|
"vduId": "VDU1",
|
||||||
|
"vnfcResourceInfoId": "vdu1-749bb6cbbf-jgjq9",
|
||||||
|
"vnfcState": "STARTED"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "VDU1-vdu1-749bb6cbbf-tj4vx",
|
||||||
|
"vduId": "VDU1",
|
||||||
|
"vnfcResourceInfoId": "vdu1-749bb6cbbf-tj4vx",
|
||||||
|
"vnfcState": "STARTED"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Pod information before heal:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get pod
|
||||||
|
NAME READY STATUS RESTARTS AGE
|
||||||
|
vdu1-749bb6cbbf-jgjq9 1/1 Running 0 31s
|
||||||
|
vdu1-749bb6cbbf-tj4vx 1/1 Running 0 31s
|
||||||
|
|
||||||
|
|
||||||
|
Heal specified with VNFC instances can be executed by running
|
||||||
|
:command:`openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID`.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcInfo.id``.
|
||||||
|
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID \
|
||||||
|
--os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Heal request for VNF Instance 431b94b5-d7ba-4d1c-aa26-ecec65d7ee53 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
Pod information after heal:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get pod
|
||||||
|
NAME READY STATUS RESTARTS AGE
|
||||||
|
vdu1-749bb6cbbf-6mbsl 1/1 Running 0 86s
|
||||||
|
vdu1-749bb6cbbf-tj4vx 1/1 Running 0 9m59s
|
||||||
|
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm show VNF_INSTANCE_ID --os-tacker-api-version 2 \
|
||||||
|
-f json | jq .'["Instantiated Vnf Info"]'.vnfcInfo
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "VDU1-vdu1-749bb6cbbf-6mbsl",
|
||||||
|
"vduId": "VDU1",
|
||||||
|
"vnfcResourceInfoId": "vdu1-749bb6cbbf-6mbsl",
|
||||||
|
"vnfcState": "STARTED"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "VDU1-vdu1-749bb6cbbf-tj4vx",
|
||||||
|
"vduId": "VDU1",
|
||||||
|
"vnfcResourceInfoId": "vdu1-749bb6cbbf-tj4vx",
|
||||||
|
"vnfcState": "STARTED"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using the following VNF Package.
|
||||||
|
|
||||||
|
* `test_instantiate_cnf_resources for 2023.2 Bobcat`_
|
||||||
|
|
||||||
|
|
||||||
|
.. _NFV-SOL002 v3.3.1: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf
|
||||||
|
.. _test_instantiate_cnf_resources for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_kubernetes_v2/samples/test_instantiate_cnf_resources
|
34
doc/source/user/v2/cnf/scale/img/scale.pu
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
frame "python-tackerclient" {
|
||||||
|
component "tacker-client" as client
|
||||||
|
}
|
||||||
|
|
||||||
|
frame "tacker" {
|
||||||
|
component "tacker-server" {
|
||||||
|
component "server" as serv
|
||||||
|
}
|
||||||
|
component "tacker-conductor" {
|
||||||
|
component "conductor" as cond
|
||||||
|
component "Kubernetes\ninfra-driver" as infra
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node "Kubernetes\nCluster\n(Master)" as k8s_m
|
||||||
|
cloud "Hardware Resources" as hw {
|
||||||
|
node "Kubernetes\nCluster\n(Worker)" as k8s_w {
|
||||||
|
node "Pod" as ins1
|
||||||
|
node "Pod" as ins2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
'# Relationships
|
||||||
|
client --> serv: 1. Request\n scale VNF
|
||||||
|
serv --> cond
|
||||||
|
cond --> infra
|
||||||
|
infra -right-> k8s_m: 2. Call Kubernetes\n API
|
||||||
|
k8s_m --> ins1: 3. Change the\n number of\n Pods
|
||||||
|
ins1 -[hidden]right-> ins2
|
||||||
|
|
||||||
|
@enduml
|
1
doc/source/user/v2/cnf/scale/img/scale.svg
Normal file
After Width: | Height: | Size: 14 KiB |
250
doc/source/user/v2/cnf/scale/index.rst
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
========================
|
||||||
|
ETSI NFV-SOL CNF Scaling
|
||||||
|
========================
|
||||||
|
|
||||||
|
This document describes how to scale CNF in Tacker v2 API.
|
||||||
|
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
The diagram below shows an overview of the CNF scaling.
|
||||||
|
|
||||||
|
1. Request scale VNF
|
||||||
|
|
||||||
|
A user requests tacker-server to scale a VNF or all VNFs with tacker-client
|
||||||
|
by requesting ``scale VNF``.
|
||||||
|
|
||||||
|
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
|
||||||
|
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.
|
||||||
|
|
||||||
|
3. Change the number of Pods
|
||||||
|
|
||||||
|
Kubernetes Master change the number of Pods according to the API calls.
|
||||||
|
|
||||||
|
.. figure:: img/scale.svg
|
||||||
|
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following packages should be installed:
|
||||||
|
|
||||||
|
* tacker
|
||||||
|
* python-tackerclient
|
||||||
|
|
||||||
|
Execute up to "Instantiate VNF" in the procedure of
|
||||||
|
:doc:`/user/v2/cnf/deployment/index`.
|
||||||
|
In other words, the procedure after "Terminate VNF" is not executed.
|
||||||
|
|
||||||
|
|
||||||
|
CNF Scaling Procedure
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
As mentioned in Prerequisites, the VNF must be instantiated before performing
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In order to execute scaling, it is necessary to specify ``ASPECT_ID``, which is
|
||||||
|
the ID for the target scaling group.
|
||||||
|
First, the method of specifying the ID will be described.
|
||||||
|
|
||||||
|
``ASPECT_ID`` is described in VNFD included in the VNF Package.
|
||||||
|
In the following VNFD excerpt, **vdu1_aspect** corresponds to ``ASPECT_ID``.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
node_templates:
|
||||||
|
VNF:
|
||||||
|
type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_description: A simple flavour
|
||||||
|
|
||||||
|
VDU1:
|
||||||
|
type: tosca.nodes.nfv.Vdu.Compute
|
||||||
|
properties:
|
||||||
|
name: vdu1
|
||||||
|
description: VDU1 compute node
|
||||||
|
vdu_profile:
|
||||||
|
min_number_of_instances: 1
|
||||||
|
max_number_of_instances: 3
|
||||||
|
|
||||||
|
policies:
|
||||||
|
- scaling_aspects:
|
||||||
|
type: tosca.policies.nfv.ScalingAspects
|
||||||
|
properties:
|
||||||
|
aspects:
|
||||||
|
vdu1_aspect:
|
||||||
|
name: vdu1_aspect
|
||||||
|
description: vdu1 scaling aspect
|
||||||
|
max_scale_level: 2
|
||||||
|
step_deltas:
|
||||||
|
- delta_1
|
||||||
|
|
||||||
|
- VDU1_initial_delta:
|
||||||
|
type: tosca.policies.nfv.VduInitialDelta
|
||||||
|
properties:
|
||||||
|
initial_delta:
|
||||||
|
number_of_instances: 2
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- VDU1_scaling_aspect_deltas:
|
||||||
|
type: tosca.policies.nfv.VduScalingAspectDeltas
|
||||||
|
properties:
|
||||||
|
aspect: vdu1_aspect
|
||||||
|
deltas:
|
||||||
|
delta_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.InstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
description: Smallest size
|
||||||
|
scale_info:
|
||||||
|
vdu1_aspect:
|
||||||
|
scale_level: 1
|
||||||
|
instantiation_level_2:
|
||||||
|
description: Largest size
|
||||||
|
scale_info:
|
||||||
|
vdu1_aspect:
|
||||||
|
scale_level: 2
|
||||||
|
default_level: instantiation_level_1
|
||||||
|
|
||||||
|
- VDU1_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VduInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
number_of_instances: 2
|
||||||
|
instantiation_level_2:
|
||||||
|
number_of_instances: 3
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
See `NFV-SOL001 v2.6.1`_ annex A.6 for details about ``ASPECT_ID``.
|
||||||
|
|
||||||
|
|
||||||
|
How to Scale Out CNF
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Execute Scale CLI command and check the number of replicas before and after
|
||||||
|
scaling.
|
||||||
|
This is to confirm that the number of replicas has increased after Scale-out.
|
||||||
|
An example using deployment is described.
|
||||||
|
|
||||||
|
Replicas information before scale-out:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get deployment
|
||||||
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
|
vdu1 2/2 2 2 7h4m
|
||||||
|
|
||||||
|
|
||||||
|
Scale-out CNF can be executed by the following CLI command.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm scale --type SCALE_OUT --aspect-id ASPECT_ID \
|
||||||
|
VNF_INSTANCE_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Scale request for VNF Instance 431b94b5-d7ba-4d1c-aa26-ecec65d7ee53 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
Replicas information after scale-out:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get deployment
|
||||||
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
|
vdu1 3/3 3 3 7h8m
|
||||||
|
|
||||||
|
|
||||||
|
How to Scale in CNF
|
||||||
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Execute Scale CLI command and check the number of replicas before and after
|
||||||
|
scaling.
|
||||||
|
This is to confirm that the number of replicas has increased after Scale-in.
|
||||||
|
An example using deployment is described.
|
||||||
|
|
||||||
|
Replicas information before scale-out:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get deployment
|
||||||
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
|
vdu1 3/3 3 3 7h8m
|
||||||
|
|
||||||
|
|
||||||
|
Scale-in VNF can be executed by the following CLI command.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm scale --type SCALE_IN --aspect-id ASPECT_ID \
|
||||||
|
VNF_INSTANCE_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Scale request for VNF Instance 431b94b5-d7ba-4d1c-aa26-ecec65d7ee53 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
Replicas information after scale-in:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get deployment
|
||||||
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
|
vdu1 2/2 2 2 7h12m
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using the following VNF Package.
|
||||||
|
|
||||||
|
* `test_instantiate_cnf_resources for 2023.2 Bobcat`_
|
||||||
|
|
||||||
|
|
||||||
|
.. _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_instantiate_cnf_resources for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_kubernetes_v2/samples/test_instantiate_cnf_resources
|
@ -3,9 +3,10 @@ ETSI NFV-SOL CNF Update
|
|||||||
=======================
|
=======================
|
||||||
|
|
||||||
This document describes how to update CNF in Tacker.
|
This document describes how to update CNF in Tacker.
|
||||||
Please refer to the :doc:`./mgmt_driver_for_container_update`
|
Please refer to the :doc:`/user/v2/cnf/update_with_mgmt_driver/index`
|
||||||
for how to update CNF with Mgmt Driver in Tacker.
|
for how to update CNF with Mgmt Driver in Tacker.
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
@ -14,11 +15,8 @@ The following packages should be installed:
|
|||||||
* tacker
|
* tacker
|
||||||
* python-tackerclient
|
* python-tackerclient
|
||||||
|
|
||||||
The procedure of prepare for scaling operation that from "register VIM" to
|
Execute up to "Create VNF" of "Instantiate VNF" in the procedure of
|
||||||
"Instantiate VNF", basically refer to
|
:doc:`/user/v2/cnf/deployment/index`.
|
||||||
:doc:`./etsi_containerized_vnf_usage_guide`.
|
|
||||||
|
|
||||||
This procedure uses an example using the sample VNF package.
|
|
||||||
|
|
||||||
|
|
||||||
CNF Update Procedures
|
CNF Update Procedures
|
||||||
@ -28,7 +26,7 @@ As mentioned in Prerequisites, the CNF must be created
|
|||||||
before performing update.
|
before performing update.
|
||||||
|
|
||||||
Details of CLI commands are described in
|
Details of CLI commands are described in
|
||||||
:doc:`../cli/cli-etsi-vnflcm`.
|
:doc:`/cli/cli-etsi-vnflcm`.
|
||||||
|
|
||||||
For update VNF instance, you need to prepare a JSON-formatted definition file.
|
For update VNF instance, you need to prepare a JSON-formatted definition file.
|
||||||
|
|
||||||
@ -38,19 +36,25 @@ For update VNF instance, you need to prepare a JSON-formatted definition file.
|
|||||||
"vnfInstanceName": "sample"
|
"vnfInstanceName": "sample"
|
||||||
}
|
}
|
||||||
|
|
||||||
.. note::
|
|
||||||
sample_param_file.json contains the VNF name as an example.
|
|
||||||
For v1 update operation, the following attributes of
|
|
||||||
``VnfInfoModificationRequest`` are not supported.
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
sample_param_file.json contains the VNF name as an example.
|
||||||
|
The Update operation can update the following.
|
||||||
|
|
||||||
|
* vnfInstanceName
|
||||||
|
* vnfInstanceDescription
|
||||||
|
* vnfId
|
||||||
* vnfConfigurableProperties
|
* vnfConfigurableProperties
|
||||||
* metadata
|
* metadata
|
||||||
* extensions
|
* extensions
|
||||||
* vnfcInfoModifications
|
* vnfcInfoModifications
|
||||||
* vimConnectionInfo
|
* vimConnectionInfo
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The v2 update operation can change the ``vimConnectionInfo``
|
|
||||||
|
The update operation can change the ``vimConnectionInfo``
|
||||||
associated with an existing VNF instance.
|
associated with an existing VNF instance.
|
||||||
Even if update operation specify multiple ``vimConnectionInfo``
|
Even if update operation specify multiple ``vimConnectionInfo``
|
||||||
associated with one VNF instance, only one of them will be used for life
|
associated with one VNF instance, only one of them will be used for life
|
||||||
@ -69,7 +73,8 @@ VNF instance name before update:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID -c 'VNF Instance Name'
|
$ openstack vnflcm show VNF_INSTANCE_ID -c 'VNF Instance Name' \
|
||||||
|
--os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
@ -79,7 +84,7 @@ Result:
|
|||||||
+-------------------+-------+
|
+-------------------+-------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+-------------------+-------+
|
+-------------------+-------+
|
||||||
| VNF Instance Name | None |
|
| VNF Instance Name | |
|
||||||
+-------------------+-------+
|
+-------------------+-------+
|
||||||
|
|
||||||
|
|
||||||
@ -87,16 +92,19 @@ Update VNF can be executed by the following CLI command.
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm update VNF_INSTANCE_ID --I sample_param_file.json
|
$ openstack vnflcm update VNF_INSTANCE_ID --I sample_param_file.json \
|
||||||
|
--os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
Update vnf:c64ea0fd-a90c-4754-95f4-dc0751db519d
|
Update vnf:431b94b5-d7ba-4d1c-aa26-ecec65d7ee53
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Create a parameter file that describes the resource information to be
|
Create a parameter file that describes the resource information to be
|
||||||
changed in advance.
|
changed in advance.
|
||||||
|
|
||||||
@ -105,24 +113,24 @@ VNF instance name after operation:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ openstack vnflcm show VNF_INSTANCE_ID -c 'VNF Instance Name'
|
$ openstack vnflcm show VNF_INSTANCE_ID -c 'VNF Instance Name' \
|
||||||
|
--os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
Result:
|
Result:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
+-------------------+---------+
|
+-------------------+--------+
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
+-------------------+---------+
|
+-------------------+--------+
|
||||||
| VNF Instance Name | sample |
|
| VNF Instance Name | sample |
|
||||||
+-------------------+---------+
|
+-------------------+--------+
|
||||||
|
|
||||||
|
|
||||||
You can confirm that the VNF Instance Name has been changed by the update
|
You can confirm that the VNF Instance Name has been changed by the update
|
||||||
operation.
|
operation.
|
||||||
|
|
||||||
|
|
||||||
If the ``vnfdId`` is not changed by update operation, the current value
|
If the ``vnfdId`` is not changed by update operation, the current value
|
||||||
shall be updated using the request parameter.
|
shall be updated using the request parameter.
|
||||||
The following attributes are updated by performing JSON Merge Patch with the
|
The following attributes are updated by performing JSON Merge Patch with the
|
||||||
@ -132,7 +140,7 @@ values set in the request parameter to the current values.
|
|||||||
* metadata
|
* metadata
|
||||||
* extensions
|
* extensions
|
||||||
|
|
||||||
If the ``vnfdId`` is requested to be changed by v1 update operation, the
|
If the ``vnfdId`` is requested to be changed by update operation, the
|
||||||
following attributes of VNF instance shall be updated in addition to those
|
following attributes of VNF instance shall be updated in addition to those
|
||||||
set in the request parameters.
|
set in the request parameters.
|
||||||
These are updated with the values obtained from the VNFD associated with the
|
These are updated with the values obtained from the VNFD associated with the
|
||||||
@ -144,8 +152,22 @@ new vnfdId.
|
|||||||
* vnfdVersion
|
* vnfdVersion
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
In the v2 update operation for CNF, if "Scale" or "Heal" is performed
|
|
||||||
|
In the update operation for CNF, if "Scale" or "Heal" is performed
|
||||||
after updating ``vnfdId``, the VNF package associated with the
|
after updating ``vnfdId``, the VNF package associated with the
|
||||||
``vnfdId before the update`` shall be used.
|
``vnfdId before the update`` shall be used.
|
||||||
Therefore, in order to maintain the update of ``vnfdId``, it is necessary to
|
Therefore, in order to maintain the update of ``vnfdId``, it is necessary to
|
||||||
execute "Terminate VNF" once and then "Instantiate VNF".
|
execute "Terminate VNF" once and then "Instantiate VNF".
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using the following VNF Package.
|
||||||
|
|
||||||
|
* `test_instantiate_cnf_resources for 2023.2 Bobcat`_
|
||||||
|
|
||||||
|
|
||||||
|
.. _test_instantiate_cnf_resources for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_kubernetes_v2/samples/test_instantiate_cnf_resources
|
@ -0,0 +1,40 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
frame "python-tackerclient" {
|
||||||
|
component "tacker-client" as client
|
||||||
|
}
|
||||||
|
|
||||||
|
frame "tacker" {
|
||||||
|
component "tacker-server" {
|
||||||
|
component "server" as serv
|
||||||
|
}
|
||||||
|
component "tacker-conductor" {
|
||||||
|
component "conductor" as cond
|
||||||
|
component "mgmt-driver" as infra
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node "Kubernetes\nCluster\n(Master)" as k8s_m
|
||||||
|
cloud "Hardware Resources" as hw {
|
||||||
|
node "Kubernetes\nCluster\n(Worker)" as k8s_w {
|
||||||
|
node "ConfigMap" as ins1
|
||||||
|
node "Secret" as ins2
|
||||||
|
node "Pod" as ins3
|
||||||
|
node "Deployment" as ins4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
'# Relationships
|
||||||
|
client --> serv: 1. Request\n update VNF
|
||||||
|
serv --> cond
|
||||||
|
cond --> infra
|
||||||
|
infra -right-> k8s_m: 2. Call Kubernetes\n API
|
||||||
|
k8s_m --> ins1
|
||||||
|
k8s_m --> ins2: 3. Update the\n deployed resources
|
||||||
|
k8s_m --> ins3
|
||||||
|
k8s_m --> ins4
|
||||||
|
ins1 -[hidden]right-> ins2
|
||||||
|
ins2 -[hidden]right-> ins3
|
||||||
|
ins3 -[hidden]right-> ins4
|
||||||
|
@enduml
|
After Width: | Height: | Size: 16 KiB |
855
doc/source/user/v2/cnf/update_with_mgmt_driver/index.rst
Normal file
@ -0,0 +1,855 @@
|
|||||||
|
========================================
|
||||||
|
ETSI NFV-SOL CNF Update with Mgmt Driver
|
||||||
|
========================================
|
||||||
|
|
||||||
|
This document describes how to update CNF with Mgmt Driver in Tacker v2 API.
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
The diagram below shows an overview of the CNF updating.
|
||||||
|
|
||||||
|
1. Request update VNF
|
||||||
|
|
||||||
|
A user requests tacker-server to update a CNF with tacker-client
|
||||||
|
by requesting ``update VNF`` as a Modify VNF information operation.
|
||||||
|
|
||||||
|
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
|
||||||
|
the matching Mgmt Driver (in this case the Mgmt Driver of container update)
|
||||||
|
according to the contents of the VNFD in the VNF Package. Then, Mgmt Driver
|
||||||
|
calls Kubernetes APIs.
|
||||||
|
|
||||||
|
3. Update resources
|
||||||
|
|
||||||
|
Kubernetes Master update resources according to the API calls.
|
||||||
|
|
||||||
|
.. figure:: img/update_with_mgmt_driver.svg
|
||||||
|
|
||||||
|
|
||||||
|
Mgmt Driver Introduction
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Mgmt Driver enables Users to configure their VNF before and/or after
|
||||||
|
its VNF Lifecycle Management operation. Users can customize the logic
|
||||||
|
of Mgmt Driver by implementing their own Mgmt Driver and these
|
||||||
|
customizations are specified by "interface" definition in
|
||||||
|
`NFV-SOL001 v2.6.1`_.
|
||||||
|
|
||||||
|
The Mgmt Driver in this user guide supports updating CNF with
|
||||||
|
``modify_information_start`` and ``modify_information_end`` operation.
|
||||||
|
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
In this user guide, the provided sample VNF Packages will be instantiated
|
||||||
|
and then updated. The sample Mgmt Driver will update resources on
|
||||||
|
Kubernetes during update. Update the ConfigMap and Secret, and also
|
||||||
|
update the image in the Pod, Deployment, DaemonSet and ReplicaSet, and other
|
||||||
|
resources will not change.
|
||||||
|
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following packages should be installed:
|
||||||
|
|
||||||
|
* tacker
|
||||||
|
* python-tackerclient
|
||||||
|
|
||||||
|
And you need to put the Mgmt Driver file in the
|
||||||
|
Scripts directory of the VNF Package.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
You can find sample Mgmt Driver file in the following path.
|
||||||
|
`tacker/sol_refactored/mgmt_drivers/container_update_mgmt_v2.py`_
|
||||||
|
|
||||||
|
|
||||||
|
You can also refer to :doc:`/user/v2/cnf/deployment/index` for the
|
||||||
|
procedure of preparation from "Prepare Kubernetes VIM" to
|
||||||
|
"Instantiate VNF".
|
||||||
|
|
||||||
|
|
||||||
|
How to Instantiate VNF for Updating
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
You can use the sample VNF package below to instantiate VNF to be updated.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python3 -m pip install TACKER_ROOT
|
||||||
|
$ cd TACKER_ROOT/samples/tests/functional/sol_kubernetes_v2/test_cnf_container_update_before
|
||||||
|
$ vi pkggen.py
|
||||||
|
...
|
||||||
|
vim_id = "your k8s vim's id" (modify this value to your own vim Id)
|
||||||
|
...
|
||||||
|
$ python3 pkggen.py
|
||||||
|
$ ll
|
||||||
|
...
|
||||||
|
drwxr-xr-x 5 stack stack 4096 Nov 5 23:46 contents/
|
||||||
|
-rw-r--r-- 1 stack stack 1922 Nov 5 23:46 pkggen.py
|
||||||
|
-rw-rw-r-- 1 stack stack 25823 Nov 20 04:30 test_cnf_container_update_before.zip
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
.. 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
|
||||||
|
`test_cnf_container_update_before.zip`.
|
||||||
|
|
||||||
|
After creating a VNF package with :command:`openstack vnf package create`,
|
||||||
|
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 | 67e8b34a-d303-4ec1-acb0-e6a3bf6aae12 |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "/vnfpkgm/v1/vnf_packages/67e8b34a-d303-4ec1-acb0-e6a3bf6aae12" |
|
||||||
|
| | }, |
|
||||||
|
| | "packageContent": { |
|
||||||
|
| | "href": "/vnfpkgm/v1/vnf_packages/67e8b34a-d303-4ec1-acb0-e6a3bf6aae12/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>`.
|
||||||
|
|
||||||
|
Here is an example of uploading VNF package:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnf package upload --path test_cnf_container_update_before.zip 67e8b34a-d303-4ec1-acb0-e6a3bf6aae12
|
||||||
|
Upload request for VNF package 67e8b34a-d303-4ec1-acb0-e6a3bf6aae12 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
Create VNF instance by running
|
||||||
|
:command:`openstack vnflcm create <VNFD ID> --os-tacker-api-version 2`.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
The VNFD ID could be found by
|
||||||
|
:command:`openstack vnf package show <vnf package ID>` command.
|
||||||
|
|
||||||
|
|
||||||
|
Here is an example of creating VNF :
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm create 97018ca2-bf29-4715-9e2b-6e432dd1f414
|
||||||
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| ID | dec67077-b67c-46ff-b5bf-3b8d34b4ed79 |
|
||||||
|
| Instantiation State | NOT_INSTANTIATED |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/dec67077-b67c-46ff-b5bf-3b8d34b4ed79" |
|
||||||
|
| | }, |
|
||||||
|
| | "instantiate": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/dec67077-b67c-46ff-b5bf-3b8d34b4ed79/instantiate" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| VNF Configurable Properties | |
|
||||||
|
| VNF Instance Description | |
|
||||||
|
| VNF Instance Name | |
|
||||||
|
| VNF Product Name | Sample VNF |
|
||||||
|
| VNF Provider | Company |
|
||||||
|
| VNF Software Version | 1.0 |
|
||||||
|
| VNFD ID | 97018ca2-bf29-4715-9e2b-6e432dd1f414 |
|
||||||
|
| VNFD Version | 1.0 |
|
||||||
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
The following example shows the yaml files that deploys the Kubernetes
|
||||||
|
resources.
|
||||||
|
You can see resource definition files are included as a value of
|
||||||
|
``lcm-kubernetes-def-files`` in ``additionalParams`` here.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cat ./instance_kubernetes.json
|
||||||
|
{
|
||||||
|
"flavourId": "simple",
|
||||||
|
"vimConnectionInfo": {
|
||||||
|
"vim1": {
|
||||||
|
"vimId": "b7e657dc-8f16-4c1c-8fa4-a7c298d6a827",
|
||||||
|
"vimType": "ETSINFV.KUBERNETES.V_1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalParams": {
|
||||||
|
"lcm-kubernetes-def-files": [
|
||||||
|
"Files/kubernetes/configmap_1.yaml",
|
||||||
|
"Files/kubernetes/deployment.yaml",
|
||||||
|
"Files/kubernetes/pod_env.yaml",
|
||||||
|
"Files/kubernetes/pod_volume.yaml",
|
||||||
|
"Files/kubernetes/replicaset.yaml",
|
||||||
|
"Files/kubernetes/secret_1.yaml",
|
||||||
|
"Files/kubernetes/configmap_3.yaml",
|
||||||
|
"Files/kubernetes/pod_env_2.yaml",
|
||||||
|
"Files/kubernetes/pod_volume_2.yaml",
|
||||||
|
"Files/kubernetes/daemonset.yaml",
|
||||||
|
"Files/kubernetes/deployment_2.yaml",
|
||||||
|
"Files/kubernetes/secret_3.yaml"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Instantiate VNF by running the following command
|
||||||
|
:command:`openstack vnflcm instantiate <VNF instance ID> <json file> --os-tacker-api-version 2`,
|
||||||
|
after the command above is executed.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm instantiate VNF_INSTANCE_ID instance_kubernetes.json --os-tacker-api-version 2
|
||||||
|
Instantiate request for VNF Instance dec67077-b67c-46ff-b5bf-3b8d34b4ed79 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
CNF Updating Procedure
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
As mentioned in `Prerequisites`, the VNF must be instantiated before
|
||||||
|
performing updating.
|
||||||
|
|
||||||
|
Next, the user can use the original vnf package as a template to make a new
|
||||||
|
vnf package, in which the yaml of ConfigMap, Secret, Pod, Deployment, DaemonSet
|
||||||
|
and ReplicaSet can be changed.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
* The yaml of ConfigMap and Secret can be changed. The kind, namespace
|
||||||
|
and name cannot be changed, but the file name and file path can
|
||||||
|
be changed.
|
||||||
|
* The yaml of Pod, Deployment, DaemonSet and ReplicaSet can also be
|
||||||
|
changed, but only the image field can be changed, and no other fields can
|
||||||
|
be changed.
|
||||||
|
* No other yaml is allowed to be changed.
|
||||||
|
* If changes other than images are made to the yaml of Pod, Deployment,
|
||||||
|
DaemonSet and ReplicaSet , those will not take effect. However, if heal
|
||||||
|
entire VNF at this time, the resource will be based on the new yaml
|
||||||
|
during the instantiation, and all changes will take effect.
|
||||||
|
|
||||||
|
Then after creating and uploading the new vnf package, you can perform the
|
||||||
|
update operation.
|
||||||
|
After the update, the Mgmt Driver will restart the pod to update and
|
||||||
|
recreate the deployment, DaemonSet and ReplicaSet to update.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This document provides the new vnf package, the path is
|
||||||
|
`samples/tests/functional/sol_kubernetes_v2/test_cnf_container_update_after`_
|
||||||
|
|
||||||
|
|
||||||
|
Details of CLI commands are described in :doc:`/cli/cli-etsi-vnflcm`.
|
||||||
|
|
||||||
|
|
||||||
|
How to Update CNF
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Execute Update CLI command and check the status of the resources
|
||||||
|
before and after updating.
|
||||||
|
|
||||||
|
This is to confirm that the resources deployed in Kubernetes are updated
|
||||||
|
after update CNF.
|
||||||
|
The following is an example of the entire process.
|
||||||
|
The resources information before update:
|
||||||
|
|
||||||
|
* ConfigMap
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get configmaps
|
||||||
|
NAME DATA AGE
|
||||||
|
cm-data 1 70s
|
||||||
|
cm-data3 1 70s
|
||||||
|
kube-root-ca.crt 1 14d
|
||||||
|
|
||||||
|
$ kubectl describe configmaps cm-data
|
||||||
|
Name: cm-data
|
||||||
|
Namespace: default
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
|
||||||
|
Data
|
||||||
|
====
|
||||||
|
cmKey1.txt:
|
||||||
|
----
|
||||||
|
configmap data
|
||||||
|
foo
|
||||||
|
bar
|
||||||
|
|
||||||
|
BinaryData
|
||||||
|
====
|
||||||
|
|
||||||
|
Events: <none>
|
||||||
|
|
||||||
|
$ kubectl describe configmaps cm-data3
|
||||||
|
Name: cm-data3
|
||||||
|
Namespace: default
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
|
||||||
|
Data
|
||||||
|
====
|
||||||
|
cmKey1.txt:
|
||||||
|
----
|
||||||
|
configmap data
|
||||||
|
foo
|
||||||
|
bar
|
||||||
|
|
||||||
|
BinaryData
|
||||||
|
====
|
||||||
|
|
||||||
|
Events: <none>
|
||||||
|
|
||||||
|
* Secret
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get secrets
|
||||||
|
NAME TYPE DATA AGE
|
||||||
|
default-token-k8svim kubernetes.io/service-account-token 3 33m
|
||||||
|
secret-data Opaque 2 2m53s
|
||||||
|
secret-data3 Opaque 2 2m53s
|
||||||
|
|
||||||
|
$ kubectl describe secrets secret-data
|
||||||
|
Name: secret-data
|
||||||
|
Namespace: default
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
|
||||||
|
Type: Opaque
|
||||||
|
|
||||||
|
Data
|
||||||
|
====
|
||||||
|
password: 15 bytes
|
||||||
|
secKey1.txt: 15 bytes
|
||||||
|
|
||||||
|
$ kubectl describe secrets secret-data3
|
||||||
|
Name: secret-data3
|
||||||
|
Namespace: default
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
|
||||||
|
Type: Opaque
|
||||||
|
|
||||||
|
Data
|
||||||
|
====
|
||||||
|
password: 15 bytes
|
||||||
|
secKey1.txt: 15 bytes
|
||||||
|
|
||||||
|
* Pod
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get pod -o wide
|
||||||
|
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
||||||
|
daemonset-vdu5-jgjq9 1/1 Running 0 6m38s 10.0.0.107 vagrant <none> <none>
|
||||||
|
deployment2-vdu6-86579d6868-6mbsl 1/1 Running 0 6m38s 10.0.0.79 vagrant <none> <none>
|
||||||
|
env-test 1/1 Running 0 6m38s 10.0.0.108 vagrant <none> <none>
|
||||||
|
env-test2 1/1 Running 0 6m38s 10.0.0.97 vagrant <none> <none>
|
||||||
|
vdu1-update-6fcf66b5dd-nngts 1/1 Running 0 6m38s 10.0.0.116 vagrant <none> <none>
|
||||||
|
vdu2-update-2wvxj 1/1 Running 0 6m38s 10.0.0.91 vagrant <none> <none>
|
||||||
|
volume-test 1/1 Running 0 6m38s 10.0.0.74 vagrant <none> <none>
|
||||||
|
volume-test2 1/1 Running 0 6m38s 10.0.0.98 vagrant <none> <none>
|
||||||
|
|
||||||
|
$ kubectl describe pod volume-test
|
||||||
|
Name: volume-test
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://f08eaee4d9fb0cdaaf9803fb97891ff61507239af1c6317464300bcc5d1f9f08
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Volumes:
|
||||||
|
cm-volume:
|
||||||
|
Type: ConfigMap (a volume populated by a ConfigMap)
|
||||||
|
Name: cm-data
|
||||||
|
Optional: false
|
||||||
|
sec-volume:
|
||||||
|
Type: Secret (a volume populated by a Secret)
|
||||||
|
SecretName: secret-data
|
||||||
|
Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
$ kubectl describe pod volume-test2
|
||||||
|
Name: volume-test2
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://6255e5c8d0af561789919c5aa07ac90ea691b4d0a91b5f88b9c00592295e9c9b
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Volumes:
|
||||||
|
cm-volume:
|
||||||
|
Type: ConfigMap (a volume populated by a ConfigMap)
|
||||||
|
Name: cm-data3
|
||||||
|
Optional: false
|
||||||
|
sec-volume:
|
||||||
|
Type: Secret (a volume populated by a Secret)
|
||||||
|
SecretName: secret-data3
|
||||||
|
Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
* Deployment
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get deployments.apps -o wide
|
||||||
|
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
|
||||||
|
deployment2-vdu6 1/1 1 1 20m nginx nginx app=webserver
|
||||||
|
vdu1-update 1/1 1 1 20m nginx nginx app=webserver
|
||||||
|
|
||||||
|
$ kubectl describe pod deployment2-vdu6-86579d6868-6mbsl
|
||||||
|
Name: deployment2-vdu6-86579d6868-6mbsl
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://eece8b07f2b66760bdc57e7a3fbc073938d73b37e62401d394d058e4273cdd90
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Environment Variables from:
|
||||||
|
cm-data3 ConfigMap with prefix 'CM_' Optional: false
|
||||||
|
secret-data3 Secret with prefix 'SEC_' Optional: false
|
||||||
|
Environment:
|
||||||
|
CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data3'> Optional: false
|
||||||
|
SECENV: <set to the key 'password' in secret 'secret-data3'> Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
$ kubectl describe pod vdu1-update-6fcf66b5dd-nngts
|
||||||
|
Name: vdu1-update-6fcf66b5dd-nngts
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://55db77c8612cbddc6041431a9fd1c065cd5251253b07e86288107043e84d9dab
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Environment Variables from:
|
||||||
|
cm-data ConfigMap with prefix 'CM_' Optional: false
|
||||||
|
secret-data Secret with prefix 'SEC_' Optional: false
|
||||||
|
Environment:
|
||||||
|
CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false
|
||||||
|
SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
* DaemonSet
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get daemonset -o wide
|
||||||
|
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
|
||||||
|
daemonset-vdu5 1 1 1 1 1 <none> 27m nginx nginx app=nginx
|
||||||
|
|
||||||
|
$ kubectl describe pod daemonset-vdu5-jgjq9
|
||||||
|
Name: daemonset-vdu5-jgjq9
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://0d99ecf321d715aded2ec2834f2fecc57dbb7c6eb8e7f710f193df5a0844d846
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Environment Variables from:
|
||||||
|
cm-data ConfigMap with prefix 'CM_' Optional: false
|
||||||
|
secret-data Secret with prefix 'SEC_' Optional: false
|
||||||
|
Environment:
|
||||||
|
CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false
|
||||||
|
SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
* ReplicaSet
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get replicaset -o wide
|
||||||
|
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
|
||||||
|
deployment2-vdu6-86579d6868 1 1 1 32m nginx nginx app=webserver,pod-template-hash=86579d6868
|
||||||
|
vdu1-update-6fcf66b5dd 1 1 1 32m nginx nginx app=webserver,pod-template-hash=6fcf66b5dd
|
||||||
|
vdu2-update 1 1 1 32m nginx nginx app=webserver
|
||||||
|
|
||||||
|
$ kubectl describe pod vdu2-update-2wvxj
|
||||||
|
Name: vdu2-update-2wvxj
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://8e24081e5e325302f1e4403bf76756b90f848a9c712e53d99f547ba6265d7ed6
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Volumes:
|
||||||
|
cm-volume:
|
||||||
|
Type: ConfigMap (a volume populated by a ConfigMap)
|
||||||
|
Name: cm-data
|
||||||
|
Optional: false
|
||||||
|
sec-volume:
|
||||||
|
Type: Secret (a volume populated by a Secret)
|
||||||
|
SecretName: secret-data
|
||||||
|
Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
Update CNF can be executed by the following CLI command.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm update VNF_INSTANCE_ID --I 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:: console
|
||||||
|
|
||||||
|
{
|
||||||
|
"vnfdId": "58bcc1c6-1400-46ec-b7fb-e508bf7e00e9",
|
||||||
|
"vnfInstanceName": "modify_vnf_after",
|
||||||
|
"metadata": {
|
||||||
|
"configmap_secret_paths": [
|
||||||
|
"Files/kubernetes/configmap_2.yaml",
|
||||||
|
"Files/kubernetes/secret_2.yaml"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
If you want to update ConfigMap and Secret, not only need to update
|
||||||
|
their yaml, but also need to specify the updated yaml file path in
|
||||||
|
the metadata field of the request input parameter.
|
||||||
|
|
||||||
|
|
||||||
|
Here is an example of updating CNF:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm update dec67077-b67c-46ff-b5bf-3b8d34b4ed79 --I sample_param_file.json
|
||||||
|
Update vnf:dec67077-b67c-46ff-b5bf-3b8d34b4ed79
|
||||||
|
|
||||||
|
|
||||||
|
The resources information after update:
|
||||||
|
|
||||||
|
* ConfigMap
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl describe configmaps cm-data
|
||||||
|
Name: cm-data
|
||||||
|
Namespace: default
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
|
||||||
|
Data
|
||||||
|
====
|
||||||
|
cmKey1.txt:
|
||||||
|
----
|
||||||
|
configmap2 data2
|
||||||
|
foo2
|
||||||
|
bar2
|
||||||
|
|
||||||
|
BinaryData
|
||||||
|
====
|
||||||
|
|
||||||
|
Events: <none>
|
||||||
|
|
||||||
|
$ kubectl describe configmaps cm-data3
|
||||||
|
Name: cm-data3
|
||||||
|
Namespace: default
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
|
||||||
|
Data
|
||||||
|
====
|
||||||
|
cmKey1.txt:
|
||||||
|
----
|
||||||
|
configmap data
|
||||||
|
foo
|
||||||
|
bar
|
||||||
|
|
||||||
|
BinaryData
|
||||||
|
====
|
||||||
|
|
||||||
|
Events: <none>
|
||||||
|
|
||||||
|
* Secret
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl describe secrets secret-data
|
||||||
|
Name: secret-data
|
||||||
|
Namespace: default
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
|
||||||
|
Type: Opaque
|
||||||
|
|
||||||
|
Data
|
||||||
|
====
|
||||||
|
password: 16 bytes
|
||||||
|
secKey1.txt: 18 bytes
|
||||||
|
|
||||||
|
$ kubectl describe secret secret-data3
|
||||||
|
Name: secret-data3
|
||||||
|
Namespace: default
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
|
||||||
|
Type: Opaque
|
||||||
|
|
||||||
|
Data
|
||||||
|
====
|
||||||
|
secKey1.txt: 15 bytes
|
||||||
|
password: 15 bytes
|
||||||
|
|
||||||
|
* Pod
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get pod -o wide
|
||||||
|
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
||||||
|
daemonset-vdu5-whd4s 1/1 Running 0 9m49s 10.0.0.76 vagrant <none> <none>
|
||||||
|
deployment2-vdu6-86579d6868-6mbsl 1/1 Running 0 104m 10.0.0.79 vagrant <none> <none>
|
||||||
|
env-test 1/1 Running 1 (9m52s ago) 104m 10.0.0.108 vagrant <none> <none>
|
||||||
|
env-test2 1/1 Running 0 104m 10.0.0.97 vagrant <none> <none>
|
||||||
|
vdu1-update-5d87858fc6-tfgts 1/1 Running 0 9m52s 10.0.0.71 vagrant <none> <none>
|
||||||
|
vdu2-update-tk7qp 1/1 Running 0 9m52s 10.0.0.91 vagrant <none> <none>
|
||||||
|
volume-test 1/1 Running 1 (9m52s ago) 104m 10.0.0.74 vagrant <none> <none>
|
||||||
|
volume-test2 1/1 Running 0 104m 10.0.0.98 vagrant <none> <none>
|
||||||
|
|
||||||
|
$ kubectl describe pod env-test
|
||||||
|
Name: env-test
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://143924c0a3869402db7e07950cf66c6360a4298a8b575e9ea3c35cf77d48854d
|
||||||
|
Image: tomcat
|
||||||
|
Image ID: docker.io/library/tomcat@sha256:857b168692495ee6ff0d6ee89b5b479555c74401bc3c219c88644b9181f03dd5
|
||||||
|
...
|
||||||
|
Environment Variables from:
|
||||||
|
cm-data ConfigMap with prefix 'CM_' Optional: false
|
||||||
|
secret-data Secret with prefix 'SEC_' Optional: false
|
||||||
|
Environment:
|
||||||
|
CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false
|
||||||
|
SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
$ kubectl describe pod env-test2
|
||||||
|
Name: env-test2
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://1ebf1f8fccfd821f55a0918657735758173ea83037edd84bf651e660afd16f82
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Environment Variables from:
|
||||||
|
cm-data3 ConfigMap with prefix 'CM_' Optional: false
|
||||||
|
secret-data3 Secret with prefix 'SEC_' Optional: false
|
||||||
|
Environment:
|
||||||
|
CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data3'> Optional: false
|
||||||
|
SECENV: <set to the key 'password' in secret 'secret-data3'> Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
$ kubectl describe pod volume-test
|
||||||
|
Name: volume-test
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://e46b41347ddc29dbd7afee3dda324a1ac26383ab1f805635dd64895328bbe5a1
|
||||||
|
Image: cirros
|
||||||
|
Image ID: docker.io/library/cirros@sha256:a40a2b0a21536db691c8e7e055dbb92c81ad15392048abbde32fc5698e07f831
|
||||||
|
...
|
||||||
|
Volumes:
|
||||||
|
cm-volume:
|
||||||
|
Type: ConfigMap (a volume populated by a ConfigMap)
|
||||||
|
Name: cm-data
|
||||||
|
Optional: false
|
||||||
|
sec-volume:
|
||||||
|
Type: Secret (a volume populated by a Secret)
|
||||||
|
SecretName: secret-data
|
||||||
|
Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
$ kubectl describe pod volume-test2
|
||||||
|
Name: volume-test2
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://6255e5c8d0af561789919c5aa07ac90ea691b4d0a91b5f88b9c00592295e9c9b
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Volumes:
|
||||||
|
cm-volume:
|
||||||
|
Type: ConfigMap (a volume populated by a ConfigMap)
|
||||||
|
Name: cm-data3
|
||||||
|
Optional: false
|
||||||
|
sec-volume:
|
||||||
|
Type: Secret (a volume populated by a Secret)
|
||||||
|
SecretName: secret-data3
|
||||||
|
Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
* Deployment
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get deployments -o wide
|
||||||
|
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
|
||||||
|
deployment2-vdu6 1/1 1 1 114m nginx nginx app=webserver
|
||||||
|
vdu1-update 1/1 1 1 114m nginx cirros app=webserver
|
||||||
|
|
||||||
|
$ kubectl describe pod deployment2-vdu6-86579d6868-6mbsl
|
||||||
|
Name: deployment2-vdu6-86579d6868-6mbsl
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://eece8b07f2b66760bdc57e7a3fbc073938d73b37e62401d394d058e4273cdd90
|
||||||
|
Image: nginx
|
||||||
|
Image ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6
|
||||||
|
...
|
||||||
|
Environment Variables from:
|
||||||
|
cm-data3 ConfigMap with prefix 'CM_' Optional: false
|
||||||
|
secret-data3 Secret with prefix 'SEC_' Optional: false
|
||||||
|
Environment:
|
||||||
|
CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data3'> Optional: false
|
||||||
|
SECENV: <set to the key 'password' in secret 'secret-data3'> Optional: false Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
$ kubectl describe pod vdu1-update-5d87858fc6-tfgts
|
||||||
|
Name: vdu1-update-5d87858fc6-tfgts
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://12e4ada36be199c46971f4e41c4afc82d7cedd77c5120a8a0b751a43a884a307
|
||||||
|
Image: cirros
|
||||||
|
Image ID: docker.io/library/cirros@sha256:a40a2b0a21536db691c8e7e055dbb92c81ad15392048abbde32fc5698e07f831
|
||||||
|
...
|
||||||
|
Environment Variables from:
|
||||||
|
cm-data ConfigMap with prefix 'CM_' Optional: false
|
||||||
|
secret-data Secret with prefix 'SEC_' Optional: false
|
||||||
|
Environment:
|
||||||
|
CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false
|
||||||
|
SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
* DaemonSet
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get daemonset -o wide
|
||||||
|
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
|
||||||
|
daemonset-vdu5 1 1 1 1 1 <none> 126m nginx cirros app=nginx
|
||||||
|
|
||||||
|
$ kubectl describe pod daemonset-vdu5-whd4s
|
||||||
|
Name: daemonset-vdu5-whd4s
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://f291342b342ad106410b99212f4e934730dbdf94cc2d2daf767efd7cb7305d68
|
||||||
|
Image: cirros
|
||||||
|
Image ID: docker.io/library/cirros@sha256:a40a2b0a21536db691c8e7e055dbb92c81ad15392048abbde32fc5698e07f831
|
||||||
|
...
|
||||||
|
Environment Variables from:
|
||||||
|
cm-data ConfigMap with prefix 'CM_' Optional: false
|
||||||
|
secret-data Secret with prefix 'SEC_' Optional: false
|
||||||
|
Environment:
|
||||||
|
CMENV: <set to the key 'cmKey1.txt' of config map 'cm-data'> Optional: false
|
||||||
|
SECENV: <set to the key 'password' in secret 'secret-data'> Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
* ReplicaSet
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ kubectl get replicaset.apps -o wide
|
||||||
|
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
|
||||||
|
deployment2-vdu6-86579d6868 1 1 1 131m nginx nginx app=webserver,pod-template-hash=86579d6868
|
||||||
|
vdu1-update-5d87858fc6 1 1 1 37m nginx cirros app=webserver,pod-template-hash=5d87858fc6
|
||||||
|
vdu1-update-6fcf66b5dd 0 0 0 131m nginx nginx app=webserver,pod-template-hash=6fcf66b5dd
|
||||||
|
vdu2-update 1 1 1 131m nginx celebdor/kuryr-demo app=webserver
|
||||||
|
|
||||||
|
$ kubectl describe pod vdu2-update-tk7qp
|
||||||
|
Name: vdu2-update-tk7qp
|
||||||
|
Namespace: default
|
||||||
|
...
|
||||||
|
Containers:
|
||||||
|
nginx:
|
||||||
|
Container ID: cri-o://05f13a7b7d171e2d68bcbceefbce0537b851bd0f0f7de60fba0d9500349d6f4d
|
||||||
|
Image: celebdor/kuryr-demo
|
||||||
|
Image ID: docker.io/celebdor/kuryr-demo@sha256:74102005010b28a4518e08215df992a46b27ffc8b50836f29d8f9c0d7c9d4135
|
||||||
|
...
|
||||||
|
Volumes:
|
||||||
|
cm-volume:
|
||||||
|
Type: ConfigMap (a volume populated by a ConfigMap)
|
||||||
|
Name: cm-data
|
||||||
|
Optional: false
|
||||||
|
sec-volume:
|
||||||
|
Type: Secret (a volume populated by a Secret)
|
||||||
|
SecretName: secret-data
|
||||||
|
Optional: false
|
||||||
|
...
|
||||||
|
|
||||||
|
You can see that only the Pods are restarted whose ConfigMap/Secret or images
|
||||||
|
are updated. When it comes to Deployments, DaemonSets and ReplicaSets whose
|
||||||
|
ConfigMap/Secret or images are updated, their pods will be deleted and
|
||||||
|
recreated.
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using the following VNF Packages.
|
||||||
|
|
||||||
|
* `test_cnf_container_update_before for 2023.2 Bobcat`_
|
||||||
|
* `test_cnf_container_update_after for 2023.2 Bobcat`_
|
||||||
|
|
||||||
|
|
||||||
|
.. _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
|
||||||
|
.. _tacker/sol_refactored/mgmt_drivers/container_update_mgmt_v2.py:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/master/tacker/sol_refactored/mgmt_drivers/container_update_mgmt_v2.py
|
||||||
|
.. _samples/tests/functional/sol_kubernetes_v2/test_cnf_container_update_after:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/master/samples/tests/functional/sol_kubernetes_v2/test_cnf_container_update_after
|
||||||
|
.. _test_cnf_container_update_before for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_kubernetes_v2/samples/test_cnf_container_update_before
|
||||||
|
.. _test_cnf_container_update_after for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_kubernetes_v2/samples/test_cnf_container_update_after
|
@ -413,9 +413,7 @@ Error-handling operations:
|
|||||||
To solve this error, you can get with the following ways.
|
To solve this error, you can get with the following ways.
|
||||||
|
|
||||||
* For the operation state of ``FAILED_TEMP``, please refer to
|
* For the operation state of ``FAILED_TEMP``, please refer to
|
||||||
`VNF LCM error-handling`_.
|
:doc:`/user/v2/error_handling`.
|
||||||
|
|
||||||
* For the operation state of ``FAILED``, please perform other LCM operations
|
* For the operation state of ``FAILED``, please perform other LCM operations
|
||||||
on this vnf instance until the result is ``COMPLETED``.
|
on this vnf instance until the result is ``COMPLETED``.
|
||||||
|
|
||||||
.. _VNF LCM error-handling: https://docs.openstack.org/tacker/latest/user/etsi_vnf_error_handling.html
|
|
582
doc/source/user/v2/error_handling.rst
Normal file
@ -0,0 +1,582 @@
|
|||||||
|
===============================
|
||||||
|
ETSI NFV-SOL VNF error-handling
|
||||||
|
===============================
|
||||||
|
|
||||||
|
This document describes how to error-handling VNF in Tacker v2 API.
|
||||||
|
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following packages should be installed:
|
||||||
|
|
||||||
|
* tacker
|
||||||
|
* python-tackerclient
|
||||||
|
|
||||||
|
Execute up to "Instantiate VNF" in the procedure of
|
||||||
|
:doc:`/user/v2/vnf/deployment_with_tosca/index` or
|
||||||
|
:doc:`/user/v2/vnf/deployment_with_user_data/index`.
|
||||||
|
In other words, the procedure after "Terminate VNF" is not executed.
|
||||||
|
|
||||||
|
|
||||||
|
VNF Error-handling Procedures
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
There are some operations to error-handling VNF.
|
||||||
|
|
||||||
|
* Rollback VNF lifecycle management operation
|
||||||
|
* Fail VNF lifecycle management operation
|
||||||
|
* Retry VNF lifecycle management operation
|
||||||
|
|
||||||
|
In order to execute error-handling, it is necessary to specify
|
||||||
|
VNF_LCM_OP_OCC_ID, which is the ID for the target LCM operation.
|
||||||
|
First, the method of specifying the ID will be described.
|
||||||
|
|
||||||
|
|
||||||
|
Identify VNF_LCM_OP_OCC_ID
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The VNF_LCM_OP_OCC_ID can be obtained via CLI.
|
||||||
|
|
||||||
|
Details of CLI commands are described in
|
||||||
|
:doc:`/cli/cli-etsi-vnflcm`.
|
||||||
|
|
||||||
|
Before checking the "VNF_LCM_OP_OCC_ID", you should get VNF_INSTANCE_ID first.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm op list --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
+--------------------------------------+-----------------+--------------------------------------+-------------+
|
||||||
|
| ID | Operation State | VNF Instance ID | Operation |
|
||||||
|
+--------------------------------------+-----------------+--------------------------------------+-------------+
|
||||||
|
| a7f80542-faeb-4324-ba82-c6214307e864 | FAILED_TEMP | 385fc2ff-1ef5-42f4-8196-3d913160074d | INSTANTIATE |
|
||||||
|
+--------------------------------------+-----------------+--------------------------------------+-------------+
|
||||||
|
|
||||||
|
|
||||||
|
Error-handling can be executed only when **operationState** is **FAILED_TMP**.
|
||||||
|
|
||||||
|
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 v2 API`_ for details on the APIs used here.
|
||||||
|
|
||||||
|
|
||||||
|
Rollback VNF LCM Operation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 10 40 15 15
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - LCM Operation
|
||||||
|
- Description of Rollback
|
||||||
|
- Precondition
|
||||||
|
- Postcondition
|
||||||
|
* - 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
|
||||||
|
* - Scale-out
|
||||||
|
- | VNFM reverts changes of VMs and resources specified in the middle of scale-out operation.
|
||||||
|
| As a result, the newest VNFc(VM) is deleted.
|
||||||
|
| e.g. Tacker reverts desired_capacity and executes Heat stack-update.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- ROLLED_BACK or FAILED_TEMP
|
||||||
|
* - Modify
|
||||||
|
- VNFM reverts the update of the VNF instance information.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- ROLLED_BACK or FAILED_TEMP
|
||||||
|
* - 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
|
||||||
|
* - 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
|
||||||
|
|
||||||
|
|
||||||
|
.. 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.
|
||||||
|
|
||||||
|
* "Instantiate VNF" fails
|
||||||
|
* Rollback VNF lifecycle management operation
|
||||||
|
* Delete VNF
|
||||||
|
|
||||||
|
As shown below, if "Instantiate VNF" fails, "Delete VNF" cannot be executed
|
||||||
|
without executing "Rollback VNF lifecycle management operation".
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm delete VNF_INSTANCE_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Failed to delete vnf instance with ID '385fc2ff-1ef5-42f4-8196-3d913160074d': Other LCM operation of vnfInstance 385fc2ff-1ef5-42f4-8196-3d913160074d is in progress.
|
||||||
|
Failed to delete 1 of 1 vnf instances.
|
||||||
|
|
||||||
|
Therefore, "Rollback VNF lifecycle management operation" with
|
||||||
|
the following CLI command.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm op rollback VNF_LCM_OP_OCC_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Rollback request for LCM operation a7f80542-faeb-4324-ba82-c6214307e864 has been accepted
|
||||||
|
|
||||||
|
|
||||||
|
If "Rollback VNF lifecycle management operation" is successful,
|
||||||
|
then "Delete VNF" is also successful.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm delete VNF_INSTANCE_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Vnf instance '385fc2ff-1ef5-42f4-8196-3d913160074d' is deleted successfully
|
||||||
|
|
||||||
|
|
||||||
|
Fail VNF LCM Operation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 10 40 15 15
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - LCM Operation
|
||||||
|
- Description of Fail
|
||||||
|
- Precondition
|
||||||
|
- Postcondition
|
||||||
|
* - Instantiate
|
||||||
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- FAILED
|
||||||
|
* - Terminate
|
||||||
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- FAILED
|
||||||
|
* - Heal
|
||||||
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- FAILED
|
||||||
|
* - Scale
|
||||||
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- FAILED
|
||||||
|
* - Modify
|
||||||
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- FAILED
|
||||||
|
* - Change external connectivity
|
||||||
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- FAILED
|
||||||
|
* - Change Current VNF Package
|
||||||
|
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- FAILED
|
||||||
|
|
||||||
|
|
||||||
|
This manual describes the following operations as use cases for
|
||||||
|
fail operations.
|
||||||
|
|
||||||
|
* "Instantiate VNF" fails
|
||||||
|
* Fail VNF lifecycle management operation
|
||||||
|
* Delete VNF
|
||||||
|
|
||||||
|
As shown below, if "Instantiate VNF" fails, "Delete VNF" cannot be executed
|
||||||
|
after executing "Fail VNF lifecycle management operation".
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm delete VNF_INSTANCE_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Failed to delete vnf instance with ID '385fc2ff-1ef5-42f4-8196-3d913160074d': Other LCM operation of vnfInstance 385fc2ff-1ef5-42f4-8196-3d913160074d is in progress.
|
||||||
|
Failed to delete 1 of 1 vnf instances.
|
||||||
|
|
||||||
|
|
||||||
|
Therefore, "Fail VNF lifecycle management operation" with
|
||||||
|
the following CLI command.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm op fail VNF_LCM_OP_OCC_ID \
|
||||||
|
--fit-width --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| Error | { |
|
||||||
|
| | "title": "Stack create failed", |
|
||||||
|
| | "status": 422, |
|
||||||
|
| | "detail": "Resource CREATE failed: resources.wifiut5qtngn: resources.VDU1_scale_group.Property error: resources.VDU1_CP1.properties.network: Error validating value 'errornetwork': Unable to find network with name or id |
|
||||||
|
| | 'errornetwork'" |
|
||||||
|
| | } |
|
||||||
|
| ID | a7f80542-faeb-4324-ba82-c6214307e864 |
|
||||||
|
| Is Automatic Invocation | False |
|
||||||
|
| Is Cancel Pending | False |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_lcm_op_occs/a7f80542-faeb-4324-ba82-c6214307e864" |
|
||||||
|
| | }, |
|
||||||
|
| | "vnfInstance": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/385fc2ff-1ef5-42f4-8196-3d913160074d" |
|
||||||
|
| | }, |
|
||||||
|
| | "retry": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_lcm_op_occs/a7f80542-faeb-4324-ba82-c6214307e864/retry" |
|
||||||
|
| | }, |
|
||||||
|
| | "rollback": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_lcm_op_occs/a7f80542-faeb-4324-ba82-c6214307e864/rollback" |
|
||||||
|
| | }, |
|
||||||
|
| | "fail": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_lcm_op_occs/a7f80542-faeb-4324-ba82-c6214307e864/fail" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| Operation | INSTANTIATE |
|
||||||
|
| Operation State | FAILED |
|
||||||
|
| Start Time | 2023-11-14T04:32:57Z |
|
||||||
|
| State Entered Time | 2023-11-14T04:32:57Z |
|
||||||
|
| VNF Instance ID | 385fc2ff-1ef5-42f4-8196-3d913160074d |
|
||||||
|
| grantId | 008eccda-5466-4820-ae76-bdce6e128d8c |
|
||||||
|
| operationParams | { |
|
||||||
|
| | "flavourId": "simple" |
|
||||||
|
| | } |
|
||||||
|
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
If "Fail VNF lifecycle management operation" is successful,
|
||||||
|
then "Delete VNF" is also successful.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm delete VNF_INSTANCE_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Vnf instance '385fc2ff-1ef5-42f4-8196-3d913160074d' is deleted successfully
|
||||||
|
|
||||||
|
|
||||||
|
Retry VNF LCM Operation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 10 40 15 15
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - LCM Operation
|
||||||
|
- Description of Fail
|
||||||
|
- Precondition
|
||||||
|
- Postcondition
|
||||||
|
* - Instantiate
|
||||||
|
- VNFM retries a Instantiate operation.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- COMPLETED or FAILED_TEMP
|
||||||
|
* - Terminate
|
||||||
|
- VNFM retries a Terminate operation.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- COMPLETED or FAILED_TEMP
|
||||||
|
* - Heal
|
||||||
|
- VNFM retries a Heal operation.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- COMPLETED or FAILED_TEMP
|
||||||
|
* - Scale
|
||||||
|
- VNFM retries a Scale operation.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- COMPLETED or FAILED_TEMP
|
||||||
|
* - Modify
|
||||||
|
- VNFM retries a Modify operation.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- COMPLETED or FAILED_TEMP
|
||||||
|
* - Change external connectivity
|
||||||
|
- VNFM retries a Change external connectivity operation.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- COMPLETED or FAILED_TEMP
|
||||||
|
* - Change Current VNF Package
|
||||||
|
- VNFM retries a Change Current VNF Package operation.
|
||||||
|
- FAILED_TEMP
|
||||||
|
- COMPLETED or FAILED_TEMP
|
||||||
|
|
||||||
|
This manual describes the following operations as use cases for
|
||||||
|
retry operations.
|
||||||
|
|
||||||
|
* "Instantiate VNF" fails
|
||||||
|
* Retry VNF lifecycle management operation
|
||||||
|
|
||||||
|
As shown below, if "Instantiate VNF" fails, If you want re-execute
|
||||||
|
previous(failed) operation , you execute "Retry" operation.
|
||||||
|
|
||||||
|
Therefore, "Retry VNF lifecycle management operation" with
|
||||||
|
the following CLI command.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm op retry VNF_LCM_OP_OCC_ID --os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Retry request for LCM operation a7f80542-faeb-4324-ba82-c6214307e864 has been accepted
|
||||||
|
|
||||||
|
|
||||||
|
If "Retry VNF lifecycle management operation" is successful,
|
||||||
|
then another LCM can be operational.
|
||||||
|
|
||||||
|
|
||||||
|
Error-handling of MgmtDriver
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
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 v2.6.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 :doc:`/user/vnf-package`.
|
||||||
|
|
||||||
|
The rollback operation currently supports multiple
|
||||||
|
`Rollback VNF LCM Operation`_.
|
||||||
|
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
|
||||||
|
``4. Topology Template File with Deployment Flavour``
|
||||||
|
in :doc:`/user/vnfd-sol001`.
|
||||||
|
|
||||||
|
* ``v2_sample2_types.yaml`` corresponds to
|
||||||
|
``2. User Defined Types Definition File``
|
||||||
|
in :doc:`/user/vnfd-sol001`.
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using the following VNF Package.
|
||||||
|
|
||||||
|
* `error_network for 2023.2 Bobcat`_
|
||||||
|
* `server_notification for 2023.2 Bobcat`_
|
||||||
|
|
||||||
|
|
||||||
|
.. _VNF LCM v2 API:
|
||||||
|
https://docs.openstack.org/api-ref/nfv-orchestration/v2/vnflcm.html
|
||||||
|
.. _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
|
||||||
|
.. _Show VNF LCM OP OCC:
|
||||||
|
https://docs.openstack.org/api-ref/nfv-orchestration/v2/vnflcm.html#show-vnf-lcm-operation-occurrence-v2
|
||||||
|
.. _error_network for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_v2_common/samples/error_network
|
||||||
|
.. _server_notification for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_v2_common/samples/server_notification
|
@ -12,6 +12,7 @@ faultID attribute in the fault event and determines whether
|
|||||||
AutoHealing should be performed. In case of performing AutoHealing,
|
AutoHealing should be performed. In case of performing AutoHealing,
|
||||||
VMs are deleted or created.
|
VMs are deleted or created.
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
@ -23,25 +24,26 @@ To enable FaultNotification, be sure to set true for
|
|||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
:widths: 20 10 40
|
:widths: 20 10 40
|
||||||
|
|
||||||
* - Configuration
|
* - Configuration (CONF.server_notification)
|
||||||
- Default
|
- Default
|
||||||
- Description
|
- Description
|
||||||
* - ``CONF.server_notification.server_notification``
|
* - ``server_notification``
|
||||||
- false
|
- false
|
||||||
- Enable FaultNotification interface.
|
- Enable FaultNotification interface.
|
||||||
* - ``CONF.server_notification.uri_path_prefix``
|
* - ``uri_path_prefix``
|
||||||
- /server_notification
|
- /server_notification
|
||||||
- Uri path prefix string for FaultNotification interface.
|
- Uri path prefix string for FaultNotification interface.
|
||||||
When changing this configuration,
|
When changing this configuration,
|
||||||
server_notification description in api-paste.ini
|
server_notification description in api-paste.ini
|
||||||
must be changed to the same value.
|
must be changed to the same value.
|
||||||
* - ``CONF.server_notification.timer_interval``
|
* - ``timer_interval``
|
||||||
- 20
|
- 20
|
||||||
- When multiple fault events for a vnf instance are
|
- When multiple fault events for a vnf instance are
|
||||||
notified in the ``timer_interval`` seconds,
|
notified in the ``timer_interval`` seconds,
|
||||||
Tacker packs these notifications into single event.
|
Tacker packs these notifications into single event.
|
||||||
By doing this, Tacker can avoid making too many healing request.
|
By doing this, Tacker can avoid making too many healing request.
|
||||||
|
|
||||||
|
|
||||||
System
|
System
|
||||||
------
|
------
|
||||||
|
|
||||||
@ -81,8 +83,10 @@ to achieve interface registration and enabling monitoring.
|
|||||||
| +-------------+ +-------------+ +-------------+ |
|
| +-------------+ +-------------+ +-------------+ |
|
||||||
+------------------------------------------------------------------------------------------+
|
+------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
For details about the interface,
|
For details about the interface,
|
||||||
please refer to [#fault_notification_apiref]_.
|
please refer to `Fault Notification Interface`_.
|
||||||
|
|
||||||
|
|
||||||
Mgmt driver script
|
Mgmt driver script
|
||||||
------------------
|
------------------
|
||||||
@ -94,6 +98,7 @@ interface registration and enabling monitoring is
|
|||||||
Put this script into target VNF package and Server Notifier
|
Put this script into target VNF package and Server Notifier
|
||||||
can detect fault event on the VNF.
|
can detect fault event on the VNF.
|
||||||
|
|
||||||
|
|
||||||
LCM interface
|
LCM interface
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
@ -106,8 +111,8 @@ The ``additionalParams`` must be set when using FaultNotification.
|
|||||||
``Only the additionalParams and the vnfConfigurableProperties for
|
``Only the additionalParams and the vnfConfigurableProperties for
|
||||||
FaultNotification are described here``.
|
FaultNotification are described here``.
|
||||||
| **Method type**: POST
|
| **Method type**: POST
|
||||||
| **URL for the resource**: /vnflcm/v2/vnf_instances/
|
| **URL for the resource**:
|
||||||
{vnfInstanceId}/instantiate
|
/vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate
|
||||||
| **Request**:
|
| **Request**:
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
@ -130,6 +135,7 @@ The ``additionalParams`` must be set when using FaultNotification.
|
|||||||
- Additional input parameters for the instantiation process,
|
- Additional input parameters for the instantiation process,
|
||||||
specific to the VNF being instantiated.
|
specific to the VNF being instantiated.
|
||||||
|
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
:widths: 18 18 10 50
|
:widths: 18 18 10 50
|
||||||
@ -138,13 +144,14 @@ The ``additionalParams`` must be set when using FaultNotification.
|
|||||||
- Data type
|
- Data type
|
||||||
- Cardinality
|
- Cardinality
|
||||||
- Description
|
- Description
|
||||||
* - isAutohealEnabled:
|
* - isAutohealEnabled
|
||||||
- boolean
|
- boolean
|
||||||
- 0..1
|
- 0..1
|
||||||
- If present, the VNF supports auto-healing. If set to
|
- If present, the VNF supports auto-healing. If set to
|
||||||
true, auto-healing is currently enabled.
|
true, auto-healing is currently enabled.
|
||||||
If set to false, autohealing is currently disabled.
|
If set to false, autohealing is currently disabled.
|
||||||
|
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
:widths: 18 18 10 50
|
:widths: 18 18 10 50
|
||||||
@ -162,6 +169,7 @@ The ``additionalParams`` must be set when using FaultNotification.
|
|||||||
- 1..N
|
- 1..N
|
||||||
- List of string that indicates which type of alarms to detect.
|
- List of string that indicates which type of alarms to detect.
|
||||||
|
|
||||||
|
|
||||||
The value of ``ServerNotifierUri`` and ``ServerNotifierFaultID`` are stored
|
The value of ``ServerNotifierUri`` and ``ServerNotifierFaultID`` are stored
|
||||||
in ``instantiatedVnfInfo`` of vnfInstance. The values can be shown
|
in ``instantiatedVnfInfo`` of vnfInstance. The values can be shown
|
||||||
with vnflcm show command. For example:
|
with vnflcm show command. For example:
|
||||||
@ -184,6 +192,7 @@ with vnflcm show command. For example:
|
|||||||
| | .... |
|
| | .... |
|
||||||
+-----------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+-----------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
Auto Healing
|
Auto Healing
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@ -195,6 +204,7 @@ whether AutoHealing should be performed. In case of performing
|
|||||||
AutoHealing, VMs are deleted and created via Heat. The client is
|
AutoHealing, VMs are deleted and created via Heat. The client is
|
||||||
no need to handle healing.
|
no need to handle healing.
|
||||||
|
|
||||||
|
|
||||||
Using Vendor Specific Plugin
|
Using Vendor Specific Plugin
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
@ -207,16 +217,17 @@ tacker.sol_refactored.common.monitoring_plugin_base.MonitoringPlugin.
|
|||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
:widths: 40 40 40
|
:widths: 40 40 40
|
||||||
|
|
||||||
* - Configuration
|
* - Configuration (CONF.server_notification)
|
||||||
- Default
|
- Default
|
||||||
- Description
|
- Description
|
||||||
* - ``CONF.server_notification.server_notification_package``
|
* - ``server_notification_package``
|
||||||
- tacker.sol_refactored.common.server_notification
|
- tacker.sol_refactored.common.server_notification
|
||||||
- Package name for server notification.
|
- Package name for server notification.
|
||||||
* - ``CONF.server_notification.server_notification_class``
|
* - ``server_notification_class``
|
||||||
- ServerNotification
|
- ServerNotification
|
||||||
- Class name for server notification.
|
- Class name for server notification.
|
||||||
|
|
||||||
|
|
||||||
Error-handling
|
Error-handling
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
@ -228,7 +239,7 @@ user wants to call MgmtDriver in the rollback operation of error-handling,
|
|||||||
the VNF Package needs to be modified in advance.
|
the VNF Package needs to be modified in advance.
|
||||||
|
|
||||||
For the specific modification method, please refer to
|
For the specific modification method, please refer to
|
||||||
`how to error-handling when using MgmtDriver`_.
|
``Error-handling of MgmtDriver`` in :doc:`/user/v2/error_handling`.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
@ -236,13 +247,9 @@ For the specific modification method, please refer to
|
|||||||
LCM fails, the user can perform error-handling operations.
|
LCM fails, the user can perform error-handling operations.
|
||||||
|
|
||||||
For details, please refer to the content of
|
For details, please refer to the content of
|
||||||
`Retry VNF LCM Operation`_ and `Rollback VNF LCM Operation`_.
|
``Retry VNF LCM Operation`` and ``Rollback VNF LCM Operation`` in
|
||||||
|
:doc:`/user/v2/error_handling`.
|
||||||
|
|
||||||
References
|
|
||||||
==========
|
|
||||||
|
|
||||||
.. [#fault_notification_apiref] https://docs.openstack.org/api-ref/nfv-orchestration/v2/fault_notification.html
|
.. _Fault Notification Interface:
|
||||||
|
https://docs.openstack.org/api-ref/nfv-orchestration/v2/fault_notification.html
|
||||||
.. _how to error-handling when using MgmtDriver : https://docs.openstack.org/tacker/latest/user/etsi_vnf_error_handling.html#error-handling-of-mgmtdriver
|
|
||||||
.. _Retry VNF LCM Operation : https://docs.openstack.org/tacker/latest/user/etsi_vnf_error_handling.html#retry-vnf-lcm-operation
|
|
||||||
.. _Rollback VNF LCM Operation : https://docs.openstack.org/tacker/latest/user/etsi_vnf_error_handling.html#rollback-vnf-lcm-operation
|
|
@ -0,0 +1,26 @@
|
|||||||
|
heat_template_version: 2013-05-23
|
||||||
|
description: 'VDU1 HOT for Sample VNF'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
flavor:
|
||||||
|
type: string
|
||||||
|
image:
|
||||||
|
type: string
|
||||||
|
net:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
resources:
|
||||||
|
VDU1:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: flavor }
|
||||||
|
image: { get_param: image }
|
||||||
|
name: VDU1
|
||||||
|
networks:
|
||||||
|
- port:
|
||||||
|
get_resource: VDU1_CP1
|
||||||
|
|
||||||
|
VDU1_CP1:
|
||||||
|
type: OS::Neutron::Port
|
||||||
|
properties:
|
||||||
|
network: { get_param: net }
|
@ -0,0 +1,27 @@
|
|||||||
|
heat_template_version: 2013-05-23
|
||||||
|
description: 'imple Base HOT for Sample VNF'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
nfv:
|
||||||
|
type: json
|
||||||
|
|
||||||
|
resources:
|
||||||
|
VDU1:
|
||||||
|
type: VDU1.yaml
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: [ nfv, VDU, VDU1, computeFlavourId ] }
|
||||||
|
image: { get_param: [ nfv, VDU, VDU1, vcImageId ] }
|
||||||
|
net: { get_resource: internalVL1 }
|
||||||
|
|
||||||
|
internalVL1:
|
||||||
|
type: OS::Neutron::Net
|
||||||
|
|
||||||
|
internalVL1_subnet:
|
||||||
|
type: OS::Neutron::Subnet
|
||||||
|
properties:
|
||||||
|
ip_version: 4
|
||||||
|
network:
|
||||||
|
get_resource: internalVL1
|
||||||
|
cidr: 10.0.0.0/24
|
||||||
|
|
||||||
|
outputs: {}
|
@ -0,0 +1,182 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: Simple deployment flavour for Sample VNF
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
- sample_vnfd_types.yaml
|
||||||
|
|
||||||
|
topology_template:
|
||||||
|
inputs:
|
||||||
|
descriptor_id:
|
||||||
|
type: string
|
||||||
|
descriptor_version:
|
||||||
|
type: string
|
||||||
|
provider:
|
||||||
|
type: string
|
||||||
|
product_name:
|
||||||
|
type: string
|
||||||
|
software_version:
|
||||||
|
type: string
|
||||||
|
vnfm_info:
|
||||||
|
type: list
|
||||||
|
entry_schema:
|
||||||
|
type: string
|
||||||
|
flavour_id:
|
||||||
|
type: string
|
||||||
|
flavour_description:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
substitution_mappings:
|
||||||
|
node_type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_id: simple
|
||||||
|
|
||||||
|
node_templates:
|
||||||
|
VNF:
|
||||||
|
type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_description: A simple flavour
|
||||||
|
interfaces:
|
||||||
|
Vnflcm:
|
||||||
|
instantiate_start: []
|
||||||
|
instantiate_end: []
|
||||||
|
terminate_start: []
|
||||||
|
terminate_end: []
|
||||||
|
modify_information_start: []
|
||||||
|
modify_information_end: []
|
||||||
|
heal_start: []
|
||||||
|
heal_end: []
|
||||||
|
scale_start: []
|
||||||
|
scale_end: []
|
||||||
|
|
||||||
|
VDU1:
|
||||||
|
type: tosca.nodes.nfv.Vdu.Compute
|
||||||
|
properties:
|
||||||
|
name: VDU1
|
||||||
|
description: VDU1 compute node
|
||||||
|
vdu_profile:
|
||||||
|
min_number_of_instances: 1
|
||||||
|
max_number_of_instances: 3
|
||||||
|
sw_image_data:
|
||||||
|
name: cirros-0.5.2-x86_64-disk
|
||||||
|
version: '0.5.2'
|
||||||
|
checksum:
|
||||||
|
algorithm: sha-256
|
||||||
|
hash: 932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464
|
||||||
|
container_format: bare
|
||||||
|
disk_format: qcow2
|
||||||
|
min_disk: 1 GB
|
||||||
|
size: 1 GB
|
||||||
|
capabilities:
|
||||||
|
virtual_compute:
|
||||||
|
properties:
|
||||||
|
requested_additional_capabilities:
|
||||||
|
properties:
|
||||||
|
requested_additional_capability_name: m1.tiny
|
||||||
|
support_mandatory: true
|
||||||
|
target_performance_parameters:
|
||||||
|
entry_schema: test
|
||||||
|
virtual_memory:
|
||||||
|
virtual_mem_size: 512 MB
|
||||||
|
virtual_cpu:
|
||||||
|
num_virtual_cpu: 1
|
||||||
|
virtual_local_storage:
|
||||||
|
- size_of_storage: 1 GB
|
||||||
|
|
||||||
|
CP1:
|
||||||
|
type: tosca.nodes.nfv.VduCp
|
||||||
|
properties:
|
||||||
|
layer_protocols: [ ipv4 ]
|
||||||
|
order: 4
|
||||||
|
requirements:
|
||||||
|
- virtual_binding: VDU1
|
||||||
|
- virtual_link: internalVL1
|
||||||
|
|
||||||
|
internalVL1:
|
||||||
|
type: tosca.nodes.nfv.VnfVirtualLink
|
||||||
|
properties:
|
||||||
|
connectivity_type:
|
||||||
|
layer_protocols: [ ipv4 ]
|
||||||
|
description: Internal Virtual link in the VNF
|
||||||
|
vl_profile:
|
||||||
|
max_bitrate_requirements:
|
||||||
|
root: 1048576
|
||||||
|
leaf: 1048576
|
||||||
|
min_bitrate_requirements:
|
||||||
|
root: 1048576
|
||||||
|
leaf: 1048576
|
||||||
|
virtual_link_protocol_data:
|
||||||
|
- associated_layer_protocol: ipv4
|
||||||
|
l3_protocol_data:
|
||||||
|
ip_version: ipv4
|
||||||
|
cidr: 10.0.0.0/24
|
||||||
|
|
||||||
|
policies:
|
||||||
|
- scaling_aspects:
|
||||||
|
type: tosca.policies.nfv.ScalingAspects
|
||||||
|
properties:
|
||||||
|
aspects:
|
||||||
|
VDU1_scale:
|
||||||
|
name: VDU1_scale
|
||||||
|
description: VDU1 scaling aspect
|
||||||
|
max_scale_level: 2
|
||||||
|
step_deltas:
|
||||||
|
- delta_1
|
||||||
|
|
||||||
|
- VDU1_initial_delta:
|
||||||
|
type: tosca.policies.nfv.VduInitialDelta
|
||||||
|
properties:
|
||||||
|
initial_delta:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- VDU1_scaling_aspect_deltas:
|
||||||
|
type: tosca.policies.nfv.VduScalingAspectDeltas
|
||||||
|
properties:
|
||||||
|
aspect: VDU1_scale
|
||||||
|
deltas:
|
||||||
|
delta_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.InstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
description: Smallest size
|
||||||
|
scale_info:
|
||||||
|
VDU1_scale:
|
||||||
|
scale_level: 0
|
||||||
|
instantiation_level_2:
|
||||||
|
description: Largest size
|
||||||
|
scale_info:
|
||||||
|
VDU1_scale:
|
||||||
|
scale_level: 2
|
||||||
|
default_level: instantiation_level_1
|
||||||
|
|
||||||
|
- VDU1_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VduInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
instantiation_level_2:
|
||||||
|
number_of_instances: 3
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- internalVL1_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VirtualLinkInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
bitrate_requirements:
|
||||||
|
root: 1048576
|
||||||
|
leaf: 1048576
|
||||||
|
instantiation_level_2:
|
||||||
|
bitrate_requirements:
|
||||||
|
root: 1048576
|
||||||
|
leaf: 1048576
|
||||||
|
targets: [ internalVL1 ]
|
@ -0,0 +1,28 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: Sample VNF
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
- sample_vnfd_types.yaml
|
||||||
|
- sample_vnfd_df_simple.yaml
|
||||||
|
|
||||||
|
topology_template:
|
||||||
|
inputs:
|
||||||
|
selected_flavour:
|
||||||
|
type: string
|
||||||
|
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||||
|
|
||||||
|
node_templates:
|
||||||
|
VNF:
|
||||||
|
type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_id: { get_input: selected_flavour }
|
||||||
|
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||||
|
provider: Company
|
||||||
|
product_name: Sample VNF
|
||||||
|
software_version: '1.0'
|
||||||
|
descriptor_version: '1.0'
|
||||||
|
vnfm_info:
|
||||||
|
- Tacker
|
@ -0,0 +1,51 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: VNF type definition
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
|
||||||
|
node_types:
|
||||||
|
company.provider.VNF:
|
||||||
|
derived_from: tosca.nodes.nfv.VNF
|
||||||
|
properties:
|
||||||
|
descriptor_id:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 ] ]
|
||||||
|
default: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
|
||||||
|
descriptor_version:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ '1.0' ] ]
|
||||||
|
default: '1.0'
|
||||||
|
provider:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ 'Company' ] ]
|
||||||
|
default: 'Company'
|
||||||
|
product_name:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ 'Sample VNF' ] ]
|
||||||
|
default: 'Sample VNF'
|
||||||
|
software_version:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ '1.0' ] ]
|
||||||
|
default: '1.0'
|
||||||
|
vnfm_info:
|
||||||
|
type: list
|
||||||
|
entry_schema:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ Tacker ] ]
|
||||||
|
default: [ Tacker ]
|
||||||
|
flavour_id:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ simple ] ]
|
||||||
|
default: simple
|
||||||
|
flavour_description:
|
||||||
|
type: string
|
||||||
|
default: This is the default flavour description
|
||||||
|
requirements:
|
||||||
|
- virtual_link_internal:
|
||||||
|
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||||
|
interfaces:
|
||||||
|
Vnflcm:
|
||||||
|
type: tosca.interfaces.nfv.Vnflcm
|
@ -0,0 +1,4 @@
|
|||||||
|
TOSCA-Meta-File-Version: 1.0
|
||||||
|
Created-by: Dummy User
|
||||||
|
CSAR-Version: 1.1
|
||||||
|
Entry-Definitions: Definitions/sample_vnfd_top.yaml
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"flavourId": "simple"
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"flavourId":"simple",
|
||||||
|
"additionalParams": {
|
||||||
|
"lcm-operation-user-data": "./UserData/userdata_standard.py",
|
||||||
|
"lcm-operation-user-data-class": "StandardUserData"
|
||||||
|
}
|
||||||
|
}
|
8
doc/source/user/v2/getting_started/conf/vim_config.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
auth_url: 'http://192.168.56.10/identity'
|
||||||
|
username: "nfv_user"
|
||||||
|
password: "devstack"
|
||||||
|
project_name: "nfv"
|
||||||
|
domain_name: "default"
|
||||||
|
project_domain_name: "default"
|
||||||
|
user_domain_name: "default"
|
||||||
|
cert_verify: "False"
|
12
doc/source/user/v2/getting_started/img/sample-vnf.pu
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
scale 300 width
|
||||||
|
|
||||||
|
nwdiag {
|
||||||
|
network internalVL1 {
|
||||||
|
address = "10.0.0.0/24"
|
||||||
|
vdu [description="VDU1\n(cirros)" address=CP1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@enduml
|
1
doc/source/user/v2/getting_started/img/sample-vnf.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="us-ascii" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="256.9061px" preserveAspectRatio="none" style="width:301px;height:256px;background:#FFFFFF;" version="1.1" viewBox="0 0 301 256" width="301.6575px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="sans-serif" font-size="19.8895" lengthAdjust="spacing" textLength="107.7348" x="23.2044" y="27.5164">internalVL1</text><text fill="#000000" font-family="sans-serif" font-size="19.8895" lengthAdjust="spacing" textLength="122.6519" x="8.2873" y="50.941">10.0.0.0/24</text><rect fill="#E2E2F0" height="8.2873" style="stroke:#181818;stroke-width:1.6574585635359116;" width="149.1713" x="139.2265" y="27.5682"/><path d="M217.1271,35.8555 L217.1271,96.3155 " fill="none" style="stroke:#181818;stroke-width:1.6574585635359116;"/><text fill="#000000" font-family="sans-serif" font-size="18.232" lengthAdjust="spacing" textLength="34.8066" x="199.7238" y="68.8323">CP1</text><rect fill="#F1F1F1" height="79.9983" style="stroke:#181818;stroke-width:0.8287292817679558;" width="99.4475" x="164.0884" y="96.3155"/><text fill="#000000" font-family="sans-serif" font-size="19.8895" lengthAdjust="spacing" textLength="54.6961" x="180.663" y="132.1192">VDU1</text><text fill="#000000" font-family="sans-serif" font-size="19.8895" lengthAdjust="spacing" textLength="66.2983" x="180.663" y="155.5437">(cirros)</text><!--SRC=[AqvEp4bLC3OmK2ZFJ2d9uEBAAq_9J4nNgEPI08Ayr9Bo_A9iXSoyajIYlCISC1z3g0m89AQa5AKM5olOAYWP6kY1eRwHYH9SlYobL24w9RKukIYpe2GpFyzMASmbr30cJoCviwWelrXJ2MQ2hNE0OQmrM5yjLoqN0000]--></g></svg>
|
After Width: | Height: | Size: 1.6 KiB |
840
doc/source/user/v2/getting_started/index.rst
Normal file
@ -0,0 +1,840 @@
|
|||||||
|
..
|
||||||
|
Copyright 2014-2015 OpenStack Foundation
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
not use this file except in compliance with the License. You may obtain
|
||||||
|
a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
==============================
|
||||||
|
Getting Started with v2 Tacker
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Summary
|
||||||
|
-------
|
||||||
|
|
||||||
|
This lecture enables you to:
|
||||||
|
|
||||||
|
- create & delete a sample VNF on the OpenStack with Tacker v2 API
|
||||||
|
|
||||||
|
Following two types of VNF deployment supported by Tacker are introduced in
|
||||||
|
this lecture.
|
||||||
|
|
||||||
|
- :doc:`/user/v2/vnf/deployment_with_tosca/index`
|
||||||
|
- :doc:`/user/v2/vnf/deployment_with_user_data/index`
|
||||||
|
|
||||||
|
"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:: img/sample-vnf.svg
|
||||||
|
:align: left
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
VIM config, a VNF package, and instantiation parameters files
|
||||||
|
used in this tutorial are placed at the repository.
|
||||||
|
|
||||||
|
- `tacker/doc/user/v2/getting_started/conf`_
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
You can see logs of Tacker with this command:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ sudo journalctl -u devstack@tacker.service
|
||||||
|
$ sudo journalctl -u devstack@tacker-conductor.service
|
||||||
|
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following packages should be installed:
|
||||||
|
|
||||||
|
* tacker
|
||||||
|
* python-tackerclient
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Load credentials for client operations
|
||||||
|
""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
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=nfv
|
||||||
|
OS_USER_DOMAIN_ID=default
|
||||||
|
OS_USERNAME=nfv_user
|
||||||
|
OS_VOLUME_API_VERSION=3
|
||||||
|
OS_AUTH_TYPE=password
|
||||||
|
OS_PROJECT_NAME=nfv
|
||||||
|
OS_PASSWORD=devstack
|
||||||
|
OS_IDENTITY_API_VERSION=3
|
||||||
|
|
||||||
|
|
||||||
|
You can confirm that Tacker is available by checking this command works without
|
||||||
|
error:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vim list
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
See :doc:`/cli/index` to find all the available commands.
|
||||||
|
|
||||||
|
|
||||||
|
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:`/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
|
||||||
|
``vim_config.yaml``. In this document, ``TACKER_ROOT`` is the root of
|
||||||
|
tacker's repository on your server.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ bash TACKER_ROOT/tools/gen_vim_config.sh -p nfv --os-user nfv_user \
|
||||||
|
--os-disable-cert-verify
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
See :doc:`/reference/vim_config` for tool details.
|
||||||
|
|
||||||
|
|
||||||
|
You can also use a sample configuration file (vim_config.yaml) instead of
|
||||||
|
using the script.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cp TACKER_ROOT/doc/source/user/v2/getting_started/conf/vim_config.yaml ./
|
||||||
|
$ vi vim_config.yaml
|
||||||
|
|
||||||
|
|
||||||
|
.. literalinclude:: conf/vim_config.yaml
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
|
||||||
|
#. Register Default VIM:
|
||||||
|
|
||||||
|
Once you setup VIM configuration file, you register default VIM via
|
||||||
|
``openstack`` command with ``--is-default`` option.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vim register --config-file ./vim_config.yaml \
|
||||||
|
--is-default --fit-width openstack-admin-vim
|
||||||
|
+----------------+-----------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+----------------+-----------------------------------------------------+
|
||||||
|
| auth_cred | { |
|
||||||
|
| | "username": "nfv_user", |
|
||||||
|
| | "user_domain_name": "default", |
|
||||||
|
| | "cert_verify": "False", |
|
||||||
|
| | "project_id": null, |
|
||||||
|
| | "project_name": "nfv", |
|
||||||
|
| | "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-11-30 08:32:48.869451 |
|
||||||
|
| description | |
|
||||||
|
| extra | |
|
||||||
|
| id | bff267c4-6fc9-46b5-be53-15a6a3680033 |
|
||||||
|
| is_default | True |
|
||||||
|
| name | openstack-admin-vim |
|
||||||
|
| placement_attr | { |
|
||||||
|
| | "regions": [ |
|
||||||
|
| | "RegionOne" |
|
||||||
|
| | ] |
|
||||||
|
| | } |
|
||||||
|
| project_id | ebbc6cf1a03d49918c8e408535d87268 |
|
||||||
|
| status | ACTIVE |
|
||||||
|
| type | openstack |
|
||||||
|
| updated_at | None |
|
||||||
|
| vim_project | { |
|
||||||
|
| | "name": "nfv", |
|
||||||
|
| | "project_domain_name": "default" |
|
||||||
|
| | } |
|
||||||
|
+----------------+-----------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Create and Upload VNF Package
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Prepare VNF Package
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
#. Create VNF Package CSAR directories:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ mkdir -p ./sample_vnf_package_csar/TOSCA-Metadata \
|
||||||
|
./sample_vnf_package_csar/Definitions \
|
||||||
|
./sample_vnf_package_csar/BaseHOT/simple/nested \
|
||||||
|
./sample_vnf_package_csar/Files
|
||||||
|
|
||||||
|
|
||||||
|
[This is UserData specific part] When using UserData, create the following directories in addition.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ mkdir -p ./sample_vnf_package_csar/UserData
|
||||||
|
|
||||||
|
|
||||||
|
#. Create a ``TOSCA.meta`` file:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ vi ./sample_vnf_package_csar/TOSCA-Metadata/TOSCA.meta
|
||||||
|
|
||||||
|
|
||||||
|
.. literalinclude:: conf/TOSCA-Metadata/TOSCA.meta
|
||||||
|
:language: text
|
||||||
|
|
||||||
|
|
||||||
|
#. Download ETSI definition files:
|
||||||
|
|
||||||
|
You should set ``${TOSCA_VERSION}`` to one of the appropriate TOSCA service
|
||||||
|
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.
|
||||||
|
See :doc:`/user/vnfd-sol001` for supported version.
|
||||||
|
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ 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``
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ vi ./sample_vnfd_top.yaml
|
||||||
|
|
||||||
|
|
||||||
|
.. literalinclude:: conf/Definitions/sample_vnfd_top.yaml
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
|
||||||
|
- Create ``sample_vnfd_types.yaml``
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ vi ./sample_vnfd_types.yaml
|
||||||
|
|
||||||
|
|
||||||
|
.. literalinclude:: conf/Definitions/sample_vnfd_types.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:: conf/Definitions/sample_vnfd_df_simple.yaml
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
The ``flavour_description`` should be updated by the property in "VNF" but
|
||||||
|
Tacker cannot handle it. After the instantiation, the default value in
|
||||||
|
``sample_vnfd_types.yaml`` is always used.
|
||||||
|
|
||||||
|
|
||||||
|
#. Create BaseHOT files:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd -
|
||||||
|
$ vi ./sample_vnf_package_csar/BaseHOT/simple/sample_lcm_hot.yaml
|
||||||
|
$ vi ./sample_vnf_package_csar/BaseHOT/simple/nested/VDU1.yaml
|
||||||
|
|
||||||
|
- sample_lcm_hot.yaml
|
||||||
|
|
||||||
|
.. literalinclude:: conf/BaseHOT/simple/sample_lcm_hot.yaml
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
- VDU1.yaml
|
||||||
|
|
||||||
|
.. literalinclude:: conf/BaseHOT/simple/nested/VDU1.yaml
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
|
||||||
|
#. [This is UserData specific part] Create UserData files:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd ./sample_vnf_package_csar/UserData/
|
||||||
|
$ touch ./__init__.py
|
||||||
|
$ vi ./lcm_user_data.py
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
See :doc:`/user/userdata_script` for details.
|
||||||
|
In this document, the following "StandardUserData" is used.
|
||||||
|
|
||||||
|
.. literalinclude:: ../../../../../tacker/sol_refactored/infra_drivers/openstack/userdata_standard.py
|
||||||
|
:language: python
|
||||||
|
|
||||||
|
|
||||||
|
#. Compress the VNF Package CSAR to zip:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd -
|
||||||
|
$ cd ./sample_vnf_package_csar
|
||||||
|
$ zip sample_vnf_package_csar.zip \
|
||||||
|
-r TOSCA-Metadata/ Definitions/ BaseHOT/ Files/
|
||||||
|
|
||||||
|
|
||||||
|
The contents of the zip file should look something like this.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ unzip -Z -1 sample_vnf_package_csar.zip
|
||||||
|
TOSCA-Metadata/
|
||||||
|
TOSCA-Metadata/TOSCA.meta
|
||||||
|
Definitions/
|
||||||
|
Definitions/sample_vnfd_types.yaml
|
||||||
|
Definitions/etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
Definitions/etsi_nfv_sol001_common_types.yaml
|
||||||
|
Definitions/sample_vnfd_df_simple.yaml
|
||||||
|
Definitions/sample_vnfd_top.yaml
|
||||||
|
BaseHOT/
|
||||||
|
BaseHOT/simple/
|
||||||
|
BaseHOT/simple/nested/
|
||||||
|
BaseHOT/simple/nested/VDU1.yaml
|
||||||
|
BaseHOT/simple/sample_lcm_hot.yaml
|
||||||
|
Files/
|
||||||
|
|
||||||
|
|
||||||
|
- [This is UserData specific part] When using UserData, add ``UserData`` directories.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ zip sample_vnf_package_csar.zip -r UserData/
|
||||||
|
|
||||||
|
|
||||||
|
The contents of the zip file should look something like this.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ unzip -Z -1 sample_vnf_package_csar.zip
|
||||||
|
TOSCA-Metadata/
|
||||||
|
TOSCA-Metadata/TOSCA.meta
|
||||||
|
Definitions/
|
||||||
|
Definitions/sample_vnfd_types.yaml
|
||||||
|
Definitions/etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
Definitions/etsi_nfv_sol001_common_types.yaml
|
||||||
|
Definitions/sample_vnfd_df_simple.yaml
|
||||||
|
Definitions/sample_vnfd_top.yaml
|
||||||
|
BaseHOT/
|
||||||
|
BaseHOT/simple/
|
||||||
|
BaseHOT/simple/nested/
|
||||||
|
BaseHOT/simple/nested/VDU1.yaml
|
||||||
|
BaseHOT/simple/sample_lcm_hot.yaml
|
||||||
|
Files/
|
||||||
|
UserData/
|
||||||
|
UserData/__init__.py
|
||||||
|
UserData/lcm_user_data.py
|
||||||
|
|
||||||
|
|
||||||
|
Here, you can find the structure of the sample VNF Package CSAR as a
|
||||||
|
zip file.
|
||||||
|
|
||||||
|
|
||||||
|
Create VNF Package
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
#. Execute vnfpkgm create:
|
||||||
|
|
||||||
|
Take a note of "VNF Package ID" as it will be used in the next step.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd -
|
||||||
|
$ openstack vnf package create
|
||||||
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
| ID | 6e6b7a6d-0ebe-4085-96c2-b34269d837f9 |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "/vnfpkgm/v1/vnf_packages/6e6b7a6d-0ebe-4085-96c2-b34269d837f9" |
|
||||||
|
| | }, |
|
||||||
|
| | "packageContent": { |
|
||||||
|
| | "href": "/vnfpkgm/v1/vnf_packages/6e6b7a6d-0ebe-4085-96c2-b34269d837f9/package_content" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| Onboarding State | CREATED |
|
||||||
|
| Operational State | DISABLED |
|
||||||
|
| Usage State | NOT_IN_USE |
|
||||||
|
| User Defined Data | {} |
|
||||||
|
+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Upload VNF Package
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
#. Execute vnfpkgm upload:
|
||||||
|
|
||||||
|
The "VNF Package ID" ``6e6b7a6d-0ebe-4085-96c2-b34269d837f9`` 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 \
|
||||||
|
6e6b7a6d-0ebe-4085-96c2-b34269d837f9
|
||||||
|
Upload request for VNF package 6e6b7a6d-0ebe-4085-96c2-b34269d837f9 has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
Check the created VNF Package
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
#. Confirm the "Onboarding State" to be ``ONBOARDED``:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnf package list
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State | Links |
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
| 6e6b7a6d-0ebe-4085-96c2-b34269d837f9 | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED | { |
|
||||||
|
| | | | | | "self": { |
|
||||||
|
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/6e6b7a6d-0ebe-4085-96c2-b34269d837f9" |
|
||||||
|
| | | | | | }, |
|
||||||
|
| | | | | | "packageContent": { |
|
||||||
|
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/6e6b7a6d-0ebe-4085-96c2-b34269d837f9/package_content" |
|
||||||
|
| | | | | | } |
|
||||||
|
| | | | | | } |
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Create & Instantiate VNF
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Create VNF
|
||||||
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
#. Find "VNFD ID" to create VNF:
|
||||||
|
|
||||||
|
The "VNFD ID" can be found to be ``b1bb0ce7-ebca-4fa7-95ed-4840d70a1177`` in
|
||||||
|
the example.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnf package show \
|
||||||
|
6e6b7a6d-0ebe-4085-96c2-b34269d837f9 -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
|
||||||
|
with the appropriate one.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 \
|
||||||
|
--os-tacker-api-version 2
|
||||||
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-----------------------------+------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| ID | c98b05c7-bc96-43f8-a688-4d8079ffa3bf |
|
||||||
|
| Instantiation State | NOT_INSTANTIATED |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c98b05c7-bc96-43f8-a688-4d8079ffa3bf" |
|
||||||
|
| | }, |
|
||||||
|
| | "instantiate": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c98b05c7-bc96-43f8-a688-4d8079ffa3bf/instantiate" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| VNF Configurable Properties | |
|
||||||
|
| VNF Instance Description | |
|
||||||
|
| VNF Instance Name | |
|
||||||
|
| 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
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
#. Create ``<param-file>``:
|
||||||
|
|
||||||
|
Required parameter:
|
||||||
|
|
||||||
|
- flavourID
|
||||||
|
|
||||||
|
Optional parameters:
|
||||||
|
|
||||||
|
- instantiationLevelId
|
||||||
|
- extVirtualLinks
|
||||||
|
- extManagedVirtualLinks
|
||||||
|
- vimConnectionInfo
|
||||||
|
- localizationLanguage
|
||||||
|
- additionalParams
|
||||||
|
- extensions
|
||||||
|
- vnfConfigurableProperties
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
You can skip ``vimConnectionInfo`` only when you have the default VIM.
|
||||||
|
|
||||||
|
|
||||||
|
A sample ``<param-file>`` named as ``sample_request.json`` with
|
||||||
|
minimal parameter:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ vi ./sample_request.json
|
||||||
|
|
||||||
|
|
||||||
|
.. literalinclude:: conf/sample_request.json
|
||||||
|
:language: json
|
||||||
|
|
||||||
|
|
||||||
|
- [This is UserData specific part] When using UserData, use the following parameters instead.
|
||||||
|
|
||||||
|
.. literalinclude:: conf/sample_request_for_userdata.json
|
||||||
|
:language: json
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
``userdata_standard.py`` should be replaced with the UserData file name.
|
||||||
|
And ``StandardUserData`` should be replaced with the UserData class name.
|
||||||
|
|
||||||
|
|
||||||
|
#. Instantiate VNF:
|
||||||
|
|
||||||
|
The "ID of vnf instance" and "path to <param-file>" are needed to
|
||||||
|
instantiate vnf.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm instantiate c98b05c7-bc96-43f8-a688-4d8079ffa3bf \
|
||||||
|
./sample_request.json --os-tacker-api-version 2
|
||||||
|
Instantiate request for VNF Instance c98b05c7-bc96-43f8-a688-4d8079ffa3bf has been accepted.
|
||||||
|
|
||||||
|
Check the details of the instantiated vnf.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm list --os-tacker-api-version 2
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
| c98b05c7-bc96-43f8-a688-4d8079ffa3bf | | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
|
||||||
|
$ openstack vnflcm show c98b05c7-bc96-43f8-a688-4d8079ffa3bf \
|
||||||
|
--fit-width --os-tacker-api-version 2
|
||||||
|
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| ID | c98b05c7-bc96-43f8-a688-4d8079ffa3bf |
|
||||||
|
| Instantiated Vnf Info | { |
|
||||||
|
| | "flavourId": "simple", |
|
||||||
|
| | "vnfState": "STARTED", |
|
||||||
|
| | "scaleStatus": [ |
|
||||||
|
| | { |
|
||||||
|
| | "aspectId": "VDU1_scale", |
|
||||||
|
| | "scaleLevel": 0 |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "maxScaleLevels": [ |
|
||||||
|
| | { |
|
||||||
|
| | "aspectId": "VDU1_scale", |
|
||||||
|
| | "scaleLevel": 2 |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "vnfcResourceInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "6d01be26-f2be-421d-8c87-a4aa9d39300e", |
|
||||||
|
| | "vduId": "VDU1", |
|
||||||
|
| | "computeResource": { |
|
||||||
|
| | "vimConnectionId": "bff267c4-6fc9-46b5-be53-15a6a3680033", |
|
||||||
|
| | "resourceId": "6d01be26-f2be-421d-8c87-a4aa9d39300e", |
|
||||||
|
| | "vimLevelResourceType": "OS::Nova::Server" |
|
||||||
|
| | }, |
|
||||||
|
| | "vnfcCpInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "CP1-6d01be26-f2be-421d-8c87-a4aa9d39300e", |
|
||||||
|
| | "cpdId": "CP1" |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "metadata": { |
|
||||||
|
| | "creation_time": "2023-12-01T06:57:11Z", |
|
||||||
|
| | "stack_id": "vnf-c98b05c7-bc96-43f8-a688-4d8079ffa3bf-VDU1-6523jolwu66g/09019137-3b71-426e-8726-8572657999b2", |
|
||||||
|
| | "vdu_idx": null, |
|
||||||
|
| | "flavor": "m1.tiny", |
|
||||||
|
| | "image-VDU1": "cirros-0.5.2-x86_64-disk" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "vnfVirtualLinkResourceInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "ffa3b9cf-5135-4dc6-a7a1-dd1912d72363", |
|
||||||
|
| | "vnfVirtualLinkDescId": "internalVL1", |
|
||||||
|
| | "networkResource": { |
|
||||||
|
| | "vimConnectionId": "bff267c4-6fc9-46b5-be53-15a6a3680033", |
|
||||||
|
| | "resourceId": "ffa3b9cf-5135-4dc6-a7a1-dd1912d72363", |
|
||||||
|
| | "vimLevelResourceType": "OS::Neutron::Net" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "vnfcInfo": [ |
|
||||||
|
| | { |
|
||||||
|
| | "id": "VDU1-6d01be26-f2be-421d-8c87-a4aa9d39300e", |
|
||||||
|
| | "vduId": "VDU1", |
|
||||||
|
| | "vnfcResourceInfoId": "6d01be26-f2be-421d-8c87-a4aa9d39300e", |
|
||||||
|
| | "vnfcState": "STARTED" |
|
||||||
|
| | } |
|
||||||
|
| | ], |
|
||||||
|
| | "metadata": { |
|
||||||
|
| | "stack_id": "0b1b274c-a493-4a2c-994f-ee8569ff111c", |
|
||||||
|
| | "nfv": { |
|
||||||
|
| | "VDU": { |
|
||||||
|
| | "VDU1": { |
|
||||||
|
| | "computeFlavourId": "m1.tiny", |
|
||||||
|
| | "vcImageId": "cirros-0.5.2-x86_64-disk" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| | }, |
|
||||||
|
| | "tenant": "nfv" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| Instantiation State | INSTANTIATED |
|
||||||
|
| Links | { |
|
||||||
|
| | "self": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c98b05c7-bc96-43f8-a688-4d8079ffa3bf" |
|
||||||
|
| | }, |
|
||||||
|
| | "terminate": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c98b05c7-bc96-43f8-a688-4d8079ffa3bf/terminate" |
|
||||||
|
| | }, |
|
||||||
|
| | "scale": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c98b05c7-bc96-43f8-a688-4d8079ffa3bf/scale" |
|
||||||
|
| | }, |
|
||||||
|
| | "heal": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c98b05c7-bc96-43f8-a688-4d8079ffa3bf/heal" |
|
||||||
|
| | }, |
|
||||||
|
| | "changeExtConn": { |
|
||||||
|
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/c98b05c7-bc96-43f8-a688-4d8079ffa3bf/change_ext_conn" |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| VIM Connection Info | { |
|
||||||
|
| | "default": { |
|
||||||
|
| | "vimId": "bff267c4-6fc9-46b5-be53-15a6a3680033", |
|
||||||
|
| | "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3", |
|
||||||
|
| | "interfaceInfo": { |
|
||||||
|
| | "endpoint": "http://192.168.56.10/identity/v3", |
|
||||||
|
| | "skipCertificateHostnameCheck": true, |
|
||||||
|
| | "skipCertificateVerification": true |
|
||||||
|
| | }, |
|
||||||
|
| | "accessInfo": { |
|
||||||
|
| | "username": "nfv_user", |
|
||||||
|
| | "region": "RegionOne", |
|
||||||
|
| | "project": "nfv", |
|
||||||
|
| | "projectDomain": "default", |
|
||||||
|
| | "userDomain": "default" |
|
||||||
|
| | }, |
|
||||||
|
| | "extra": {} |
|
||||||
|
| | } |
|
||||||
|
| | } |
|
||||||
|
| VNF Configurable Properties | |
|
||||||
|
| VNF Instance Description | |
|
||||||
|
| VNF Instance Name | |
|
||||||
|
| 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
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Terminate VNF
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
#. Check the VNF Instance ID to terminate:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm list --os-tacker-api-version 2
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
| c98b05c7-bc96-43f8-a688-4d8079ffa3bf | | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
#. Terminate VNF Instance:
|
||||||
|
|
||||||
|
Execute terminate command:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm terminate c98b05c7-bc96-43f8-a688-4d8079ffa3bf --os-tacker-api-version 2
|
||||||
|
Terminate request for VNF Instance 'c98b05c7-bc96-43f8-a688-4d8079ffa3bf' has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
Check the status of VNF Instance:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm list --os-tacker-api-version 2
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
| c98b05c7-bc96-43f8-a688-4d8079ffa3bf | | NOT_INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
|
||||||
|
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Delete VNF
|
||||||
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
#. Delete VNF Instance:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm delete c98b05c7-bc96-43f8-a688-4d8079ffa3bf
|
||||||
|
Vnf instance 'c98b05c7-bc96-43f8-a688-4d8079ffa3bf' is deleted successfully
|
||||||
|
|
||||||
|
|
||||||
|
Delete VNF Package
|
||||||
|
------------------
|
||||||
|
|
||||||
|
#. Delete VNF Package:
|
||||||
|
|
||||||
|
Check the VNF Package ID to delete:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnf package list
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State | Links |
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
| 6e6b7a6d-0ebe-4085-96c2-b34269d837f9 | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED | { |
|
||||||
|
| | | | | | "self": { |
|
||||||
|
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/6e6b7a6d-0ebe-4085-96c2-b34269d837f9" |
|
||||||
|
| | | | | | }, |
|
||||||
|
| | | | | | "packageContent": { |
|
||||||
|
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/6e6b7a6d-0ebe-4085-96c2-b34269d837f9/package_content" |
|
||||||
|
| | | | | | } |
|
||||||
|
| | | | | | } |
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Update the Operational State to ``DISABLED``:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnf package update --operational-state 'DISABLED' \
|
||||||
|
6e6b7a6d-0ebe-4085-96c2-b34269d837f9
|
||||||
|
+-------------------+----------+
|
||||||
|
| 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 |
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
| 6e6b7a6d-0ebe-4085-96c2-b34269d837f9 | Sample VNF | ONBOARDED | NOT_IN_USE | DISABLED | { |
|
||||||
|
| | | | | | "self": { |
|
||||||
|
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/6e6b7a6d-0ebe-4085-96c2-b34269d837f9" |
|
||||||
|
| | | | | | }, |
|
||||||
|
| | | | | | "packageContent": { |
|
||||||
|
| | | | | | "href": "/vnfpkgm/v1/vnf_packages/6e6b7a6d-0ebe-4085-96c2-b34269d837f9/package_content" |
|
||||||
|
| | | | | | } |
|
||||||
|
| | | | | | } |
|
||||||
|
+--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Delete the VNF Package:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnf package delete 6e6b7a6d-0ebe-4085-96c2-b34269d837f9
|
||||||
|
All specified vnf-package(s) deleted successfully
|
||||||
|
|
||||||
|
|
||||||
|
.. _tacker/doc/user/v2/getting_started/conf:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/master/doc/user/v2/getting_started/conf
|
||||||
|
.. _Create OpenStack client environment scripts: https://docs.openstack.org/keystone/latest/install/keystone-openrc-rdo.html
|
||||||
|
.. _SOL001: https://forge.etsi.org/rep/nfv/SOL001
|
@ -24,13 +24,14 @@ External Monitoring Tool sends an alert to Prometheus Plugin.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
PM/FM only support CNF.
|
Performance Management and Fault Management support only CNF.
|
||||||
|
AutoScaling and AutoHealing support both CNF and VNF.
|
||||||
|
|
||||||
AutoScale/Heal support both CNF and VNF.
|
|
||||||
|
|
||||||
The External Monitoring Tool is implemented by each operators,
|
The External Monitoring Tool is implemented by each operators,
|
||||||
thus it is not included in Tacker.
|
thus it is not included in Tacker.
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -43,49 +44,51 @@ performance_management, fault_management, auto_scaling or auto_healing below.
|
|||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
:widths: 20 10 40
|
:widths: 20 10 40
|
||||||
|
|
||||||
* - Configuration
|
* - Configuration (CONF.prometheus_plugin)
|
||||||
- Default
|
- Default
|
||||||
- Description
|
- Description
|
||||||
* - ``CONF.prometheus_plugin.performance_management``
|
* - ``performance_management``
|
||||||
- false
|
- false
|
||||||
- Enable prometheus plugin performance management.
|
- Enable prometheus plugin performance management.
|
||||||
* - ``CONF.prometheus_plugin.reporting_period_margin``
|
* - ``reporting_period_margin``
|
||||||
- 1
|
- 1
|
||||||
- Some margin time for PM jos's reportingPeriod.
|
- Some margin time for PM jos's reportingPeriod.
|
||||||
When multiple alerts are received within a time period
|
When multiple alerts are received within a time period
|
||||||
shorter than (reportingPeriod - reporting_period_margin),
|
shorter than (reportingPeriod - reporting_period_margin),
|
||||||
the subsequent alerts are ignored.
|
the subsequent alerts are ignored.
|
||||||
* - ``CONF.prometheus_plugin.fault_management``
|
* - ``fault_management``
|
||||||
- false
|
- false
|
||||||
- Enable prometheus plugin fault management.
|
- Enable prometheus plugin fault management.
|
||||||
* - ``CONF.prometheus_plugin.auto_scaling``
|
* - ``auto_scaling``
|
||||||
- false
|
- false
|
||||||
- Enable prometheus plugin autoscaling.
|
- Enable prometheus plugin autoscaling.
|
||||||
* - ``CONF.prometheus_plugin.auto_healing``
|
* - ``auto_healing``
|
||||||
- false
|
- false
|
||||||
- Enable prometheus plugin autohealing.
|
- Enable prometheus plugin autohealing.
|
||||||
* - ``CONF.prometheus_plugin.timer_interval``
|
* - ``timer_interval``
|
||||||
- 20
|
- 20
|
||||||
- When multiple auto heal alerts for a VNF instance are
|
- When multiple auto heal alerts for a VNF instance are
|
||||||
notified in the ``timer_interval`` seconds,
|
notified in the ``timer_interval`` seconds,
|
||||||
Tacker packs these notifications into single event.
|
Tacker packs these notifications into single event.
|
||||||
By doing this, Tacker can avoid making too many healing requests.
|
By doing this, Tacker can avoid making too many healing requests.
|
||||||
* - ``CONF.prometheus_plugin.test_rule_with_promtool``
|
* - ``test_rule_with_promtool``
|
||||||
- false
|
- false
|
||||||
- Enable rule file validation using promtool.
|
- Enable rule file validation using promtool.
|
||||||
* - ``CONF.prometheus_plugin.reporting_period_threshold``
|
* - ``reporting_period_threshold``
|
||||||
- 90
|
- 90
|
||||||
- The time of reportingPeriod for the pm threshold.
|
- The time of reportingPeriod for the pm threshold.
|
||||||
* - ``CONF.prometheus_plugin.collection_period_threshold``
|
* - ``collection_period_threshold``
|
||||||
- 30
|
- 30
|
||||||
- The time of collectionPeriod for the pm threshold.
|
- The time of collectionPeriod for the pm threshold.
|
||||||
|
|
||||||
|
|
||||||
Prerequisite
|
Prerequisite
|
||||||
------------
|
------------
|
||||||
|
|
||||||
There is another prerequisite for using the AutoScale/Heal function.
|
There is another prerequisite for using the AutoScaling/AutoHealing
|
||||||
|
function.
|
||||||
When instantiate VNF, you need to add the parameter
|
When instantiate VNF, you need to add the parameter
|
||||||
``isAutoscaleEnabled/isAutohealEnabled`` to ``True`` in the request body.
|
``isAutoscaleEnabled/isAutohealEnabled`` to ``true`` in the request body.
|
||||||
|
|
||||||
The example reference is as follows:
|
The example reference is as follows:
|
||||||
|
|
||||||
@ -100,10 +103,11 @@ The example reference is as follows:
|
|||||||
...
|
...
|
||||||
},
|
},
|
||||||
"vnfConfigurableProperties": {
|
"vnfConfigurableProperties": {
|
||||||
"isAutoscaleEnabled": True
|
"isAutoscaleEnabled": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
System
|
System
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
@ -111,8 +115,8 @@ Prometheus Plugin needs external service called External
|
|||||||
Monitoring Tool.
|
Monitoring Tool.
|
||||||
|
|
||||||
Prometheus Plugin operates the External Monitoring Tool
|
Prometheus Plugin operates the External Monitoring Tool
|
||||||
along the Performance Management, Fault Management, Auto scaling or
|
along the Performance Management, Fault Management, AutoScaling or
|
||||||
Auto healing.
|
AutoHealing.
|
||||||
The flow of each process is as follows.
|
The flow of each process is as follows.
|
||||||
|
|
||||||
- ``ETSI NFV-SOL 002/003 based Performance Management Job``
|
- ``ETSI NFV-SOL 002/003 based Performance Management Job``
|
||||||
@ -141,6 +145,7 @@ The flow of each process is as follows.
|
|||||||
| +------------+ +------------+ +------------+ |
|
| +------------+ +------------+ +------------+ |
|
||||||
+----------------------------------------------------+
|
+----------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
- ``ETSI NFV-SOL 002/003 based Performance Management Threshold``
|
- ``ETSI NFV-SOL 002/003 based Performance Management Threshold``
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -167,6 +172,7 @@ The flow of each process is as follows.
|
|||||||
| +------------+ +------------+ +------------+ |
|
| +------------+ +------------+ +------------+ |
|
||||||
+----------------------------------------------------------+
|
+----------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
- ``ETSI NFV-SOL 002/003 based Fault Management``
|
- ``ETSI NFV-SOL 002/003 based Fault Management``
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -191,6 +197,7 @@ The flow of each process is as follows.
|
|||||||
| +------------+ +------------+ +------------+ |
|
| +------------+ +------------+ +------------+ |
|
||||||
+----------------------------------------------------+
|
+----------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
- ``Prometheus Plugin AutoScaling``
|
- ``Prometheus Plugin AutoScaling``
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -214,6 +221,7 @@ The flow of each process is as follows.
|
|||||||
| +------------+ +------------+ +------------+ |
|
| +------------+ +------------+ +------------+ |
|
||||||
+----------------------------------------------------+
|
+----------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
- ``Prometheus Plugin AutoHealing``
|
- ``Prometheus Plugin AutoHealing``
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -237,14 +245,16 @@ The flow of each process is as follows.
|
|||||||
| +------------+ +------------+ +------------+ |
|
| +------------+ +------------+ +------------+ |
|
||||||
+----------------------------------------------------+
|
+----------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
External Monitoring Tool
|
External Monitoring Tool
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
External Monitoring Tool is consist of Prometheus Server,
|
External Monitoring Tool is consist of Prometheus Server,
|
||||||
AlertManager and SSH Server.
|
Alertmanager and SSH Server.
|
||||||
|
|
||||||
This section describes the requirements for each service.
|
This section describes the requirements for each service.
|
||||||
|
|
||||||
|
|
||||||
Prometheus Server
|
Prometheus Server
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
@ -275,17 +285,10 @@ For example:
|
|||||||
- targets: ["<worker1 exporter host>"]
|
- targets: ["<worker1 exporter host>"]
|
||||||
metrics_path: "/api/v1/nodes/worker1/proxy/metrics/resource"
|
metrics_path: "/api/v1/nodes/worker1/proxy/metrics/resource"
|
||||||
- job_name: "k8smetricscadvisorworker1"
|
- job_name: "k8smetricscadvisorworker1"
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ["<worker1 exporter host>"]
|
- targets: ["<worker1 exporter host>"]
|
||||||
metrics_path: "/api/v1/nodes/worker1/proxy/metrics/cadvisor"
|
metrics_path: "/api/v1/nodes/worker1/proxy/metrics/cadvisor"
|
||||||
- job_name: "k8smetricsresourceworker2"
|
|
||||||
static_configs:
|
|
||||||
- targets: ["<worker2 exporter host>"]
|
|
||||||
metrics_path: "/api/v1/nodes/worker2/proxy/metrics/resource"
|
|
||||||
- job_name: "k8smetricscadvisorworker2"
|
|
||||||
static_configs:
|
|
||||||
- targets: ["<worker2 exporter host>"]
|
|
||||||
metrics_path: "/api/v1/nodes/worker2/proxy/metrics/cadvisor"
|
|
||||||
|
|
||||||
Alert Manager
|
Alert Manager
|
||||||
-------------
|
-------------
|
||||||
@ -299,11 +302,9 @@ For example:
|
|||||||
|
|
||||||
route:
|
route:
|
||||||
group_by:
|
group_by:
|
||||||
- "kubestatemetrics"
|
- "kubestatemetrics"
|
||||||
- "k8smetricsresourceworker1"
|
- "k8smetricsresourceworker1"
|
||||||
- "k8smetricscadvisorworker1"
|
- "k8smetricscadvisorworker1"
|
||||||
- "k8smetricsresourceworker2"
|
|
||||||
- "k8smetricscadvisorworker2"
|
|
||||||
group_wait: 30s
|
group_wait: 30s
|
||||||
group_interval: 30s
|
group_interval: 30s
|
||||||
repeat_interval: 30s
|
repeat_interval: 30s
|
||||||
@ -332,7 +333,7 @@ For example:
|
|||||||
- url: "http://<tacker_host>/pm_event"
|
- url: "http://<tacker_host>/pm_event"
|
||||||
- name: vnfpm-threshold
|
- name: vnfpm-threshold
|
||||||
webhook_configs:
|
webhook_configs:
|
||||||
- url: "http://<tacker_host>/vnfpm_threshold"
|
- url: "http://<tacker_host>/pm_threshold"
|
||||||
- name: vnffm
|
- name: vnffm
|
||||||
webhook_configs:
|
webhook_configs:
|
||||||
- url: "http://<tacker_host>/alert"
|
- url: "http://<tacker_host>/alert"
|
||||||
@ -343,6 +344,7 @@ For example:
|
|||||||
webhook_configs:
|
webhook_configs:
|
||||||
- url: "http://<tacker_host>/alert/auto_healing"
|
- url: "http://<tacker_host>/alert/auto_healing"
|
||||||
|
|
||||||
|
|
||||||
SSH server
|
SSH server
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -353,6 +355,7 @@ needs to activate sshd.
|
|||||||
- The directory indicated by "rule_files" setting of prometheus
|
- The directory indicated by "rule_files" setting of prometheus
|
||||||
server config should be accessible by SSH.
|
server config should be accessible by SSH.
|
||||||
|
|
||||||
|
|
||||||
Supported versions
|
Supported versions
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
@ -371,6 +374,7 @@ Tacker Bobcat and Caracal release
|
|||||||
- Prometheus: 2.45
|
- Prometheus: 2.45
|
||||||
- Alertmanager: 0.26
|
- Alertmanager: 0.26
|
||||||
|
|
||||||
|
|
||||||
Alert rule registration
|
Alert rule registration
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -386,48 +390,50 @@ at "metadata" field.
|
|||||||
|
|
||||||
.. code-block:: json
|
.. code-block:: json
|
||||||
|
|
||||||
{
|
{
|
||||||
"objectType": "Vnf",
|
"objectType": "Vnf",
|
||||||
"objectInstanceIds": ["507280d8-bfc5-4b88-904b-9280ba6bc3ea"],
|
"objectInstanceIds": ["a0205e7c-fdeb-4f6c-b266-962246e32626"],
|
||||||
"criteria": {
|
"criteria": {
|
||||||
"performanceMetric": [
|
"performanceMetric": ["VMemoryUsageMeanVnf.a0205e7c-fdeb-4f6c-b266-962246e32626"],
|
||||||
"VMemoryUsageMeanVnf.507280d8-bfc5-4b88-904b-9280ba6bc3ea"],
|
"performanceMetricGroup": [],
|
||||||
"collectionPeriod": 30,
|
"collectionPeriod": 30,
|
||||||
"reportingPeriod": 90,
|
"reportingPeriod": 60
|
||||||
"reportingBoundary": "2099-08-05T02:24:46Z"
|
},
|
||||||
},
|
"callbackUri": "http://127.0.0.1:9990/notification/callbackuri/a0205e7c-fdeb-4f6c-b266-962246e32626",
|
||||||
"callbackUri": "<client_callback_uri>",
|
"metadata": {
|
||||||
"metadata": {
|
"monitoring": {
|
||||||
"monitoring": {
|
"monitorName": "prometheus",
|
||||||
"monitorName": "prometheus",
|
"driverType": "external",
|
||||||
"driverType": "external",
|
"targetsInfo": [
|
||||||
"targetsInfo": [
|
{
|
||||||
{
|
"prometheusHost": "192.168.121.35",
|
||||||
"prometheusHost": "<prometheus_server_hostname>",
|
"prometheusHostPort": 22,
|
||||||
"authInfo": {
|
"authInfo": {
|
||||||
"ssh_username": "ubuntu",
|
"ssh_username": "vagrant",
|
||||||
"ssh_password": "ubuntu"
|
"ssh_password": "vagrant"
|
||||||
},
|
},
|
||||||
"alertRuleConfigPath":
|
"alertRuleConfigPath":
|
||||||
"/etc/prometheus/rules",
|
"/etc/prometheus/rules",
|
||||||
"prometheusReloadApiEndpoint":
|
"prometheusReloadApiEndpoint":
|
||||||
"http://<prometheus_server_hostname>/-/reload"
|
"http://192.168.121.35:9090/-/reload"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
With the parameter, pod name can be specified but container name can not.
|
With the parameter, pod name can be specified but container name can not.
|
||||||
And some prometheus metrics need container name. Therefore, ``max``
|
And some prometheus metrics need container name. Therefore, ``max``
|
||||||
statement of PromQL is alternatively used in some measurements to
|
statement of PromQL is alternatively used in some measurements to
|
||||||
measure without container name. That means it provides only most
|
measure without container name. That means it provides only most
|
||||||
impacted value among the containers. For example:
|
impacted value among the containers. For example:
|
||||||
|
|
||||||
|
``avg(max(container_fs_usage_bytes{pod=~"pod name"} /
|
||||||
|
container_fs_limit_bytes{pod=~"pod name"}))``
|
||||||
|
|
||||||
``avg(max(container_fs_usage_bytes{pod=~"pod name"} /
|
|
||||||
container_fs_limit_bytes{pod=~"pod name"}))``
|
|
||||||
|
|
||||||
ETSI NFV-SOL 002/003 based Performance Management Threshold
|
ETSI NFV-SOL 002/003 based Performance Management Threshold
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
@ -441,50 +447,52 @@ at "metadata" field.
|
|||||||
|
|
||||||
.. code-block:: json
|
.. code-block:: json
|
||||||
|
|
||||||
{
|
{
|
||||||
"objectType": "Vnf",
|
"objectType": "Vnf",
|
||||||
"objectInstanceId": "511a2d68-c975-4913-b7b8-d75468e3102b",
|
"objectInstanceId": "c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
"performanceMetric": "VMemoryUsageMeanVnf.511a2d68-c975-4913-b7b8-d75468e3102b",
|
"performanceMetric": "VMemoryUsageMeanVnf.c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
"thresholdType": "SIMPLE",
|
"thresholdType": "SIMPLE",
|
||||||
"simpleThresholdDetails": {
|
"simpleThresholdDetails": {
|
||||||
"thresholdValue": 55,
|
"thresholdValue": 1,
|
||||||
"hysteresis": 30
|
"hysteresis": 0.5
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"callbackUri": "<client_callback_uri>",
|
"callbackUri": "http://127.0.0.1:9990/notification/callbackuri/c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"monitoring": {
|
"monitoring": {
|
||||||
"monitorName": "prometheus",
|
"monitorName": "prometheus",
|
||||||
"driverType": "external",
|
"driverType": "external",
|
||||||
"targetsInfo": [
|
"targetsInfo": [
|
||||||
{
|
{
|
||||||
"prometheusHost": "<prometheus_server_hostname>",
|
"prometheusHost": "192.168.121.35",
|
||||||
"prometheusHostPort": 22,
|
"prometheusHostPort": 22,
|
||||||
"authInfo": {
|
"authInfo": {
|
||||||
"ssh_username": "ubuntu",
|
"ssh_username": "vagrant",
|
||||||
"ssh_password": "ubuntu"
|
"ssh_password": "vagrant"
|
||||||
},
|
},
|
||||||
"alertRuleConfigPath":
|
"alertRuleConfigPath":
|
||||||
"/etc/prometheus/rules",
|
"/etc/prometheus/rules",
|
||||||
"prometheusReloadApiEndpoint":
|
"prometheusReloadApiEndpoint":
|
||||||
"http://<prometheus_server_hostname>/-/reload"
|
"http://192.168.121.35:9090/-/reload"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
With the parameter, pod name can be specified but container name can not.
|
With the parameter, pod name can be specified but container name can not.
|
||||||
And some prometheus metrics need container name. Therefore, ``max``
|
And some prometheus metrics need container name. Therefore, ``max``
|
||||||
statement of PromQL is alternatively used in some measurements to
|
statement of PromQL is alternatively used in some measurements to
|
||||||
measure without container name. That means it provides only most
|
measure without container name. That means it provides only most
|
||||||
impacted value among the containers. For example:
|
impacted value among the containers. For example:
|
||||||
|
|
||||||
|
``avg(max(container_fs_usage_bytes{pod=~"pod name"} /
|
||||||
|
container_fs_limit_bytes{pod=~"pod name"}))``
|
||||||
|
|
||||||
``avg(max(container_fs_usage_bytes{pod=~"pod name"} /
|
|
||||||
container_fs_limit_bytes{pod=~"pod name"}))``
|
|
||||||
|
|
||||||
ETSI NFV-SOL 002/003 based Fault Management
|
ETSI NFV-SOL 002/003 based Fault Management
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
@ -492,25 +500,32 @@ ETSI NFV-SOL 002/003 based Fault Management
|
|||||||
Registration of alerting rule is performed by updating
|
Registration of alerting rule is performed by updating
|
||||||
rule file directly. Below is an example of alert rule.
|
rule file directly. Below is an example of alert rule.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"groups": [{
|
||||||
|
"name": "fm_test",
|
||||||
|
"rules": [{
|
||||||
|
"alert": "fm_test",
|
||||||
|
"expr": "max(sum(rate(pod_cpu_usage_seconds_total{pod='curry-probe-test001-798d577c96-5624p'}[1m]))) > 0.1",
|
||||||
|
"for": "30s",
|
||||||
|
"labels": {
|
||||||
|
"receiver_type": "tacker",
|
||||||
|
"function_type": "vnffm",
|
||||||
|
"vnf_instance_id": "c21fd71b-2866-45f6-89d0-70c458a5c32e",
|
||||||
|
"pod": "curry-probe-test001-798d577c96-5624p",
|
||||||
|
"perceived_severity": "CRITICAL",
|
||||||
|
"event_type": "PROCESSING_ERROR_ALARM"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"probable_cause": "Process Terminated",
|
||||||
|
"fault_type": "fault_type",
|
||||||
|
"fault_details": "fault_details"
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
groups:
|
|
||||||
- name: example
|
|
||||||
rules:
|
|
||||||
- alert: Test
|
|
||||||
expr: sum(pod_memory_working_set_bytes{namespace="default"}) > 10000000000
|
|
||||||
for: 30s
|
|
||||||
labels:
|
|
||||||
receiver_type: tacker
|
|
||||||
function_type: vnffm
|
|
||||||
vnf_instance_id: 3721ab69-3f33-44bc-85f1-f416ad1b765e
|
|
||||||
pod: test\\-test1\\-[0-9a-f]{1,10}-[0-9a-z]{5}$
|
|
||||||
perceived_severity: CRITICAL
|
|
||||||
event_type: PROCESSING_ERROR_ALARM
|
|
||||||
annotations:
|
|
||||||
probable_cause: Server is down.
|
|
||||||
fault_type: Error
|
|
||||||
fault_details: Fault detail
|
|
||||||
|
|
||||||
Prometheus Plugin AutoScaling
|
Prometheus Plugin AutoScaling
|
||||||
-----------------------------
|
-----------------------------
|
||||||
@ -518,21 +533,26 @@ Prometheus Plugin AutoScaling
|
|||||||
Registration of alerting rule is performed by updating
|
Registration of alerting rule is performed by updating
|
||||||
rule file directly. Below is an example of alert rule.
|
rule file directly. Below is an example of alert rule.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"groups": [{
|
||||||
|
"name": "scale_out_test",
|
||||||
|
"rules": [{
|
||||||
|
"alert": "scale_out_test",
|
||||||
|
"expr": "max(sum(rate(pod_cpu_usage_seconds_total{pod='curry-probe-test001-798d577c96-8qtg2'}[1m]))) > 0.1",
|
||||||
|
"for": "30s",
|
||||||
|
"labels": {
|
||||||
|
"receiver_type": "tacker",
|
||||||
|
"function_type": "auto_scale",
|
||||||
|
"vnf_instance_id": "fa82d5bf-c6c1-4ece-bf16-9cf9325a171a",
|
||||||
|
"auto_scale_type": "SCALE_OUT",
|
||||||
|
"aspect_id": "vdu1_aspect"
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
groups:
|
|
||||||
- name: example
|
|
||||||
rules:
|
|
||||||
- alert: Test
|
|
||||||
expr: sum(pod_memory_working_set_bytes{namespace="default"}) > 10000000000
|
|
||||||
for: 30s
|
|
||||||
labels:
|
|
||||||
receiver_type: tacker
|
|
||||||
function_type: auto_scale
|
|
||||||
vnf_instance_id: 3721ab69-3f33-44bc-85f1-f416ad1b765e
|
|
||||||
auto_scale_type: SCALE_OUT
|
|
||||||
aspect_id: VDU1_aspect
|
|
||||||
annotations:
|
|
||||||
|
|
||||||
Prometheus Plugin AutoHealing
|
Prometheus Plugin AutoHealing
|
||||||
-----------------------------
|
-----------------------------
|
||||||
@ -540,20 +560,25 @@ Prometheus Plugin AutoHealing
|
|||||||
Registration of alerting rule is performed by updating
|
Registration of alerting rule is performed by updating
|
||||||
rule file directly. Below is example of alert rule.
|
rule file directly. Below is example of alert rule.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"groups": [{
|
||||||
|
"name": "heal_all_test_1",
|
||||||
|
"rules": [{
|
||||||
|
"alert": "heal_all_test_1",
|
||||||
|
"expr": "max(sum(rate(pod_cpu_usage_seconds_total{pod='curry-probe-test001-798d577c96-dc5rh'}[1m]))) > 0.1",
|
||||||
|
"for": "30s",
|
||||||
|
"labels": {
|
||||||
|
"receiver_type": "tacker",
|
||||||
|
"function_type": "auto_heal",
|
||||||
|
"vnf_instance_id": "c44e89ad-6743-4b80-8df8-fe4aa4d83f44",
|
||||||
|
"vnfc_info_id": "VDU1-curry-probe-test001-798d577c96-dc5rh"
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
groups:
|
|
||||||
- name: example
|
|
||||||
rules:
|
|
||||||
- alert: Test
|
|
||||||
expr: sum(pod_memory_working_set_bytes{namespace="default"}) > 10000000000
|
|
||||||
for: 30s
|
|
||||||
labels:
|
|
||||||
receiver_type: tacker
|
|
||||||
function_type: auto_heal
|
|
||||||
vnf_instance_id: 3721ab69-3f33-44bc-85f1-f416ad1b765e
|
|
||||||
vnfc_info_id: VDU1-85adebfa-d71c-49ab-9d39-d8dd7e393541
|
|
||||||
annotations:
|
|
||||||
|
|
||||||
External data file
|
External data file
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
@ -568,6 +593,7 @@ at etc/tacker/prometheus-plugin.yaml from the tacker project source directory.
|
|||||||
Edit this file if you need and put it in the configuration directory
|
Edit this file if you need and put it in the configuration directory
|
||||||
(e.g. /etc/tacker).
|
(e.g. /etc/tacker).
|
||||||
|
|
||||||
|
|
||||||
Default configuration file
|
Default configuration file
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
@ -579,17 +605,19 @@ execute below command at the top directory of tacker project.
|
|||||||
|
|
||||||
sudo python3 ./setup.py install
|
sudo python3 ./setup.py install
|
||||||
|
|
||||||
|
|
||||||
Data format
|
Data format
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
The file is described in yaml format [#yaml]_.
|
The file is described in yaml format.
|
||||||
|
|
||||||
|
|
||||||
Root configuration
|
Root configuration
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
The configuration consists of PromQL config for PMJob API and
|
The configuration consists of PromQL config for PMJob API and
|
||||||
PromQL config for Threshold API. The PMJob and the Threshold are
|
PromQL config for Threshold API. The PMJob and the Threshold are
|
||||||
defined in ETSI GS NFV-SOL 003 [#etsi_sol_003]_.
|
defined in `ETSI GS NFV-SOL 003`_.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
@ -600,12 +628,13 @@ defined in ETSI GS NFV-SOL 003 [#etsi_sol_003]_.
|
|||||||
Threshold:
|
Threshold:
|
||||||
PromQL: <PromQLConfig>
|
PromQL: <PromQLConfig>
|
||||||
|
|
||||||
|
|
||||||
<PromQLConfig>
|
<PromQLConfig>
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
The elements of PromQLConfig are key-value pairs of a performanceMetric
|
The elements of PromQLConfig are key-value pairs of a performanceMetric
|
||||||
and a PromQL statement. These performanceMetric are defined in
|
and a PromQL statement. These performanceMetric are defined in
|
||||||
ETSI GS NFV-SOL 003 [#etsi_sol_003]_.
|
`ETSI GS NFV-SOL 003`_.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
@ -625,6 +654,7 @@ ETSI GS NFV-SOL 003 [#etsi_sol_003]_.
|
|||||||
ByteOutgoingVnfExtCp: <F-string of PromQL statement>
|
ByteOutgoingVnfExtCp: <F-string of PromQL statement>
|
||||||
PacketOutgoingVnfExtCp: <F-string of PromQL statement>
|
PacketOutgoingVnfExtCp: <F-string of PromQL statement>
|
||||||
|
|
||||||
|
|
||||||
For example, VCpuUsageMeanVnf can be described as below.
|
For example, VCpuUsageMeanVnf can be described as below.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
@ -633,12 +663,13 @@ For example, VCpuUsageMeanVnf can be described as below.
|
|||||||
avg(sum(rate(pod_cpu_usage_seconds_total
|
avg(sum(rate(pod_cpu_usage_seconds_total
|
||||||
{{namespace="{namespace}",pod=~"{pod}"}}[{reporting_period}s])))
|
{{namespace="{namespace}",pod=~"{pod}"}}[{reporting_period}s])))
|
||||||
|
|
||||||
|
|
||||||
F-string of PromQL statement
|
F-string of PromQL statement
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
For above PromQL statement, f-string of python [#f_string]_ is used.
|
For above PromQL statement, `f-string`_ of python is used.
|
||||||
In the f-string, below replacement field can be used. They are replaced
|
In the f-string, below replacement field can be used. They are replaced
|
||||||
with a SOL-API's attribute [#etsi_sol_003]_ or Tacker internal value.
|
with a SOL-API's attribute(`ETSI GS NFV-SOL 003`_) or Tacker internal value.
|
||||||
|
|
||||||
``{collection_period}``
|
``{collection_period}``
|
||||||
Replaced with collectionPeriod attribute of SOL-API.
|
Replaced with collectionPeriod attribute of SOL-API.
|
||||||
@ -656,6 +687,7 @@ with a SOL-API's attribute [#etsi_sol_003]_ or Tacker internal value.
|
|||||||
``{namespace}``
|
``{namespace}``
|
||||||
Replaced with the kubernetes namespace that the vnfInstance belongs to.
|
Replaced with the kubernetes namespace that the vnfInstance belongs to.
|
||||||
|
|
||||||
|
|
||||||
Using Vendor Specific Plugin
|
Using Vendor Specific Plugin
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -668,41 +700,55 @@ tacker.sol_refactored.common.monitoring_plugin_base.MonitoringPlugin.
|
|||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
:widths: 40 40 40
|
:widths: 40 40 40
|
||||||
|
|
||||||
* - Configuration
|
* - Configuration (CONF.prometheus_plugin)
|
||||||
- Default
|
- Default
|
||||||
- Description
|
- Description
|
||||||
* - ``CONF.prometheus_plugin.performance_management_package``
|
* - ``performance_management_package``
|
||||||
- tacker.sol_refactored.common.prometheus_plugin
|
- | tacker.sol_refactored.common
|
||||||
|
| .prometheus_plugin
|
||||||
- Package name for performance management job.
|
- Package name for performance management job.
|
||||||
* - ``CONF.prometheus_plugin.performance_management_threshold_package``
|
* - | ``performance_management``
|
||||||
- tacker.sol_refactored.common.prometheus_plugin
|
| ``_threshold_package``
|
||||||
|
- | tacker.sol_refactored.common
|
||||||
|
| .prometheus_plugin
|
||||||
- Package name for performance management threshold.
|
- Package name for performance management threshold.
|
||||||
* - ``CONF.prometheus_plugin.performance_management_class``
|
* - ``performance_management_class``
|
||||||
- PrometheusPluginPm
|
- PrometheusPluginPm
|
||||||
- Class name for performance management job.
|
- Class name for performance management job.
|
||||||
* - ``CONF.prometheus_plugin.performance_management_threshold_class``
|
* - | ``performance_management``
|
||||||
|
| ``_threshold_class``
|
||||||
- PrometheusPluginThreshold
|
- PrometheusPluginThreshold
|
||||||
- Class name for performance management threshold.
|
- Class name for performance management threshold.
|
||||||
* - ``CONF.prometheus_plugin.fault_management_package``
|
* - ``fault_management_package``
|
||||||
- tacker.sol_refactored.common.prometheus_plugin
|
- | tacker.sol_refactored.common
|
||||||
|
| .prometheus_plugin
|
||||||
- Package name for fault management.
|
- Package name for fault management.
|
||||||
* - ``CONF.prometheus_plugin.fault_management_class``
|
* - ``fault_management_class``
|
||||||
- PrometheusPluginFm
|
- PrometheusPluginFm
|
||||||
- Class name for fault management.
|
- Class name for fault management.
|
||||||
* - ``CONF.prometheus_plugin.auto_scaling_package``
|
* - ``auto_scaling_package``
|
||||||
- tacker.sol_refactored.common.prometheus_plugin
|
- | tacker.sol_refactored.common
|
||||||
|
| .prometheus_plugin
|
||||||
- Package name for auto scaling.
|
- Package name for auto scaling.
|
||||||
* - ``CONF.prometheus_plugin.auto_scaling_class``
|
* - ``auto_scaling_class``
|
||||||
- PrometheusPluginAutoScaling
|
- PrometheusPluginAutoScaling
|
||||||
- Class name for auto scaling.
|
- Class name for auto scaling.
|
||||||
* - ``CONF.prometheus_plugin.auto_healing_package``
|
* - ``auto_healing_package``
|
||||||
- tacker.sol_refactored.common.prometheus_plugin
|
- | tacker.sol_refactored.common
|
||||||
|
| .prometheus_plugin
|
||||||
- Package name for auto healing.
|
- Package name for auto healing.
|
||||||
* - ``CONF.prometheus_plugin.auto_healing_class``
|
* - ``auto_healing_class``
|
||||||
- PrometheusPluginAutoHealing
|
- PrometheusPluginAutoHealing
|
||||||
- Class name for auto healing.
|
- Class name for auto healing.
|
||||||
|
|
||||||
.. rubric:: Footnotes
|
|
||||||
.. [#yaml] https://yaml.org/spec/1.2-old/spec.html
|
History of Checks
|
||||||
.. [#etsi_sol_003] https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
-----------------
|
||||||
.. [#f_string] https://docs.python.org/3.9/tutorial/inputoutput.html#fancier-output-formatting
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using Prometheus 2.45 and Alertmanager 0.26.
|
||||||
|
|
||||||
|
|
||||||
|
.. _ETSI GS NFV-SOL 003:
|
||||||
|
https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
||||||
|
.. _f-string: https://docs.python.org/3.11/tutorial/inputoutput.html#fancier-output-formatting
|
172
doc/source/user/v2/use_case_guide.rst
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
===================
|
||||||
|
v2 Tacker Use Cases
|
||||||
|
===================
|
||||||
|
|
||||||
|
|
||||||
|
VNF
|
||||||
|
___
|
||||||
|
|
||||||
|
Deploy
|
||||||
|
^^^^^^
|
||||||
|
|
||||||
|
VM
|
||||||
|
~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
vnf/deployment_with_tosca/index
|
||||||
|
vnf/deployment_with_user_data/index
|
||||||
|
|
||||||
|
Container
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
cnf/deployment/index
|
||||||
|
cnf/deployment_using_helm/index
|
||||||
|
|
||||||
|
|
||||||
|
Scale
|
||||||
|
^^^^^
|
||||||
|
|
||||||
|
VM
|
||||||
|
~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
vnf/scale/index
|
||||||
|
|
||||||
|
Container
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
cnf/scale/index
|
||||||
|
|
||||||
|
|
||||||
|
Heal
|
||||||
|
^^^^
|
||||||
|
|
||||||
|
VM
|
||||||
|
~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
vnf/heal/index
|
||||||
|
|
||||||
|
Container
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
cnf/heal/index
|
||||||
|
|
||||||
|
|
||||||
|
Update
|
||||||
|
^^^^^^
|
||||||
|
|
||||||
|
VM
|
||||||
|
~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
vnf/update
|
||||||
|
|
||||||
|
Container
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
cnf/update
|
||||||
|
|
||||||
|
|
||||||
|
Change External VNF Connectivity
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
VM
|
||||||
|
~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
vnf/chg_ext_conn
|
||||||
|
|
||||||
|
|
||||||
|
Change Current VNF Package
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
VM
|
||||||
|
~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
vnf/chg_vnfpkg/index
|
||||||
|
vnf/chg_vnfpkg_with_standard/index
|
||||||
|
vnf/coordinate_api_client_script
|
||||||
|
|
||||||
|
Container
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
cnf/chg_vnfpkg/index
|
||||||
|
|
||||||
|
|
||||||
|
Error Handling
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
error_handling
|
||||||
|
db_sync_error_handling
|
||||||
|
placement_error_handling
|
||||||
|
|
||||||
|
|
||||||
|
Management Driver
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Container Update
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
cnf/update_with_mgmt_driver/index
|
||||||
|
|
||||||
|
FaultNotification AutoHealing
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
fault_notification
|
||||||
|
|
||||||
|
|
||||||
|
Prometheus Plugin
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
prometheus_plugin
|
||||||
|
|
||||||
|
Container
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
cnf/auto_scale_pm_job/index
|
||||||
|
cnf/auto_scale_pm_th/index
|
||||||
|
cnf/auto_heal_fm/index
|
326
doc/source/user/v2/vnf/chg_ext_conn.rst
Normal file
@ -0,0 +1,326 @@
|
|||||||
|
=============================================
|
||||||
|
ETSI NFV-SOL Change External VNF Connectivity
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
This document describes how to change external VNF connectivity
|
||||||
|
in Tacker v2 API.
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following packages should be installed:
|
||||||
|
|
||||||
|
* tacker
|
||||||
|
* python-tackerclient
|
||||||
|
|
||||||
|
Execute up to "Instantiate VNF" in the procedure of
|
||||||
|
:doc:`/user/v2/vnf/deployment_with_user_data/index`.
|
||||||
|
In other words, the procedure after "Terminate VNF" is not executed.
|
||||||
|
|
||||||
|
|
||||||
|
Change External VNF Connectivity
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
As mentioned in Prerequisites, the VNF must be created
|
||||||
|
before performing change external connectivity.
|
||||||
|
|
||||||
|
Assuming that the following VNF instance exists,
|
||||||
|
this instance will be changed.
|
||||||
|
|
||||||
|
Details of CLI commands are described in
|
||||||
|
: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.
|
||||||
|
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"extVirtualLinks": [
|
||||||
|
{
|
||||||
|
"id": "ced0c31f-bb03-4351-90af-8c51f59bcf25",
|
||||||
|
"vimConnectionId": "vim1",
|
||||||
|
"resourceProviderId": "671cb532-4139-45e6-b873-b06b4864f0ab",
|
||||||
|
"resourceId": "dcdd8e59-d303-4659-bdff-d32f2cb2b806",
|
||||||
|
"extCps": [
|
||||||
|
{
|
||||||
|
"cpdId": "VDU1_CP1",
|
||||||
|
"cpConfig": {
|
||||||
|
"VDU1_CP1": {
|
||||||
|
"cpProtocolData": [
|
||||||
|
{
|
||||||
|
"layerProtocol": "IP_OVER_ETHERNET",
|
||||||
|
"ipOverEthernet": {
|
||||||
|
"ipAddresses": [
|
||||||
|
{
|
||||||
|
"type": "IPV4",
|
||||||
|
"numDynamicAddresses": 1,
|
||||||
|
"subnetId": "ab38a204-8c01-4205-95c6-b4e74198700f"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cpdId": "VDU2_CP2",
|
||||||
|
"cpConfig": {
|
||||||
|
"VDU2_CP2": {
|
||||||
|
"cpProtocolData": [
|
||||||
|
{
|
||||||
|
"layerProtocol": "IP_OVER_ETHERNET",
|
||||||
|
"ipOverEthernet": {
|
||||||
|
"ipAddresses": [
|
||||||
|
{
|
||||||
|
"type": "IPV4",
|
||||||
|
"fixedAddresses": [
|
||||||
|
"22.22.22.101"
|
||||||
|
],
|
||||||
|
"subnetId": "ab38a204-8c01-4205-95c6-b4e74198700f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IPV6",
|
||||||
|
"numDynamicAddresses": 1,
|
||||||
|
"subnetId": "3f023732-8364-43e0-80de-00799d5b78af"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vimConnectionInfo": {
|
||||||
|
"vim1": {
|
||||||
|
"vimId": "f7ed00b1-06f1-4076-95dc-c6ed11f5541c",
|
||||||
|
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3",
|
||||||
|
"interfaceInfo": {
|
||||||
|
"endpoint": "http://localhost/identity/v3"
|
||||||
|
},
|
||||||
|
"accessInfo": {
|
||||||
|
"username": "nfv_user",
|
||||||
|
"region": "RegionOne",
|
||||||
|
"password": "devstack",
|
||||||
|
"project": "nfv",
|
||||||
|
"projectDomain": "Default",
|
||||||
|
"userDomain": "Default"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"dummy-key": "dummy-val"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalParams": {
|
||||||
|
"dummy-key": "dummy-val",
|
||||||
|
"lcm-operation-user-data": "./UserData/userdata_standard.py",
|
||||||
|
"lcm-operation-user-data-class": "StandardUserData"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. 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
|
||||||
|
``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``.
|
||||||
|
|
||||||
|
|
||||||
|
How to Change the Specific Port Setting
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Execute Change External VNF Connectivity CLI command and check 'ID' and
|
||||||
|
'Stack Status' of the stack before and after operation.
|
||||||
|
This is to confirm that stack 'ID' has no change before and after operation,
|
||||||
|
and that the Stack update has been completed successfully.
|
||||||
|
See `Heat CLI reference`_. for details on Heat CLI commands.
|
||||||
|
|
||||||
|
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 |
|
||||||
|
+--------------------------------------+------------------------------------------+-----------------+
|
||||||
|
| 7a53b676-aa9c-4c7d-a8a7-1311646ec7e2 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c | CREATE_COMPLETE |
|
||||||
|
+--------------------------------------+------------------------------------------+-----------------+
|
||||||
|
|
||||||
|
|
||||||
|
Stack resource information:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack stack resource list HEAT_STACK_ID
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||||
|
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||||
|
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||||
|
| VDU1-0 | ea178dfa-5148-4be0-9508-58c94989b76a | VDU1.yaml | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
| VDU1-VolumeType | dc71e318-74f3-43dc-ad79-7503846384c7 | OS::Cinder::VolumeType | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
| VDU2-0 | cf97ee84-1681-4498-a0eb-e42f1de2a845 | VDU2.yaml | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
| VDU2-VolumeType | 322d5605-3409-4c63-b776-d8486a7593fe | OS::Cinder::VolumeType | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
| internalVL3_subnet | 360ec318-5f7d-4f56-b9cc-a089695b24ae | OS::Neutron::Subnet | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
| internalVL3 | 90d2c767-2b54-4c02-85aa-7bb1ff9f4d14 | OS::Neutron::Net | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Stack resource detailed information:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack stack resource show HEAT_STACK_ID VDU2_CP2 \
|
||||||
|
-f json | jq .attributes.fixed_ips
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"subnet_id": "a1d042f3-88aa-4150-b42b-8620c9be746c",
|
||||||
|
"ip_address": "100.100.100.11"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"subnet_id": "a12a1603-a30d-4724-80fb-9a7019a3c79f",
|
||||||
|
"ip_address": "1111:2222:3333::18d"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
Change External VNF Connectivity execution of the entire VNF:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack vnflcm change-ext-conn VNF_INSTANCE_ID sample_param_file.json \
|
||||||
|
--os-tacker-api-version 2
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Change External VNF Connectivity for VNF Instance df9150a0-8679-4b14-8cbc-9d2d6606ca7c has been accepted.
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Create a parameter file that describes the resource information to be changed in advance.
|
||||||
|
|
||||||
|
|
||||||
|
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 |
|
||||||
|
+--------------------------------------+------------------------------------------+-----------------+
|
||||||
|
| 7a53b676-aa9c-4c7d-a8a7-1311646ec7e2 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c | UPDATE_COMPLETE |
|
||||||
|
+--------------------------------------+------------------------------------------+-----------------+
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
'Stack Status' transitions to UPDATE_COMPLETE.
|
||||||
|
|
||||||
|
|
||||||
|
Stack resource information:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack stack resource list HEAT_STACK_ID
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||||
|
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
|
||||||
|
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||||
|
| VDU1-0 | ea178dfa-5148-4be0-9508-58c94989b76a | VDU1.yaml | UPDATE_COMPLETE | 2023-11-13T07:54:47Z |
|
||||||
|
| VDU1-VolumeType | dc71e318-74f3-43dc-ad79-7503846384c7 | OS::Cinder::VolumeType | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
| VDU2-0 | cf97ee84-1681-4498-a0eb-e42f1de2a845 | VDU2.yaml | UPDATE_COMPLETE | 2023-11-13T07:54:46Z |
|
||||||
|
| VDU2-VolumeType | 322d5605-3409-4c63-b776-d8486a7593fe | OS::Cinder::VolumeType | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
| internalVL3_subnet | 360ec318-5f7d-4f56-b9cc-a089695b24ae | OS::Neutron::Subnet | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
| internalVL3 | 90d2c767-2b54-4c02-85aa-7bb1ff9f4d14 | OS::Neutron::Net | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
|
||||||
|
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
|
||||||
|
|
||||||
|
|
||||||
|
Stack resource detailed information:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ openstack stack resource show HEAT_STACK_ID VDU2_CP2 \
|
||||||
|
-f json | jq .attributes.fixed_ips
|
||||||
|
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"subnet_id": "3f023732-8364-43e0-80de-00799d5b78af",
|
||||||
|
"ip_address": "1111:2222:4444::39f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"subnet_id": "ab38a204-8c01-4205-95c6-b4e74198700f",
|
||||||
|
"ip_address": "22.22.22.101"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
'fixed_ips' has changed from the IP before change external VNF
|
||||||
|
connectivity.
|
||||||
|
|
||||||
|
|
||||||
|
See `Heat CLI reference`_. for details on Heat CLI commands.
|
||||||
|
|
||||||
|
|
||||||
|
History of Checks
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The content of this document has been confirmed to work
|
||||||
|
using the following VNF Package.
|
||||||
|
|
||||||
|
* `basic_lcms_max_individual_vnfc for 2023.2 Bobcat`_
|
||||||
|
|
||||||
|
|
||||||
|
.. _Heat CLI reference: https://docs.openstack.org/python-openstackclient/latest/cli/plugin-commands/heat.html
|
||||||
|
.. _basic_lcms_max_individual_vnfc for 2023.2 Bobcat:
|
||||||
|
https://opendev.org/openstack/tacker/src/branch/stable/2023.2/tacker/tests/functional/sol_v2_common/samples/basic_lcms_max_individual_vnfc
|
@ -0,0 +1,54 @@
|
|||||||
|
heat_template_version: 2013-05-23
|
||||||
|
description: 'Simple Base HOT for Sample VNF'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
nfv:
|
||||||
|
type: json
|
||||||
|
|
||||||
|
resources:
|
||||||
|
VDU1_scale:
|
||||||
|
type: OS::Heat::AutoScalingGroup
|
||||||
|
properties:
|
||||||
|
min_size: 1
|
||||||
|
max_size: 3
|
||||||
|
desired_capacity: { get_param: [ nfv, VDU, VDU1, desired_capacity ] }
|
||||||
|
resource:
|
||||||
|
type: base_hot_nested_VDU1.yaml
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: [ nfv, VDU, VDU1, computeFlavourId ] }
|
||||||
|
image-VDU1: { get_param: [ nfv, VDU, VDU1, vcImageId] }
|
||||||
|
net1: { get_param: [ nfv, CP, VDU1_CP1, network] }
|
||||||
|
|
||||||
|
VDU2:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: [ nfv, VDU, VDU2, computeFlavourId ] }
|
||||||
|
image: { get_param: [ nfv, VDU, VDU2, vcImageId] }
|
||||||
|
networks:
|
||||||
|
- port:
|
||||||
|
get_resource: VDU2_CP1
|
||||||
|
|
||||||
|
VDU2_CP1:
|
||||||
|
type: OS::Neutron::Port
|
||||||
|
properties:
|
||||||
|
network: { get_param: [ nfv, CP, VDU2_CP1, network ] }
|
||||||
|
fixed_ips:
|
||||||
|
- ip_address: { get_param: [nfv, CP, VDU2_CP1, fixed_ips, 0, ip_address]}
|
||||||
|
|
||||||
|
VDU3:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: [ nfv, VDU, VDU3, computeFlavourId ] }
|
||||||
|
image: { get_param: [ nfv, VDU, VDU3, vcImageId] }
|
||||||
|
networks:
|
||||||
|
- port:
|
||||||
|
get_resource: VDU3_CP1
|
||||||
|
|
||||||
|
VDU3_CP1:
|
||||||
|
type: OS::Neutron::Port
|
||||||
|
properties:
|
||||||
|
network: { get_param: [ nfv, CP, VDU3_CP1, network ] }
|
||||||
|
fixed_ips:
|
||||||
|
- ip_address: { get_param: [nfv, CP, VDU3_CP1, fixed_ips, 0, ip_address]}
|
||||||
|
|
||||||
|
outputs: {}
|
@ -0,0 +1,26 @@
|
|||||||
|
heat_template_version: 2013-05-23
|
||||||
|
description: 'VDU1 HOT for Sample VNF'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
flavor:
|
||||||
|
type: string
|
||||||
|
image-VDU1:
|
||||||
|
type: string
|
||||||
|
net1:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
resources:
|
||||||
|
VDU1:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: flavor }
|
||||||
|
name: VDU1
|
||||||
|
image: { get_param: image-VDU1 }
|
||||||
|
networks:
|
||||||
|
- port:
|
||||||
|
get_resource: VDU1_CP1
|
||||||
|
|
||||||
|
VDU1_CP1:
|
||||||
|
type: OS::Neutron::Port
|
||||||
|
properties:
|
||||||
|
network: { get_param: net1 }
|
@ -0,0 +1,280 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: Simple deployment flavour for Sample VNF
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
- change_vnf_pkg_types.yaml
|
||||||
|
|
||||||
|
topology_template:
|
||||||
|
inputs:
|
||||||
|
descriptor_id:
|
||||||
|
type: string
|
||||||
|
descriptor_version:
|
||||||
|
type: string
|
||||||
|
provider:
|
||||||
|
type: string
|
||||||
|
product_name:
|
||||||
|
type: string
|
||||||
|
software_version:
|
||||||
|
type: string
|
||||||
|
vnfm_info:
|
||||||
|
type: list
|
||||||
|
entry_schema:
|
||||||
|
type: string
|
||||||
|
flavour_id:
|
||||||
|
type: string
|
||||||
|
flavour_description:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
substitution_mappings:
|
||||||
|
node_type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_id: simple
|
||||||
|
requirements:
|
||||||
|
virtual_link_external1_1: [ VDU1_CP1, virtual_link ]
|
||||||
|
virtual_link_external1_2: [ VDU2_CP1, virtual_link ]
|
||||||
|
virtual_link_external1_3: [ VDU3_CP1, virtual_link ]
|
||||||
|
|
||||||
|
node_templates:
|
||||||
|
VNF:
|
||||||
|
type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_description: A simple flavour
|
||||||
|
interfaces:
|
||||||
|
Vnflcm:
|
||||||
|
instantiate: []
|
||||||
|
instantiate_start: []
|
||||||
|
instantiate_end: []
|
||||||
|
terminate: []
|
||||||
|
terminate_start: []
|
||||||
|
terminate_end: []
|
||||||
|
modify_information: []
|
||||||
|
modify_information_start: []
|
||||||
|
modify_information_end: []
|
||||||
|
|
||||||
|
VDU1:
|
||||||
|
type: tosca.nodes.nfv.Vdu.Compute
|
||||||
|
properties:
|
||||||
|
name: VDU1
|
||||||
|
description: VDU1 compute node
|
||||||
|
vdu_profile:
|
||||||
|
min_number_of_instances: 1
|
||||||
|
max_number_of_instances: 3
|
||||||
|
sw_image_data:
|
||||||
|
name: VDU1-image
|
||||||
|
version: '0.5.2'
|
||||||
|
checksum:
|
||||||
|
algorithm: sha-256
|
||||||
|
hash: 932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464
|
||||||
|
container_format: bare
|
||||||
|
disk_format: qcow2
|
||||||
|
min_disk: 0 GB
|
||||||
|
min_ram: 256 MB
|
||||||
|
size: 2 GB
|
||||||
|
capabilities:
|
||||||
|
virtual_compute:
|
||||||
|
properties:
|
||||||
|
requested_additional_capabilities:
|
||||||
|
properties:
|
||||||
|
requested_additional_capability_name: m1.tiny
|
||||||
|
support_mandatory: true
|
||||||
|
target_performance_parameters:
|
||||||
|
entry_schema: test
|
||||||
|
virtual_memory:
|
||||||
|
virtual_mem_size: 512 MB
|
||||||
|
virtual_cpu:
|
||||||
|
num_virtual_cpu: 1
|
||||||
|
virtual_local_storage:
|
||||||
|
- size_of_storage: 3 GB
|
||||||
|
artifacts:
|
||||||
|
sw_image:
|
||||||
|
type: tosca.artifacts.nfv.SwImage
|
||||||
|
file: ../Files/images/cirros-0.5.2-x86_64-disk.img
|
||||||
|
|
||||||
|
VDU2:
|
||||||
|
type: tosca.nodes.nfv.Vdu.Compute
|
||||||
|
properties:
|
||||||
|
name: VDU2
|
||||||
|
description: VDU2 compute node
|
||||||
|
vdu_profile:
|
||||||
|
min_number_of_instances: 1
|
||||||
|
max_number_of_instances: 1
|
||||||
|
sw_image_data:
|
||||||
|
name: VDU2-image
|
||||||
|
version: '0.5.2'
|
||||||
|
checksum:
|
||||||
|
algorithm: sha-256
|
||||||
|
hash: 932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464
|
||||||
|
container_format: bare
|
||||||
|
disk_format: qcow2
|
||||||
|
min_disk: 0 GB
|
||||||
|
min_ram: 256 MB
|
||||||
|
size: 2 GB
|
||||||
|
capabilities:
|
||||||
|
virtual_compute:
|
||||||
|
properties:
|
||||||
|
requested_additional_capabilities:
|
||||||
|
properties:
|
||||||
|
requested_additional_capability_name: m1.small
|
||||||
|
support_mandatory: true
|
||||||
|
target_performance_parameters:
|
||||||
|
entry_schema: test
|
||||||
|
virtual_memory:
|
||||||
|
virtual_mem_size: 2048 MB
|
||||||
|
virtual_cpu:
|
||||||
|
num_virtual_cpu: 1
|
||||||
|
virtual_local_storage:
|
||||||
|
- size_of_storage: 3 GB
|
||||||
|
artifacts:
|
||||||
|
sw_image:
|
||||||
|
type: tosca.artifacts.nfv.SwImage
|
||||||
|
file: ../Files/images/cirros-0.5.2-x86_64-disk.img
|
||||||
|
|
||||||
|
VDU3:
|
||||||
|
type: tosca.nodes.nfv.Vdu.Compute
|
||||||
|
properties:
|
||||||
|
name: VDU3
|
||||||
|
description: VDU3 compute node
|
||||||
|
vdu_profile:
|
||||||
|
min_number_of_instances: 1
|
||||||
|
max_number_of_instances: 1
|
||||||
|
sw_image_data:
|
||||||
|
name: cirros-0.5.2-x86_64-disk
|
||||||
|
version: '0.5.2'
|
||||||
|
checksum:
|
||||||
|
algorithm: sha-256
|
||||||
|
hash: 932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464
|
||||||
|
container_format: bare
|
||||||
|
disk_format: qcow2
|
||||||
|
min_disk: 0 GB
|
||||||
|
min_ram: 256 MB
|
||||||
|
size: 2 GB
|
||||||
|
capabilities:
|
||||||
|
virtual_compute:
|
||||||
|
properties:
|
||||||
|
requested_additional_capabilities:
|
||||||
|
properties:
|
||||||
|
requested_additional_capability_name: m1.tiny
|
||||||
|
support_mandatory: true
|
||||||
|
target_performance_parameters:
|
||||||
|
entry_schema: test
|
||||||
|
virtual_memory:
|
||||||
|
virtual_mem_size: 512 MB
|
||||||
|
virtual_cpu:
|
||||||
|
num_virtual_cpu: 1
|
||||||
|
virtual_local_storage:
|
||||||
|
- size_of_storage: 3 GB
|
||||||
|
|
||||||
|
VDU1_CP1:
|
||||||
|
type: tosca.nodes.nfv.VduCp
|
||||||
|
properties:
|
||||||
|
layer_protocols: [ ipv4 ]
|
||||||
|
order: 0
|
||||||
|
requirements:
|
||||||
|
- virtual_binding: VDU1
|
||||||
|
|
||||||
|
VDU2_CP1:
|
||||||
|
type: tosca.nodes.nfv.VduCp
|
||||||
|
properties:
|
||||||
|
layer_protocols: [ ipv4 ]
|
||||||
|
order: 0
|
||||||
|
requirements:
|
||||||
|
- virtual_binding: VDU2
|
||||||
|
|
||||||
|
VDU3_CP1:
|
||||||
|
type: tosca.nodes.nfv.VduCp
|
||||||
|
properties:
|
||||||
|
layer_protocols: [ ipv4 ]
|
||||||
|
order: 0
|
||||||
|
requirements:
|
||||||
|
- virtual_binding: VDU3
|
||||||
|
|
||||||
|
policies:
|
||||||
|
- scaling_aspects:
|
||||||
|
type: tosca.policies.nfv.ScalingAspects
|
||||||
|
properties:
|
||||||
|
aspects:
|
||||||
|
VDU1_scale:
|
||||||
|
name: VDU1_scale
|
||||||
|
description: VDU1 scaling aspect
|
||||||
|
max_scale_level: 2
|
||||||
|
step_deltas:
|
||||||
|
- delta_1
|
||||||
|
|
||||||
|
- VDU1_initial_delta:
|
||||||
|
type: tosca.policies.nfv.VduInitialDelta
|
||||||
|
properties:
|
||||||
|
initial_delta:
|
||||||
|
number_of_instances: 2
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- VDU2_initial_delta:
|
||||||
|
type: tosca.policies.nfv.VduInitialDelta
|
||||||
|
properties:
|
||||||
|
initial_delta:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU2 ]
|
||||||
|
|
||||||
|
- VDU3_initial_delta:
|
||||||
|
type: tosca.policies.nfv.VduInitialDelta
|
||||||
|
properties:
|
||||||
|
initial_delta:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU3 ]
|
||||||
|
|
||||||
|
- VDU1_scaling_aspect_deltas:
|
||||||
|
type: tosca.policies.nfv.VduScalingAspectDeltas
|
||||||
|
properties:
|
||||||
|
aspect: VDU1_scale
|
||||||
|
deltas:
|
||||||
|
delta_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.InstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
description: Smallest size
|
||||||
|
scale_info:
|
||||||
|
VDU1_scale:
|
||||||
|
scale_level: 0
|
||||||
|
instantiation_level_2:
|
||||||
|
description: Largest size
|
||||||
|
scale_info:
|
||||||
|
VDU1_scale:
|
||||||
|
scale_level: 2
|
||||||
|
default_level: instantiation_level_1
|
||||||
|
|
||||||
|
- VDU1_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VduInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
instantiation_level_2:
|
||||||
|
number_of_instances: 3
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- VDU2_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VduInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
instantiation_level_2:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU2 ]
|
||||||
|
|
||||||
|
- VDU3_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VduInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
instantiation_level_2:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU3 ]
|
@ -0,0 +1,31 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: Sample VNF
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
- change_vnf_pkg_types.yaml
|
||||||
|
- change_vnf_pkg_new_df_simple.yaml
|
||||||
|
|
||||||
|
topology_template:
|
||||||
|
inputs:
|
||||||
|
selected_flavour:
|
||||||
|
type: string
|
||||||
|
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||||
|
|
||||||
|
node_templates:
|
||||||
|
VNF:
|
||||||
|
type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_id: { get_input: selected_flavour }
|
||||||
|
descriptor_id: 3e7c1be1-ec09-4288-bbf6-e2af08086b61
|
||||||
|
provider: Company
|
||||||
|
product_name: Sample VNF
|
||||||
|
software_version: '1.0'
|
||||||
|
descriptor_version: '1.0'
|
||||||
|
vnfm_info:
|
||||||
|
- Tacker
|
||||||
|
requirements:
|
||||||
|
#- virtual_link_external # mapped in lower-level templates
|
||||||
|
#- virtual_link_internal # mapped in lower-level templates
|
@ -0,0 +1,55 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: VNF type definition
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
|
||||||
|
node_types:
|
||||||
|
company.provider.VNF:
|
||||||
|
derived_from: tosca.nodes.nfv.VNF
|
||||||
|
properties:
|
||||||
|
descriptor_id:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ 3e7c1be1-ec09-4288-bbf6-e2af08086b61 ] ]
|
||||||
|
default: 3e7c1be1-ec09-4288-bbf6-e2af08086b61
|
||||||
|
descriptor_version:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ '1.0' ] ]
|
||||||
|
default: '1.0'
|
||||||
|
provider:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ 'Company' ] ]
|
||||||
|
default: 'Company'
|
||||||
|
product_name:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ 'Sample VNF' ] ]
|
||||||
|
default: 'Sample VNF'
|
||||||
|
software_version:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ '1.0' ] ]
|
||||||
|
default: '1.0'
|
||||||
|
vnfm_info:
|
||||||
|
type: list
|
||||||
|
entry_schema:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ Tacker ] ]
|
||||||
|
default: [ Tacker ]
|
||||||
|
flavour_id:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ simple ] ]
|
||||||
|
default: simple
|
||||||
|
flavour_description:
|
||||||
|
type: string
|
||||||
|
default: "flavour"
|
||||||
|
requirements:
|
||||||
|
- virtual_link_external1:
|
||||||
|
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||||
|
- virtual_link_external2:
|
||||||
|
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||||
|
- virtual_link_external3:
|
||||||
|
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||||
|
interfaces:
|
||||||
|
Vnflcm:
|
||||||
|
type: tosca.interfaces.nfv.Vnflcm
|
@ -0,0 +1,115 @@
|
|||||||
|
# Copyright (C) 2022 Fujitsu
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
from oslo_log import log as logging
|
||||||
|
import paramiko
|
||||||
|
|
||||||
|
from tacker.sol_refactored.common import exceptions as sol_ex
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
CMD_TIMEOUT = 30
|
||||||
|
SERVER_WAIT_COMPLETE_TIME = 60
|
||||||
|
SSH_CONNECT_RETRY_COUNT = 4
|
||||||
|
|
||||||
|
|
||||||
|
class SampleNewCoordinateVNFScript(object):
|
||||||
|
|
||||||
|
def __init__(self, vnfc_param):
|
||||||
|
self.vnfc_param = vnfc_param
|
||||||
|
|
||||||
|
def coordinate_vnf(self):
|
||||||
|
# check ssh connect and os version
|
||||||
|
"""(YiFeng) Add comment to check ssh access
|
||||||
|
|
||||||
|
The next part of code is to check connect VM via ssh.
|
||||||
|
Since the zuul's network cannot check this content, so
|
||||||
|
we comment this part of code. If you want to check them
|
||||||
|
in your local environment, please uncomment.
|
||||||
|
# user = self.vnfc_param['username']
|
||||||
|
# password = self.vnfc_param['password']
|
||||||
|
# host = self.vnfc_param['ssh_ip']
|
||||||
|
# commander = self._init_commander(
|
||||||
|
# user, password, host, retry=SSH_CONNECT_RETRY_COUNT)
|
||||||
|
# ssh_command = 'cat /etc/os-release | grep PRETTY_NAME'
|
||||||
|
# result = self._execute_command(commander, host, ssh_command)
|
||||||
|
# os_version = result[0].replace('\n', '').split('=')[1]
|
||||||
|
# LOG.info('The os version of this new VM is %s', os_version)
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _init_commander(self, user, password, host, retry):
|
||||||
|
while retry > 0:
|
||||||
|
try:
|
||||||
|
ssh = paramiko.SSHClient()
|
||||||
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||||
|
ssh.connect(
|
||||||
|
host, username=user, password=password)
|
||||||
|
LOG.info("Connected to %s", host)
|
||||||
|
return ssh
|
||||||
|
except paramiko.AuthenticationException as e:
|
||||||
|
LOG.error("Authentication failed when connecting to %s",
|
||||||
|
host)
|
||||||
|
raise sol_ex.VMRunningFailed(e)
|
||||||
|
except (paramiko.SSHException,
|
||||||
|
paramiko.ssh_exception.NoValidConnectionsError) as e:
|
||||||
|
LOG.debug(e)
|
||||||
|
retry -= 1
|
||||||
|
if retry == 0:
|
||||||
|
LOG.error(e)
|
||||||
|
raise sol_ex.VMRunningFailed(e)
|
||||||
|
time.sleep(SERVER_WAIT_COMPLETE_TIME)
|
||||||
|
|
||||||
|
def _execute_command(self, commander, host, command):
|
||||||
|
try:
|
||||||
|
stdin, stdout, stderr = commander.exec_command(command)
|
||||||
|
cmd_out = stdout.readlines()
|
||||||
|
cmd_err = stderr.readlines()
|
||||||
|
return_code = stdout.channel.recv_exit_status()
|
||||||
|
except paramiko.SSHException as e:
|
||||||
|
LOG.error("Command execution failed at %s. Giving up", host)
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
commander.close()
|
||||||
|
if return_code != 0:
|
||||||
|
error = cmd_err
|
||||||
|
raise sol_ex.VMRunningFailed(error_info=error)
|
||||||
|
result = "cmd: %s, stdout: %s, stderr: %s, return code: %s" % (
|
||||||
|
command, cmd_out, cmd_err, return_code)
|
||||||
|
LOG.debug("Remote command execution result: %s", result)
|
||||||
|
return cmd_out
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
operation = "coordinate_vnf"
|
||||||
|
vnfc_param = pickle.load(sys.stdin.buffer)
|
||||||
|
script = SampleNewCoordinateVNFScript(vnfc_param)
|
||||||
|
try:
|
||||||
|
getattr(script, operation)()
|
||||||
|
except Exception:
|
||||||
|
raise Exception
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
main()
|
||||||
|
os._exit(0)
|
||||||
|
except Exception as ex:
|
||||||
|
sys.stderr.write(str(ex))
|
||||||
|
sys.stderr.flush()
|
||||||
|
os._exit(1)
|
@ -0,0 +1,4 @@
|
|||||||
|
TOSCA-Meta-File-Version: 1.0
|
||||||
|
CSAR-Version: 1.1
|
||||||
|
Created-by: Onboarding portal
|
||||||
|
Entry-Definitions: Definitions/change_vnf_pkg_top.vnfd.yaml
|
@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"vnfdId": "3e7c1be1-ec09-4288-bbf6-e2af08086b61",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extVirtualLinks": [
|
||||||
|
{
|
||||||
|
"id": "9b319831-f6e2-4027-be42-170b2effd3dd",
|
||||||
|
"resourceId": "0cefe3d4-6729-41c5-bd39-277fd9ece3d3",
|
||||||
|
"extCps": [
|
||||||
|
{
|
||||||
|
"cpdId": "VDU1_CP1",
|
||||||
|
"cpConfig": {
|
||||||
|
"VDU1_CP1_1": {
|
||||||
|
"cpProtocolData": [
|
||||||
|
{
|
||||||
|
"layerProtocol": "IP_OVER_ETHERNET",
|
||||||
|
"ipOverEthernet": {
|
||||||
|
"ipAddresses": [
|
||||||
|
{
|
||||||
|
"type": "IPV4",
|
||||||
|
"numDynamicAddresses": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
heat_template_version: 2013-05-23
|
||||||
|
description: 'Simple Base HOT for Sample VNF'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
nfv:
|
||||||
|
type: json
|
||||||
|
|
||||||
|
resources:
|
||||||
|
VDU1_scale:
|
||||||
|
type: OS::Heat::AutoScalingGroup
|
||||||
|
properties:
|
||||||
|
min_size: 1
|
||||||
|
max_size: 3
|
||||||
|
desired_capacity: { get_param: [ nfv, VDU, VDU1, desired_capacity ] }
|
||||||
|
resource:
|
||||||
|
type: base_hot_nested_VDU1.yaml
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: [ nfv, VDU, VDU1, computeFlavourId ] }
|
||||||
|
image-VDU1: { get_param: [ nfv, VDU, VDU1, vcImageId] }
|
||||||
|
net1: { get_param: [ nfv, CP, VDU1_CP1, network] }
|
||||||
|
|
||||||
|
VDU2:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: [ nfv, VDU, VDU2, computeFlavourId ] }
|
||||||
|
image: { get_param: [ nfv, VDU, VDU2, vcImageId] }
|
||||||
|
networks:
|
||||||
|
- port:
|
||||||
|
get_resource: VDU2_CP1
|
||||||
|
|
||||||
|
VDU2_CP1:
|
||||||
|
type: OS::Neutron::Port
|
||||||
|
properties:
|
||||||
|
network: { get_param: [ nfv, CP, VDU2_CP1, network ] }
|
||||||
|
fixed_ips:
|
||||||
|
- ip_address: { get_param: [nfv, CP, VDU2_CP1, fixed_ips, 0, ip_address]}
|
||||||
|
|
||||||
|
VDU3:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: [ nfv, VDU, VDU3, computeFlavourId ] }
|
||||||
|
image: { get_param: [ nfv, VDU, VDU3, vcImageId] }
|
||||||
|
networks:
|
||||||
|
- port:
|
||||||
|
get_resource: VDU3_CP1
|
||||||
|
|
||||||
|
VDU3_CP1:
|
||||||
|
type: OS::Neutron::Port
|
||||||
|
properties:
|
||||||
|
network: { get_param: [ nfv, CP, VDU3_CP1, network ] }
|
||||||
|
fixed_ips:
|
||||||
|
- ip_address: { get_param: [nfv, CP, VDU3_CP1, fixed_ips, 0, ip_address]}
|
||||||
|
|
||||||
|
outputs: {}
|
@ -0,0 +1,26 @@
|
|||||||
|
heat_template_version: 2013-05-23
|
||||||
|
description: 'VDU1 HOT for Sample VNF'
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
flavor:
|
||||||
|
type: string
|
||||||
|
image-VDU1:
|
||||||
|
type: string
|
||||||
|
net1:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
resources:
|
||||||
|
VDU1:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
flavor: { get_param: flavor }
|
||||||
|
name: VDU1
|
||||||
|
image: { get_param: image-VDU1 }
|
||||||
|
networks:
|
||||||
|
- port:
|
||||||
|
get_resource: VDU1_CP1
|
||||||
|
|
||||||
|
VDU1_CP1:
|
||||||
|
type: OS::Neutron::Port
|
||||||
|
properties:
|
||||||
|
network: { get_param: net1 }
|
@ -0,0 +1,272 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: Simple deployment flavour for Sample VNF
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
- change_vnf_pkg_types.yaml
|
||||||
|
|
||||||
|
topology_template:
|
||||||
|
inputs:
|
||||||
|
descriptor_id:
|
||||||
|
type: string
|
||||||
|
descriptor_version:
|
||||||
|
type: string
|
||||||
|
provider:
|
||||||
|
type: string
|
||||||
|
product_name:
|
||||||
|
type: string
|
||||||
|
software_version:
|
||||||
|
type: string
|
||||||
|
vnfm_info:
|
||||||
|
type: list
|
||||||
|
entry_schema:
|
||||||
|
type: string
|
||||||
|
flavour_id:
|
||||||
|
type: string
|
||||||
|
flavour_description:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
substitution_mappings:
|
||||||
|
node_type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_id: simple
|
||||||
|
requirements:
|
||||||
|
virtual_link_external1_1: [ VDU1_CP1, virtual_link ]
|
||||||
|
virtual_link_external1_2: [ VDU2_CP1, virtual_link ]
|
||||||
|
virtual_link_external1_3: [ VDU3_CP1, virtual_link ]
|
||||||
|
|
||||||
|
node_templates:
|
||||||
|
VNF:
|
||||||
|
type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_description: A simple flavour
|
||||||
|
interfaces:
|
||||||
|
Vnflcm:
|
||||||
|
instantiate: []
|
||||||
|
instantiate_start: []
|
||||||
|
instantiate_end: []
|
||||||
|
terminate: []
|
||||||
|
terminate_start: []
|
||||||
|
terminate_end: []
|
||||||
|
modify_information: []
|
||||||
|
modify_information_start: []
|
||||||
|
modify_information_end: []
|
||||||
|
|
||||||
|
VDU1:
|
||||||
|
type: tosca.nodes.nfv.Vdu.Compute
|
||||||
|
properties:
|
||||||
|
name: VDU1
|
||||||
|
description: VDU1 compute node
|
||||||
|
vdu_profile:
|
||||||
|
min_number_of_instances: 1
|
||||||
|
max_number_of_instances: 3
|
||||||
|
sw_image_data:
|
||||||
|
name: cirros-0.5.2-x86_64-disk
|
||||||
|
version: '0.5.2'
|
||||||
|
checksum:
|
||||||
|
algorithm: sha-256
|
||||||
|
hash: 932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464
|
||||||
|
container_format: bare
|
||||||
|
disk_format: qcow2
|
||||||
|
min_disk: 0 GB
|
||||||
|
min_ram: 256 MB
|
||||||
|
size: 2 GB
|
||||||
|
capabilities:
|
||||||
|
virtual_compute:
|
||||||
|
properties:
|
||||||
|
requested_additional_capabilities:
|
||||||
|
properties:
|
||||||
|
requested_additional_capability_name: m1.tiny
|
||||||
|
support_mandatory: true
|
||||||
|
target_performance_parameters:
|
||||||
|
entry_schema: test
|
||||||
|
virtual_memory:
|
||||||
|
virtual_mem_size: 512 MB
|
||||||
|
virtual_cpu:
|
||||||
|
num_virtual_cpu: 1
|
||||||
|
virtual_local_storage:
|
||||||
|
- size_of_storage: 3 GB
|
||||||
|
|
||||||
|
VDU2:
|
||||||
|
type: tosca.nodes.nfv.Vdu.Compute
|
||||||
|
properties:
|
||||||
|
name: VDU2
|
||||||
|
description: VDU2 compute node
|
||||||
|
vdu_profile:
|
||||||
|
min_number_of_instances: 1
|
||||||
|
max_number_of_instances: 1
|
||||||
|
sw_image_data:
|
||||||
|
name: cirros-0.5.2-x86_64-disk
|
||||||
|
version: '0.5.2'
|
||||||
|
checksum:
|
||||||
|
algorithm: sha-256
|
||||||
|
hash: 932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464
|
||||||
|
container_format: bare
|
||||||
|
disk_format: qcow2
|
||||||
|
min_disk: 0 GB
|
||||||
|
min_ram: 256 MB
|
||||||
|
size: 2 GB
|
||||||
|
capabilities:
|
||||||
|
virtual_compute:
|
||||||
|
properties:
|
||||||
|
requested_additional_capabilities:
|
||||||
|
properties:
|
||||||
|
requested_additional_capability_name: m1.tiny
|
||||||
|
support_mandatory: true
|
||||||
|
target_performance_parameters:
|
||||||
|
entry_schema: test
|
||||||
|
virtual_memory:
|
||||||
|
virtual_mem_size: 512 MB
|
||||||
|
virtual_cpu:
|
||||||
|
num_virtual_cpu: 1
|
||||||
|
virtual_local_storage:
|
||||||
|
- size_of_storage: 3 GB
|
||||||
|
|
||||||
|
VDU3:
|
||||||
|
type: tosca.nodes.nfv.Vdu.Compute
|
||||||
|
properties:
|
||||||
|
name: VDU3
|
||||||
|
description: VDU3 compute node
|
||||||
|
vdu_profile:
|
||||||
|
min_number_of_instances: 1
|
||||||
|
max_number_of_instances: 1
|
||||||
|
sw_image_data:
|
||||||
|
name: cirros-0.5.2-x86_64-disk
|
||||||
|
version: '0.5.2'
|
||||||
|
checksum:
|
||||||
|
algorithm: sha-256
|
||||||
|
hash: 932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464
|
||||||
|
container_format: bare
|
||||||
|
disk_format: qcow2
|
||||||
|
min_disk: 0 GB
|
||||||
|
min_ram: 256 MB
|
||||||
|
size: 2 GB
|
||||||
|
capabilities:
|
||||||
|
virtual_compute:
|
||||||
|
properties:
|
||||||
|
requested_additional_capabilities:
|
||||||
|
properties:
|
||||||
|
requested_additional_capability_name: m1.tiny
|
||||||
|
support_mandatory: true
|
||||||
|
target_performance_parameters:
|
||||||
|
entry_schema: test
|
||||||
|
virtual_memory:
|
||||||
|
virtual_mem_size: 512 MB
|
||||||
|
virtual_cpu:
|
||||||
|
num_virtual_cpu: 1
|
||||||
|
virtual_local_storage:
|
||||||
|
- size_of_storage: 3 GB
|
||||||
|
|
||||||
|
VDU1_CP1:
|
||||||
|
type: tosca.nodes.nfv.VduCp
|
||||||
|
properties:
|
||||||
|
layer_protocols: [ ipv4 ]
|
||||||
|
order: 0
|
||||||
|
requirements:
|
||||||
|
- virtual_binding: VDU1
|
||||||
|
|
||||||
|
VDU2_CP1:
|
||||||
|
type: tosca.nodes.nfv.VduCp
|
||||||
|
properties:
|
||||||
|
layer_protocols: [ ipv4 ]
|
||||||
|
order: 0
|
||||||
|
requirements:
|
||||||
|
- virtual_binding: VDU2
|
||||||
|
|
||||||
|
VDU3_CP1:
|
||||||
|
type: tosca.nodes.nfv.VduCp
|
||||||
|
properties:
|
||||||
|
layer_protocols: [ ipv4 ]
|
||||||
|
order: 0
|
||||||
|
requirements:
|
||||||
|
- virtual_binding: VDU3
|
||||||
|
|
||||||
|
policies:
|
||||||
|
- scaling_aspects:
|
||||||
|
type: tosca.policies.nfv.ScalingAspects
|
||||||
|
properties:
|
||||||
|
aspects:
|
||||||
|
VDU1_scale:
|
||||||
|
name: VDU1_scale
|
||||||
|
description: VDU1 scaling aspect
|
||||||
|
max_scale_level: 2
|
||||||
|
step_deltas:
|
||||||
|
- delta_1
|
||||||
|
|
||||||
|
- VDU1_initial_delta:
|
||||||
|
type: tosca.policies.nfv.VduInitialDelta
|
||||||
|
properties:
|
||||||
|
initial_delta:
|
||||||
|
number_of_instances: 2
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- VDU2_initial_delta:
|
||||||
|
type: tosca.policies.nfv.VduInitialDelta
|
||||||
|
properties:
|
||||||
|
initial_delta:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU2 ]
|
||||||
|
|
||||||
|
- VDU3_initial_delta:
|
||||||
|
type: tosca.policies.nfv.VduInitialDelta
|
||||||
|
properties:
|
||||||
|
initial_delta:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU3 ]
|
||||||
|
|
||||||
|
- VDU1_scaling_aspect_deltas:
|
||||||
|
type: tosca.policies.nfv.VduScalingAspectDeltas
|
||||||
|
properties:
|
||||||
|
aspect: VDU1_scale
|
||||||
|
deltas:
|
||||||
|
delta_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.InstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
description: Smallest size
|
||||||
|
scale_info:
|
||||||
|
VDU1_scale:
|
||||||
|
scale_level: 0
|
||||||
|
instantiation_level_2:
|
||||||
|
description: Largest size
|
||||||
|
scale_info:
|
||||||
|
VDU1_scale:
|
||||||
|
scale_level: 2
|
||||||
|
default_level: instantiation_level_1
|
||||||
|
|
||||||
|
- VDU1_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VduInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
instantiation_level_2:
|
||||||
|
number_of_instances: 3
|
||||||
|
targets: [ VDU1 ]
|
||||||
|
|
||||||
|
- VDU2_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VduInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
instantiation_level_2:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU2 ]
|
||||||
|
|
||||||
|
- VDU3_instantiation_levels:
|
||||||
|
type: tosca.policies.nfv.VduInstantiationLevels
|
||||||
|
properties:
|
||||||
|
levels:
|
||||||
|
instantiation_level_1:
|
||||||
|
number_of_instances: 1
|
||||||
|
instantiation_level_2:
|
||||||
|
number_of_instances: 1
|
||||||
|
targets: [ VDU3 ]
|
@ -0,0 +1,31 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: Sample VNF
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
- change_vnf_pkg_types.yaml
|
||||||
|
- change_vnf_pkg_old_df_simple.yaml
|
||||||
|
|
||||||
|
topology_template:
|
||||||
|
inputs:
|
||||||
|
selected_flavour:
|
||||||
|
type: string
|
||||||
|
description: VNF deployment flavour selected by the consumer. It is provided in the API
|
||||||
|
|
||||||
|
node_templates:
|
||||||
|
VNF:
|
||||||
|
type: company.provider.VNF
|
||||||
|
properties:
|
||||||
|
flavour_id: { get_input: selected_flavour }
|
||||||
|
descriptor_id: c499a115-3f48-4a1e-8211-04f0d0b3b3bf
|
||||||
|
provider: Company
|
||||||
|
product_name: Sample VNF
|
||||||
|
software_version: '1.0'
|
||||||
|
descriptor_version: '1.0'
|
||||||
|
vnfm_info:
|
||||||
|
- Tacker
|
||||||
|
requirements:
|
||||||
|
#- virtual_link_external # mapped in lower-level templates
|
||||||
|
#- virtual_link_internal # mapped in lower-level templates
|
@ -0,0 +1,55 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_2
|
||||||
|
|
||||||
|
description: VNF type definition
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- etsi_nfv_sol001_common_types.yaml
|
||||||
|
- etsi_nfv_sol001_vnfd_types.yaml
|
||||||
|
|
||||||
|
node_types:
|
||||||
|
company.provider.VNF:
|
||||||
|
derived_from: tosca.nodes.nfv.VNF
|
||||||
|
properties:
|
||||||
|
descriptor_id:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ c499a115-3f48-4a1e-8211-04f0d0b3b3bf ] ]
|
||||||
|
default: c499a115-3f48-4a1e-8211-04f0d0b3b3bf
|
||||||
|
descriptor_version:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ '1.0' ] ]
|
||||||
|
default: '1.0'
|
||||||
|
provider:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ 'Company' ] ]
|
||||||
|
default: 'Company'
|
||||||
|
product_name:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ 'Sample VNF' ] ]
|
||||||
|
default: 'Sample VNF'
|
||||||
|
software_version:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ '1.0' ] ]
|
||||||
|
default: '1.0'
|
||||||
|
vnfm_info:
|
||||||
|
type: list
|
||||||
|
entry_schema:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ Tacker ] ]
|
||||||
|
default: [ Tacker ]
|
||||||
|
flavour_id:
|
||||||
|
type: string
|
||||||
|
constraints: [ valid_values: [ simple ] ]
|
||||||
|
default: simple
|
||||||
|
flavour_description:
|
||||||
|
type: string
|
||||||
|
default: "flavour"
|
||||||
|
requirements:
|
||||||
|
- virtual_link_external1:
|
||||||
|
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||||
|
- virtual_link_external2:
|
||||||
|
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||||
|
- virtual_link_external3:
|
||||||
|
capability: tosca.capabilities.nfv.VirtualLinkable
|
||||||
|
interfaces:
|
||||||
|
Vnflcm:
|
||||||
|
type: tosca.interfaces.nfv.Vnflcm
|
@ -0,0 +1,115 @@
|
|||||||
|
# Copyright (C) 2022 Fujitsu
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
from oslo_log import log as logging
|
||||||
|
import paramiko
|
||||||
|
|
||||||
|
from tacker.sol_refactored.common import exceptions as sol_ex
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
CMD_TIMEOUT = 30
|
||||||
|
SERVER_WAIT_COMPLETE_TIME = 60
|
||||||
|
SSH_CONNECT_RETRY_COUNT = 4
|
||||||
|
|
||||||
|
|
||||||
|
class SampleOldCoordinateVNFScript(object):
|
||||||
|
|
||||||
|
def __init__(self, vnfc_param):
|
||||||
|
self.vnfc_param = vnfc_param
|
||||||
|
|
||||||
|
def coordinate_vnf(self):
|
||||||
|
# check ssh connect and os version
|
||||||
|
"""(YiFeng) Add comment to check ssh access
|
||||||
|
|
||||||
|
The next part of code is to check connect VM via ssh.
|
||||||
|
Since the zuul's network cannot check this content, so
|
||||||
|
we comment this part of code. If you want to check them
|
||||||
|
in your local environment, please uncomment.
|
||||||
|
# user = self.vnfc_param['username']
|
||||||
|
# password = self.vnfc_param['password']
|
||||||
|
# host = self.vnfc_param['ssh_ip']
|
||||||
|
# commander = self._init_commander(
|
||||||
|
# user, password, host, retry=SSH_CONNECT_RETRY_COUNT)
|
||||||
|
# ssh_command = 'cat /etc/os-release | grep PRETTY_NAME'
|
||||||
|
# result = self._execute_command(commander, host, ssh_command)
|
||||||
|
# os_version = result.get_stdout()[0].replace('\n', '').split('=')
|
||||||
|
# LOG.info('The os version of this new VM is %s', os_version)
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _init_commander(self, user, password, host, retry):
|
||||||
|
while retry > 0:
|
||||||
|
try:
|
||||||
|
ssh = paramiko.SSHClient()
|
||||||
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||||
|
ssh.connect(
|
||||||
|
host, username=user, password=password)
|
||||||
|
LOG.info("Connected to %s", host)
|
||||||
|
return ssh
|
||||||
|
except paramiko.AuthenticationException as e:
|
||||||
|
LOG.error("Authentication failed when connecting to %s",
|
||||||
|
host)
|
||||||
|
raise sol_ex.VMRunningFailed(e)
|
||||||
|
except (paramiko.SSHException,
|
||||||
|
paramiko.ssh_exception.NoValidConnectionsError) as e:
|
||||||
|
LOG.debug(e)
|
||||||
|
retry -= 1
|
||||||
|
if retry == 0:
|
||||||
|
LOG.error(e)
|
||||||
|
raise sol_ex.VMRunningFailed(e)
|
||||||
|
time.sleep(SERVER_WAIT_COMPLETE_TIME)
|
||||||
|
|
||||||
|
def _execute_command(self, commander, host, command):
|
||||||
|
try:
|
||||||
|
stdin, stdout, stderr = commander.exec_command(command)
|
||||||
|
cmd_out = stdout.readlines()
|
||||||
|
cmd_err = stderr.readlines()
|
||||||
|
return_code = stdout.channel.recv_exit_status()
|
||||||
|
except paramiko.SSHException as e:
|
||||||
|
LOG.error("Command execution failed at %s. Giving up", host)
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
commander.close()
|
||||||
|
if return_code != 0:
|
||||||
|
error = cmd_err
|
||||||
|
raise sol_ex.VMRunningFailed(error_info=error)
|
||||||
|
result = "cmd: %s, stdout: %s, stderr: %s, return code: %s" % (
|
||||||
|
command, cmd_out, cmd_err, return_code)
|
||||||
|
LOG.debug("Remote command execution result: %s", result)
|
||||||
|
return cmd_out
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
operation = "coordinate_vnf"
|
||||||
|
vnfc_param = pickle.load(sys.stdin.buffer)
|
||||||
|
script = SampleOldCoordinateVNFScript(vnfc_param)
|
||||||
|
try:
|
||||||
|
getattr(script, operation)()
|
||||||
|
except Exception:
|
||||||
|
raise Exception
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
main()
|
||||||
|
os._exit(0)
|
||||||
|
except Exception as ex:
|
||||||
|
sys.stderr.write(str(ex))
|
||||||
|
sys.stderr.flush()
|
||||||
|
os._exit(1)
|
@ -0,0 +1,4 @@
|
|||||||
|
TOSCA-Meta-File-Version: 1.0
|
||||||
|
CSAR-Version: 1.1
|
||||||
|
Created-by: Onboarding portal
|
||||||
|
Entry-Definitions: Definitions/change_vnf_pkg_top.vnfd.yaml
|
@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"flavourId": "simple",
|
||||||
|
"instantiationLevelId": "instantiation_level_1",
|
||||||
|
"extVirtualLinks": [
|
||||||
|
{
|
||||||
|
"id": "cea931f1-829f-4de5-8c0e-c2990bb53d04",
|
||||||
|
"resourceId": "859db81a-2d3f-4634-be04-bdf052af5792",
|
||||||
|
"extCps": [
|
||||||
|
{
|
||||||
|
"cpdId": "VDU1_CP1",
|
||||||
|
"cpConfig": {
|
||||||
|
"VDU1_CP1_1": {
|
||||||
|
"cpProtocolData": [
|
||||||
|
{
|
||||||
|
"layerProtocol": "IP_OVER_ETHERNET",
|
||||||
|
"ipOverEthernet": {
|
||||||
|
"ipAddresses": [
|
||||||
|
{
|
||||||
|
"type": "IPV4",
|
||||||
|
"numDynamicAddresses": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cpdId": "VDU2_CP1",
|
||||||
|
"cpConfig": {
|
||||||
|
"VDU2_CP1_1": {
|
||||||
|
"cpProtocolData": [
|
||||||
|
{
|
||||||
|
"layerProtocol": "IP_OVER_ETHERNET",
|
||||||
|
"ipOverEthernet": {
|
||||||
|
"ipAddresses": [
|
||||||
|
{
|
||||||
|
"type": "IPV4",
|
||||||
|
"fixedAddresses": [
|
||||||
|
"10.10.0.101"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cpdId": "VDU3_CP1",
|
||||||
|
"cpConfig": {
|
||||||
|
"VDU3_CP1_1": {
|
||||||
|
"cpProtocolData": [
|
||||||
|
{
|
||||||
|
"layerProtocol": "IP_OVER_ETHERNET",
|
||||||
|
"ipOverEthernet": {
|
||||||
|
"ipAddresses": [
|
||||||
|
{
|
||||||
|
"type": "IPV4",
|
||||||
|
"fixedAddresses": [
|
||||||
|
"10.10.0.102"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vimConnectionInfo": {
|
||||||
|
"vim1": {
|
||||||
|
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3",
|
||||||
|
"vimId": "4e4b7eef-cdff-43a1-93a8-63af4f962948",
|
||||||
|
"interfaceInfo": {
|
||||||
|
"endpoint": "http://localhost/identity/v3"
|
||||||
|
},
|
||||||
|
"accessInfo": {
|
||||||
|
"username": "nfv_user",
|
||||||
|
"region": "RegionOne",
|
||||||
|
"password": "devstack",
|
||||||
|
"project": "nfv",
|
||||||
|
"projectDomain": "Default",
|
||||||
|
"userDomain": "Default"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +1,23 @@
|
|||||||
@startuml
|
@startuml
|
||||||
|
|
||||||
frame "python-tackerclient" {
|
frame "python-tackerclient" {
|
||||||
component "tacker-client" as client
|
component "tacker-client" as client
|
||||||
}
|
}
|
||||||
|
|
||||||
frame "tacker" {
|
frame "tacker" {
|
||||||
component "tacker-server" {
|
component "tacker-server" {
|
||||||
component "server" as serv
|
component "server" as serv
|
||||||
}
|
}
|
||||||
component "tacker-conductor" {
|
component "tacker-conductor" {
|
||||||
component "conductor" as cond
|
component "conductor" as cond
|
||||||
component "OpenStack\ninfra-driver" as infra
|
component "OpenStack\ninfra-driver" as infra
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
node "OpenStack\nHeat" as heat
|
node "OpenStack\nHeat" as heat
|
||||||
cloud "Hardware Resources" as hw {
|
cloud "Hardware Resources" as hw {
|
||||||
node "VM" as ins1
|
node "VM" as ins1
|
||||||
node "VM" as ins2
|
node "VM" as ins2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
doc/source/user/v2/vnf/chg_vnfpkg/img/chg_vnfpkg.svg
Normal file
After Width: | Height: | Size: 12 KiB |