=======================
ETSI NFV-SOL VNF Update
=======================

This document describes how to update VNF in Tacker.

Prerequisites
-------------

The following packages should be installed:

* tacker
* python-tackerclient

A default VIM should be registered according to
:doc:`../cli/cli-legacy-vim`.

The VNF Package(sample_vnf_pkg.zip) used below is prepared
by referring to :doc:`./vnf-package`.

Execute before "Instantiate VNF" in the procedure of
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.


VNF Update Procedures
---------------------

As mentioned in Prerequisites, the VNF must be created
before performing update.

Details of CLI commands are described in
:doc:`../cli/cli-etsi-vnflcm`.

For update VNF instance, you need to prepare a JSON-formatted definition file.

.. code-block:: json

  {
    "vnfInstanceName": "sample"
  }

.. note:: sample_param_file.json contains the VNF name as an example.


How to Update VNF
~~~~~~~~~~~~~~~~~

Execute Update CLI command and check the name of VNF instance before
and after update. This is to confirm that the name of VNF instance has
changed after update.
See `Heat CLI reference`_. for details on Heat CLI commands.

VNF instance name before update:

.. code-block:: console

  $ openstack vnflcm show VNF_INSTANCE_ID -c 'VNF Instance Name'


Result:

.. code-block:: console

  +-------------------+-------+
  | Field             | Value |
  +-------------------+-------+
  | VNF Instance Name | None  |
  +-------------------+-------+


Update VNF can be executed by the following CLI command.

.. code-block:: console

  $ openstack vnflcm update VNF_INSTANCE_ID --I sample_param_file.json


Result:

.. code-block:: console

  Update vnf:c64ea0fd-a90c-4754-95f4-dc0751db519d

.. note::
  Create a parameter file that describes the resource information to be
  changed in advance.

.. note::
  If the *vnfdId* is not changed by update operation, the current value
  shall be updated using the request parameter.
  If the *vnfdId* is requested to be changed by update operation, the
  current values of *metadata*, *extension*, and *vnfConfigurableProperties*
  are cleared and the changed request parameters are applied.
  Current Tacker only refers *metadata*, *extension* and
  *vnfConfigurableProperties* specified in the API request. It means that
  Tacker does not refer the value of these parameters specified in VNFD.

.. note::
  The 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``.


VNF instance name after operation:

.. code-block:: console

  $ openstack vnflcm show VNF_INSTANCE_ID -c 'VNF Instance Name'


Result:

.. code-block:: console

  +-------------------+---------+
  | Field             | Value   |
  +-------------------+---------+
  | VNF Instance Name | sample  |
  +-------------------+---------+


You can confirm that the VNF Instance Name has been changed
by the update operation.


.. _Heat CLI reference : https://docs.openstack.org/python-openstackclient/latest/cli/plugin-commands/heat.html
