summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/Chapter5/Heat/ONAP Heat Orchestration Templates Overview.rst6
-rw-r--r--docs/Chapter5/Heat/ONAP Heat Template Constructs.rst3
-rw-r--r--docs/changes-by-section-dublin.rst5758
-rw-r--r--docs/release-notes.rst48
4 files changed, 5810 insertions, 5 deletions
diff --git a/docs/Chapter5/Heat/ONAP Heat Orchestration Templates Overview.rst b/docs/Chapter5/Heat/ONAP Heat Orchestration Templates Overview.rst
index d7511a1..7e55487 100644
--- a/docs/Chapter5/Heat/ONAP Heat Orchestration Templates Overview.rst
+++ b/docs/Chapter5/Heat/ONAP Heat Orchestration Templates Overview.rst
@@ -264,7 +264,7 @@ Base Modules
:target: VNF
:keyword: MUST
:validation_mode: static
- :updated: casablanca
+ :updated: dublin
A VNF Heat Orchestration Template's Base Module file name **MUST** include
case insensitive 'base' in the filename and
@@ -302,7 +302,7 @@ Incremental Modules
:target: VNF
:keyword: MUST
:validation_mode: static
- :updated: casablanca
+ :updated: dublin
VNF Heat Orchestration Template's Incremental Module file name
**MUST** contain only alphanumeric characters and underscores
@@ -381,7 +381,7 @@ Nested Heat file
:target: VNF
:keyword: MUST
:validation_mode: static
- :updated: casablanca
+ :updated: dublin
VNF Heat Orchestration Template's Nested YAML file name **MUST** contain
only alphanumeric characters and underscores '_' and
diff --git a/docs/Chapter5/Heat/ONAP Heat Template Constructs.rst b/docs/Chapter5/Heat/ONAP Heat Template Constructs.rst
index ea87248..16a2118 100644
--- a/docs/Chapter5/Heat/ONAP Heat Template Constructs.rst
+++ b/docs/Chapter5/Heat/ONAP Heat Template Constructs.rst
@@ -87,8 +87,7 @@ the second level of nested heat.
.. req::
:id: R-708564
:keyword: MUST NOT
- :introduced: casablanca
- :updated: dublin
+ :introduced: dublin
:validation_mode: static
diff --git a/docs/changes-by-section-dublin.rst b/docs/changes-by-section-dublin.rst
new file mode 100644
index 0000000..fde3fa8
--- /dev/null
+++ b/docs/changes-by-section-dublin.rst
@@ -0,0 +1,5758 @@
+.. Modifications Copyright © 2017-2018 AT&T Intellectual Property.
+
+.. Licensed under the Creative Commons License, Attribution 4.0 Intl.
+ (the "License"); you may not use this documentation except in compliance
+ with the License. You may obtain a copy of the License at
+
+.. https://creativecommons.org/licenses/by/4.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.
+
+
+Requirement Changes Introduced in Dublin
+========================================================
+
+This document summarizes the requirement changes by section that were
+introduced between the Casablanca release and
+Dublin release. Click on the requirement number to
+navigate to the
+
+.. contents::
+ :depth: 2
+
+Summary of Changes
+------------------
+
+* **Requirements Added:** 64
+* **Requirements Changed:** 275
+* **Requirements Removed:** 40
+
+
+Configuration Management > Ansible Standards and Capabilities > VNF or PNF Configuration via Ansible Requirements > Ansible Client Requirements
+-----------------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-94567`
+
+ The VNF or PNF **MUST** provide Ansible playbooks that are designed to run
+ using an inventory hosts file in a supported format with only IP addresses
+ or IP addresses and VM/VNF or PNF names.
+
+
+.. container:: note
+
+ :need:`R-82018`
+
+ The VNF or PNF **MUST** load the Ansible Server SSH public key onto VNF or
+ PNF VM(s) /root/.ssh/authorized_keys as part of instantiation. Alternative,
+ is for Ansible Server SSH public key to be loaded onto VNF or PNF VM(s)
+ under /home/<Mechanized user ID>/.ssh/authorized_keys as part of
+ instantiation, when a Mechanized user ID is created during instantiation,
+ and Configure and all playbooks are designed to use a mechanized user ID
+ only for authentication (never using root authentication during Configure
+ playbook run). This will allow the Ansible Server to authenticate to
+ perform post-instantiation configuration without manual intervention and
+ without requiring specific VNF or PNF login IDs and passwords.
+
+ *CAUTION*: For VNFs or PNFs configured using Ansible, to eliminate the need
+ for manual steps, post-instantiation and pre-configuration, to
+ upload of SSH public keys, SSH public keys loaded during (heat)
+ instantiation shall be preserved and not removed by (heat) embedded
+ (userdata) scripts.
+
+
+.. container:: note
+
+ :need:`R-35401`
+
+ The VNF or PNF **MUST** support SSH and allow SSH access by the
+ Ansible server to the endpoint VM(s) and comply with the Network
+ Cloud Service Provider guidelines for authentication and access.
+
+
+.. container:: note
+
+ :need:`R-97451`
+
+ The VNF or PNF **MUST** provide the ability to remove root access once
+ post-instantiation configuration (Configure) is completed.
+
+
+.. container:: note
+
+ :need:`R-45197`
+
+ The VNF or PNF **MUST** define the "from=" clause to provide the list of IP
+ addresses of the Ansible Servers in the Cluster, separated by coma, to
+ restrict use of the SSH key pair to elements that are part of the Ansible
+ Cluster owner of the issued and assigned mechanized user ID.
+
+
+.. container:: note
+
+ :need:`R-73459`
+
+ The VNF or PNF **MUST** provide the ability to include a "from=" clause in
+ SSH public keys associated with mechanized user IDs created for an Ansible
+ Server cluster to use for VNF or PNF VM authentication.
+
+
+.. container:: note
+
+ :need:`R-97345`
+
+ The VNF or PNF **MUST** permit authentication, using root account, only
+ right after instantiation and until post-instantiation configuration is
+ completed.
+
+
+.. container:: note
+
+ :need:`R-92866`
+
+ The VNF or PNF **MUST** include as part of post-instantiation configuration
+ done by Ansible Playbooks the removal/update of the SSH public key from
+ /root/.ssh/authorized_keys, and update of SSH keys loaded through
+ instantiation to support Ansible. This may include creating Mechanized user
+ ID(s) used by the Ansible Server(s) on VNF VM(s) and uploading and
+ installing new SSH keys used by the mechanized use ID(s).
+
+
+.. container:: note
+
+ :need:`R-67124`
+
+ The VNF or PNF **MUST** provide Ansible playbooks that are designed to run
+ using an inventory hosts file in a supported format; with group names
+ matching VNFC 3-character string adding "vip" for groups with virtual IP
+ addresses shared by multiple VMs as seen in examples provided in Appendix.
+
+
+.. container:: note
+
+ :need:`R-32217`
+
+ The VNF or PNF **MUST** have routable management IP addresses or FQDNs that
+ are reachable via the Ansible Server for the endpoints (VMs) of a
+ VNF or PNF that playbooks will target. ONAP will initiate requests to the
+ Ansible Server for invocation of playbooks against these end
+ points [#7.3.3]_.
+
+
+.. container:: note
+
+ :need:`R-54373`
+
+ The VNF or PNF **MUST** have Python >= 2.6 on the endpoint VM(s)
+ of a VNF or PNF on which an Ansible playbook will be executed.
+
+
+.. container:: note
+
+ :need:`R-24482`
+
+ The VNF or PNF **MUST** provide Ansible playbooks that are designed to run
+ using an inventory hosts file in a supported format; with site group that
+ shall be used to add site specific configurations to the target VNF or PNF
+ VM(s) as needed.
+
+
+.. container:: note
+
+ :need:`R-91745`
+
+ The VNF or PNF **MUST** update the Ansible Server and other entities
+ storing and using the SSH keys for authentication when the SSH
+ keys used by Ansible are regenerated/updated.
+
+ **Note**: Ansible Server itself may be used to upload new SSH public
+ keys onto supported VNFs or PNFs.
+
+
+Configuration Management > Ansible Standards and Capabilities > VNF or PNF Configuration via Ansible Requirements > Ansible Playbook Requirements
+-------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-49911`
+
+ The VNF or PNF provider **MUST** assign a new point release to the updated
+ playbook set. The functionality of a new playbook set must be tested before
+ it is deployed to the production.
+
+
+.. container:: note
+
+ :need:`R-58301`
+
+ The VNF or PNF **SHOULD NOT** use playbooks that make requests to
+ Cloud resources e.g. Openstack (nova, neutron, glance, heat, etc.);
+ therefore, there is no use for Cloud specific variables like Openstack
+ UUIDs in Ansible Playbook related artifacts.
+
+ **Rationale**: Flows that require interactions with Cloud services e.g.
+ Openstack shall rely on workflows run by an Orchestrator
+ (Change Management) or other capability (such as a control loop or
+ Operations GUI) outside Ansible Server which can be executed by a
+ APPC/SDN-C. There are policies, as part of Control Loop
+ models, that send remediation action requests to an APPC/SDN-C; these
+ are triggered as a response to an event or correlated events published
+ to Event Bus.
+
+
+.. container:: note
+
+ :need:`R-24189`
+
+ The VNF or PNF provider **MUST** deliver a new set of playbooks that
+ includes all updated and unchanged playbooks for any new revision to an
+ existing set of playbooks.
+
+
+.. container:: note
+
+ :need:`R-43353`
+
+ The VNF or PNF **MUST** return control from Ansible Playbooks only after
+ all tasks performed by playbook are fully complete, signaling that the
+ playbook completed all tasks. When starting services, return control
+ only after all services are up. This is critical for workflows where
+ the next steps are dependent on prior tasks being fully completed.
+
+
+.. container:: note
+
+ :need:`R-51442`
+
+ The VNF or PNF **SHOULD** use playbooks that are designed to
+ automatically 'rollback' to the original state in case of any errors
+ for actions that change state of the VNF or PNF (e.g., configure).
+
+ **Note**: In case rollback at the playbook level is not supported or
+ possible, the VNF or PNF provider shall provide alternative rollback
+ mechanism (e.g., for a small VNF or PNF the rollback mechanism may rely
+ on workflow to terminate and re-instantiate VNF VMs and then re-run
+ playbook(s)). Backing up updated files is also recommended to support
+ rollback when soft rollback is feasible.
+
+
+.. container:: note
+
+ :need:`R-48698`
+
+ The VNF or PNF **MUST** utilize information from key value pairs that will
+ be provided by the Ansible Server as "extra-vars" during invocation to
+ execute the desired VNF or PNF action. The "extra-vars" attribute-value
+ pairs are passed to the Ansible Server by an APPC/SDN-C as part of the
+ Rest API request. If the playbook requires files, they must also be
+ supplied using the methodology detailed in the Ansible Server API, unless
+ they are bundled with playbooks, example, generic templates. Any files
+ containing instance specific info (attribute-value pairs), not obtainable
+ from any ONAP inventory databases or other sources, referenced and used an
+ input by playbooks, shall be provisioned (and distributed) in advance of
+ use, e.g., VNF or PNF instantiation. Recommendation is to avoid these
+ instance specific, manually created in advance of instantiation, files.
+
+
+.. container:: note
+
+ :need:`R-43253`
+
+ The VNF or PNF **MUST** use playbooks designed to allow Ansible
+ Server to infer failure or success based on the "PLAY_RECAP" capability.
+
+ **Note**: There are cases where playbooks need to interpret results
+ of a task and then determine success or failure and return result
+ accordingly (failure for failed tasks).
+
+
+.. container:: note
+
+ :need:`R-50252`
+
+ The VNF or PNF **MUST** write to a response file in JSON format that will
+ be retrieved and made available by the Ansible Server if, as part of a VNF
+ or PNF action (e.g., audit), a playbook is required to return any VNF or
+ PNF information/response. The text files must be written in the main
+ playbook home directory, in JSON format. The JSON file must be created for
+ the VNF or PNF with the name '<VNF or PNF name>_results.txt'. All playbook
+ output results, for all VNF or PNF VMs, to be provided as a response to the
+ request, must be written to this response file.
+
+
+.. container:: note
+
+ :need:`R-49751`
+
+ The VNF or PNF **MUST** support Ansible playbooks that are compatible with
+ Ansible version 2.6 or later.
+
+
+.. container:: note
+
+ :need:`R-33280`
+
+ The VNF or PNF **MUST NOT** use any instance specific parameters
+ in a playbook.
+
+
+.. container:: note
+
+ :need:`R-40293`
+
+ The VNF or PNF **MUST** make available playbooks that conform
+ to the ONAP requirement.
+
+
+.. container:: note
+
+ :need:`R-02651`
+
+ The VNF or PNF **SHOULD** use available backup capabilities to save a
+ copy of configuration files before implementing changes to support
+ operations such as backing out of software upgrades, configuration
+ changes or other work as this will help backing out of configuration
+ changes when needed.
+
+
+.. container:: note
+
+ :need:`R-49396`
+
+ The VNF or PNF **MUST** support each APPC/SDN-C VNF or PNF action
+ by invocation of **one** playbook [#7.3.4]_. The playbook will be
+ responsible for executing all necessary tasks (as well as calling other
+ playbooks) to complete the request.
+
+
+Configuration Management > Chef Standards and Capabilities > VNF or PNF Configuration via Chef Requirements > Chef Client Requirements
+--------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-47068`
+
+ The VNF or PNF **MAY** expose a single endpoint that is
+ responsible for all functionality.
+
+
+.. container:: note
+
+ :need:`R-79224`
+
+ The VNF or PNF **MUST** have the chef-client be preloaded with
+ validator keys and configuration to register with the designated
+ Chef Server as part of the installation process.
+
+
+.. container:: note
+
+ :need:`R-67114`
+
+ The VNF or PNF **MUST** be installed with Chef-Client >= 12.0 and Chef
+ push jobs client >= 2.0.
+
+
+.. container:: note
+
+ :need:`R-72184`
+
+ The VNF or PNF **MUST** have routable FQDNs for all the endpoints
+ (VMs) of a VNF or PNF that contain chef-clients which are used to register
+ with the Chef Server. As part of invoking VNF or PNF actions, ONAP will
+ trigger push jobs against FQDNs of endpoints for a VNF or PNF, if required.
+
+
+Configuration Management > Chef Standards and Capabilities > VNF or PNF Configuration via Chef Requirements > Chef Roles/Requirements
+-------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-37929`
+
+ The VNF or PNF **MUST** accept all necessary instance specific
+ data from the environment or node object attributes for the VNF or PNF
+ in roles/cookbooks/recipes invoked for a VNF or PNF action.
+
+
+.. container:: note
+
+ :need:`R-62170`
+
+ The VNF or PNF **MUST** over-ride any default values for
+ configurable parameters that can be set by ONAP in the roles,
+ cookbooks and recipes.
+
+
+.. container:: note
+
+ :need:`R-30654`
+
+ The VNF or PNF Package **MUST** have appropriate cookbooks that are
+ designed to automatically 'rollback' to the original state in case of
+ any errors for actions that change state of the VNF or PNF (e.g.,
+ configure).
+
+
+.. container:: note
+
+ :need:`R-26567`
+
+ The VNF or PNF Package **MUST** include a run list of
+ roles/cookbooks/recipes, for each supported VNF or PNF action, that will
+ perform the desired VNF or PNF action in its entirety as specified by ONAP
+ (see Section 7.c, APPC/SDN-C APIs and Behavior, for list of VNF or PNF
+ actions and requirements), when triggered by a chef-client run list
+ in JSON file.
+
+
+.. container:: note
+
+ :need:`R-27310`
+
+ The VNF or PNF Package **MUST** include all relevant Chef artifacts
+ (roles/cookbooks/recipes) required to execute VNF or PNF actions requested
+ by ONAP for loading on appropriate Chef Server.
+
+
+.. container:: note
+
+ :need:`R-44013`
+
+ The VNF or PNF **MUST** populate an attribute, defined as node
+ ['PushJobOutput'] with the desired output on all nodes in the push job
+ that execute chef-client run if the VNF or PNF action requires the output
+ of a chef-client run be made available (e.g., get running configuration).
+
+
+.. container:: note
+
+ :need:`R-15885`
+
+ The VNF or PNF **MUST** Upon completion of the chef-client run,
+ POST back on the callback URL, a JSON object as described in Table
+ A2 if the chef-client run list includes a cookbook/recipe that is
+ callback capable. Failure to POST on the Callback Url should not be
+ considered a critical error. That is, if the chef-client successfully
+ completes the VNF or PNF action, it should reflect this status on the Chef
+ Server regardless of whether the Callback succeeded or not.
+
+
+.. container:: note
+
+ :need:`R-65755`
+
+ The VNF or PNF **SHOULD** support callback URLs to return information
+ to ONAP upon completion of the chef-client run for any chef-client run
+ associated with a VNF or PNF action.
+
+ - As part of the push job, ONAP will provide two parameters in the
+ environment of the push job JSON object:
+
+ - "RequestId" a unique Id to be used to identify the request,
+ - "CallbackUrl", the URL to post response back.
+
+ - If the CallbackUrl field is empty or missing in the push job, then
+ the chef-client run need not post the results back via callback.
+
+
+.. container:: note
+
+ :need:`R-98911`
+
+ The VNF or PNF **MUST NOT** use any instance specific parameters
+ for the VNF or PNF in roles/cookbooks/recipes invoked for a VNF or PNF
+ action.
+
+
+.. container:: note
+
+ :need:`R-78116`
+
+ The VNF or PNF **MUST** update status on the Chef Server
+ appropriately (e.g., via a fail or raise an exception) if the
+ chef-client run encounters any critical errors/failures when
+ executing a VNF or PNF action.
+
+
+Configuration Management > Controller Interactions With VNF or PNF > Configuration Commands
+-------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-20741`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``Configure`` command.
+
+
+.. container:: note
+
+ :need:`R-56385`
+
+ The VNF or PNF **MUST** support APPC ``Audit`` command.
+
+
+.. container:: note
+
+ :need:`R-48247`
+
+ The VNF or PNF **MUST** support APPC ``ConfigRestore`` command.
+
+
+.. container:: note
+
+ :need:`R-94084`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``ConfigScaleOut`` command.
+
+
+.. container:: note
+
+ :need:`R-19366`
+
+ The VNF or PNF **MUST** support APPC ``ConfigModify`` command.
+
+
+.. container:: note
+
+ :need:`R-32981`
+
+ The VNF or PNF **MUST** support APPC ``ConfigBackup`` command.
+
+
+Configuration Management > Controller Interactions With VNF or PNF > HealthCheck and Failure Related Commands
+-------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-41430`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``HealthCheck`` command.
+
+
+Configuration Management > Controller Interactions With VNF or PNF > Lifecycle Management Related Commands
+----------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-65641`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``UpgradeBackOut`` command.
+
+
+.. container:: note
+
+ :need:`R-97343`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``UpgradeBackup`` command.
+
+
+.. container:: note
+
+ :need:`R-45856`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``UpgradePostCheck`` command.
+
+
+.. container:: note
+
+ :need:`R-07251`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``ResumeTraffic`` command.
+
+
+.. container:: note
+
+ :need:`R-19922`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``UpgradePrecheck`` command.
+
+
+.. container:: note
+
+ :need:`R-49466`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``UpgradeSoftware`` command.
+
+
+.. container:: note
+
+ :need:`R-82811`
+
+ The VNF or PNF **MUST** support APPC ``StartApplication`` command.
+
+
+.. container:: note
+
+ :need:`R-12706`
+
+ The VNF or PNF **MUST** support APPC/SDN-C ``QuiesceTraffic`` command.
+
+
+.. container:: note
+
+ :need:`R-328086`
+
+ The VNF or PNF **MUST**, if serving as a distribution point or anchor point for
+ steering point from source to destination, support the ONAP Controller's
+ ``DistributeTraffic`` command.
+
+
+.. container:: note
+
+ :need:`R-83146`
+
+ The VNF or PNF **MUST** support APPC ``StopApplication`` command.
+
+
+Configuration Management > NETCONF Standards and Capabilities > VNF or PNF Configuration via NETCONF Requirements > Configuration Management
+--------------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-95950`
+
+ The VNF or PNF **MUST** provide a NETCONF interface fully defined
+ by supplied YANG models for the embedded NETCONF server.
+
+
+.. container:: note
+
+ :need:`R-88026`
+
+ The VNF or PNF **MUST** include a NETCONF server enabling
+ runtime configuration and lifecycle management capabilities.
+
+
+Configuration Management > NETCONF Standards and Capabilities > VNF or PNF Configuration via NETCONF Requirements > NETCONF Server Requirements
+-----------------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-997907`
+
+ The VNF or PNF **SHOULD** support TLS as secure transport for the NETCONF
+ protocol according to [RFC7589].
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-26115`
+
+ The VNF or PNF **MUST** follow the data model update rules defined in
+ [RFC6020] section 10 for YANG 1.0 modules, and [RFC7950] section 11
+ for YANG 1.1 modules. All deviations from the aforementioned update
+ rules shall be handled by a built-in automatic upgrade mechanism.
+
+
+.. container:: note
+
+ :need:`R-10716`
+
+ The VNF or PNF **MUST** support parallel and simultaneous
+ configuration of separate objects within itself.
+
+
+.. container:: note
+
+ :need:`R-59610`
+
+ The VNF or PNF **MUST** implement the data model discovery and
+ download as defined in [RFC6022].
+
+
+.. container:: note
+
+ :need:`R-83790`
+
+ The VNF or PNF **MUST** implement the ``:validate`` capability.
+
+
+.. container:: note
+
+ :need:`R-62468`
+
+ The VNF or PNF **MUST** allow all configuration data to be
+ edited through a NETCONF <edit-config> operation. Proprietary
+ NETCONF RPCs that make configuration changes are not sufficient.
+
+
+.. container:: note
+
+ :need:`R-29495`
+
+ The VNF or PNF **MUST** support locking if a common object is
+ being manipulated by two simultaneous NETCONF configuration operations
+ on the same VNF or PNF within the context of the same writable running data
+ store (e.g., if an interface parameter is being configured then it
+ should be locked out for configuration by a simultaneous configuration
+ operation on that same interface parameter).
+
+
+.. container:: note
+
+ :need:`R-88031`
+
+ The VNF or PNF **SHOULD** implement the protocol operation:
+ ``delete-config(target)`` - Delete the named configuration
+ data store target.
+
+
+.. container:: note
+
+ :need:`R-54190`
+
+ The VNF or PNF **MUST** release locks to prevent permanent lock-outs
+ when/if a session applying the lock is terminated (e.g., SSH session
+ is terminated).
+
+
+.. container:: note
+
+ :need:`R-49145`
+
+ The VNF or PNF **MUST** implement ``:confirmed-commit`` If
+ ``:candidate`` is supported.
+
+
+.. container:: note
+
+ :need:`R-96554`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``unlock(target)`` - Unlock the configuration data store target.
+
+
+.. container:: note
+
+ :need:`R-22946`
+
+ The VNF or PNF **SHOULD** conform its YANG model to RFC 6536,
+ "NETCONF Access Control Model".
+
+
+.. container:: note
+
+ :need:`R-01382`
+
+ The VNF or PNF **MUST** allow the entire configuration of the VNF or PNF to be
+ retrieved via NETCONF's <get-config> and <edit-config>, independently
+ of whether it was configured via NETCONF or other mechanisms.
+
+
+.. container:: note
+
+ :need:`R-10173`
+
+ The VNF or PNF **MUST** allow another NETCONF session to be able to
+ initiate the release of the lock by killing the session owning the lock,
+ using the <kill-session> operation to guard against hung NETCONF sessions.
+
+
+.. container:: note
+
+ :need:`R-08134`
+
+ The VNF or PNF **MUST** conform to the NETCONF RFC 6241,
+ "NETCONF Configuration Protocol".
+
+
+.. container:: note
+
+ :need:`R-60656`
+
+ The VNF or PNF **MUST** support sub tree filtering.
+
+
+.. container:: note
+
+ :need:`R-29488`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``get-config(source, filter`` - Retrieve a (filtered subset of
+ a) configuration from the configuration data store source.
+
+
+.. container:: note
+
+ :need:`R-01334`
+
+ The VNF or PNF **MUST** conform to the NETCONF RFC 5717,
+ "Partial Lock Remote Procedure Call".
+
+
+.. container:: note
+
+ :need:`R-33946`
+
+ The VNF or PNF **MUST** conform to the NETCONF RFC 4741,
+ "NETCONF Configuration Protocol".
+
+
+.. container:: note
+
+ :need:`R-25238`
+
+ The VNF or PNF PACKAGE **MUST** validated YANG code using the open
+ source pyang [#7.3.1]_ program using the following commands:
+
+ .. code-block:: text
+
+ $ pyang --verbose --strict <YANG-file-name(s)> $ echo $!
+
+
+.. container:: note
+
+ :need:`R-10129`
+
+ The VNF or PNF **SHOULD** conform its YANG model to RFC 7223,
+ "A YANG Data Model for Interface Management".
+
+
+.. container:: note
+
+ :need:`R-33955`
+
+ The VNF or PNF **SHOULD** conform its YANG model to RFC 6991,
+ "Common YANG Data Types".
+
+
+.. container:: note
+
+ :need:`R-88899`
+
+ The VNF or PNF **MUST** support simultaneous <commit> operations
+ within the context of this locking requirements framework.
+
+
+.. container:: note
+
+ :need:`R-11235`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``kill-session(session``- Force the termination of **session**.
+
+
+.. container:: note
+
+ :need:`R-12271`
+
+ The VNF or PNF **SHOULD** conform its YANG model to RFC 7223,
+ "IANA Interface Type YANG Module".
+
+
+.. container:: note
+
+ :need:`R-90007`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``close-session()`` - Gracefully close the current session.
+
+
+.. container:: note
+
+ :need:`R-03465`
+
+ The VNF or PNF **MUST** release locks to prevent permanent lock-outs
+ when the corresponding <partial-unlock> operation succeeds.
+
+
+.. container:: note
+
+ :need:`R-93443`
+
+ The VNF or PNF **MUST** define all data models in YANG 1.0 [RFC6020] or
+ YANG 1.1 [RFC7950]. A combination of YANG 1.0 and YANG 1.1 modules is
+ allowed subject to the rules in [RFC7950] section 12. The mapping to
+ NETCONF shall follow the rules defined in this RFC.
+
+
+.. container:: note
+
+ :need:`R-29324`
+
+ The VNF or PNF **SHOULD** implement the protocol operation:
+ ``copy-config(target, source)`` - Copy the content of the
+ configuration data store source to the configuration data store target.
+
+
+.. container:: note
+
+ :need:`R-68990`
+
+ The VNF or PNF **MUST** support the ``:startup`` capability. It
+ will allow the running configuration to be copied to this special
+ database. It can also be locked and unlocked.
+
+
+.. container:: note
+
+ :need:`R-80898`
+
+ TThe VNF or PNF **MUST** support heartbeat via a <get> with null filter.
+
+
+.. container:: note
+
+ :need:`R-66793`
+
+ The VNF or PNF **MUST** guarantee the VNF or PNF configuration integrity
+ for all simultaneous configuration operations (e.g., if a change is
+ attempted to the BUM filter rate from multiple interfaces on the same
+ EVC, then they need to be sequenced in the VNF or PNF without locking either
+ configuration method out).
+
+
+.. container:: note
+
+ :need:`R-11499`
+
+ The VNF or PNF **MUST** fully support the XPath 1.0 specification
+ for filtered retrieval of configuration and other database contents.
+ The 'type' attribute within the <filter> parameter for <get> and
+ <get-config> operations may be set to 'xpath'. The 'select' attribute
+ (which contains the XPath expression) will also be supported by the
+ server. A server may support partial XPath retrieval filtering, but
+ it cannot advertise the ``:xpath`` capability unless the entire XPath
+ 1.0 specification is supported.
+
+
+.. container:: note
+
+ :need:`R-63935`
+
+ The VNF or PNF **MUST** release locks to prevent permanent lock-outs
+ when a user configured timer has expired forcing the NETCONF SSH Session
+ termination (i.e., product must expose a configuration knob for a user
+ setting of a lock expiration timer).
+
+
+.. container:: note
+
+ :need:`R-63953`
+
+ The VNF or PNF **MUST** have the echo command return a zero value
+ otherwise the validation has failed.
+
+
+.. container:: note
+
+ :need:`R-26508`
+
+ The VNF or PNF **MUST** support a NETCONF server that can be mounted on
+ OpenDaylight (client) and perform the operations of: modify, update,
+ change, rollback configurations using each configuration data element,
+ query each state (non-configuration) data element, execute each YANG
+ RPC, and receive data through each notification statement.
+
+
+.. container:: note
+
+ :need:`R-70496`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``commit(confirmed, confirm-timeout)`` - Commit candidate
+ configuration data store to the running configuration.
+
+
+.. container:: note
+
+ :need:`R-24269`
+
+ The VNF or PNF **SHOULD** conform its YANG model to RFC 7407,
+ "A YANG Data Model for SNMP Configuration", if Netconf used to
+ configure SNMP engine.
+
+
+.. container:: note
+
+ :need:`R-13800`
+
+ The VNF or PNF **MUST** conform to the NETCONF RFC 5277,
+ "NETCONF Event Notification".
+
+
+.. container:: note
+
+ :need:`R-22700`
+
+ The VNF or PNF **MUST** conform its YANG model to RFC 6470,
+ "NETCONF Base Notifications".
+
+
+.. container:: note
+
+ :need:`R-78282`
+
+ The VNF or PNF **MUST** conform to the NETCONF RFC 6242,
+ "Using the Network Configuration Protocol over Secure Shell".
+
+
+.. container:: note
+
+ :need:`R-53317`
+
+ The VNF or PNF **MUST** conform its YANG model to RFC 6087,
+ "Guidelines for Authors and Reviewers of YANG Data Model specification".
+
+
+.. container:: note
+
+ :need:`R-97529`
+
+ The VNF or PNF **SHOULD** implement the protocol operation:
+ ``get-schema(identifier, version, format)`` - Retrieve the YANG schema.
+
+
+.. container:: note
+
+ :need:`R-18733`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``discard-changes()`` - Revert the candidate configuration
+ data store to the running configuration.
+
+
+.. container:: note
+
+ :need:`R-44281`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``edit-config(target, default-operation, test-option, error-option,
+ config)`` - Edit the target configuration data store by merging,
+ replacing, creating, or deleting new config elements.
+
+
+.. container:: note
+
+ :need:`R-02597`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``lock(target)`` - Lock the configuration data store target.
+
+
+.. container:: note
+
+ :need:`R-20353`
+
+ The VNF or PNF **MUST** implement both ``:candidate`` and
+ ``:writable-running`` capabilities. When both ``:candidate`` and
+ ``:writable-running`` are provided then two locks should be supported.
+
+
+.. container:: note
+
+ :need:`R-10353`
+
+ The VNF or PNF **MUST** conform its YANG model to RFC 6244,
+ "An Architecture for Network Management Using NETCONF and YANG".
+
+
+.. container:: note
+
+ :need:`R-60106`
+
+ The VNF or PNF **MUST** implement the protocol operation:
+ ``get(filter)`` - Retrieve (a filtered subset of) the running
+ configuration and device state information. This should include
+ the list of VNF or PNF supported schemas.
+
+
+.. container:: note
+
+ :need:`R-87564`
+
+ The VNF or PNF **SHOULD** conform its YANG model to RFC 7317,
+ "A YANG Data Model for System Management".
+
+
+.. container:: note
+
+ :need:`R-83873`
+
+ The VNF or PNF **MUST** support ``:rollback-on-error`` value for
+ the <error-option> parameter to the <edit-config> operation. If any
+ error occurs during the requested edit operation, then the target
+ database (usually the running configuration) will be left unaffected.
+ This provides an 'all-or-nothing' edit mode for a single <edit-config>
+ request.
+
+
+.. container:: note
+
+ :need:`R-73468`
+
+ The VNF or PNF **MUST** allow the NETCONF server connection
+ parameters to be configurable during virtual machine instantiation
+ through Heat templates where SSH keys, usernames, passwords, SSH
+ service and SSH port numbers are Heat template parameters.
+
+
+.. container:: note
+
+ :need:`R-28756`
+
+ The VNF or PNF **MUST** support ``:partial-lock`` and
+ ``:partial-unlock`` capabilities, defined in RFC 5717. This
+ allows multiple independent clients to each write to a different
+ part of the <running> configuration at the same time.
+
+
+.. container:: note
+
+ :need:`R-68200`
+
+ The VNF or PNF **MUST** support the ``:url`` value to specify
+ protocol operation source and target parameters. The capability URI
+ for this feature will indicate which schemes (e.g., file, https, sftp)
+ that the server supports within a particular URL value. The 'file'
+ scheme allows for editable local configuration databases. The other
+ schemes allow for remote storage of configuration databases.
+
+
+.. container:: note
+
+ :need:`R-53015`
+
+ The VNF or PNF **MUST** apply locking based on the sequence of
+ NETCONF operations, with the first configuration operation locking
+ out all others until completed.
+
+
+.. container:: note
+
+ :need:`R-07545`
+
+ The VNF or PNF **MUST** support all operations, administration and
+ management (OAM) functions available from the supplier for VNFs or PNFs
+ using the supplied YANG code and associated NETCONF servers.
+
+
+.. container:: note
+
+ :need:`R-41829`
+
+ The VNF or PNF **MUST** be able to specify the granularity of the
+ lock via a restricted or full XPath expression.
+
+
+.. container:: note
+
+ :need:`R-49036`
+
+ The VNF or PNF **SHOULD** conform its YANG model to RFC 7277,
+ "A YANG Data Model for IP Management".
+
+
+.. container:: note
+
+ :need:`R-02616`
+
+ The VNF or PNF **MUST** permit locking at the finest granularity
+ if a VNF or PNF needs to lock an object for configuration to avoid blocking
+ simultaneous configuration operations on unrelated objects (e.g., BGP
+ configuration should not be locked out if an interface is being
+ configured or entire Interface configuration should not be locked out
+ if a non-overlapping parameter on the interface is being configured).
+
+
+.. container:: note
+
+ :need:`R-58358`
+
+ The VNF or PNF **MUST** implement the ``:with-defaults`` capability
+ [RFC6243].
+
+
+.. container:: note
+
+ :need:`R-04158`
+
+ The VNF or PNF **MUST** conform to the NETCONF RFC 4742,
+ "Using the NETCONF Configuration Protocol over Secure Shell (SSH)".
+
+
+Configuration Management > NETCONF Standards and Capabilities > xNF Configuration via NETCONF Requirements > NETCONF Server Requirements
+----------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-28545
+
+ The xNF **MUST** conform its YANG model to RFC 6060,
+ "YANG - A Data Modeling Language for the Network Configuration
+ Protocol (NETCONF)".
+
+
+Configuration Management > VNF or PNF REST APIs > REST APIs
+-----------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-31809`
+
+ The VNF or PNF **MUST** support the HealthCheck RPC. The HealthCheck
+ RPC executes a VNF or PNF Provider-defined VNF or PNF HealthCheck over the
+ scope of the entire VNF or PNF (e.g., if there are multiple VNFCs, then
+ run a health check, as appropriate, for all VNFCs). It returns a 200 OK if
+ the test completes. A JSON object is returned indicating state (healthy,
+ unhealthy), scope identifier, time-stamp and one or more blocks containing
+ info and fault information. If the VNF or PNF is unable to run the
+ HealthCheck, return a standard http error code and message.
+
+
+Contrail Resource Parameters > OS::ContrailV2::VirtualMachineInterface Property virtual_machine_interface_allowed_address_pairs > External Networks
+---------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-100280`
+
+ If a VNF's Heat Orchestration Template's resource
+ ``OS::ContrailV2::VirtualMachineInterface``
+ is attaching to an external network (per the
+ ONAP definition, see Requirement R-57424), the
+ map property
+
+ ``virtual_machine_interface_allowed_address_pairs``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
+
+ parameter
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100310`
+
+ When the VNF's Heat Orchestration Template's resource
+ ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an external
+ network (per the
+ ONAP definition, see Requirement R-57424),
+ and an IPv4 Virtual IP (VIP)
+ is required to be supported by the ONAP data model,
+ the map property
+
+ ``virtual_machine_interface_allowed_address_pairs``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
+
+ parameter name **MUST** follow the naming convention
+
+ * ``{vm-type}_{network-role}_floating_ip``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external network
+
+ And the parameter **MUST** be declared as type ``string``.
+
+ The ONAP data model can only support one IPv4 VIP address.
+
+
+.. container:: note
+
+ :need:`R-100330`
+
+ When the VNF's Heat Orchestration Template's resource
+ ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an external
+ network (per the
+ ONAP definition, see Requirement R-57424),
+ and an IPv6 Virtual IP (VIP)
+ is required to be supported by the ONAP data model,
+ the map property
+
+ ``virtual_machine_interface_allowed_address_pairs``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
+
+ parameter name **MUST** follow the naming convention
+
+ * ``{vm-type}_{network-role}_floating_v6_ip``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external network
+
+ And the parameter **MUST** be declared as type ``string``.
+
+ The ONAP data model can only support one IPv6 VIP address.
+
+
+.. container:: note
+
+ :need:`R-100350`
+
+ When the VNF's Heat Orchestration Template's resource
+ ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an
+ external network
+ (per the ONAP definition, see Requirement R-57424),
+ and the IPv4 VIP address and/or IPv6 VIP address
+ is **not** supported by the ONAP data model,
+ the map property
+
+ ``virtual_machine_interface_allowed_address_pairs``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
+
+ * Parameter name **MAY** use any naming convention. That is, there is no
+ ONAP mandatory parameter naming convention.
+ * Parameter **MAY** be declared as type ``string`` or type
+ ``comma_delimited_list``.
+
+ And the ``OS::ContrailV2::VirtualMachineInterface`` resource
+ **MUST** contain resource-level ``metadata`` (not property-level).
+
+ And the ``metadata`` format **MUST** must contain the
+ key value ``aap_exempt`` with a list of all map property
+
+ ``virtual_machine_interface_allowed_address_pairs``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
+
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
+
+ parameters **not** supported by the ONAP data model.
+
+
+Contrail Resource Parameters > OS::ContrailV2::VirtualMachineInterface Property virtual_machine_interface_allowed_address_pairs > Internal Networks
+---------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-100360`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an
+ internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv4 Virtual IP (VIP)
+ address is assigned using the map property,
+ ``virtual_machine_interface_allowed_address_pairs,
+ virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
+ virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
+ virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
+ , the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_floating_ip``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+ And the parameter **MUST** be declared as ``type: string``
+ and **MUST** be enumerated in the environment file.
+
+ OR
+
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_floating_ips``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+ And the parameter **MUST** be declared as ``type: comma_delimited_list``
+ and **MUST** be enumerated in the environment file.
+
+
+.. container:: note
+
+ :need:`R-100370`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an
+ internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv6 Virtual IP (VIP)
+ address is assigned
+ using the map property,
+ ``virtual_machine_interface_allowed_address_pairs,
+ virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
+ virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
+ virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
+ , the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_floating_v6_ip``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+ And the parameter **MUST** be declared as ``type: string``
+ and **MUST** be enumerated in the environment file
+
+ OR
+
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_floating_v6_ips``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+ And the parameter **MUST** be declared as ``type: comma_delimited_list``
+ and **MUST** be enumerated in the environment file.
+
+
+Contrail Resource Parameters > Resource OS::ContrailV2::InstanceIp > Resource OS::ContrailV2::InstanceIp Property instance_ip_address
+-------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-100000`
+
+ The VNF's Heat Orchestration Template's
+ resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ parameter
+ **MUST** be declared as either type ``string`` or type
+ ``comma_delimited_list``.
+
+
+.. container:: note
+
+ :need:`R-100010`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` is assigning an IP address
+ to an external network (per the ONAP definition, see Requirement R-57424),
+ and an IPv4 address is assigned
+ using the property ``instance_ip_address``
+ and the parameter type is defined as a string,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_{network-role}_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external network
+ * ``{index}`` is a numeric value that **MUST** start at zero in a
+ VNF's Heat Orchestration Template and **MUST** increment by one
+
+
+.. container:: note
+
+ :need:`R-100020`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ parameter
+ ``{vm-type}_{network-role}_ip_{index}``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100030`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` is assigning an IP address
+ to an external network (per the
+ ONAP definition, see Requirement R-57424),
+ and an IPv4 address is assigned
+ using the property ``instance_ip_address``
+ and the parameter type is defined as a
+ ``comma_delimited_list``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_{network-role}_ips``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+
+.. container:: note
+
+ :need:`R-100040`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ parameter
+ ``{vm-type}_{network-role}_ips``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100050`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` is assigning an IP address
+ to an external network
+ (per the
+ ONAP definition, see Requirement R-57424),
+ and an IPv6 address is assigned
+ using the property ``instance_ip_address``
+ and the parameter type is defined as a string,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_{network-role}_v6_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external network
+ * ``{index}`` is a numeric value that **MUST** start at zero in a
+ VNF's Heat Orchestration Template and **MUST** increment by one
+
+
+.. container:: note
+
+ :need:`R-100060`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ parameter
+ ``{vm-type}_{network-role}_v6_ip_{index}``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100070`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` is assigning an IP address
+ to an external network (per the
+ ONAP definition, see Requirement R-57424),
+ and an IPv6 address is assigned
+ using the property ``instance_ip_address``
+ and the parameter type is defined as a
+ ``comma_delimited_list``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_{network-role}_v6_ips``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+
+.. container:: note
+
+ :need:`R-100080`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ parameter
+ ``{vm-type}_{network-role}_v6_ips``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100090`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` is assigning an IP address
+ to an internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv4 address is assigned
+ using the property ``instance_ip_address``
+ and the parameter type is
+ defined as a ``string``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the internal network
+ * ``{index}`` is a numeric value that **MUST** start at zero in a
+ VNF's Heat Orchestration Template and **MUST** increment by one
+
+
+.. container:: note
+
+ :need:`R-100100`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ parameter
+ ``{vm-type}_int_{network-role}_ip_{index}``
+ **MUST** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100110`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` is assigning an IP address
+ to an internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv4 address is assigned
+ using the property ``instance_ip_address``
+ and the parameter type is defined as a
+ ``comma_delimited_list``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_ips``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the internal
+ network
+
+
+.. container:: note
+
+ :need:`R-100120`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ parameter
+ ``{vm-type}_int_{network-role}_int_ips``
+ **MUST** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100130`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an
+ internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv6 address is assigned
+ using the property ``instance_ip_address``
+ and the parameter type is defined as a
+ ``string``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_v6_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the internal network
+ * ``{index}`` is a numeric value that **MUST** start at zero in a
+ VNF's Heat Orchestration Template and **MUST** increment by one
+
+
+.. container:: note
+
+ :need:`R-100140`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ parameter
+ ``{vm-type}_int_{network-role}_v6_ip_{index}``
+ **MUST** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100150`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an
+ internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv6 address is assigned
+ using the property ``instance_ip_address``
+ and the parameter type is defined as a
+ ``comma_delimited_list``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_v6_ips``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the internal
+ network
+
+
+.. container:: note
+
+ :need:`R-100160`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
+ map property ``ip_address`` parameter
+ ``{vm-type}_int_{network-role}_v6_ips``
+ **MUST** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100170`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp``
+ property ``instance_ip_address``
+ parameter associated with an external network, i.e.,
+
+ * ``{vm-type}_{network-role}_ip_{index}``
+ * ``{vm-type}_{network-role}_v6_ip_{index}``
+ * ``{vm-type}_{network-role}_ips``
+ * ``{vm-type}_{network-role}_v6_ips``
+
+
+ **MUST NOT** be enumerated in the Heat Orchestration
+ Template's Environment File. ONAP provides the IP address
+ assignments at orchestration time.
+
+
+.. container:: note
+
+ :need:`R-100180`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp``
+ property ``instance_ip_address``
+ parameter associated with an internal network, i.e.,
+
+ * ``{vm-type}_int_{network-role}_ip_{index}``
+ * ``{vm-type}_int_{network-role}_v6_ip_{index}``
+ * ``{vm-type}_int_{network-role}_ips``
+ * ``{vm-type}_int_{network-role}_v6_ips``
+
+
+ **MUST** be enumerated in the Heat Orchestration
+ Template's Environment File and IP addresses **MUST** be
+ assigned.
+
+
+Contrail Resource Parameters > Resource OS::ContrailV2::InstanceIp > Resource OS::ContrailV2::InstanceIp Property subnet_uuid
+-----------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-100190`
+
+ The VNF's Heat Orchestration Template's
+ resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
+ parameter
+ **MUST** be declared type ``string``.
+
+
+.. container:: note
+
+ :need:`R-100200`
+
+ When the VNF's Heat Orchestration Template's
+ resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address
+ to an external network (per the ONAP definition, see
+ Requirement R-57424),
+ and an IPv4 address is being cloud assigned by OpenStack's DHCP Service
+ and the external network IPv4 subnet is to be specified
+ using the property ``subnet_uuid``, the parameter
+ **MUST** follow the naming convention
+
+ * ``{network-role}_subnet_id``
+
+ where
+
+ * ``{network-role}`` is the network role of the network.
+
+
+.. container:: note
+
+ :need:`R-100210`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
+ parameter
+ ``{network-role}_subnet_id``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100220`
+
+ When the VNF's Heat Orchestration Template's
+ resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address
+ to an external network (per the ONAP definition, see
+ Requirement R-57424),
+ and an IPv6 address is being cloud assigned by OpenStack's DHCP Service
+ and the external network IPv6 subnet is to be specified
+ using the property ``subnet_uuid``, the parameter
+ **MUST** follow the naming convention
+
+ * ``{network-role}_v6_subnet_id``
+
+ where
+
+ * ``{network-role}`` is the network role of the network.
+
+
+.. container:: note
+
+ :need:`R-100230`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
+ parameter
+ ``{network-role}_v6_subnet_id``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100240`
+
+ When
+
+ * the VNF's Heat Orchestration Template's
+ resource ``OS::ContrailV2::InstanceIp`` in an Incremental Module is
+ assigning an IP address
+ to an internal network (per the ONAP definition, see
+ Requirements R-52425 and R-46461)
+ that is created in the Base Module, AND
+ * an IPv4 address is being cloud assigned by OpenStack's DHCP Service AND
+ * the internal network IPv4 subnet is to be specified
+ using the property ``subnet_uuid``,
+
+ the parameter **MUST** follow the naming convention
+
+ * ``int_{network-role}_subnet_id``
+
+ where
+
+ * ``{network-role}`` is the network role of the internal network
+
+ Note that the parameter **MUST** be defined as an ``output`` parameter in
+ the base module.
+
+
+.. container:: note
+
+ :need:`R-100250`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
+ parameter
+ ``int_{network-role}_subnet_id``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-100260`
+
+ When
+
+ * the VNF's Heat Orchestration Template's
+ resource ``OS::ContrailV2::InstanceIp`` in an Incremental Module is
+ attaching
+ to an internal network (per the ONAP definition,
+ see Requirements R-52425 and R-46461)
+ that is created in the Base Module, AND
+ * an IPv6 address is being cloud assigned by OpenStack's DHCP Service AND
+ * the internal network IPv6 subnet is to be specified
+ using the property ``subnet_uuid``,
+
+ the parameter **MUST** follow the naming convention
+ ``int_{network-role}_v6_subnet_id``,
+ where ``{network-role}`` is the network role of the internal network.
+
+ Note that the parameter **MUST** be defined as an ``output`` parameter in
+ the base module.
+
+
+.. container:: note
+
+ :need:`R-100270`
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
+ parameter
+ ``int_{network-role}_v6_subnet_id``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+Monitoring & Management > Data Structure Specification of the Event Record
+--------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-120182`
+
+ The VNF or PNF provider **MUST** indicate specific conditions that may arise, and
+ recommend actions that may be taken at specific thresholds, or if specific
+ conditions repeat within a specified time interval, using the semantics and
+ syntax described by the :ref:`VES Event Registration specification <ves_event_registration_3_2>`.
+
+
+.. container:: note
+
+ :need:`R-570134`
+
+ The events produced by the VNF or PNF **MUST** must be compliant with the common
+ event format defined in the
+ :ref:`VES Event Listener<ves_event_listener_7_1>`
+ specification.
+
+
+.. container:: note
+
+ :need:`R-520802`
+
+ The VNF or PNF provider **MUST** provide a YAML file formatted in adherence with
+ the :ref:`VES Event Registration specification <ves_event_registration_3_2>`
+ that defines the following information for each event produced by the VNF:
+
+ * ``eventName``
+ * Required fields
+ * Optional fields
+ * Any special handling to be performed for that event
+
+
+.. container:: note
+
+ :need:`R-123044`
+
+ The VNF or PNF Provider **MAY** require that specific events, identified by their
+ ``eventName``, require that certain fields, which are optional in the common
+ event format, must be present when they are published.
+
+
+Monitoring & Management > Event Records - Data Structure Description > Common Event Header
+------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-528866`
+
+ The VNF **MUST** produce VES events that include the following mandatory
+ fields in the common event header.
+
+ * ``domain`` - the event domain enumeration
+ * ``eventId`` - the event key unique to the event source
+ * ``eventName`` - the unique event name
+ * ``lastEpochMicrosec`` - the latest unix time (aka epoch time) associated
+ with the event
+ * ``priority`` - the processing priority enumeration
+ * ``reportingEntityName`` - name of the entity reporting the event or
+ detecting a problem in another VNF or PNF
+ * ``sequence`` - the ordering of events communicated by an event source
+ * ``sourceName`` - name of the entity experiencing the event issue, which
+ may be detected and reported by a separate reporting entity
+ * ``startEpochMicrosec`` - the earliest unix time (aka epoch time)
+ associated with the event
+ * ``version`` - the version of the event header
+ * ``vesEventListenerVersion`` - Version of the VES event listener API spec
+ that this event is compliant with
+
+
+Monitoring & Management > Monitoring & Management Requirements > Addressing and Delivery Protocol
+-------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-84879`
+
+ The VNF or PNF **MUST** have the capability of maintaining a primary
+ and backup DNS name (URL) for connecting to ONAP collectors, with the
+ ability to switch between addresses based on conditions defined by policy
+ such as time-outs, and buffering to store messages until they can be
+ delivered. At its discretion, the service provider may choose to populate
+ only one collector address for a VNF or PNF. In this case, the network will
+ promptly resolve connectivity problems caused by a collector or network
+ failure transparently to the VNF or PNF.
+
+
+.. container:: note
+
+ :need:`R-88482`
+
+ The VNF or PNF **SHOULD** use REST using HTTPS delivery of plain
+ text JSON for moderate sized asynchronous data sets, and for high
+ volume data sets when feasible.
+
+
+.. container:: note
+
+ :need:`R-81777`
+
+ The VNF or PNF **MUST** be configured with initial address(es) to use
+ at deployment time. Subsequently, address(es) may be changed through
+ ONAP-defined policies delivered from ONAP to the VNF or PNF using PUTs to a
+ RESTful API, in the same manner that other controls over data reporting
+ will be controlled by policy.
+
+
+.. container:: note
+
+ :need:`R-79412`
+
+ The VNF or PNF **MAY** use another option which is expected to include TCP
+ for high volume streaming asynchronous data sets and for other high volume
+ data sets. TCP delivery can be used for either JSON or binary encoded data
+ sets.
+
+
+.. container:: note
+
+ :need:`R-01033`
+
+ The VNF or PNF **MAY** use another option which is expected to include SFTP
+ for asynchronous bulk files, such as bulk files that contain large volumes
+ of data collected over a long time interval or data collected across many
+ VNFs or PNFs. (Preferred is to reorganize the data into more frequent or more focused
+ data sets, and deliver these by REST or TCP as appropriate.)
+
+
+.. container:: note
+
+ :need:`R-03070`
+
+ The VNF or PNF **MUST**, by ONAP Policy, provide the ONAP addresses
+ as data destinations for each VNF or PNF, and may be changed by Policy while
+ the VNF or PNF is in operation. We expect the VNF or PNF to be capable of redirecting
+ traffic to changed destinations with no loss of data, for example from
+ one REST URL to another, or from one TCP host and port to another.
+
+
+.. container:: note
+
+ :need:`R-08312`
+
+ The VNF or PNF **MAY** use another option which is expected to include REST
+ delivery of binary encoded data sets.
+
+
+.. container:: note
+
+ :need:`R-63229`
+
+ The VNF or PNF **MAY** use another option which is expected to include REST
+ for synchronous data, using RESTCONF (e.g., for VNF or PNF state polling).
+
+
+Monitoring & Management > Monitoring & Management Requirements > Asynchronous and Synchronous Data Delivery
+-----------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-73285`
+
+ The VNF or PNF **MUST** must encode, address and deliver the data
+ as described in the previous paragraphs.
+
+
+.. container:: note
+
+ :need:`R-06924`
+
+ The VNF or PNF **MUST** deliver asynchronous data as data becomes
+ available, or according to the configured frequency.
+
+
+.. container:: note
+
+ :need:`R-86586`
+
+ The VNF or PNF **MUST** use the YANG configuration models and RESTCONF
+ [RFC8040] (https://tools.ietf.org/html/rfc8040).
+
+
+.. container:: note
+
+ :need:`R-70266`
+
+ The VNF or PNF **MUST** respond to an ONAP request to deliver the
+ current data for any of the record types defined in
+ `Event Records - Data Structure Description`_ by returning the requested
+ record, populated with the current field values. (Currently the defined
+ record types include fault fields, mobile flow fields, measurements for
+ VNF or PNF scaling fields, and syslog fields. Other record types will be added
+ in the future as they become standardized and are made available.)
+
+
+.. container:: note
+
+ :need:`R-34660`
+
+ The VNF or PNF **MUST** use the RESTCONF/NETCONF framework used by
+ the ONAP configuration subsystem for synchronous communication.
+
+
+.. container:: note
+
+ :need:`R-332680`
+
+ The VNF or PNF **SHOULD** deliver all syslog messages to the VES Collector per the
+ specifications in Monitoring and Management chapter.
+
+
+.. container:: note
+
+ :need:`R-46290`
+
+ The VNF or PNF **MUST** respond to an ONAP request to deliver granular
+ data on device or subsystem status or performance, referencing the YANG
+ configuration model for the VNF or PNF by returning the requested data elements.
+
+
+.. container:: note
+
+ :need:`R-42140`
+
+ The VNF or PNF **MUST** respond to data requests from ONAP as soon
+ as those requests are received, as a synchronous response.
+
+
+.. container:: note
+
+ :need:`R-11240`
+
+ The VNF or PNF **MUST** respond with content encoded in JSON, as
+ described in the RESTCONF specification. This way the encoding of a
+ synchronous communication will be consistent with Avro.
+
+
+.. container:: note
+
+ :need:`R-43327`
+
+ The VNF or PNF **SHOULD** use `Modeling JSON text with YANG
+ <https://tools.ietf.org/html/rfc7951>`_, If YANG models need to be
+ translated to and from JSON{RFC7951]. YANG configuration and content can
+ be represented via JSON, consistent with Avro, as described in "Encoding
+ and Serialization" section.
+
+
+Monitoring & Management > Monitoring & Management Requirements > Bulk Performance Measurement
+---------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-807129`
+
+ The VNF or PNF **SHOULD** report the files in FileReady for as long as they are
+ available at VNF or PNF.
+
+ Note: Recommended period is at least 24 hours.
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-841740`
+
+ The VNF or PNF **SHOULD** support FileReady VES event for event-driven bulk transfer
+ of monitoring data.
+
+
+.. container:: note
+
+ :need:`R-440220`
+
+ The VNF or PNF **SHOULD** support File transferring protocol, such as FTPES or SFTP,
+ when supporting the event-driven bulk transfer of monitoring data.
+
+
+.. container:: note
+
+ :need:`R-75943`
+
+ The VNF or PNF **SHOULD** support the data schema defined in 3GPP TS 32.435, when
+ supporting the event-driven bulk transfer of monitoring data.
+
+
+Monitoring & Management > Monitoring & Management Requirements > Google Protocol Buffers (GPB)
+----------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-257367`
+
+ The VNF or PNF, when leveraging Google Protocol Buffers for events, **MUST**
+ serialize the events using native Google Protocol Buffers (GPB) according
+ to the following guidelines:
+
+ * The keys are represented as integers pointing to the system resources
+ for the VNF or PNF being monitored
+ * The values correspond to integers or strings that identify the
+ operational state of the VNF resource, such a statistics counters and
+ the state of an VNF or PNF resource.
+ * The required Google Protocol Buffers (GPB) metadata is provided in the
+ form of .proto files.
+
+
+.. container:: note
+
+ :need:`R-978752`
+
+ The VNF or PNF providers **MUST** provide the Service Provider the following
+ artifacts to support the delivery of high-volume VNF or PNF telemetry to
+ DCAE via GPB over TLS/TCP:
+
+ * A valid VES Event .proto definition file, to be used validate and
+ decode an event
+ * A valid high volume measurement .proto definition file, to be used for
+ processing high volume events
+ * A supporting PM content metadata file to be used by analytics
+ applications to process high volume measurement events
+
+
+Monitoring & Management > Monitoring & Management Requirements > JSON
+---------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-19624`
+
+ The VNF or PNF, when leveraging JSON for events, **MUST** encode and serialize
+ content delivered to ONAP using JSON (RFC 7159) plain text format.
+ High-volume data is to be encoded and serialized using
+ `Avro <http://avro.apache.org/>`_, where the Avro data
+ format are described using JSON.
+
+
+Monitoring & Management > Monitoring & Management Requirements > Reporting Frequency
+------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-98191`
+
+ The VNF or PNF **MUST** vary the frequency that asynchronous data
+ is delivered based on the content and how data may be aggregated or
+ grouped together.
+
+ Note:
+
+ - For example, alarms and alerts are expected to be delivered as
+ soon as they appear. In contrast, other content, such as performance
+ measurements, KPIs or reported network signaling may have various
+ ways of packaging and delivering content. Some content should be
+ streamed immediately; or content may be monitored over a time
+ interval, then packaged as collection of records and delivered
+ as block; or data may be collected until a package of a certain
+ size has been collected; or content may be summarized statistically
+ over a time interval, or computed as a KPI, with the summary or KPI
+ being delivered.
+ - We expect the reporting frequency to be configurable depending on
+ the virtual network functions needs for management. For example,
+ Service Provider may choose to vary the frequency of collection
+ between normal and trouble-shooting scenarios.
+ - Decisions about the frequency of data reporting will affect
+ the size of delivered data sets, recommended delivery method,
+ and how the data will be interpreted by ONAP. These considerations
+ should not affect deserialization and decoding of the data, which
+ will be guided by the accompanying JSON schema or GPB definition
+ files.
+
+
+.. container:: note
+
+ :need:`R-146931`
+
+ The VNF or PNF **MUST** report exactly one Measurement event per period
+ per source name.
+
+
+Monitoring & Management > Monitoring & Management Requirements > Security
+-------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-42366`
+
+ The VNF or PNF **MUST** support secure connections and transports such as
+ Transport Layer Security (TLS) protocol
+ [`RFC5246 <https://tools.ietf.org/html/rfc5246>`_] and should adhere to
+ the best current practices outlined in
+ `RFC7525 <https://tools.ietf.org/html/rfc7525>`_.
+
+
+.. container:: note
+
+ :need:`R-44290`
+
+ The VNF or PNF **MUST** control access to ONAP and to VNFs or PNFs, and creation
+ of connections, through secure credentials, log-on and exchange mechanisms.
+
+
+.. container:: note
+
+ :need:`R-894004`
+
+ When the VNF or PNF sets up a HTTP or HTTPS connection to the collector, it **MUST**
+ provide a username and password to the DCAE VES Collector for HTTP Basic
+ Authentication.
+
+ Note: HTTP Basic Authentication has 4 steps: Request, Authenticate,
+ Authorization with Username/Password Credentials, and Authentication Status
+ as per RFC7617 and RFC 2617.
+
+
+.. container:: note
+
+ :need:`R-01427`
+
+ The VNF or PNF **MUST** support the provisioning of security and authentication
+ parameters (HTTP username and password) in order to be able to authenticate
+ with DCAE (in ONAP).
+
+ Note: In R3, a username and password are used with the DCAE VES Event
+ Listener which are used for HTTP Basic Authentication.
+
+ Note: The configuration management and provisioning software are specific
+ to a vendor architecture.
+
+
+.. container:: note
+
+ :need:`R-68165`
+
+ The VNF or PNF **MUST** encrypt any content containing Sensitive Personal
+ Information (SPI) or certain proprietary data, in addition to applying the
+ regular procedures for securing access and delivery.
+
+
+.. container:: note
+
+ :need:`R-47597`
+
+ The VNF or PNF **MUST** carry data in motion only over secure connections.
+
+
+Monitoring & Management > Monitoring & Management Requirements > VNF telemetry via standardized interface
+---------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-821473`
+
+ The VNF or PNF MUST produce heartbeat indicators consisting of events containing
+ the common event header only per the VES Listener Specification.
+
+
+Monitoring & Management > Transports and Protocols Supporting Resource Interfaces
+---------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-821839`
+
+ The VNF or PNF **MUST** deliver event records to ONAP using the common
+ transport mechanisms and protocols defined in this specification.
+
+
+.. container:: note
+
+ :need:`R-798933`
+
+ The VNF or PNF **SHOULD** deliver event records that fall into the event domains
+ supported by VES.
+
+
+.. container:: note
+
+ :need:`R-932071`
+
+ The VNF or PNF provider **MUST** reach agreement with the Service Provider on
+ the selected methods for encoding, serialization and data delivery
+ prior to the on-boarding of the VNF or PNF into ONAP SDC Design Studio.
+
+
+Monitoring & Management > Transports and Protocols Supporting Resource Interfaces > Bulk Telemetry Transmission
+---------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-908291`
+
+ The VNF or PNF **MAY** leverage bulk VNF or PNF telemetry transmission mechanism, as
+ depicted in Figure 4, in instances where other transmission methods are not
+ practical or advisable.
+
+
+Monitoring & Management > Transports and Protocols Supporting Resource Interfaces > VNF or PNF Telemetry using Google Protocol Buffers
+--------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-697654`
+
+ The VNF or PNF **MAY** leverage the Google Protocol Buffers (GPB) delivery model
+ depicted in Figure 3 to support real-time performance management (PM) data.
+ In this model the VES events are streamed as binary-encoded GBPs over via
+ TCP sockets.
+
+
+Monitoring & Management > Transports and Protocols Supporting Resource Interfaces > VNF or PNF Telemetry using VES/JSON Model
+-----------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-659655`
+
+ The VNF or PNF **SHOULD** leverage the JSON-driven model, as depicted in Figure 2,
+ for data delivery unless there are specific performance or operational
+ concerns agreed upon by the Service Provider that would warrant using an
+ alternate model.
+
+
+ONAP Heat Heat Template Constructs > Heat Files Support (get_file)
+------------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-87848
+
+ When using the intrinsic function get_file, ONAP does not support
+ a directory hierarchy for included files. All files must be in a
+ single, flat directory per VNF. A VNF's Heat Orchestration
+ Template's ``get_file`` target files **MUST** be in the same
+ directory hierarchy as the VNF's Heat Orchestration Templates.
+
+
+ONAP Heat Heat Template Constructs > Key Pairs
+----------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-100380`
+
+ If a VNF requires the use of an SSH key created by OpenStack, the VNF
+ Heat Orchestration Template **SHOULD** create the ``OS::Nova::Keypair``
+ in the base module, and expose the public key as an output value.
+
+ This allows re-use of the key by ONAP when triggering scale out, recovery,
+ or other day 1 operations.
+
+
+ONAP Heat Heat Template Constructs > Nested Heat Templates > Nested Heat Template Requirements
+----------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-708564`
+
+ If a VNF's Heat Orchestration Template's resource invokes a nested
+ YAML file, either statically or dynamically
+ (via ``OS::Heat::ResourceGroup``),
+ the names of the parameters associated with the following resource
+ properties **MUST NOT** change.
+
+ * ``OS::Nova::Server`` property ``flavor``
+ * ``OS::Nova::Server`` property ``image``
+ * ``OS::Nova::Server`` property ``name``
+ * ``OS::Nova::Server`` property metadata key value ``vnf_id``
+ * ``OS::Nova::Server`` property metadata key value ``vf_module_id``
+ * ``OS::Nova::Server`` property metadata key value ``vnf_name``
+ * ``OS::Nova::Server`` property metadata key value ``vf_module_name``
+ * ``OS::Nova::Server`` property metadata key value ``vm_role``
+ * ``OS::Nova::Server`` property metadata key value ``vf_module_index``
+ * ``OS::Nova::Server`` property metadata key value ``workload_context``
+ * ``OS::Nova::Server`` property metadata key value ``environment_context``
+ * ``OS::Neutron::Port`` property ``fixed_ips``, map property ``ip_address``
+ * ``OS::Neutron::Port`` property ``fixed_ips``, map property ``subnet``
+ * ``OS::Neutron::Port`` property ``allowed_address_pairs``, map property
+ ``ip_address``
+ * ``OS::Neutron::Port`` property ``network``
+ * ``OS::ContrailV2::VirtualMachineInterface`` property
+ ``virtual_network_refs``
+ * ``OS::ContrailV2::VirtualMachineInterface`` property
+ ``virtual_machine_interface_allowed_address_pairs``, map property
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``
+ ,
+ ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
+ * ``OS::ContrailV2::InstanceIP`` property ``instance_ip_address``
+ * ``OS::ContrailV2::InstanceIP`` property ``subnet_uuid``
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-52530
+
+ A VNF's Heat Orchestration Template's Nested YAML file
+ **MUST** be in the same directory hierarchy as the VNF's Heat
+ Orchestration Templates.
+
+
+.. container:: note
+
+ R-70112
+
+ A VNF's Heat Orchestration Template **MUST** reference a Nested YAML
+ file by name. The use of ``resource_registry`` in the VNF's Heat
+ Orchestration Templates Environment File **MUST NOT** be used.
+
+
+ONAP Heat Networking > External Networks
+----------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-83015
+
+ A VNF's ``{network-role}`` assigned to an external network **MUST**
+ be different than the ``{network-role}`` assigned to the VNF's
+ internal networks, if internal networks exist.
+
+
+ONAP Heat Networking > Internal Networks
+----------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-35666`
+
+ If a VNF has an internal network, the VNF Heat Orchestration Template
+ **MUST** include the heat resources to create the internal network.
+
+ A VNF's Internal Network is created using Neutron Heat Resources
+ (i.e., ``OS::Neutron::Net``, ``OS::Neutron::Subnet``) and/or
+ Contrail Heat Resources (i.e., ``OS::ContrailV2::VirtualNetwork``,
+ ``ContrailV2::NetworkIpam``).
+
+
+.. container:: note
+
+ :need:`R-22688`
+
+ When a VNF's Heat Orchestration Template creates an internal network
+ (per the ONAP definition, see Requirements R-52425 and R-46461
+ and R-35666) and the internal network needs to be shared between modules
+ within a VNF, the internal network **MUST** be created either in the
+
+ * the base module
+ * a nested YAML file invoked by the base module
+
+ and the base module **MUST** contain an output parameter that provides
+ either the network UUID or network name.
+
+ * If the network UUID value is used to reference the network, the output
+ parameter name in the base module **MUST** follow the naming convention
+ ``int_{network-role}_net_id``
+ * If the network name in is used to reference the network, the output
+ parameter name in the base template **MUST** follow the naming convention
+ ``int_{network-role}_net_name``
+
+ ``{network-role}`` **MUST** be the network-role of the internal network
+ created in the Base Module.
+
+ The Base Module Output Parameter MUST be declared in the ``parameters:``
+ section of the Incremental Module(s) where the ``OS::Neutron::Port``
+ resource(s) is attaching to the internal network.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-32025
+
+ When a VNF creates two or more internal networks, each internal
+ network **MUST** be assigned a unique ``{network-role}`` in the context
+ of the VNF for use in the VNF's Heat Orchestration Template.
+
+
+.. container:: note
+
+ R-68936
+
+ When a VNF creates an internal network, a network role, referred to as
+ the ``{network-role}`` **MUST** be assigned to the internal network
+ for use in the VNF's Heat Orchestration Template.
+
+
+.. container:: note
+
+ R-69874
+
+ A VNF's ``{network-role}`` assigned to an internal network **MUST**
+ be different than the ``{network-role}`` assigned to the VNF's external
+ networks.
+
+
+ONAP Heat Orchestration Template Format > Heat Orchestration Template Structure > parameters > constraints
+----------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-00011`
+
+ A VNF's Heat Orchestration Template's parameter defined
+ in a nested YAML file
+ **SHOULD NOT** have a parameter constraint defined.
+
+
+.. container:: note
+
+ :need:`R-88863`
+
+ A VNF's Heat Orchestration Template's parameter defined
+ in a non-nested YAML file as type
+ ``number`` **MAY** have a parameter constraint defined.
+
+
+ONAP Heat Orchestration Template Format > Heat Orchestration Template Structure > resources > properties
+--------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-10834`
+
+ A VNF's Heat Orchestration Template resource attribute ``property:``
+ **MUST NOT** use more than two levels of nested ``get_param`` intrinsic
+ functions when deriving a property value. SDC does not support nested
+ ``get_param`` with recursive lists (i.e., a list inside list).
+ The second ``get_param`` in a nested lookup must directly derive its value
+ without further calls to ``get_param`` functions.
+
+ * Example of valid nesting:
+
+ * ``name: {get_param: [ {vm-type}_names, {get_param : index } ] }``
+
+ * Examples of invalid nesting. SDC will not support these examples since
+ there is an array inside array.
+
+ * ``name: {get_param: [ {vm-type}_names, { get_param: [ indexlist, 0 ] } ] }``
+ * ``name: {get_param: [ {vm-type}_names, { get_param: [ indexlist1, { get_param: indexlist2 } ] } ] }``
+
+
+ONAP Heat Orchestration Templates Overview > ONAP Heat Orchestration Template Filenames > Base Modules
+------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-81339`
+
+ A VNF Heat Orchestration Template's Base Module file name **MUST** include
+ case insensitive 'base' in the filename and
+ **MUST** match one of the following four
+ formats:
+
+ 1.) ``base_<text>.y[a]ml``
+
+ 2.) ``<text>_base.y[a]ml``
+
+ 3.) ``base.y[a]ml``
+
+ 4.) ``<text>_base_<text>``.y[a]ml
+
+ where ``<text>`` **MUST** contain only alphanumeric characters and
+ underscores '_' and **MUST NOT** contain the case insensitive string
+ ``base`` or ``volume``.
+
+
+ONAP Heat Orchestration Templates Overview > ONAP Heat Orchestration Template Filenames > Cinder Volume Modules
+---------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-589037`
+
+ A VNF Heat Orchestration Template's Cinder Volume Module ``resources:``
+ section
+ **MUST** only be defined using one of the following:
+
+ * one of more ``OS::Cinder::Volume`` resources
+ * one or more ``OS::Heat::ResourceGroup`` resources that call a nested YAML
+ file that contains only ``OS::Cinder::Volume`` resources
+ * a resource that calls a nested YAML file (static nesting) that contains
+ only ``OS::Cinder::Volume`` resources
+
+
+ONAP Heat Orchestration Templates Overview > ONAP Heat Orchestration Template Filenames > Incremental Modules
+-------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-87247`
+
+ VNF Heat Orchestration Template's Incremental Module file name
+ **MUST** contain only alphanumeric characters and underscores
+ '_' and **MUST NOT** contain the case insensitive string ``base``.
+
+
+ONAP Heat Orchestration Templates Overview > ONAP Heat Orchestration Template Filenames > Nested Heat file
+----------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-76057`
+
+ VNF Heat Orchestration Template's Nested YAML file name **MUST** contain
+ only alphanumeric characters and underscores '_' and
+ **MUST NOT** contain the case insensitive string ``base``.
+
+
+ONAP Heat Orchestration Templates Overview > ONAP VNF Modularity Overview
+-------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-90748`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Cinder::Volume``
+ **MAY** be defined in an Incremental Module.
+
+
+.. container:: note
+
+ :need:`R-03251`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Cinder::Volume``
+ **MAY** be defined in a Cinder Volume Module.
+
+
+.. container:: note
+
+ :need:`R-46119`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Cinder::Volume``
+ **MAY** be defined in a Base Module.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-20974
+
+ At orchestration time, the VNF's Base Module **MUST**
+ be deployed first, prior to any incremental modules.
+
+
+ONAP Heat Orchestration Templates Overview > ONAP VNF On-Boarding
+-----------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-348813`
+
+ The VNF's Heat Orchestration Template's ZIP file **MUST NOT** include
+ a binary image file.
+
+
+.. container:: note
+
+ :need:`R-511776`
+
+ When a VNF's Heat Orchestration Template is ready
+ to be on-boarded to ONAP,
+ all files composing the VNF Heat Orchestration Template
+ **MUST** be placed in a flat (i.e., non-hierarchical) directory and
+ archived using ZIP. The resulting ZIP file is uploaded into ONAP.
+
+
+ONAP Heat Orchestration Templates Overview > Output Parameters > ONAP Base Module Output Parameters
+---------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-52753`
+
+ VNF's Heat Orchestration Template's Base Module's output parameter's
+ name and type **MUST** match the VNF's Heat Orchestration Template's
+ incremental Module's name and type.
+
+
+.. container:: note
+
+ :need:`R-22608`
+
+ When a VNF's Heat Orchestration Template's Base Module's output
+ parameter is declared as an input parameter in an Incremental Module,
+ the parameter attribute ``constraints:`` **SHOULD NOT** be declared.
+
+
+ONAP Heat Orchestration Templates Overview > Output Parameters > ONAP Volume Module Output Parameters
+-----------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-20547`
+
+ When an ONAP Volume Module Output Parameter is declared as an input
+ parameter in a base or an incremental module Heat Orchestration
+ Template, parameter constraints **SHOULD NOT** be declared.
+
+
+.. container:: note
+
+ :need:`R-07443`
+
+ A VNF's Heat Orchestration Templates' Cinder Volume Module Output
+ Parameter's name and type **MUST** match the input parameter name and type
+ in the corresponding Base Module or Incremental Module.
+
+
+.. container:: note
+
+ :need:`R-89913`
+
+ A VNF's Heat Orchestration Template's Cinder Volume Module Output
+ Parameter(s)
+ **MUST** include the
+ UUID(s) of the Cinder Volumes created in template.
+
+
+ONAP Heat Support of Environment Files
+--------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-599443`
+
+ A parameter enumerated in a
+ VNF's Heat Orchestration Template's environment file **MUST** be declared
+ in the
+ corresponding VNF's Heat Orchestration Template's YAML file's
+ ``parameters:`` section.
+
+
+ONAP Heat VNF Modularity
+------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-61001`
+
+ A shared Heat Orchestration Template resource is a resource that **MUST**
+ be defined in the base module and will be referenced by one or
+ more resources in one or more incremental modules.
+
+ The UUID of the shared resource (created in the base module) **MUST** be
+ exposed by declaring a parameter in the
+ ``outputs`` section of the base module.
+
+ For ONAP to provided the UUID value of the shared resource to the
+ incremental module, the parameter name defined in the ``outputs``
+ section of the base module **MUST** be defined as a parameter
+ in the ``parameters`` section of the incremental module.
+
+ ONAP will capture the output parameter name and value in the base module
+ and provide the value to the corresponding parameter(s) in the
+ incremental module(s).
+
+
+ONAP TOSCA VNFD Requirements > VNF CSAR Package > VNF Package Contents
+----------------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-26885
+
+ The VNF provider **MUST** provide the binaries and images needed to
+ instantiate the VNF (VNF and VNFC images) either as:
+
+ - Local artifact in CSAR: ROOT\\Artifacts\\ **VNF_Image.bin**
+
+ - externally referred (by URI) artifact in Manifest file (also may be
+ referred by VNF Descriptor)
+
+ Note: Currently, ONAP doesn't have the capability of Image management,
+ we upload the image into VIM/VNFM manually.
+
+
+ONAP TOSCA VNFD or PNFD Requirements > TOSCA PNF Descriptor > Capability Types
+------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-177937`
+
+ The PNFD provided by a PNF vendor **MUST** comply with the following
+ Capabilities Types as specified in ETSI NFV-SOL001 standard:
+
+ - tosca.datatypes.nfv.VirtualLinkable
+
+
+ONAP TOSCA VNFD or PNFD Requirements > TOSCA PNF Descriptor > Data Types
+------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-484843`
+
+ The PNFD provided by a PNF vendor **MUST** comply with the following Data
+ Types as specified in ETSI NFV-SOL001 standard:
+
+ - tosca.datatypes.nfv.CpProtocolData
+
+ - tosca.datatypes.nfv.AddressData
+
+ - tosca.datatypes.nfv.L2AddressData
+
+ - tosca.datatypes.nfv.L3AddressData
+
+ - tosca.datatypes.nfv.LocationInfo
+
+ - tosca.datatypes.nfv.CivicAddressElement
+
+
+ONAP TOSCA VNFD or PNFD Requirements > TOSCA PNF Descriptor > General
+---------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-24632`
+
+ The PNF Descriptor (PNFD) provided by PNF vendor **MUST** comply with
+ TOSCA/YAML based Service template for PNF descriptor specified in ETSI
+ NFV-SOL001.
+
+
+ONAP TOSCA VNFD or PNFD Requirements > TOSCA PNF Descriptor > Node Types
+------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-535009`
+
+ The PNFD provided by a PNF vendor **MUST** comply with the following Node
+ Types as specified in ETSI NFV-SOL001 standard:
+
+ - tosca.nodes.nfv.PNF
+
+ - tosca.nodes.nfv.PnfExtCp
+
+ - tosca.nodes.nfv.Cp
+
+
+ONAP TOSCA VNFD or PNFD Requirements > TOSCA PNF Descriptor > Policy Types
+--------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-596064`
+
+ The PNFD provided by a PNF vendor **MUST** comply with the following Policy
+ Types as specified in ETSI NFV-SOL001 standard:
+
+ - tosca.datatypes.nfv.SecurityGroupRule
+
+
+ONAP TOSCA VNFD or PNFD Requirements > TOSCA PNF Descriptor > Relationship Types
+--------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-64064`
+
+ The PNFD provided by a PNF vendor **MUST** comply with the following
+ Relationship Types as specified in ETSI NFV-SOL001 standard:
+
+ - tosca.datatypes.nfv.VirtualLinksTo
+
+
+ONAP TOSCA VNFD or PNFD Requirements > TOSCA VNF Descriptor > General
+---------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-65486`
+
+ The VNFD **MUST** comply with ETSI GS NFV-SOL001 specification endorsing
+ the above mentioned NFV Profile and maintaining the gaps with the
+ requirements specified in ETSI GS NFV-IFA011 standard.
+
+
+ONAP TOSCA VNFD or PNFD Requirements > VNF or PNF CSAR Package > VNF Package Contents
+-------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-146092`
+
+ If one or more non-MANO artifact(s) is included in the VNF or PNF TOSCA CSAR
+ package, the Manifest file in this CSAR package **MUST** contain: non-MANO
+ artifact set which MAY contain following ONAP public tag.
+
+ - onap_ves_events: contains VES registration files
+
+ - onap_pm_dictionary: contains the PM dictionary files
+
+ - onap_yang_modules: contains Yang module files for configurations
+
+ - onap_ansible_playbooks: contains any ansible_playbooks
+
+ - onap_others: contains any other non_MANO artifacts, e.g. informational
+ documents
+
+
+.. container:: note
+
+ :need:`R-221914`
+
+ The VNF or PNF package **MUST** contain a a human-readable change log text
+ file. The Change Log file keeps a history describing any changes in the VNF
+ or PNF package. The Change Log file is kept up to date continuously from
+ the creation of the CSAR package.
+
+
+.. container:: note
+
+ :need:`R-293901`
+
+ The VNF or PNF CSAR PACKAGE with TOSCA-Metadata **MUST** include following
+ additional keywords pointing to TOSCA files:
+
+ - ETSI-Entry-Manifest
+
+ - ETSI-Entry-Change-Log
+
+ Note: For a CSAR containing a TOSCA-Metadata directory, which includes
+ the TOSCA.meta metadata file. The TOSCA.meta metadata file includes block_0
+ with the Entry-Definitions keyword pointing to a TOSCA definitions YAML
+ file used as entry for parsing the contents of the overall CSAR archive.
+
+
+.. container:: note
+
+ :need:`R-57019`
+
+ The PNF TOSCA CSAR PACKAGE Manifest file **MUST** start with the PNF
+ package metadata in the form of a name-value pairs. Each pair shall appear
+ on a different line. The name is specified as following:
+
+ - pnfd_provider
+
+ - pnfd_name
+
+ - pnfd_release_date_time
+
+ - pnfd_archive_version
+
+
+.. container:: note
+
+ :need:`R-795126`
+
+ The VNF TOSCA CSAR package Manifest file **MUST** start with the VNF
+ package metadata in the form of a name-value pairs. Each pair shall appear
+ on a different line. The name is specified as following:
+
+ - vnf_provider_id
+
+ - vnf_product_name
+
+ - vnf_release_date_time
+
+ - vnf_package_version
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-10087`
+
+ The VNF or PNF CSAR package **MUST** include all artifacts required by
+ ETSI GS NFV-SOL004 including Manifest file, VNFD or PNFD (or Main
+ TOSCA/YAML based Service Template) and other optional artifacts.
+
+
+.. container:: note
+
+ :need:`R-40820`
+
+ The VNF or PNF TOSCA PACKAGE **MUST** enumerate all of the open source
+ licenses their VNF(s) incorporate. CSAR License directory as per ETSI
+ SOL004.
+
+ for example ROOT\\Licenses\\ **License_term.txt**
+
+
+.. container:: note
+
+ :need:`R-01123`
+
+ The VNF or PNF package Manifest file **MUST** contain: VNF or PNF package
+ meta-data, a list of all artifacts (both internal and external) entry's
+ including their respected URI's, an algorithm to calculate a digest and
+ a digest result calculated on the content of each artifacts, as specified
+ in ETSI GS NFV-SOL004.
+
+
+ONAP TOSCA VNFD or PNFD Requirements > VNF or PNF CSAR Package > VNF Package Structure and Format
+-------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-506221`
+
+ The VNF or PNF TOSCA CSAR file **MUST** be a zip file with .csar extension.
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-51347`
+
+ The VNF or PNF CSAR package **MUST** be arranged as a CSAR archive as
+ specified in TOSCA Simple Profile in YAML 1.2.
+
+
+.. container:: note
+
+ :need:`R-87234`
+
+ The VNF or PNF package provided by a VNF or PNF vendor **MUST** be with
+ TOSCA-Metadata directory (CSAR Option 1) as specified in
+ ETSI GS NFV-SOL004.
+
+ **Note:** SDC supports only the CSAR Option 1 in Dublin. The Option 2
+ will be considered in future ONAP releases.
+
+
+ONAP TOSCA VNFD or PNFD Requirements > VNF or PNF CSAR Package > VNF or PNF Package Authenticity and Integrity
+--------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-130206`
+
+ If the VNF or PNF CSAR Package utilizes Option 2 for package security, then
+ the complete CSAR file **MUST** contain a Digest (a.k.a. hash) for each of
+ the components of the VNF or PNF package. The table of hashes is included
+ in the package manifest file, which is signed with the VNF or PNF provider
+ private key. In addition, the VNF or PNF provider MUST include a signing
+ certificate that includes the VNF or PNF provider public key, following a
+ TOSCA pre-defined naming convention and located either at the root of the
+ archive or in a predefined location specified by the TOSCA.meta file with
+ the corresponding entry named "ETSI-Entry-Certificate".
+
+
+.. container:: note
+
+ :need:`R-787965`
+
+ If the VNF or PNF CSAR Package utilizes Option 2 for package security, then
+ the complete CSAR file **MUST** be digitally signed with the VNF or PNF
+ provider private key. The VNF or PNF provider delivers one zip file
+ consisting of the CSAR file, a signature file and a certificate file that
+ includes the VNF or PNF provider public key. The certificate may also be
+ included in the signature container, if the signature format allows that.
+ The VNF or PNF provider creates a zip file consisting of the CSAR file with
+ .csar extension, signature and certificate files. The signature and
+ certificate files must be siblings of the CSAR file with extensions .cms
+ and .cert respectively.
+
+
+PNF Plug and Play > PNF Plug and Play
+-------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-256347`
+
+ The PNF **MUST** support one of the protocols for a Service Configuration
+ message exchange between the PNF and PNF Controller (in ONAP):
+ a) Netconf/YANG, b) Chef, or c) Ansible.
+
+ Note: The PNF Controller may be VF-C, APP-C or SDN-C based on the
+ PNF and PNF domain.
+
+
+.. container:: note
+
+ :need:`R-106240`
+
+ The following VES Events **SHOULD** be supported by the PNF: pnfRegistration
+ VES Event, HVol VES Event, and Fault VES Event. These are onboarded via
+ he SDC Design Studio.
+
+ Note: these VES Events are emitted from the PNF to support PNF Plug and
+ Play, High Volume Measurements, and Fault events respectively.
+
+
+Resource IDs
+------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-11690`
+
+ When a VNF's Heat Orchestration Template's Resource ID contains an
+ ``{index}``, the ``{index}`` is a numeric value that **MUST** start at
+ zero and **MUST** increment by one.
+
+ As stated in R-16447,
+ *a VNF's <resource ID> MUST be unique across all Heat
+ Orchestration Templates and all HEAT Orchestration Template
+ Nested YAML files that are used to create the VNF*. While the ``{index}``
+ will start at zero in the VNF, the ``{index}`` may not start at zero
+ in a given Heat Orchestration Template or HEAT Orchestration Template
+ Nested YAML file.
+
+
+Resource IDs > Contrail Heat Resources Resource ID Naming Convention > OS::ContrailV2::InstanceIp
+-------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-53310`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` Resource ID
+ that is configuring an IPv4 Address on a virtual machine interface
+ (i.e., OS::ContrailV2::VirtualMachineInterface)
+ attached to an external network
+ **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}_IP_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
+ the VNF. The
+ ``{vm-type_index}`` is a numeric value that **MUST** start at zero
+ in the VNF and
+ **MUST** increment by one each time a new instance of a ``{vm-type}``
+ is referenced.
+ * ``{network-role}`` is the network-role of the network that the
+ virtual machine interface is attached to
+ * ``{vmi_index}`` references the instance of the virtual machine interface
+ on the ``{vm-type}`` attached to ``{network-role}`` network. The
+ ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
+ instance of a ``{vm-type}`` and **MUST** increment by one each time a
+ new virtual machine interface is defined on the instance of the
+ ``{vm-type}`` attached to ``{network-role}`` network.
+ * ``IP`` signifies that an IPv4 address is being configured
+ * ``{index}`` references the instance of the IPv4 address configured
+ on the virtual machine interface. The ``{index}`` is a numeric value
+ that **MUST** start at zero on an
+ instance of a virtual machine interface and **MUST** increment by one
+ each time a new IPv4 address is configured on the
+ virtual machine interface.
+
+
+.. container:: note
+
+ :need:`R-87563`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` Resource ID
+ that is configuring an IPv6 Address on a virtual machine interface
+ (i.e., OS::ContrailV2::VirtualMachineInterface)
+ attached to an internal network
+ **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}_v6_IP_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
+ the VNF. The
+ ``{vm-type_index}`` is a numeric value that **MUST** start at zero
+ in the VNF and
+ **MUST** increment by one each time a new instance of a ``{vm-type}``
+ is referenced.
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{vmi_index}`` references the instance of the virtual machine interface
+ on the ``{vm-type}`` attached to ``{network-role}`` network. The
+ ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
+ instance of a ``{vm-type}`` and **MUST** increment by one each time a
+ new virtual machine interface is defined on the instance of the
+ ``{vm-type}`` attached to ``{network-role}`` network.
+ * ``v6_IP`` signifies that an IPv6 address is being configured
+ * ``{index}`` references the instance of the IPv6 address configured
+ on the virtual machine interface. The ``{index}`` is a numeric value
+ that **MUST** start at zero on an
+ instance of a virtual machine interface and **MUST** increment by one
+ each time a new IPv6 address is configured on the
+ virtual machine interface.
+
+
+.. container:: note
+
+ :need:`R-62187`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` Resource ID
+ that is configuring an IPv4 Address on a virtual machine interface
+ (i.e., OS::ContrailV2::VirtualMachineInterface)
+ attached to an internal network
+ **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}_IP_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
+ the VNF. The
+ ``{vm-type_index}`` is a numeric value that **MUST** start at zero
+ in the VNF and
+ **MUST** increment by one each time a new instance of a ``{vm-type}``
+ is referenced.
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{vmi_index}`` references the instance of the virtual machine interface
+ on the ``{vm-type}`` attached to ``{network-role}`` network. The
+ ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
+ instance of a ``{vm-type}`` and **MUST** increment by one each time a
+ new virtual machine interface is defined on the instance of the
+ ``{vm-type}`` attached to ``{network-role}`` network.
+ * ``IP`` signifies that an IPv4 address is being configured
+ * ``{index}`` references the instance of the IPv4 address configured
+ on the virtual machine interface. The ``{index}`` is a numeric value
+ that **MUST** start at zero on an
+ instance of a virtual machine interface and **MUST** increment by one
+ each time a new IPv4 address is configured on the
+ virtual machine interface.
+
+
+.. container:: note
+
+ :need:`R-46128`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::InstanceIp`` Resource ID
+ that is configuring an IPv6 Address on a virtual machine interface
+ (i.e., OS::ContrailV2::VirtualMachineInterface)
+ attached to an external network
+ **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}_v6_IP_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
+ the VNF. The
+ ``{vm-type_index}`` is a numeric value that **MUST** start at zero
+ in the VNF and
+ **MUST** increment by one each time a new instance of a ``{vm-type}``
+ is referenced.
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{vmi_index}`` references the instance of the virtual machine interface
+ on the ``{vm-type}`` attached to ``{network-role}`` network. The
+ ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
+ instance of a ``{vm-type}`` and **MUST** increment by one each time a
+ new virtual machine interface is defined on the instance of the
+ ``{vm-type}`` attached to ``{network-role}`` network.
+ * ``v6_IP`` signifies that an IPv6 address is being configured
+ * ``{index}`` references the instance of the IPv6 address configured
+ on the virtual machine interface. The ``{index}`` is a numeric value
+ that **MUST** start at zero on an
+ instance of a virtual machine interface and **MUST** increment by one
+ each time a new IPv6 address is configured on the
+ virtual machine interface.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-20947
+
+ A VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp``
+ that is configuring an IPv4 Address on a sub-interface port attached to a
+ sub-interface network Resource ID **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_subint_{network-role}_vmi_{vmi_index}_IP_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` is the instance of the ``{vm-type}``
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{vmi_index}`` is the instance of the the virtual machine interface
+ (e.g., port) on the vm-type
+ attached to the network of ``{network-role}``
+ * ``IP`` signifies that an IPv4 address is being configured
+ * ``{index}`` is the index of the IPv4 address
+
+
+.. container:: note
+
+ R-88540
+
+ A VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp``
+ that is configuring an IPv6 Address on a sub-interface port attached to a
+ sub-interface network Resource ID **MUST**
+ use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_subint_{network-role}_vmi_{vmi_index}_v6_IP_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` is the instance of the ``{vm-type}``
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{vmi_index}`` is the instance of the the virtual machine interface
+ (e.g., port) on the vm-type
+ attached to the network of ``{network-role}``
+ * ``v6_IP`` signifies that an IPv6 address is being configured
+ * ``{index}`` is the index of the IPv6 address
+
+
+Resource IDs > Contrail Heat Resources Resource ID Naming Convention > OS::ContrailV2::ServiceTemplate
+------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-14447`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::ServiceTemplate``
+ Resource ID **MAY** use the naming convention
+
+ * ``{vm-type}_RST_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``RST`` signifies that it is the Resource Service Template
+ * ``{index}`` is the index.
+ The ``{index}`` starts at zero and increments by one
+ (as described in R-11690).
+
+
+Resource IDs > Contrail Heat Resources Resource ID Naming Convention > OS::ContrailV2::VirtualMachineInterface
+--------------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-50468`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::VirtualMachineInterface`` Resource ID
+ that is attaching to an internal network
+ **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
+ the VNF. The
+ ``{vm-type_index}`` is a numeric value that **MUST** start at zero
+ in the VNF and
+ **MUST** increment by one each time a new instance of a ``{vm-type}``
+ is referenced.
+ * ``{network-role}`` is the network-role of the network
+ that the port (i.e. virtual machine interface) is attached to
+ * ``{vmi_index}`` references the instance of the virtual machine interface
+ on the ``{vm-type}`` attached to ``{network-role}`` network. The
+ ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
+ instance of a ``{vm-type}`` and **MUST** increment by one each time a
+ new virtual machine interface is defined on the instance of the
+ ``{vm-type}`` attached to ``{network-role}`` network.
+
+
+.. container:: note
+
+ :need:`R-96253`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::VirtualMachineInterface`` Resource ID
+ that is attaching to an external network
+ **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
+ the VNF. The
+ ``{vm-type_index}`` is a numeric value that **MUST** start at zero
+ in the VNF and
+ **MUST** increment by one each time a new instance of a ``{vm-type}``
+ is referenced.
+ * ``{network-role}`` is the network-role of the network
+ that the port (i.e. virtual machine interface) is attached to
+ * ``{vmi_index}`` references the instance of the virtual machine interface
+ on the ``{vm-type}`` attached to ``{network-role}`` network. The
+ ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
+ instance of a ``{vm-type}`` and **MUST** increment by one each time a
+ new virtual machine interface is defined on the instance of the
+ ``{vm-type}`` attached to ``{network-role}`` network.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-54458
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::VirtualMachineInterface`` that is attaching to a sub-interface
+ network Resource ID **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_subint_{network-role}_vmi_{vmi_index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` is the instance of the ``{vm-type}``
+ * ``{network-role}`` is the network-role of the network
+ that the port (i.e. virtual machine interface) is attached to
+ * ``{vmi_index}`` is the instance of the the vmi on the vm-type
+ attached to the network of ``{network-role}``
+
+
+Resource IDs > Contrail Heat Resources Resource ID Naming Convention > OS::ContrailV2::VirtualNetwork
+-----------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-99110`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::ContrailV2::VirtualNetwork`` Resource ID **MUST** use the naming
+ convention
+
+ * ``int_{network-role}_network``
+
+ VNF Heat Orchestration Templates can only create internal networks.
+ There is no ``{index}`` after ``{network-role}`` because ``{network-role}``
+ **MUST** be unique in the scope of the VNF's
+ Heat Orchestration Template.
+
+
+Resource IDs > OpenStack Heat Resources Resource ID Naming Convention > OS::Cinder::Volume
+------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-87004`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::Cinder::Volume``
+ Resource ID
+ **SHOULD**
+ use the naming convention
+
+ * ``{vm-type}_volume_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{index}`` starts at zero and increments by one (as described in R-11690)
+
+
+Resource IDs > OpenStack Heat Resources Resource ID Naming Convention > OS::Cinder::VolumeAttachment
+----------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-86497`
+
+ A VNF's Heat Orchestration Template's Resource
+ ``OS::Cinder::VolumeAttachment``
+ Resource ID
+ **SHOULD**
+ use the naming convention
+
+ * ``{vm-type}_volume_attachment_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{index}`` starts at zero and increments by one (as described in R-11690)
+
+
+Resource IDs > OpenStack Heat Resources Resource ID Naming Convention > OS::Heat::ResourceGroup
+-----------------------------------------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-64197
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Heat::ResourceGroup``
+ Resource ID that creates sub-interfaces **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_subint_{network-role}_port_{port-index}_subinterfaces``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` is the instance of the ``{vm-type}``
+ * ``{network-role}`` is the network-role of the networks
+ that the sub-interfaces attach to
+ * ``{port-index}`` is the instance of the the port on the vm-type
+ attached to the network of ``{network-role}``
+
+
+Resource IDs > OpenStack Heat Resources Resource ID Naming Convention > OS::Neutron::Port
+-----------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-68520`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Port``
+ that is creating a *Reserve Port* with an IPv6 address Resource ID
+ **SHOULD** use the naming convention
+
+ * ``reserve_port_{vm-type}_{network-role}_floating_v6_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{index}`` is the instance of the IPv6 *Reserve Port*
+ for the vm-type attached to the network of ``{network-role}``.
+ The ``{index}`` starts at zero and increments by one
+ (as described in R-11690).
+
+
+.. container:: note
+
+ :need:`R-27469`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Port``
+ that is creating a *Reserve Port* with an IPv4 address Resource ID
+ **SHOULD** use the naming convention
+
+ * ``reserve_port_{vm-type}_{network-role}_floating_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{index}`` is the instance of the IPv4 *Reserve Port*
+ for the vm-type attached to the network of ``{network-role}``.
+ The ``{index}`` starts at zero and increments by one
+ (as described in R-11690).
+
+
+.. container:: note
+
+ :need:`R-26351`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Port``
+ that is attaching to an internal network Resource ID **MUST**
+ use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_int_{network-role}_port_{port-index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
+ the VNF. The
+ ``{vm-type_index}`` is a numeric value that **MUST** start at zero
+ in the VNF and
+ **MUST** increment by one each time a new instance of a ``{vm-type}``
+ is referenced.
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{port_index}`` references the instance of the port on the ``{vm-type}``
+ attached to ``{network-role}`` network. The
+ ``{port_index}`` is a numeric value that **MUST** start at zero on an
+ instance of a ``{vm-type}`` and **MUST** increment by one each time a
+ new port is defined on the instance of the ``{vm-type}`` attached to
+ ``{network-role}`` network.
+
+
+.. container:: note
+
+ :need:`R-20453`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Port``
+ that is attaching to an external network Resource ID
+ **MUST** use the naming convention
+
+ * ``{vm-type}_{vm-type_index}_{network-role}_port_{port-index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
+ the VNF. The
+ ``{vm-type_index}`` is a numeric value that **MUST** start at zero
+ in the VNF and
+ **MUST** increment by one each time a new instance of a ``{vm-type}``
+ is referenced.
+ * ``{network-role}`` is the network-role of the network
+ that the port is attached to
+ * ``{port_index}`` references the instance of the port on the ``{vm-type}``
+ attached to ``{network-role}`` network. The
+ ``{port_index}`` is a numeric value that **MUST** start at zero on an
+ instance of a ``{vm-type}`` and **MUST** increment by one each time a
+ new port is defined on the instance of the ``{vm-type}`` attached to
+ ``{network-role}`` network.
+
+
+Resource IDs > OpenStack Heat Resources Resource ID Naming Convention > OS::Neutron::Subnet
+-------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-59434`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Subnet``
+ Resource ID **SHOULD** use the naming convention
+
+ * ``int_{network-role}_subnet_{index}``
+
+ where
+
+ * ``{network-role}`` is the network-role
+ * ``{index}`` is the ``{index}`` of the subnet of the network.
+ The ``{index}`` starts at zero and increments by one
+ (as described in R-11690).
+
+
+Resource IDs > OpenStack Heat Resources Resource ID Naming Convention > OS::Nova::Keypair
+-----------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-24997`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Nova::Keypair`` applies to
+ one ``{vm-type}`` Resource ID **SHOULD** use the naming convention
+
+ * ``{vm-type}_keypair_{index}``
+
+ where
+
+ * ``{network-role}`` is the network-role
+ * ``{index}`` is the ``{index}`` of the keypair.
+ The ``{index}`` starts at zero and increments by one
+ (as described in R-11690).
+
+
+.. container:: note
+
+ :need:`R-65516`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Nova::Keypair`` applies to
+ all Virtual Machines in the VNF, the Resource ID **SHOULD** use the naming
+ convention
+
+ * ``{vnf-type}_keypair``
+
+ where
+
+ * ``{vnf-type}`` describes the VNF
+
+
+Resource IDs > OpenStack Heat Resources Resource ID Naming Convention > OS::Nova::Server
+----------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-29751`
+
+ A VNF's Heat Orchestration Template's Resource ``OS::Nova::Server``
+ Resource ID
+ **MUST** use the naming convention
+
+ * ``{vm-type}_server_{index}``
+
+ where
+
+ * ``{vm-type}`` is the vm-type
+ * ``{index}`` is the index.
+ The ``{index}`` **MUST** starts at zero and increment by one
+ as described in R-11690.
+
+
+Resource Property “name”
+------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-85734`
+
+ If a VNF's Heat Orchestration Template contains the property ``name``
+ for a non ``OS::Nova::Server`` resource, the intrinsic function
+ ``str_replace`` **MUST** be used in conjunction with the ONAP
+ supplied metadata parameter ``vnf_name`` to generate a unique value.
+ Additional data **MAY** be used in the ``str_replace`` construct
+ to generate a unique value.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-32408
+
+ If a VNF's Heat Orchestration Template property ``name``
+ for a non ``OS::Nova::Server`` resource uses the intrinsic function
+ ``str_replace`` in conjunction with the ONAP
+ supplied metadata parameter ``vnf_name`` and does not create
+ a unique value, additional data **MUST** be used in the
+ ``str_replace`` to create a unique value, such as ``OS::stack_name``
+ and/or the ``OS::Heat::ResourceGroup`` ``index``.
+
+
+Resource: OS::Neutron::Port - Parameters > Introduction > Items to Note
+-----------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-681859`
+
+ A VNF's Heat Orchestration Template's ``OS::Neutron::Port`` resource's
+
+ * Resource ID (defined in R-20453)
+ * property ``network`` parameter name (defined in R-62983 and
+ R-86182)
+ * property ``fixed_ips``, map property ``ip_address`` parameter name
+ (defined in R-40971, R-04697, R-71577, R-23503, R-78380, R-85235,
+ R-27818, and R-29765)
+ * property ``fixed_ips``, map property ``subnet`` parameter name
+ (defined in R-62802, R-15287, R-84123, R-76160)
+ * property ``allowed_address_pairs`` parameter name (defined in
+ R-41492 and R-83418)
+
+ **MUST** contain the identical ``{network-role}``.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-07577
+
+ If the VNF's ports connected to a unique network (internal or external)
+ and the port's IP addresses are cloud assigned IP Addresses,
+ all the IPv4 Addresses **MUST** be from
+ the same subnet and all the IPv6 Addresses **MUST** be from the
+ same subnet.
+
+
+.. container:: note
+
+ R-13841
+
+ A VNF **MAY** have one or more ports connected to a unique
+ internal network. All VNF ports connected to the unique internal
+ network **MUST** have cloud assigned IP Addresses
+ or **MUST** have statically assigned IP addresses.
+
+
+.. container:: note
+
+ R-93272
+
+ A VNF **MAY** have one or more ports connected to a unique
+ external network. All VNF ports connected to the unique external
+ network **MUST** have cloud assigned IP Addresses
+ or **MUST** have ONAP SDN-C assigned IP addresses.
+
+
+Resource: OS::Neutron::Port - Parameters > Property: allowed_address_pairs, Map Property: ip_address
+----------------------------------------------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-62300
+
+ If a VNF has two or more ports that require a Virtual IP Address (VIP),
+ a VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` property ``allowed_address_pairs``
+ map property ``ip_address`` parameter
+ **MUST** be used.
+
+
+Resource: OS::Neutron::Port - Parameters > Property: allowed_address_pairs, Map Property: ip_address > VIP Assignment, External Networks
+----------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-41493`
+
+ When the VNF's Heat Orchestration Template's resource
+ ``OS::Neutron::Port`` is attaching to an external network
+ (per the ONAP definition, see Requirement R-57424),
+ and the IPv4 VIP address and/or IPv6 VIP address
+ is **not** supported by the ONAP data model,
+ the property ``allowed_address_pairs`` map property ``ip_address``
+
+ * Parameter name **MAY** use any naming convention. That is, there is no
+ ONAP mandatory parameter naming convention.
+ * Parameter **MAY** be declared as type ``string`` or type
+ ``comma_delimited_list``.
+
+ And the ``OS::Neutron::Port`` resource **MUST** contain
+ resource-level ``metadata`` (not property-level).
+
+ And the ``metadata`` format **MUST** must contain the
+ key value ``aap_exempt`` with a list of all
+ ``allowed_address_pairs`` map property ``ip_address`` parameters
+ **not** supported by the ONAP data model.
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-35735`
+
+ When the VNF's Heat Orchestration Template's resource
+ ``OS::Neutron::Port`` is attaching to an external network
+ (per the ONAP definition, see Requirement R-57424),
+ and the IPv6 VIP is required to be supported by the ONAP data model,
+ the property ``allowed_address_pairs`` map property ``ip_address``
+ parameter name **MUST** follow the naming convention
+
+ * ``{vm-type}_{network-role}_floating_v6_ip``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external network
+
+ And the parameter **MUST** be declared as type ``string``.
+
+ As noted in the introduction to this section, the ONAP data model
+ can only support one IPv6 VIP address.
+
+
+.. container:: note
+
+ :need:`R-83412`
+
+ If a VNF's Heat Orchestration Template's resource
+ ``OS::Neutron::Port`` is attaching to an external network (per the
+ ONAP definition, see Requirement R-57424), the
+ property ``allowed_address_pairs``
+ map property ``ip_address`` parameter(s)
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ :need:`R-41492`
+
+ When the VNF's Heat Orchestration Template's resource
+ ``OS::Neutron::Port`` is attaching to an external network
+ (per the ONAP definition, see Requirement R-57424),
+ and the IPv4 VIP is required to be supported by the ONAP data model,
+ the property ``allowed_address_pairs`` map property ``ip_address``
+ parameter name **MUST** follow the naming convention
+
+ * ``{vm-type}_{network-role}_floating_ip``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external network
+
+ And the parameter **MUST** be declared as type ``string``.
+
+ As noted in the introduction to this section, the ONAP data model
+ can only support one IPv4 VIP address.
+
+
+Resource: OS::Neutron::Port - Parameters > Property: allowed_address_pairs, Map Property: ip_address > VIP Assignment, External Networks, Supported by Automation
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-10754
+
+ If a VNF has two or more ports that
+ attach to an external network that require a Virtual IP Address (VIP),
+ and the VNF requires ONAP automation to assign the IP address,
+ all the Virtual Machines using the VIP address **MUST**
+ be instantiated in the same Base Module Heat Orchestration Template
+ or in the same Incremental Module Heat Orchestration Template.
+
+
+.. container:: note
+
+ R-41956
+
+ If a VNF requires ONAP to assign a Virtual IP (VIP) Address to
+ ports connected an external network, the port
+ **MUST NOT** have more than one IPv6 VIP address.
+
+
+.. container:: note
+
+ R-83418
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` property ``allowed_address_pairs``
+ map property ``ip_address`` parameter
+ ``{vm-type}_{network-role}_floating_v6_ip``
+ **MUST NOT** be enumerated in the
+ VNF's Heat Orchestration Template's Environment File.
+
+
+.. container:: note
+
+ R-91810
+
+ If a VNF requires ONAP to assign a Virtual IP (VIP) Address to
+ ports connected an external network, the port
+ **MUST NOT** have more than one IPv4 VIP address.
+
+
+.. container:: note
+
+ R-98748
+
+ The VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` property ``allowed_address_pairs``
+ map property ``ip_address`` parameter
+ **MUST** be declared as type ``string``.
+
+
+Resource: OS::Neutron::Port - Parameters > Property: allowed_address_pairs, Map Property: ip_address > VIP Assignment, Internal Networks
+----------------------------------------------------------------------------------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-717227`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` is attaching to an internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv4 Virtual IP (VIP)
+ address is assigned using the property ``allowed_address_pairs``
+ map property ``ip_address``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_floating_ip``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+ And the parameter **MUST** be declared as ``type: string``
+ and **MUST** be enumerated in the environment file.
+
+ OR
+
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_floating_ips``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+ And the parameter **MUST** be declared as ``type: comma_delimited_list``
+ and **MUST** be enumerated in the environment file.
+
+
+.. container:: note
+
+ :need:`R-805572`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` is attaching to an internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv6 Virtual IP (VIP)
+ address is assigned
+ using the property ``allowed_address_pairs``
+ map property ``ip_address``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_floating_v6_ip``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+ And the parameter **MUST** be declared as ``type: string``
+ and **MUST** be enumerated in the environment file
+
+ OR
+
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_floating_v6_ips``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ OS::Nova::Server
+ * ``{network-role}`` is the {network-role} of the external
+ network
+
+ And the parameter **MUST** be declared as ``type: comma_delimited_list``
+ and **MUST** be enumerated in the environment file.
+
+
+Resource: OS::Neutron::Port - Parameters > Property: fixed_ips, Map Property: ip_address
+----------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-78380`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` is attaching to an internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv4 address is assigned
+ using the property ``fixed_ips``
+ map property ``ip_address`` and the parameter type is
+ defined as a ``string``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the internal network
+ * ``{index}`` is a numeric value that **MUST** start at zero in a
+ VNF's Heat Orchestration Template and **MUST** increment by one
+
+
+.. container:: note
+
+ :need:`R-71577`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` is attaching to an external network (per the
+ ONAP definition, see Requirement R-57424),
+ and an IPv6 address is assigned
+ using the property ``fixed_ips``
+ map property ``ip_address`` and the parameter type is defined as a string,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_{network-role}_v6_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the
+ ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external network
+ * ``{index}`` is a numeric value that **MUST** start at zero in a
+ VNF's Heat Orchestration Template and **MUST** increment by one
+
+
+.. container:: note
+
+ :need:`R-40971`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` is attaching to an external network (per the
+ ONAP definition, see Requirement R-57424),
+ and an IPv4 address is assigned
+ using the property ``fixed_ips``
+ map property ``ip_address`` and the parameter type is defined as a string,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_{network-role}_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the external network
+ * ``{index}`` is a numeric value that **MUST** start at zero in a
+ VNF's Heat Orchestration Template and **MUST** increment by one
+
+
+.. container:: note
+
+ :need:`R-27818`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port`` is attaching to an internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and an IPv6 address is assigned
+ using the property ``fixed_ips``
+ map property ``ip_address`` and the parameter type is defined as a
+ ``string``,
+ the parameter name **MUST** follow the
+ naming convention
+
+ * ``{vm-type}_int_{network-role}_v6_ip_{index}``
+
+ where
+
+ * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
+ * ``{network-role}`` is the {network-role} of the internal network
+ * ``{index}`` is a numeric value that **MUST** start at zero in a
+ VNF's Heat Orchestration Template and **MUST** increment by one
+
+
+Resource: OS::Neutron::Port - Parameters > Property: network
+------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-86182`
+
+ When the VNF's Heat Orchestration Template's Resource
+ ``OS::Neutron::Port``
+ is in an incremental module and
+ is attaching to an internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ the ``network`` parameter name **MUST**
+
+ * follow the naming convention ``int_{network-role}_net_id`` if the
+ network UUID value is used to reference the network
+ * follow the naming convention ``int_{network-role}_net_name`` if the
+ network name in is used to reference the network.
+
+ where ``{network-role}`` is the network-role of the internal network and
+ a ``get_param`` **MUST** be used as the intrinsic function.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-93177
+
+ When the VNF's Heat Orchestration Template's resource
+ ``OS::Neutron::Port`` is attaching to an internal network (per the
+ ONAP definition, see Requirements R-52425 and R-46461),
+ and the internal network is created in the
+ same Heat Orchestration Template as the ``OS::Neutron::Port``,
+ the ``network`` property value **MUST** obtain the UUID
+ of the internal network by using the intrinsic function
+ ``get_resource``
+ and referencing the Resource ID of the internal network.
+
+
+Resource: OS::Nova::Server - Parameters
+---------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-304011`
+
+ A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource's
+
+ * Resource ID (defined in R-29751)
+ * property ``image`` parameter name (defined in R-58670)
+ * property ``flavor`` parameter name (defined in R-45188)
+ * property ``name`` parameter name (defined in R-54171 & R-87817)
+ * property ``networks`` map property ``port`` value which is a
+ ``OS::Neutron::Port`` Resource ID (defined in R-20453)
+ referenced using the intrinsic function ``get_attr``
+
+ **MUST** contain the identical ``{vm-type}``
+ and **MUST** follow the naming conventions defined
+ in R-58670, R-45188, R-54171, R-87817, and R-29751. And the ``{index}`` in
+ the ``OS::Nova::Server`` Resource ID (defined in R-29751) **MUST** match
+ the ``{vm-type_index}`` defined in
+ the ``OS::Nova::Server`` property ``networks`` map property ``port``
+ referenced ``OS::Neutron::Port`` Resource ID (defined in R-20453).
+
+
+Resource: OS::Nova::Server - Parameters > Property: Name
+--------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-54171`
+
+ When the VNF's Heat Orchestration Template's Resource ``OS::Nova::Server``
+ property ``name`` parameter is defined as a ``string``,
+ the parameter name **MUST** follow the naming convention
+
+ * ``{vm-type}_name_{index}``
+
+ where ``{index}`` is a numeric value that **MUST** start at
+ zero in a VNF's Heat Orchestration Template and **MUST** increment by one.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-40899
+
+ When the VNF's Heat Orchestration Template's Resource ``OS::Nova::Server``
+ property ``name`` parameter is defined as a ``string``, a parameter
+ **MUST** be delcared for
+ each ``OS::Nova::Server`` resource associated with the ``{vm-type}``.
+
+
+.. container:: note
+
+ R-85800
+
+ When the VNF's Heat Orchestration Template's Resource ``OS::Nova::Server``
+ property ``name`` parameter is defined as a ``comma_delimited_list``,
+ a parameter **MUST** be delcared once for all ``OS::Nova::Server`` resources
+ associated with the ``{vm-type}``.
+
+
+Resource: OS::Nova::Server - Parameters > Property: availability_zone
+---------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-98450`
+
+ The VNF's Heat Orchestration Template's Resource ``OS::Nova::Server``
+ property ``availability_zone`` parameter name
+ **MUST** follow the naming convention
+
+ * ``availability_zone_{index}``
+
+ where ``{index}`` is a numeric value that **MUST** start at zero
+ in a VNF's Heat Orchestration Templates and **MUST**
+ increment by one.
+
+
+Resource: OS::Nova::Server Metadata Parameters > environment_context
+--------------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-62954
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server Resource``
+ ``metadata`` map value parameter ``environment_context`` is passed into a
+ Nested YAML
+ file, the parameter name ``environment_context`` **MUST NOT** change.
+
+
+Resource: OS::Nova::Server Metadata Parameters > vf_module_id
+-------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-86237
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property
+ ``metadata`` key/value pair ``vf_module_id`` is passed into a
+ Nested YAML
+ file, the key/value pair name ``vf_module_id`` **MUST NOT** change.
+
+
+Resource: OS::Nova::Server Metadata Parameters > vf_module_index
+----------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-100410`
+
+ A VNF's Heat Orchestration Template's ``OS::Nova::Server``
+ resource property ``metadata`` **MAY**
+ contain the key/value pair ``vf_module_index``.
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-50816`
+
+ A VNF's Heat Orchestration Template's ``OS::Nova::Server``
+ resource property ``metadata``
+ key/value pair ``vf_module_index``
+ value **MUST** be obtained via a ``get_param``.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-22441
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property ``metadata`` key/value pair ``vf_module_index`` is passed into a
+ Nested YAML file, the key/value pair
+ ``vf_module_index`` **MUST NOT** change.
+
+
+Resource: OS::Nova::Server Metadata Parameters > vf_module_name
+---------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-100400`
+
+ A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property metadata **SHOULD** contain the key/value pair ``vf_module_name``.
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-68023`
+
+ A VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property ``metadata`` key/value pair ``vf_module_name``
+ value **MUST**
+ be obtained via a ``get_param``.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-49177
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property ``metadata`` key/value pair ``vf_module_name`` is passed into a
+ Nested YAML
+ file, the key/value pair name ``vf_module_name`` **MUST NOT** change.
+
+
+Resource: OS::Nova::Server Metadata Parameters > vm_role
+--------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-95430`
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server``
+ resource property
+ ``metadata`` key/value pair ``vm_role`` value is obtained via
+ ``get_param``, the parameter **MAY** be declared as
+
+ * ``vm_role`` and the parameter defined as ``type: string``.
+ * ``vm_roles`` and the parameter defined as ``type: comma_delimited_list``.
+ * ``{vm-type}_vm_role`` and the parameter defined as ``type: string``.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-70757
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property ``metadata`` key/value pair ``vm_role`` is passed into a Nested
+ YAML
+ file, the key/value pair name ``vm_role`` **MUST NOT** change.
+
+
+Resource: OS::Nova::Server Metadata Parameters > vnf_id
+-------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-44491
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property
+ ``metadata`` key/value pair ``vnf_id`` is passed into a Nested YAML
+ file, the key/value pair name ``vnf_id`` **MUST NOT** change.
+
+
+Resource: OS::Nova::Server Metadata Parameters > vnf_name
+---------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-16576
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property
+ ``metadata`` key/value pair ``vnf_name`` is passed into a Nested YAML
+ file, the key/value pair name ``vnf_name`` **MUST NOT** change.
+
+
+Resource: OS::Nova::Server Metadata Parameters > workload_context
+-----------------------------------------------------------------
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-75202
+
+ If a VNF's Heat Orchestration Template's ``OS::Nova::Server`` resource
+ property ``metadata`` key/value pair ``workload_context``
+ is passed into a Nested YAML
+ file, the key/value pair name ``workload_context`` **MUST NOT** change.
+
+
+VNF On-boarding and package management > Compute, Network, and Storage Requirements
+-----------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-96634`
+
+ The VNF or PNF Provider **MUST** provide human readable documentation
+ (not in the on-boarding package) to describe scaling capabilities to manage
+ scaling characteristics of the VNF or PNF.
+
+
+.. container:: note
+
+ :need:`R-26881`
+
+ The VNF provider **MUST** provide the binaries and images
+ needed to instantiate the VNF (VNF and VNFC images).
+
+
+.. container:: note
+
+ :need:`R-35851`
+
+ The VNF HEAT Package **MUST** include VNF topology that describes basic
+ network and application connectivity internal and external to the VNF
+ including Link type, KPIs, Bandwidth, latency, jitter, QoS (if applicable)
+ for each interface.
+
+
+VNF On-boarding and package management > Licensing Requirements
+---------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-44569`
+
+ The VNF or PNF provider **MUST NOT** require additional
+ infrastructure such as a VNF or PNF provider license server for VNF or PNF provider
+ functions and metrics.
+
+
+.. container:: note
+
+ :need:`R-40827`
+
+ The VNF or PNF provider **MUST** enumerate all of the open
+ source licenses their VNF or PNF(s) incorporate.
+
+
+.. container:: note
+
+ :need:`R-44125`
+
+ The VNF or PNF provider **MUST** agree to the process that can
+ be met by Service Provider reporting infrastructure. The Contract
+ shall define the reporting process and the available reporting tools.
+
+
+.. container:: note
+
+ :need:`R-97293`
+
+ The VNF or PNF provider **MUST NOT** require audits
+ of Service Provider's business.
+
+
+.. container:: note
+
+ :need:`R-85991`
+
+ The VNF or PNF provider **MUST** provide a universal license key
+ per VNF or PNF to be used as needed by services (i.e., not tied to a VM
+ instance) as the recommended solution. The VNF or PNF provider may provide
+ pools of Unique VNF or PNF License Keys, where there is a unique key for
+ each VNF or PNF instance as an alternate solution. Licensing issues should
+ be resolved without interrupting in-service VNFs or PNFs.
+
+
+.. container:: note
+
+ :need:`R-47849`
+
+ The VNF or PNF provider **MUST** support the metadata about
+ licenses (and their applicable entitlements) as defined in this
+ specification for VNF or PNF software, and any license keys required to authorize
+ use of the VNF or PNF software. This metadata will be used to facilitate
+ onboarding the VNF or PNF into the ONAP environment and automating processes
+ for putting the licenses into use and managing the full lifecycle of
+ the licenses. The details of this license model are described in
+ Tables C1 to C8 in the Appendix.
+
+ Note: License metadata support in ONAP is not currently available
+ and planned for 1Q 2018.
+
+
+.. container:: note
+
+ :need:`R-85653`
+
+ The VNF or PNF **MUST** provide metrics (e.g., number of sessions,
+ number of subscribers, number of seats, etc.) to ONAP for tracking
+ every license.
+
+
+VNF On-boarding and package management > Resource Configuration
+---------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-89571`
+
+ The VNF or PNF **MUST** support and provide artifacts for configuration
+ management using at least one of the following technologies;
+ a) Netconf/YANG, b) Chef, or c) Ansible.
+
+ Note: The requirements for Netconf/YANG, Chef, and Ansible protocols
+ are provided separately and must be supported only if the corresponding
+ protocol option is provided by the VNF or PNF providor.
+
+
+VNF On-boarding and package management > Resource Configuration > Configuration Management via Ansible
+------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-75608`
+
+ The VNF or PNF provider **MUST** provide playbooks to be loaded
+ on the appropriate Ansible Server.
+
+
+.. container:: note
+
+ :need:`R-16777`
+
+ The VNF or PNF provider **MUST** provide a JSON file for each
+ supported action for the VNF or PNF. The JSON file must contain key value
+ pairs with all relevant values populated with sample data that illustrates
+ its usage. The fields and their description are defined in Table B1
+ in the Appendix.
+
+
+.. container:: note
+
+ :need:`R-46567`
+
+ The VNF or PNF Package **MUST** include configuration scripts
+ for boot sequence and configuration.
+
+
+.. container:: note
+
+ :need:`R-16065`
+
+ The VNF or PNF provider **MUST** provide configurable parameters
+ (if unable to conform to YANG model) including VNF or PNF attributes/parameters
+ and valid values, dynamic attributes and cross parameter dependencies
+ (e.g., customer provisioning data).
+
+
+VNF On-boarding and package management > Resource Configuration > Configuration Management via Chef
+---------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-18525`
+
+ The VNF or PNF provider **MUST** provide a JSON file for each
+ supported action for the VNF or PNF. The JSON file must contain key value
+ pairs with all relevant values populated with sample data that illustrates
+ its usage. The fields and their description are defined in Tables A1
+ and A2 in the Appendix.
+
+ Note: Chef support in ONAP is not currently available and planned for 4Q 2017.
+
+
+.. container:: note
+
+ :need:`R-13390`
+
+ The VNF or PNF provider **MUST** provide cookbooks to be loaded
+ on the appropriate Chef Server.
+
+
+VNF On-boarding and package management > Resource Configuration > Configuration Management via NETCONF/YANG
+-----------------------------------------------------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-30278`
+
+ The VNF or PNF provider **SHOULD** provide a Resource/Device YANG model
+ as a foundation for creating the YANG model for configuration.
+
+
+VNF On-boarding and package management > Resource Control Loop
+--------------------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-33904`
+
+ The VNF or PNF Package **MUST** include documentation for each KPI, provide
+ lower and upper limits.
+
+
+.. container:: note
+
+ :need:`R-69877`
+
+ The VNF or PNF Package **MUST** include documentation for each KPI,
+ identify the suggested actions that need to be performed when a
+ threshold crossing alert event is recorded.
+
+
+.. container:: note
+
+ :need:`R-01556`
+
+ The VNF or PNF Documentation Package **MUST** describe the
+ fault, performance, capacity events/alarms and other event records
+ that are made available by the VNF or PNF.
+
+
+.. container:: note
+
+ :need:`R-16875`
+
+ The VNF or PNF Documentation Package **MUST** include documentation which must
+ include a unique identification string for the specific VNF or PNF, a description
+ of the problem that caused the error, and steps or procedures to perform
+ Root Cause Analysis and resolve the issue.
+
+
+.. container:: note
+
+ :need:`R-22680`
+
+ The VNF or PNF Documentation Package **MUST** describe
+ any requirements for the monitoring component of tools for Network
+ Cloud automation and management to provide these records to components
+ of the VNF or PNF.
+
+
+.. container:: note
+
+ :need:`R-33694`
+
+ The VNF or PNF Package **MUST** include documentation to when applicable,
+ provide calculators needed to convert raw data into appropriate reporting
+ artifacts.
+
+
+.. container:: note
+
+ :need:`R-86235`
+
+ The VNF or PNF Package **MUST** include documentation about the monitoring
+ parameters that must include latencies, success rates, retry rates, load
+ and quality (e.g., DPM) for the key transactions/functions supported by
+ the VNF or PNF and those that must be exercised by the VNF or PNF in order to perform
+ its function.
+
+
+.. container:: note
+
+ :need:`R-73560`
+
+ The VNF or PNF Package **MUST** include documentation about monitoring
+ parameters/counters exposed for virtual resource management and VNF or PNF
+ application management.
+
+
+.. container:: note
+
+ :need:`R-53598`
+
+ The VNF or PNF Documentation Package **MUST**, when relevant,
+ provide a threshold crossing alert point for each KPI and describe the
+ significance of the threshold crossing.
+
+
+.. container:: note
+
+ :need:`R-48596`
+
+ The VNF or PNF Documentation Package **MUST** describe
+ the characteristics for the VNF or PNF reliability and high availability.
+
+
+.. container:: note
+
+ :need:`R-01478`
+
+ The VNF or PNF Documentation Package **MUST** describe all
+ parameters that are available to monitor the VNF or PNF after instantiation
+ (includes all counters, OIDs, PM data, KPIs, etc.) that must be
+ collected for reporting purposes.
+
+
+.. container:: note
+
+ :need:`R-90632`
+
+ The VNF Package **MUST** include documentation about KPIs and
+ metrics that need to be collected at each VM for capacity planning
+ and performance management purposes.
+
+
+.. container:: note
+
+ :need:`R-22888`
+
+ The VNF or PNF Documentation Package **MUST** provide the VNF or PNF
+ Policy Description to manage the VNF or PNF runtime lifecycle. The document
+ must include a description of how the policies (conditions and actions)
+ are implemented in the VNF or PNF.
+
+
+.. container:: note
+
+ :need:`R-42018`
+
+ The VNF or PNF Package **MUST** include documentation which must include
+ all events (fault, measurement for VNF or PNF Scaling, Syslogs, State Change
+ and Mobile Flow), that need to be collected at each VM, VNFC (defined in `VNF Guidelines <https://onap.readthedocs.io/en/latest/submodules/vnfrqts/guidelines.git/docs/vnf_guidelines.html>`__ ) and for the overall VNF or PNF.
+
+
+.. container:: note
+
+ :need:`R-35960`
+
+ The VNF or PNF Package **MUST** include documentation which must include
+ all events, severity level (e.g., informational, warning, error) and
+ descriptions including causes/fixes if applicable for the event.
+
+
+.. container:: note
+
+ :need:`R-56815`
+
+ The VNF or PNF Documentation Package **MUST** describe
+ supported VNF or PNF scaling capabilities and capacity limits (e.g., number
+ of users, bandwidth, throughput, concurrent calls).
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-27711
+
+ The xNF provider **MUST** provide an XML file that contains a
+ list of xNF error codes, descriptions of the error, and possible
+ causes/corrective action.
+
+
+.. container:: note
+
+ R-74763
+
+ The xNF provider **MUST** provide an artifact per xNF that contains
+ all of the xNF Event Records supported. The artifact should include
+ reference to the specific release of the xNF Event Stream Common Event
+ Data Model document it is based on. (e.g.,
+ `VES Event Listener <https://onap.readthedocs.io/en/latest/submodules/vnfsdk/model.git/docs/files/VESEventListener.html>`__)
+
+
+VNF On-boarding and package management > Resource Description
+-------------------------------------------------------------
+
+
+Requirements Added
+~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-025941`
+
+ The VNF or PNF PROVIDER **MUST** provide FM Meta Data to support the
+ analysis of fault events delivered to DCAE. The Meta Data must be
+ included in the VES Registration YAML file with each fault event
+ supported by that NF at onboarding time and the Meta Data must follow
+ the VES Event Listener and VES Event Registration Specifications.
+
+
+.. container:: note
+
+ :need:`R-816745`
+
+ The VNF or PNF PROVIDER *MUST* provide the Service Provider with
+ PM Meta Data (PM Dictionary) to support the analysis of PM events delivered
+ to DCAE. The PM Dictionary is to be provided as a separate YAML artifact at
+ onboarding and must follow the VES Event Listener Specification and VES
+ Event Registration Specification which contain the format and content
+ required.
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-98617`
+
+ The VNF Provider **MUST** provide documentation regarding any dependency
+ (e.g. affinity, anti-affinity) the VNF has on other VNFs and resources.
+
+
+.. container:: note
+
+ :need:`R-36280`
+
+ The VNF or PNF Documentation Package **MUST** describe the
+ VNF or PNF Functional Capabilities that are utilized to operationalize the
+ VNF or PNF and compose complex services.
+
+
+.. container:: note
+
+ :need:`R-00068`
+
+ The VNF or PNF Documentation Package **MUST** include
+ a description of parameters that can be monitored for the VNF or PNF
+ and event records (status, fault, flow, session, call, control
+ plane, etc.) generated by the VNF or PNF after instantiation.
+
+
+.. container:: note
+
+ :need:`R-69565`
+
+ The VNF or PNF Documentation Package **MUST** describe the VNF or PNF
+ Management APIs, which must include information and tools for ONAP to
+ deploy and configure (initially and ongoing) the VNF or PNF application(s)
+ (e.g., NETCONF APIs) which includes a description of configurable
+ parameters for the VNF or PNF and whether the parameters can be configured
+ after VNF or PNF instantiation.
+
+
+.. container:: note
+
+ :need:`R-22346`
+
+ The VNF or PNF package **MUST** provide :ref:`VES Event Registration <ves_event_registration_3_2>`
+ for all VES events provided by that VNF or PNF.
+
+
+.. container:: note
+
+ :need:`R-384337`
+
+ The VNF Documentation Package **MUST** contain a list of the files within the VNF
+ package that are static during the VNF's runtime.
+
+
+.. container:: note
+
+ :need:`R-84366`
+
+ The VNF or PNF Documentation Package **MUST** describe the
+ VNF or PNF Functional APIs that are utilized to build network and
+ application services. This document describes the externally exposed
+ functional inputs and outputs for the VNF or PNF, including interface
+ format and protocols supported.
+
+
+.. container:: note
+
+ :need:`R-00156`
+
+ The VNF or PNF Documentation Package **MUST** describe the VNF or PNF
+ Management APIs, which must include information and tools for
+ ONAP to monitor the health of the VNF or PNF (conditions that require
+ healing and/or scaling responses).
+
+
+.. container:: note
+
+ :need:`R-12678`
+
+ The VNF or PNF Documentation Package **MUST** include a
+ description of runtime lifecycle events and related actions (e.g.,
+ control responses, tests) which can be performed for the VNF or PNF.
+
+
+.. container:: note
+
+ :need:`R-66070`
+
+ For HEAT package, the VNF Package **MUST** include VNF Identification Data to
+ uniquely identify the resource for a given VNF provider. The identification
+ data must include: an identifier for the VNF, the name of the VNF as was
+ given by the VNF provider, VNF description, VNF provider, and version.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-77707
+
+ The xNF provider **MUST** include a Manifest File that
+ contains a list of all the components in the xNF package.
+
+
+VNF On-boarding and package management > Testing
+------------------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-58775`
+
+ The VNF provider **MUST** provide software components that
+ can be packaged with/near the VNF, if needed, to simulate any functions
+ or systems that connect to the VNF system under test. This component is
+ necessary only if the existing testing environment does not have the
+ necessary simulators.
+
+
+.. container:: note
+
+ :need:`R-43958`
+
+ The VNF Documentation Package **MUST** describe
+ the tests that were conducted by the VNF provider and the test results.
+
+
+.. container:: note
+
+ :need:`R-04298`
+
+ The VNF provider **MUST** provide their testing scripts to
+ support testing.
+
+
+VNF Resiliency > Monitoring & Dashboard
+---------------------------------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-34957`
+
+ The VNF **MUST** provide a method of metrics gathering for each
+ layer's performance to identify variances in the allocations so
+ they can be addressed.
+
+
+{network-role}
+--------------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-05201`
+
+ When a VNF connects to two or more unique networks, each
+ network **MUST** be assigned a unique ``{network-role}``
+ in the context of the VNF for use in the VNF's Heat Orchestration
+ Template.
+
+
+.. container:: note
+
+ :need:`R-69014`
+
+ When a VNF's port connects to an internal network or external network,
+ a network role, referred to
+ as the ``{network-role}`` **MUST** be assigned to the network for
+ use in the VNF's Heat Orchestration Template. The ``{network-role}``
+ is used in the VNF's Heat Orchestration Template resource IDs
+ and resource property parameter names.
+
+
+.. container:: note
+
+ :need:`R-26506`
+
+ A VNF's Heat Orchestration Template's ``{network-role}`` **MUST** contain
+ only alphanumeric characters and/or underscores '_' and
+
+ * **MUST NOT** contain any of the following strings: ``_int`` or ``int_``
+ or ``_int_``
+ * **MUST NOT** end in the string: ``_v6``
+ * **MUST NOT** contain the strings ``_#_``, where ``#`` is a number
+ * **MUST NOT** end in the string: ``_#``, where ``#`` is a number
+
+
+{vm-type}
+---------
+
+
+Requirements Changed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ :need:`R-01455`
+
+ When a VNF's Heat Orchestration Template creates a Virtual Machine
+ (i.e., ``OS::Nova::Server``),
+ each "class" of VMs **MUST** be assigned a VNF unique
+ ``{vm-type}``; where "class" defines VMs that
+ **MUST** have the following identical characteristics:
+
+ 1.) ``OS::Nova::Server`` resource property ``flavor`` value
+
+ 2.) ``OS::Nova::Server`` resource property ``image`` value
+
+ 3.) Cinder Volume attachments
+
+ - Each VM in the "class" **MUST** have the identical Cinder Volume
+ configuration
+
+ 4.) Network attachments and IP address requirements
+
+ - Each VM in the "class" **MUST** have the identical number of
+ ports connecting to the identical networks and requiring the identical
+ IP address configuration.
+
+
+Requirements Removed
+~~~~~~~~~~~~~~~~~~~~
+
+
+.. container:: note
+
+ R-66729
+
+ A VNF's Heat Orchestration Template's Resource that is associated with a
+ unique Virtual Machine type **MUST** include ``{vm-type}`` as part of the
+ resource ID.
+
+
+.. container:: note
+
+ R-82481
+
+ A VNF's Heat Orchestration Template's Resource property parameter that is
+ associated with a unique Virtual Machine type **MUST** include
+ ``{vm-type}`` as part of the parameter name with two exceptions:
+
+ 1.) The Resource ``OS::Nova::Server`` property ``availability_zone``
+ parameter **MUST NOT** be prefixed with a common ``{vm-type}`` identifier,
+
+ 2.) The Resource ``OS::Nova::Server`` eight mandatory and optional
+ ``metadata``
+ parameters (i.e., ``vnf_name``, ``vnf_id``, ``vf_module_id``,
+ ``vf_module_name``, ``vm_role``,
+ ``vf_module_index``, ``environment_context``, ``workload_context``)
+ **MUST NOT** be prefixed with a common ``{vm-type}`` identifier.
+
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
index 834c927..cfbd23d 100644
--- a/docs/release-notes.rst
+++ b/docs/release-notes.rst
@@ -15,6 +15,54 @@
VNFRQTS Project Release Notes
==============================
+Version: 4.0.0
+--------------
+
+:Release Date: 2019-5-30
+
+A detailed summary of all requirement changes per section can be found
+:doc:`here <changes-by-section-dublin>`.
+
+A higher level summary of changes as well as non-requirement impacting
+changes can be found below.
+
+**New Features**
+ - Added information for PNF
+ - Added Release notes to higher level
+ - Added CICD build to generate requirements and create traceability matrix
+ - Added Traceability matrix with dynamic links
+ - Moved VES spec
+ - Created RST Requirement generator in wiki
+
+**Bug Fixes**
+ - Fixed typos
+ - Fixed metadata errors
+ - Fixed XNF -> PNF or VNF
+ - Cleaning requirements for TOSCA/HEAT
+ - Cleaning requirements for VNF or PNF
+
+**Known Issues**
+ - Links that refer to "latest" version are static. Please report
+ any broken links.
+ - Wiki RST generator has been disabled, please use local make_ids.py
+ to create new requirements.
+ - Traceability matrix table rendering issues.
+
+**Security Issues**
+ - None
+
+**Upgrade Notes**
+ - If you would like to add requirements, you **MUST** follow
+ `instructions on Wiki <https://wiki.onap.org/display/DW/VNFRQTS+How+to+Contribute>`__.
+ - If you would like to see a list of JIRA tickets closed in Dublin,
+ `please click here <https://jira.onap.org/projects/VNFRQTS/versions/10474>`_.
+
+**Deprecation Notes**
+ - None
+
+**Other**
+ - None
+
Version: 3.0.1
--------------