VNFRQTS - Changes to fix doc warnings
[vnfrqts/requirements.git] / docs / Chapter7.rst
index e2a7c39..9eb9d35 100644 (file)
-**7. ONAP Management Requirements**
-=====================================
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2017 AT&T Intellectual Property.  All rights reserved.
+
+
+ONAP Management Requirements
+============================
+
+The ONAP platform is the part of the larger Network Function
+Virtualization/Software Defined Network (NFV/SDN) ecosystem that
+is responsible for the efficient control, operation and management
+of Virtual Network Function (VNF) capabilities and functions. It
+specifies standardized abstractions and interfaces that enable
+efficient interoperation of the NVF/SDN ecosystem components. It
+enables product/service independent capabilities for design, creation
+and runtime lifecycle management (includes all aspects of installation,
+change management, assurance, and retirement) of resources in NFV/SDN
+environment (see ECOMP white paper ). These capabilities are provided
+using two major architectural frameworks: (1) a Design Time Framework
+to design, define and program the platform (uniform onboarding), and
+(2) a Runtime Execution Framework to execute the logic programmed in
+the design environment (uniform delivery and runtime lifecycle
+management). The platform delivers an integrated information model
+based on the VNF package to express the characteristics and behavior
+of these resources in the Design Time Framework. The information model
+is utilized by Runtime Execution Framework to manage the runtime
+lifecycle of the VNFs. The management processes are orchestrated
+across various modules of ONAP to instantiate, configure, scale,
+monitor, and reconfigure the VNFs using a set of standard APIs
+provided by the VNF developers.
+
+Although the guidelines and requirements specified in this document
+were originally driven by the need to standardize and automate the
+management of the virtualized environments (with VNFs) operated by
+Service Providers, we believe that most of the requirements are equally
+applicable to the operation of the physical network functions (PNFs),
+those network functions provided by traditional physical network
+elements (e.g. whitebox switches) or customized peripherals (e.g. a
+video rendering engine for augmented reality). The primary area of
+difference will be in how the network function is orchestrated into
+place – VNFs can be much more dynamically created & placed by ONAP
+to support varying geographic, availability and scalability needs,
+whereas the PNFs have to be deployed a priori in specific locations
+based on planning and engineering – their availability and scalability
+will be determined by the capabilities offered by the PNFs.
+
+**PNF** is a vendor-provided Network Function(s) implemented using a
+bundled set of hardware and software while VNFs utilize cloud resources
+to provide Network Functions through virtualized software modules.  PNF
+can be supplied by a vendor as a Black BOX (provides no knowledge of its
+internal characteristics, logic, and software design/architecture) or as
+a White Box (provides detailed knowledge and access of its internal
+components and logic) or as a Grey Box (provides limited knowledge and
+access to its internal components).
+
+* Requirements that equally apply to both VNFs and PNFs are defined as
+  "The xNF MUST/SHOULD/..."
+* Requirements that only apply to VNFs are defined as "The VNF MUST/SHOULD/..."
+* Requirements that only apply to PNFs are defined as "The PNF MUST/SHOULD/..."
+
+
+Service Design
+------------------------------------
+
+This section, Service Design, has been left intentionally blank. It
+is out-of-scope for the VNF Requirements project for the Amsterdam
+release and no numbered requirements are expected. Content may be
+added in future updates of this document.
+
+VNF On-boarding and package management
+-----------------------------------------------------------------------------
+
+Design Definition
+^^^^^^^^^^^^^^^^^^
+
+The ONAP Design Time Framework provides the ability to design NFV
+resources including VNFs, Services, and products. The VNF provider must
+provide VNF packages that include a rich set of recipes, management and
+functional interfaces, policies, configuration parameters, and
+infrastructure requirements that can be utilized by the ONAP Design
+module to onboard and catalog these resources. Initially this
+information may be provided in documents, but in the near future a
+method will be developed to automate as much of the transfer of data as
+possible to satisfy its long term requirements.
+
+The current VNF Package Requirement is based on a subset of the
+Requirements contained in the ETSI Document: ETSI GS NFV-MAN 001 v1.1.1
+and GS NFV IFA011 V0.3.0 (2015-10) - Network Functions Virtualization
+(NFV), Management and Orchestration, VNF Packaging Specification.
+
+Resource Description
+^^^^^^^^^^^^^^^^^^^^^^
+
+* R-77707 The xNF provider **MUST** include a Manifest File that
+  contains a list of all the components in the xNF package.
+* R-66070 The xNF Package **MUST** include xNF Identification Data to
+  uniquely identify the resource for a given xNF provider. The identification
+  data must include: an identifier for the xNF, the name of the xNF as was
+  given by the xNF provider, xNF description, xNF provider, and version.
+* R-69565 The xNF Package **MUST** include documentation describing xNF
+  Management APIs, which must include information and tools for ONAP to
+  deploy and configure (initially and ongoing) the xNF application(s)
+  (e.g., NETCONF APIs) which includes a description of configurable
+  parameters for the xNF and whether the parameters can be configured
+  after xNF instantiation.
+* R-00156 The xNF Package **MUST** include documentation describing xNF
+  Management APIs, which must include information and tools for ONAP
+  to monitor the health of the xNF (conditions that require healing
+  and/or scaling responses).
+* R-00068 The xNF Package **MUST** include documentation which includes
+  a description of parameters that can be monitored for the xNF and
+  event records (status, fault, flow, session, call, control plane,
+  etc.) generated by the xNF after instantiation.
+* R-12678 The xNF Package **MUST** include documentation which includes a
+  description of runtime lifecycle events and related actions (e.g.,
+  control responses, tests) which can be performed for the xNF.
+* R-84366 The xNF Package **MUST** include documentation describing
+  xNF Functional APIs that are utilized to build network and
+  application services. This document describes the externally exposed
+  functional inputs and outputs for the xNF, including interface
+  format and protocols supported.
+* R-36280 The xNF provider **MUST** provide documentation describing
+  xNF Functional Capabilities that are utilized to operationalize the
+  xNF and compose complex services.
+* R-98617 The xNF provider **MUST** provide information regarding any
+  dependency (e.g., affinity, anti-affinity) with other xNFs and resources.
+
+Resource Configuration
+^^^^^^^^^^^^^^^^^^^^^^^
+
+* R-89571 The xNF **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 xNF providor.
+
+Configuration Management via NETCONF/YANG
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* R-30278 The xNF provider **MUST** provide a Resource/Device YANG model
+  as a foundation for creating the YANG model for configuration. This will
+  include xNF attributes/parameters and valid values/attributes configurable
+  by policy.
+
+Configuration Management via Chef
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* R-13390 The xNF provider **MUST** provide cookbooks to be loaded
+  on the appropriate Chef Server.
+* R-18525 The xNF provider **MUST** provide a JSON file for each
+  supported action for the xNF.  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.
+
+Configuration Management via Ansible
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* R-75608 The xNF provider **MUST** provide playbooks to be loaded
+  on the appropriate Ansible Server.
+* R-16777 The xNF provider **MUST** provide a JSON file for each
+  supported action for the xNF.  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.
+
+* R-46567 The xNF Package **MUST** include configuration scripts
+  for boot sequence and configuration.
+* R-16065 The xNF provider **MUST** provide configurable parameters
+  (if unable to conform to YANG model) including xNF attributes/parameters
+  and valid values, dynamic attributes and cross parameter dependencies
+  (e.g., customer provisioning data).
+
+Resource Control Loop
+^^^^^^^^^^^^^^^^^^^^^^^
+
+* R-22888 The xNF provider **MUST** provide documentation for the xNF
+  Policy Description to manage the xNF runtime lifecycle. The document
+  must include a description of how the policies (conditions and actions)
+  are implemented in the xNF.
+* R-01556 The xNF Package **MUST** include documentation describing the
+  fault, performance, capacity events/alarms and other event records
+  that are made available by the xNF.
+* R-16875 The xNF Package **MUST** include documentation which must include
+  a unique identification string for the specific xNF, a description of
+  the problem that caused the error, and steps or procedures to perform
+  Root Cause Analysis and resolve the issue.
+* R-35960 The xNF 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.
+* R-42018 The xNF Package **MUST** include documentation which must include
+  all events (fault, measurement for xNF Scaling, Syslogs, State Change
+  and Mobile Flow), that need to be collected at each VM, VNFC (defined in `VNF Guidelines <http://onap.readthedocs.io/en/latest/submodules/vnfrqts/guidelines.git/docs/vnf_guidelines/vnf_guidelines.html#a-glossary>`__ ) and for the overall xNF.
+* 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.
+* R-01478 The xNF Package **MUST** include documentation describing all
+  parameters that are available to monitor the xNF after instantiation
+  (includes all counters, OIDs, PM data, KPIs, etc.) that must be
+  collected for reporting purposes.
+* R-73560 The xNF Package **MUST** include documentation about monitoring
+  parameters/counters exposed for virtual resource management and xNF
+  application management.
+* R-90632 The xNF Package **MUST** include documentation about KPIs and
+  metrics that need to be collected at each VM for capacity planning
+  and performance management purposes.
+* R-86235 The xNF 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 xNF and those that must be exercised by the xNF in order to perform
+  its function.
+* R-33904 The xNF Package **MUST** include documentation for each KPI, provide
+  lower and upper limits.
+* R-53598 The xNF Package **MUST** include documentation to, when relevant,
+  provide a threshold crossing alert point for each KPI and describe the
+  significance of the threshold crossing.
+* R-69877 The xNF Package **MUST** include documentation for each KPI,
+  identify the suggested actions that need to be performed when a
+  threshold crossing alert event is recorded.
+* R-22680 The xNF Package **MUST** include documentation that describes
+  any requirements for the monitoring component of tools for Network
+  Cloud automation and management to provide these records to components
+  of the xNF.
+* R-33694 The xNF Package **MUST** include documentation to when applicable,
+  provide calculators needed to convert raw data into appropriate reporting
+  artifacts.
+* R-56815 The xNF Package **MUST** include documentation describing
+  supported xNF scaling capabilities and capacity limits (e.g., number
+  of users, bandwidth, throughput, concurrent calls).
+* R-48596 The xNF Package **MUST** include documentation describing
+  the characteristics for the xNF reliability and high availability.
+* 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://github.com/att/evel-test-collector/tree/master/docs/att_interface_definition>`__)
+
+Compute, Network, and Storage Requirements
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+* R-35851 The xNF Package **MUST** include xNF topology that describes
+  basic network and application connectivity internal and external to the
+  xNF including Link type, KPIs, Bandwidth, latency, jitter, QoS (if
+  applicable) for each interface.
+* R-97102 The VNF Package **MUST** include VM requirements via a Heat
+  template that provides the necessary data for VM specifications
+  for all VNF components - for hypervisor, CPU, memory, storage.
+* R-20204 The VNF Package **MUST** include VM requirements via a Heat
+  template that provides the necessary data for network connections,
+  interface connections, internal and external to VNF.
+* R-44896 The VNF Package **MUST** include VM requirements via a Heat
+  template that provides the necessary data for high availability
+  redundancy model.
+* R-55802 The VNF Package **MUST** include VM requirements via a Heat
+  template that provides the necessary data for scaling/growth VM
+  specifications.
+
+  Note: Must comply with the *Heat requirements in 5.b*.
+
+* R-26881 The xNF provider **MUST** provide the binaries and images
+  needed to instantiate the xNF (xNF and VNFC images).
+* R-96634 The xNF provider **MUST** describe scaling capabilities
+  to manage scaling characteristics of the xNF.
+
+
+Testing
+^^^^^^^^^^
+
+* R-43958 The xNF Package **MUST** include documentation describing
+  the tests that were conducted by the xNF providor and the test results.
+* R-04298 The xNF provider **MUST** provide their testing scripts to
+  support testing.
+* R-58775 The xNF provider **MUST** provide software components that
+  can be packaged with/near the xNF, if needed, to simulate any functions
+  or systems that connect to the xNF system under test. This component is
+  necessary only if the existing testing environment does not have the
+  necessary simulators.
+
+Licensing Requirements
+^^^^^^^^^^^^^^^^^^^^^^^
+
+* R-85653 The xNF **MUST** provide metrics (e.g., number of sessions,
+  number of subscribers, number of seats, etc.) to ONAP for tracking
+  every license.
+* R-44125 The xNF 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.
+* R-40827 The xNF provider **MUST** enumerate all of the open
+  source licenses their xNF(s) incorporate.
+* R-97293 The xNF provider **MUST NOT** require audits of
+  Service Provider’s business.
+* R-44569 The xNF provider **MUST NOT** require additional
+  infrastructure such as a xNF provider license server for xNF provider
+  functions and metrics.
+* R-13613 The VNF **MUST** provide clear measurements for licensing
+  purposes to allow automated scale up/down by the management system.
+* R-27511 The VNF provider **MUST** provide the ability to scale
+  up a VNF provider supplied product during growth and scale down a
+  VNF provider supplied product during decline without “real-time”
+  restrictions based upon VNF provider permissions.
+* R-85991 The xNF provider **MUST** provide a universal license key
+  per xNF to be used as needed by services (i.e., not tied to a VM
+  instance) as the recommended solution. The xNF provider may provide
+  pools of Unique xNF License Keys, where there is a unique key for
+  each xNF instance as an alternate solution. Licensing issues should
+  be resolved without interrupting in-service xNFs.
+* R-47849 The xNF provider **MUST** support the metadata about
+  licenses (and their applicable entitlements) as defined in this
+  document for xNF software, and any license keys required to authorize
+  use of the xNF software.  This metadata will be used to facilitate
+  onboarding the xNF 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.
+
+Configuration Management
+---------------------------------------------------
+
+Controller Interactions With VNF
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ONAP Controllers (such as APPC) expose a northbound API to clients
+(such as SO) in order for the clients to initiate an activity
+(aka command) on a VNF.   ONAP controllers interact with VNFs through
+Network and Application Adapters to perform configuration and other
+lifecycle management activities within NFV environment.
+The standardized models, protocols and mechanisms by which network
+functions are configured are equally applicable to VNFs and PNFs.
+
+This section describes the list of commands that should be supported
+by the VNF.   The following sections describe the standard protocols
+that are supported (NETCONF, Chef, Ansible, and REST).
+
+The commands below are expected to be supported on all VNF’s, unless
+noted otherwise, either directly (via the NETCONF or REST interface)
+or indirectly (via a Chef Cookbook or Ansible server).  Note that there
+are additional commands offered to northbound clients that are not shown
+below, as these commands either act internally on the Controller itself
+or depend upon network cloud components for implementation (thus, these
+actions do not put any special requirement on the VNF provider).
+
+The commands allow for parametric data to be passed from the controller
+to the VNF or Ansible/Chef server in the request.  The format of the
+parameter data can be either xml (for NETCONF) or JSON (for Ansible,
+Chef, or REST).
+
+Configuration Commands
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Configure**: The Controller client is requesting that a post-instantiation
+configuration be applied to the target VNF instance. After the Configure
+action is completed, the VNF instance should be ready for service.
+Note that customer specific configurations may need to be applied using
+the ConfigModify action.
+
+**ConfigModify**: The Controller client is requesting a configuration
+update to a subset of the total configuration parameters of a VNF or to
+apply customer specific configurations. The configuration update is
+typically done while the VNF is in service and should not disrupt traffic.
+
+**ConfigBackup**: The Controller client is requesting a backup of the
+configuration parameters where the parameters are stored on the VNF.
+This command is typically requested as part of an orchestration flow
+for scenarios such as a software upgrade. The ConfigBackup is typically
+done while the VNF is not in service (i.e., in a maintenance state).
+When the ConfigBackup command is executed, the current VNF configuration
+parameters are saved in storage that is preserved (if there is an existing
+set of backed up parameters, they are overwritten).
+
+**ConfigRestore**: The Controller client is requesting a restore action of
+the configuration parameters to the VNF that were saved by ConfigBackup
+command. This command is typically requested as part of an orchestration
+flow for scenarios such as a software upgrade where the software upgrade
+may have failed and the VNF needs to be rolled back to the prior configuration.
+When the ConfigRestore command is executed, the VNF configuration parameters
+which were backed to persistent preserved storage are applied to the VNF
+(replacing existing parameters). The ConfigRestore is typically done while
+the VNF is not in service (i.e., in a maintenance state).
+
+**ConfigScaleOut**: The Controller client is requesting that a configuration
+be applied after the VNF instance has been scaled out (i.e., one or more
+additional VM’s instantiated to increase capacity). For some VNF’s,
+ConfigScaleOut is not needed because the VNF is auto-configured after
+scale-out. This command is being introduced in the Beijing release.
+
+**Audit**: The Controller client is requesting that the current (last known
+configuration update) is audited against the running configuration on the VNF.
+
+* R-20741 The xNF **MUST** support ONAP Controller’s **Configure** command.
+* R-19366 The xNF **MUST** support ONAP Controller’s **ConfigModify** command.
+* R-32981 The xNF **MUST** support ONAP Controller’s **ConfigBackup** command.
+* R-48247 The xNF **MUST** support ONAP Controller’s **ConfigRestore** command.
+* R-94084 The xNF **MUST** support ONAP Controller’s **ConfigScaleOut**
+  command.
+* R-56385 The xNF **MUST** support ONAP Controller’s **Audit** command.
+
+LifeCycle Management Related Commands
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**The following commands are needed to support various lifecycle management
+flows where the VNF may need to be removed for service.**
+
+**QuiesceTraffic**: The Controller client is requesting the VNF gracefully
+stop traffic (aka block and drain traffic). The method for quiescing traffic
+is specific to the VNF architecture. The action is completed when all
+(in-flight transactions) traffic has stopped.   The VNF remains in an active
+state where the VNF is able to process traffic (initiated using the
+StartTraffic action).
+
+**ResumeTraffic**: The Controller client is requesting the VNF resume
+processing traffic. The method to resume traffic is specific to the VNF
+architecture.
+
+**StopApplication**: The Controller client is requesting that the application
+running on the VNF is stopped gracefully (i.e., without traffic loss).
+This is equivalent to quiescing the traffic and then stopping the application
+processes. The processes can be restarted using the StartApplication command.
+
+**StartApplication**: The Controller client is requesting that the application
+running on the VNF is started. Get ready to process traffic.
+
+**The following commands are needed to support software upgrades, in-place or
+other type of software upgrade. The VNF instance may be removed from service
+for the upgrade.**
+
+**UpgradePrecheck**: The Controller client is requesting a confirmation that
+the VNF can (and needs to) be upgraded to a specific software version
+(specified in the request).
+
+**UpgradeSoftware**: The Controller client is requesting that a (in-place)
+software upgrade be performed on the VNF.  The software to be applied is
+pre-loaded to a specified location.
+
+**UpgradePostCheck**: The Controller client is requesting a confirmation that
+the VNF software upgrade has been completed successfully (VNF upgraded to
+the new software version).
+
+**UpgradeBackup**: The Controller client is requesting that the VNF is backed
+up prior to the UpgradeSoftware.
+
+**UpgradeBackOut**: The Controller client is requesting that the VNF upgrade
+is backed out (in the event that the SoftwareUpgrade or UpgradePostCheck
+failed).
+
+* R-12706 The xNF **MUST** support ONAP Controller’s **QuiesceTraffic**
+  command.
+* R-07251 The xNF **MUST** support ONAP Controller’s **ResumeTraffic**
+  command.
+* R-83146 The xNF **MUST** support ONAP Controller’s **StopApplication**
+  command.
+* R-82811 The xNF **MUST** support ONAP Controller’s **StartApplication**
+  command.
+* R-19922 The xNF **MUST** support ONAP Controller’s **UpgradePrecheck**
+  command.
+* R-49466 The xNF **MUST** support ONAP Controller’s **UpgradeSoftware**
+  command.
+* R-45856 The xNF **MUST** support ONAP Controller’s **UpgradePostCheck**
+  command.
+* R-97343 The xNF **MUST** support ONAP Controller’s **UpgradeBackup**
+  command.
+* R-65641 The xNF **MUST** support ONAP Controller’s **UpgradeBackOut**
+  command.
+
+Virtual Function - Container Recovery Requirements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+As part of life cycle management, for Cloud environment, VNFs need to
+support a set of basic recovery capabilities to maintain the health
+and extend the life of the VNF, eliminating and reducing the frequency
+that an entire VNF needs to be rebuilt or re-instantiated to recover one
+or more of its containers. For instance, a VNF in an Openstack environment
+is composed of one or more containers called VMs (Virtual Machines). During
+the life of a VNF it is expected that Cloud infrastructure hardware will
+fail or they would need to be taken down for maintenance or hardware and
+software upgrades (e.g. firmware upgrades, HostOS (Hypervisor), power
+maintenance, power outages, etc.) To deal with such life cycle events
+without having to rebuild entire VNFs or even entire sites these basic
+recovery capabilities of individual containers, Virtual Machines or other,
+must be supported.
+
+* R-11790 The VNF **MUST** support ONAP Controller’s
+  **Restart (stop/start or reboot)** command.
+* R-56218 The VNF **MUST** support ONAP Controller’s Migrate command that
+  moves container (VM) from a live Physical Server / Compute Node to
+  another live Physical Server / Compute Node.
+
+NOTE: Container migrations MUST be transparent to the VNF and no more
+intrusive than a stop, followed by some down time for the migration to
+be performed from one Compute Node / Physical Server to another, followed
+by a start of the same VM with same configuration on the new Compute
+Node / Physical Server.
+
+* R-38001 The VNF MUST support ONAP Controller’s **Rebuild** command.
+* R-76901 VNF MUST support a container rebuild mechanism based on existing
+  image (e.g. Glance image in Openstack environment) or a snapshot.
+
+HealthCheck and Failure Related Commands
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**HealthCheck**: The Controller client is requesting a health check over the
+entire scope of the VNF.  The VNF must be 100% healthy, ready to take requests
+and provide services, with all VNF required capabilities ready to provide
+services and with all active and standby resources fully ready with no open
+MINOR, MAJOR or CRITICAL alarms.
+
+Note: In addition to the commands above, the Controller supports a set of
+Openstack failure recovery related commands that are executed on-demand or via
+Control Loop at the VM level.  The VNF must support these commands in a fully
+automated fashion.
+
+* R-41430 The xNF **MUST** support ONAP Controller’s **HealthCheck**
+  command.
+
+Notes On Command Support Using Controller Southbound Protocols
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ONAP Controllers are designed to support a standard set of protocols in
+order to communicate with the VNF instance.  The supported protocols are
+NETCONF, Ansible, Chef, and REST.
+
+NETCONF and REST require the VNF to implement a server which supports the RPC
+or REST calls.
+
+Ansible and Chef require the use of a Ansible or Chef server which communicates
+with the Controller (northbound) and the VNF VM’s (southbound).
+
+The vendor must select which protocol to support for the commands listed above.
+Notes:
+
+* NETCONF is most suitable for configuration related commands
+
+* Ansible and Chef are suitable for any command.
+  Ansible has the advantage that it is agentless.
+
+* REST is specified as an option only for the HealthCheck.
+
+
+Additional details can be found in the `ONAP Application Controller (APPC) API Guide <http://onap.readthedocs.io/en/latest/submodules/appc.git/docs/APPC%20API%20Guide/APPC%20API%20Guide.html>`_, `ONAP VF-C project <http://onap.readthedocs.io/en/latest/submodules/vfc/nfvo/lcm.git/docs/index.html>`_ and the `ONAP SDNC project <http://onap.readthedocs.io/en/latest/submodules/sdnc/northbound.git/docs/index.html>`_.
+
+NETCONF Standards and Capabilities
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ONAP Controllers and their Adapters utilize device YANG model and
+NETCONF APIs to make the required changes in the VNF state and
+configuration. The VNF providers must provide the Device YANG model and
+NETCONF server supporting NETCONF APIs to comply with target ONAP and
+industry standards.
+
+VNF Configuration via NETCONF Requirements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Configuration Management
++++++++++++++++++++++++++++
+
+* R-88026 The xNF **MUST** include a NETCONF server enabling
+  runtime configuration and lifecycle management capabilities.
+* R-95950 The xNF **MUST** provide a NETCONF interface fully defined
+  by supplied YANG models for the embedded NETCONF server.
+
+NETCONF Server Requirements
+++++++++++++++++++++++++++++++
+
+* R-73468 The xNF **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.
+* R-90007 The xNF **MUST** implement the protocol operation:
+  **close-session()**- Gracefully close the current session.
+* R-70496 The xNF **MUST** implement the protocol operation:
+  **commit(confirmed, confirm-timeout)** - Commit candidate
+  configuration datastore to the running configuration.
+* R-18733 The xNF **MUST** implement the protocol operation:
+  **discard-changes()** - Revert the candidate configuration
+  datastore to the running configuration.
+* R-44281 The xNF **MUST** implement the protocol operation:
+  **edit-config(target, default-operation, test-option, error-option,
+  config)** - Edit the target configuration datastore by merging,
+  replacing, creating, or deleting new config elements.
+* R-60106 The xNF **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 xNF supported schemas.
+* R-29488 The xNF **MUST** implement the protocol operation:
+  **get-config(source, filter)** - Retrieve a (filtered subset of
+  a) configuration from the configuration datastore source.
+* R-11235 The xNF **MUST** implement the protocol operation:
+  **kill-session(session)** - Force the termination of **session**.
+* R-02597 The xNF **MUST** implement the protocol operation:
+  **lock(target)** - Lock the configuration datastore target.
+* R-96554 The xNF **MUST** implement the protocol operation:
+  **unlock(target)** - Unlock the configuration datastore target.
+* R-29324 The xNF **SHOULD** implement the protocol operation:
+  **copy-config(target, source) -** Copy the content of the
+  configuration datastore source to the configuration datastore target.
+* R-88031 The xNF **SHOULD** implement the protocol operation:
+  **delete-config(target) -** Delete the named configuration
+  datastore target.
+* R-97529 The xNF **SHOULD** implement the protocol operation:
+  **get-schema(identifier, version, format) -** Retrieve the YANG schema.
+* R-62468 The xNF **MUST** allow all configuration data to be
+  edited through a NETCONF <edit-config> operation. Proprietary
+  NETCONF RPCs that make configuration changes are not sufficient.
+* R-01382 The xNF **MUST** allow the entire configuration of the
+  xNF to be retrieved via NETCONF's <get-config> and <edit-config>,
+  independently of whether it was configured via NETCONF or other
+  mechanisms.
+* R-28756 The xNF **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.
+* R-83873 The xNF **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.
+* R-68990 The xNF **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.
+* R-68200 The xNF **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.
+* R-20353 The xNF **MUST** implement both **:candidate** and
+  **:writable-running** capabilities. When both **:candidate** and
+  **:writable-running** are provided then two locks should be supported.
+* R-11499 The xNF **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.
+* R-83790 The xNF **MUST** implement the **:validate** capability
+* R-49145 The xNF **MUST** implement **:confirmed-commit** If
+  **:candidate** is supported.
+* R-58358 The xNF **MUST** implement the **:with-defaults** capability
+  [RFC6243].
+* R-59610 The xNF **MUST** implement the data model discovery and
+  download as defined in [RFC6022].
+* R-93443 The xNF **MUST** define all data models in YANG [RFC6020],
+  and the mapping to NETCONF shall follow the rules defined in this RFC.
+* R-26115 The xNF **MUST** follow the data model upgrade rules defined
+  in [RFC6020] section 10. All deviations from section 10 rules shall
+  be handled by a built-in automatic upgrade mechanism.
+* R-10716 The xNF **MUST** support parallel and simultaneous
+  configuration of separate objects within itself.
+* R-29495 The xNF **MUST** support locking if a common object is
+  being manipulated by two simultaneous NETCONF configuration operations
+  on the same xNF 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).
+* R-53015 The xNF **MUST** apply locking based on the sequence of
+  NETCONF operations, with the first configuration operation locking
+  out all others until completed.
+* R-02616 The xNF **MUST** permit locking at the finest granularity
+  if a xNF 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).
+* R-41829 The xNF **MUST** be able to specify the granularity of the
+  lock via a restricted or full XPath expression.
+* R-66793 The xNF **MUST** guarantee the xNF 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 xNF without locking either
+  configuration method out).
+* R-54190 The xNF **MUST** release locks to prevent permanent lock-outs
+  when/if a session applying the lock is terminated (e.g., SSH session
+  is terminated).
+* R-03465 The xNF **MUST** release locks to prevent permanent lock-outs
+  when the corresponding <partial-unlock> operation succeeds.
+* R-63935 The xNF **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)
+* R-10173 The xNF **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.
+* R-88899 The xNF **MUST** support simultaneous <commit> operations
+  within the context of this locking requirements framework.
+* R-07545 The xNF **MUST** support all operations, administration and
+  management (OAM) functions available from the supplier for xNFs using
+  the supplied YANG code and associated NETCONF servers.
+* R-60656 The xNF **MUST** support sub tree filtering.
+* R-80898 The xNF **MUST** support heartbeat via a <get> with null filter.
+* R-25238 The xNF PACKAGE **MUST** validated YANG code using the open
+  source pyang [1]_ program using the following commands:
+
+.. code-block:: python
+
+ $ pyang --verbose --strict <YANG-file-name(s)>
+ $ echo $!
+
+* R-63953 The xNF **MUST** have the echo command return a zero value
+  otherwise the validation has failed
+* R-26508 The xNF **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.
+
+
+The following requirements provides the Yang models that suppliers must
+conform, and those where applicable, that suppliers need to use.
+
+* R-28545 The xNF **MUST** conform its YANG model to RFC 6060,
+  “YANG - A Data Modeling Language for the Network Configuration
+  Protocol (NETCONF)”
+* R-22700 The xNF **MUST** conform its YANG model to RFC 6470,
+  “NETCONF Base Notifications”.
+* R-10353 The xNF **MUST** conform its YANG model to RFC 6244,
+  “An Architecture for Network Management Using NETCONF and YANG”.
+* R-53317 The xNF **MUST** conform its YANG model to RFC 6087,
+  “Guidelines for Authors and Reviewers of YANG Data Model Documents”.
+* R-33955 The xNF **SHOULD** conform its YANG model to RFC 6991,
+  “Common YANG Data Types”.
+* R-22946 The xNF **SHOULD** conform its YANG model to RFC 6536,
+  “NETCONF Access Control Model”.
+* R-10129 The xNF **SHOULD** conform its YANG model to RFC 7223,
+  “A YANG Data Model for Interface Management”.
+* R-12271 The xNF **SHOULD** conform its YANG model to RFC 7223,
+  “IANA Interface Type YANG Module”.
+* R-49036 The xNF **SHOULD** conform its YANG model to RFC 7277,
+  “A YANG Data Model for IP Management”.
+* R-87564 The xNF **SHOULD** conform its YANG model to RFC 7317,
+  “A YANG Data Model for System Management”.
+* R-24269 The xNF **SHOULD** conform its YANG model to RFC 7407,
+  “A YANG Data Model for SNMP Configuration”, if Netconf used to
+  configure SNMP engine.
+
+The NETCONF server interface shall fully conform to the following
+NETCONF RFCs.
+
+* R-33946 The xNF **MUST** conform to the NETCONF RFC 4741,
+  “NETCONF Configuration Protocol”.
+* R-04158 The xNF **MUST** conform to the NETCONF RFC 4742,
+  “Using the NETCONF Configuration Protocol over Secure Shell (SSH)”.
+* R-13800 The xNF **MUST** conform to the NETCONF RFC 5277,
+  “NETCONF Event Notification”.
+* R-01334 The xNF **MUST** conform to the NETCONF RFC 5717,
+  “Partial Lock Remote Procedure Call”.
+* R-08134 The xNF **MUST** conform to the NETCONF RFC 6241,
+  “NETCONF Configuration Protocol”.
+* R-78282 The xNF **MUST** conform to the NETCONF RFC 6242,
+  “Using the Network Configuration Protocol over Secure Shell”.
+
+VNF REST APIs
+^^^^^^^^^^^^^^^
+
+HealthCheck is a command for which no NETCONF support exists.
+Therefore, this must be supported using a RESTful interface
+(defined in this section) or with a Chef cookbook/Ansible playbook
+(defined in sections `Chef Standards and Capabilities`_ and
+`Ansible Standards and Capabilities`_).
+
+HealthCheck Definition: The VNF level HealthCheck is a check over
+the entire scope of the VNF. The VNF must be 100% healthy, ready
+to take requests and provide services, with all VNF required
+capabilities ready to provide services and with all active and
+standby resources fully ready with no open MINOR, MAJOR or CRITICAL
+alarms.  NOTE: A switch may need to be turned on, but the VNF should
+be ready to take service requests or be already processing service
+requests successfully.
+
+The VNF must provide a REST formatted GET RPCs to support HealthCheck
+queries via the GET method over HTTP(s).
+
+The port number, url, and other authentication information is provided
+by the VNF provider.
+
+REST APIs
+~~~~~~~~~
+
+* R-31809 The xNF **MUST** support the HealthCheck RPC. The HealthCheck
+  RPC executes a xNF Provider-defined xNF HealthCheck over the scope of
+  the entire xNF (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 xNF is unable to run the HealthCheck, return a
+  standard http error code and message.
+
+Examples of responses when HealthCheck runs and is able to provide a healthy
+or unhealthy response:
+
+.. code-block:: java
+
+ {
+   "identifier": "scope represented",
+   "state": "healthy",
+   "time": "01-01-1000:0000"
+ }
+
+ {
+   "identifier": "scope represented",
+   "state": "unhealthy",
+    {[
+   "info": "System threshold exceeded details",
+   "fault":
+     {
+       "cpuOverall": 0.80,
+       "cpuThreshold": 0.45
+     }
+     ]},
+   "time": "01-01-1000:0000"
+ }
+
+
+Chef Standards and Capabilities
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ONAP will support configuration of VNFs via Chef subject to the
+requirements and guidelines defined in this section.
+
+The Chef configuration management mechanism follows a client-server
+model. It requires the presence of a Chef-Client on the VNF that will be
+directly managed by a Chef Server. The Chef-client will register with
+the appropriate Chef Server and are managed via ‘cookbooks’ and
+configuration attributes loaded on the Chef Server which contain all
+necessary information to execute the appropriate actions on the VNF via
+the Chef-client.
+
+ONAP will utilize the open source Chef Server, invoke the documented
+Chef REST APIs to manage the VNF and requires the use of open source
+Chef-Client and Push Jobs Client on the VNF
+(https://downloads.chef.io/).
+
+VNF Configuration via Chef Requirements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Chef Client Requirements
++++++++++++++++++++++++++
+
+* R-79224 The xNF **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.
+* R-72184 The xNF **MUST** have routable FQDNs for all the endpoints
+  (VMs) of a xNF that contain chef-clients which are used to register
+  with the Chef Server.  As part of invoking xNF actions, ONAP will
+  trigger push jobs against FQDNs of endpoints for a xNF, if required.
+* R-47068 The xNF **MAY** expose a single endpoint that is
+  responsible for all functionality.
+* R-67114 The xNF **MUST** be installed with Chef-Client >= 12.0 and
+  Chef push jobs client >= 2.0.
+
+Chef Roles/Requirements
+++++++++++++++++++++++++++
+
+* R-27310 The xNF Package **MUST** include all relevant Chef artifacts
+  (roles/cookbooks/recipes) required to execute xNF actions requested by
+  ONAP for loading on appropriate Chef Server.
+* R-26567 The xNF Package **MUST** include a run list of
+  roles/cookbooks/recipes, for each supported xNF action, that will
+  perform the desired xNF action in its entirety as specified by ONAP
+  (see Section 7.c, ONAP Controller APIs and Behavior, for list of xNF
+  actions and requirements), when triggered by a chef-client run list
+  in JSON file.
+* R-98911 The xNF **MUST NOT** use any instance specific parameters
+  for the xNF in roles/cookbooks/recipes invoked for a xNF action.
+* R-37929 The xNF **MUST** accept all necessary instance specific
+  data from the environment or node object attributes for the xNF
+  in roles/cookbooks/recipes invoked for a xNF action.
+* R-62170 The xNF **MUST** over-ride any default values for
+  configurable parameters that can be set by ONAP in the roles,
+  cookbooks and recipes.
+* R-78116 The xNF **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 xNF action.
+* R-44013 The xNF **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 xNF action requires the output of a
+  chef-client run be made available (e.g., get running configuration).
+* R-30654 The xNF 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 xNF (e.g., configure).
+* R-65755 The xNF **SHOULD** support callback URLs to return information
+  to ONAP upon completion of the chef-client run for any chef-client run
+  associated with a xNF 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.
+
+* R-15885 The xNF **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 xNF action, it should reflect this status on the Chef
+  Server regardless of whether the Callback succeeded or not.
+
+ONAP Chef API Usage
+~~~~~~~~~~~~~~~~~~~
+
+This section outlines the workflow that ONAP invokes when it receives an
+action request against a Chef managed VNF.
+
+1. When ONAP receives a request for an action for a Chef Managed VNF, it
+   retrieves the corresponding template (based on **action** and
+   **VNF)** from its database and sets necessary values in the
+   “Environment”, “Node” and “NodeList” keys (if present) from either
+   the payload of the received action or internal data.
+
+2. If “Environment” key is present in the updated template, it posts the
+   corresponding JSON dictionary to the appropriate Environment object
+   REST endpoint on the Chef Server thus updating the Environment
+   attributes on the Chef Server.
+
+3. Next, it creates a Node Object from the “Node” JSON dictionary for
+   all elements listed in the NodeList (using the FQDN to construct the
+   endpoint) by replicating it  [2]_. As part of this process, it will
+   set the name field in each Node Object to the corresponding FQDN.
+   These node objects are then posted on the Chef Server to
+   corresponding Node Object REST endpoints to update the corresponding
+   node attributes.
+
+4. If PushJobFlag is set to “True” in the template, ONAP requests a push
+   job against all the nodes in the NodeList to trigger
+   chef-client\ **.** It will not invoke any other command via the push
+   job. ONAP will include a callback URL in the push job request and a
+   unique Request Id. An example push job posted by ONAP is listed
+   below:
+
+.. code-block:: java
+
+   {
+     "command": "chef-client",
+     "run\_timeout": 300,
+     "nodes”: [“node1.vnf\_a.onap.com”, “node2.vnf\_a.onap.com”],
+       "env": {
+                “RequestId”:”8279-abcd-aksdj-19231”,
+                “CallbackUrl”:”<callback>”
+              },
+   }
+
+5. If CallbackCapable field in the template is not present or set to
+   “False” ONAP will poll the Chef Server to check completion status of
+   the push job.
+
+6. If “GetOutputFlag” is set to “True” in the template and
+   CallbackCapable is not set to “True”, ONAP will retrieve any output
+   from each node where the push job has finished by accessing the Node
+   Object attribute node[‘PushJobOutput’].
+
+Ansible Standards and Capabilities
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ONAP will support configuration of VNFs via Ansible subject to the
+requirements and guidelines defined in this section.
+
+Ansible allows agentless management of VNFs/VMs/VNFCs via execution
+of ‘playbooks’ over ssh. The ‘playbooks’ are a structured set of
+tasks which contain all the necessary resources and execution capabilities
+to take the necessary action on one or more target VMs (and/or VNFCs)
+of the VNF. ONAP will utilize the framework of an Ansible Server that
+will host all Ansible artifacts and run playbooks to manage VNFs that support
+Ansible.
+
+VNF Configuration via Ansible Requirements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Ansible Client Requirements
++++++++++++++++++++++++++++++
+
+* R-32217 The xNF **MUST** have routable FQDNs that are reachable via
+  the Ansible Server for the endpoints (VMs) of a xNF on which playbooks
+  will be executed. ONAP will initiate requests to the Ansible Server
+  for invocation of playbooks against these end points [3]_.
+* R-54373 The xNF **MUST** have Python >= 2.6 on the endpoint VM(s)
+  of a xNF on which an Ansible playbook will be executed.
+* R-35401 The xNF **MUST** support SSH and allow SSH access by the
+  Ansible server for the endpoint VM(s) and comply with the Network
+  Cloud Service Provider guidelines for authentication and access.
+* R-82018 The xNF **MUST** load the Ansible Server SSH public key onto xNF
+  VM(s) as part
+  of instantiation. This will allow the Ansible Server to authenticate
+  to perform post-instantiation configuration without manual intervention
+  and without requiring specific xNF login IDs and passwords.
+
+ CAUTION: For VNFs 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.
+
+* R-92866 The xNF **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 download and install of
+  new SSH keys and new mechanized IDs.
+* R-91745 The xNF **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.
+
+Ansible Playbook Requirements
++++++++++++++++++++++++++++++++
+
+An Ansible playbook is a collection of tasks that is executed on the
+Ansible server (local host) and/or the target VM (s) in order to
+complete the desired action.
+
+* R-40293 The xNF **MUST** make available playbooks that conform
+  to the ONAP requirement.
+* R-49396 The xNF **MUST** support each ONAP (APPC) xNF action
+  by invocation of **one** playbook [4]_. The playbook will be responsible
+  for executing
+  all necessary tasks (as well as calling other playbooks) to complete
+  the request.
+* R-33280 The xNF **MUST NOT** use any instance specific parameters
+  in a playbook.
+* R-48698 The xNF **MUST** utilize information from key value pairs
+  that will be provided by the Ansible Server as "extra-vars" during
+  invocation to execute the desired xNF action. 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.
+
+The Ansible Server will determine if a playbook invoked to execute a
+xNF action finished successfully or not using the “PLAY_RECAP” summary
+in Ansible log.  The playbook will be considered to successfully finish
+only if the “PLAY RECAP” section at the end of playbook execution output
+has no unreachable hosts and no failed tasks. Otherwise, the playbook
+will be considered to have failed.
+
+* R-43253 The xNF **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).
+* R-50252 The xNF **MUST** write to a specific one text files that
+  will be retrieved and made available by the Ansible Server if, as part
+  of a xNF action (e.g., audit), a playbook is required to return any
+  xNF information. The text files must be written in the same directory as
+  the one from which the playbook is being executed. A text file must be
+  created for the xNF playbook run targets/affects, with the name
+  ‘<VNFname>_results.txt’ into which any desired output from each
+  respective VM/xNF must be written.
+* R-51442 The xNF **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 xNF (e.g., configure).
+
+ NOTE: In case rollback at the playbook level is not supported or possible,
+ the xNF provider shall provide alternative locking mechanism (e.g., for a
+ small xNF the rollback mechanism may rely on workflow to terminate and
+ re-instantiate VNF VMs and then re-run playbook(s)). Backing up updated
+ files also recommended to support rollback when soft rollback is feasible.
+
+* R-58301 The xNF **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 Playbooks.
+
+ 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 Controller such as APPC.
+ There are policies, as part of Control Loop models, that send remediation
+ action requests to APPC; these are triggered as a response to an event
+ or correlated events published to Event Bus.
+
+* R-02651 The xNF **SHOULD** use the Ansible backup feature 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.
+* R-43353 The xNF **MUST** return control from Ansible Playbooks only
+  after tasks 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.
+
+ Detailed examples:
+
+ StopApplication Playbook – StopApplication Playbook shall return control
+ and a completion status only after VNF application is fully stopped, all
+ processes/services stopped.
+ StartApplication Playbook – StartApplication Playbook shall return control
+ and a completion status only after all VNF application services are fully up,
+ all processes/services started and ready to provide services. NOTE: Start
+ Playbook should not be declared complete/done after starting one or several
+ processes that start the other processes.
+
+ HealthCheck Playbook:
+
+ SUCCESS – HealthCheck success shall be returned (return code 0) by a
+ Playbook or Cookbook only when VNF is 100% healthy, ready to take requests
+ and provide services, with all VNF required capabilities ready to provide
+ services and with all active and standby resources fully ready with no
+ open MINOR, MAJOR or CRITICAL alarms.
+
+ NOTE: In some cases, a switch may need to be turned on, but a VNF
+ reported as healthy, should be ready to take service requests or be
+ already processing service requests successfully.
+
+ A successful execution of a health-check playbook shall also create one
+ file per VNF VM, named after the VNF instance name followed by
+ “_results.txt (<vnf_instance>_results.txt) to indicate health-check was
+ executed and completed successfully, example: vfdb9904v_results.txt,
+ with the following contents:
+
+.. code-block:: java
+
+  {
+   "identifier": "VNF",
+   "state": "healthy",
+   "time": "2018-03-16:1139"
+  }
+
+Example:
+
+.. code-block:: java
+
+  $ cat vfdb9904v_results.txt
+  {
+   "identifier": "VNF",
+   "state": "healthy",
+   "time": "2018-03-16:1139"
+  }
+..
+
+ FAILURE – A health check playbook shall return a non-zero return code in
+ case VNF is not 100% healthy because one or more VNF application processes
+ are stopped or not ready to take service requests or because critical or
+ non-critical resources are not ready or because there are open MINOR, MAJOR
+ or CRITICAL traps/alarms or because there are issues with the VNF that
+ need attention even if they do not impact services provided by the VNF.
+
+ A failed health-check playbook shall also create one file per VNF,
+ named after the VNF instance name, followed by
+ “_results.txt to indicate health-check was executed and found issues
+ in the health of the VNF. This is to differentiate from failure to
+ run health-check playbook or playbook tasks to verify the health of the VNF,
+ example: vfdb9904v_results.txt, with the following contents:
+
+.. code-block:: java
+
+ {
+  "identifier": "VNF",
+  "state": "unhealthy",
+  "info": "Error in following VM(s). Check hcstatus files
+  under /tmp/ccfx9901v for details",
+  "fault": [
+    "vfdb9904vm001",
+    "vfdb9904vm002"
+  ],
+  "time": "2018-03-16:4044"
+ }
+..
+
+ Example:
+
+.. code-block:: java
+
+ $ cat vfdb9904v_results.txt
+ {
+  "identifier": "VNF",
+  "state": "unhealthy",
+  "info": "Error in following VM(s). Check hcstatus files
+  under /tmp/ccfx9901v for details",
+  "fault": [
+    "vfdb9904vm001",
+    "vfdb9904vm002"
+  ],
+  "time": "2018-03-16:4044"
+ }
+..
+
+ See `VNF REST APIs`_ for additional details on HealthCheck.
+
+ONAP Controller / Ansible API Usage
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This section outlines the workflow that ONAP Controller invokes when
+it receives an action request against an Ansible managed VNF.
+
+ #. When ONAP Controller receives a request for an action for an
+    AnsibleManaged VNF, it retrieves the corresponding template (based
+    on **action** and **VNF**) from its database and sets necessary
+    values (such as an Id, NodeList, and EnvParameters) from either
+    information in the request or data obtained from other sources.
+    This is referred to as the payload that is sent as a JSON object
+    to the Ansible server.
+ #. The ONAP Controller sends a request to the Ansible server to
+    execute the action.
+ #. The ONAP Controller polls the Ansible Server for result (success
+    or failure).  The ONAP Controllers has a timeout value which is
+    contained in the template.   If the result is not available when the
+    timeout is reached, the ONAP Controller stops polling and returns a
+    timeout error to the requester.   The Ansible Server continues to
+    process the request.
+
+
+Support of Controller Commands And Southbound Protocols
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following table summarizes the commands and possible protocols selected.
+Note that the HealthCheck can also be supported via REST.
+
+Table 8. ONAP Controller APIs and NETCONF Commands
+
++-------------+--------------------+--------------------+--------------------+
+|**Command**  |**NETCONF Support** |**Chef Support**    |**Ansible**         |
++=============+====================+====================+====================+
+|General      |For each RPC, the   |VNF Vendor must     |VNF Vendor must     |
+|Comments     |appropriate RPC     |provide any         |provide an Ansible  |
+|             |operation is listed.|necessary roles,    |playbook to retrieve|
+|             |                    |cookbooks, recipes  |the running         |
+|             |                    |to retrieve the     |configuration from a|
+|             |                    |running             |VNF and place the   |
+|             |                    |configuration from  |output on the       |
+|             |                    |a VNF and place it  |Ansible server in   |
+|             |                    |in the respective   |a manner aligned    |
+|             |                    |Node Objects        |with playbook       |
+|             |                    |‘PushJobOutput’     |requirements listed |
+|             |                    |attribute of all    |in this document.   |
+|             |                    |nodes in NodeList   |                    |
+|             |                    |when triggered      |The PlaybookName    |
+|             |                    |by a chef-client    |must be provided    |
+|             |                    |run.                |in the JSON file.   |
+|             |                    |                    |                    |
+|             |                    |The JSON file for   |NodeList must list  |
+|             |                    |this VNF action is  |IP addresses or DNS |
+|             |                    |required to set     |supported FQDNs of  |
+|             |                    |“PushJobFlag” to    |an example VNF      |
+|             |                    |“True” and          |on which to         |
+|             |                    |“GetOutputFlag” to  |execute playbook.   |
+|             |                    |“True”. The “Node”  |                    |
+|             |                    |JSON dictionary     |                    |
+|             |                    |must have the run   |                    |
+|             |                    |list populated      |                    |
+|             |                    |with the necessary  |                    |
+|             |                    |sequence of roles,  |                    |
+|             |                    |cookbooks, recipes. |                    |
+|             |                    |                    |                    |
+|             |                    |The Environment     |                    |
+|             |                    |and Node values     |                    |
+|             |                    |should contain all  |                    |
+|             |                    |appropriate         |                    |
+|             |                    |configuration       |                    |
+|             |                    |attributes.         |                    |
+|             |                    |                    |                    |
+|             |                    |NodeList must       |                    |
+|             |                    |list sample FQDNs   |                    |
+|             |                    |that are required to|                    |
+|             |                    |conduct a           |                    |
+|             |                    |chef-client run for |                    |
+|             |                    |this VNF Action.    |                    |
++-------------+--------------------+--------------------+--------------------+
+|Audit        |The <get-config> is |Supported via a     |Supported via a     |
+|             |used to return the  |cookbook that       |playbook that       |
+|             |running             |returns the running |returns the running |
+|             |configuration.      |configuration.      |configuration.      |
++-------------+--------------------+--------------------+--------------------+
+|Configure,   |The <edit-config>   |Supported via a     |Supported via a     |
+|ModifyConfig |operation loads all |cookbook that       |playbook that       |
+|             |or part of a        |updates the VNF     |updates the VNF     |
+|             |specified data set  |configuration.      |configuration.      |
+|             |to the specified    |                    |                    |
+|             |target database. If |                    |                    |
+|             |there is no         |                    |                    |
+|             |<candidate/>        |                    |                    |
+|             |database, then the  |                    |                    |
+|             |target is the       |                    |                    |
+|             |<running/> database.|                    |                    |
+|             |A <commit> follows. |                    |                    |
++-------------+--------------------+--------------------+--------------------+
+|Other        |This command has no |Supported via a     |Supported via a     |
+|Configuration|existing NETCONF RPC|cookbook that       |playbook that       |
+|Commands     |action.             |performs            |performs            |
+|             |                    |the action.         |the action.         |
++-------------+--------------------+--------------------+--------------------+
+|Lifecycle    |This command has no |Supported via a     |Supported via a     |
+|Management   |existing NETCONF RPC|cookbook that       |playbook that       |
+|Commands     |action.             |performs            |performs            |
+|             |                    |the action.         |the action.         |
++-------------+--------------------+--------------------+--------------------+
+|Health Check |This command has no |Supported via a     |Supported           |
+|             |existing NETCONF RPC|cookbook            |via a               |
+|             |action.             |that                |playbook            |
+|             |                    |performs            |that                |
+|             |                    |a HealthCheck and   |performs            |
+|             |                    |returns the results.|the                 |
+|             |                    |                    |HealthCheck         |
+|             |                    |                    |and returns         |
+|             |                    |                    |the                 |
+|             |                    |                    |results.            |
++-------------+--------------------+--------------------+--------------------+
+
+Monitoring & Management
+--------------------------------------------------
+
+This section addresses data collection and event processing
+functionality that is directly dependent on the interfaces
+provided by the VNFs’ APIs. These can be in the form of asynchronous
+interfaces for event, fault notifications, and autonomous data streams.
+They can also be synchronous interfaces for on-demand requests to
+retrieve various performance, usage, and other event information.
+
+The target direction for VNF interfaces is to employ APIs that are
+implemented utilizing standardized messaging and modeling protocols
+over standardized transports. Migrating to a virtualized environment
+presents a tremendous opportunity to eliminate the need for proprietary
+interfaces for VNF provider equipment while removing the traditional
+boundaries between Network Management Systems and Element Management
+Systems. Additionally, VNFs provide the ability to instrument the
+networking applications by creating event records to test and monitor
+end-to-end data flow through the network, similar to what physical or
+virtual probes provide without the need to insert probes at various
+points in the network. The VNF providers must be able to provide the
+aforementioned set of required data directly to the ONAP collection
+layer using standardized interfaces.
+
+Data Model for Event Records
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This section describes the data model for the collection of telemetry
+data from VNFs by Service Providers (SPs) to manage VNF health and
+runtime lifecycle. This data model is referred to as the VNF Event
+Streaming (VES) specifications. While this document is focused on
+specifying some of the records from the ONAP perspective, there may
+be other external bodies using the same framework to specify additional
+records. For example, OPNFV has a VES project that is looking to specify
+records for OpenStack’s internal telemetry to manage Application (VNFs),
+physical and virtual infrastructure (compute, storage, network devices),
+and virtual infrastructure managers (cloud controllers, SDN controllers).
+Note that any configurable parameters for these data records (e.g.,
+frequency, granularity, policy-based configuration) will be managed
+using the “Configuration” framework described in the prior sections
+of this document.
+
+The Data Model consists of:
+
+-  Common Header Record: This data structure precedes each of the
+   Technology Independent and Technology Specific records sections of
+   the data model.
+
+-  Technology Independent Records: This version of the document
+   specifies the model for Fault, Heartbeat, State Change, Syslog,
+   Threshold Crossing Alerts, and VNF Scaling* (short for
+   measurementForVfScalingFields – actual name used in JSON
+   specification) records. In the future, these may be extended to
+   support other types of technology independent records. Each of
+   these records allows additional fields (name/ value pairs) for
+   extensibility. The VNF provider can use these VNF Provider-specific
+   additional fields to provide additional information that may be
+   relevant to the managing systems.
+
+-  Technology Specific Records: This version of the document specifies
+   the model for Mobile Flow records, Signaling and Voice Quality records.
+   In the future, these may be extended to support other types of records
+   (e.g. Network Fabric, Security records, etc.). Each of these records
+   allows additional fields (name/value pairs) for extensibility. The VNF
+   providers can use these VNF-specific additional fields to provide
+   additional information that may be relevant to the managing systems.
+   A placeholder for additional technology specific areas of interest to
+   be defined in the future documents has been depicted.
+
+|image0|
+
+Figure 1. Data Model for Event Records
+
+Event Records - Data Structure Description
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The data structure for event records consists of:
+
+-  a Common Event Header block;
+
+-  zero or more technology independent domain blocks; and
+
+   -  e.g., Fault domain, State Change domain, Syslog domain, etc.
+
+-  zero or more technology specific domain blocks.
+
+   -  e.g., Mobile Flow domain, Signaling domain, Voice Quality domain,
+      etc.
+
+Common Event Header
+~~~~~~~~~~~~~~~~~~~~~
+
+The common header that precedes any of the domain-specific records contains
+information identifying the type of record to follow, information about
+the sender and other identifying characteristics related to timestamp,
+sequence number, etc.
+
+Technology Independent Records – Fault Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The Fault Record, describing a condition in the Fault domain, contains
+information about the fault such as the entity under fault, the
+severity, resulting status, etc.
+
+Technology Independent Records – Heartbeat Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The Heartbeat Record provides an optional structure for communicating
+information about heartbeat or watchdog signaling events.  It can
+contain information about service intervals, status information etc.
+as required by the heartbeat implementation.
+
+Note: Heartbeat records would only have the Common Event Header block.
+An optional heartbeat domain is available if required by the heartbeat
+implementation.
+
+Technology Independent Records – State Change Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The State Change Record provides a structure for communicating information
+about data flow through the VNF. It can contain information about state
+change related to physical device that is reported by VNF. As an example,
+when cards or port name of the entity that has changed state.
+
+Technology Independent Records – Syslog Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The Syslog Record provides a structure for communicating any type of
+information that may be logged by the VNF. It can contain information
+about system internal events, status, errors, etc.
+
+Technology Independent Records – Threshold Crossing Alert Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The Threshold Crossing Alert (TCA) Record provides a structure for
+communicating information about threshold crossing alerts. It can
+contain alert definitions and types, actions, events, timestamps
+and physical or logical details.
+
+Technology Independent Records - VNF Scaling Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The VNF Scaling\* (short for measurementForVfScalingFields –
+actual name used in JSON specification) Record contains information
+about VNF and VNF resource structure and its condition to help in
+the management of the resources for purposes of elastic scaling.
+
+Technology Independent Records – otherFields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The otherFields Record defines fields for events belonging to the
+otherFields domain of the Technology Independent domain enumeration.
+This record provides a mechanism to convey a complex set of fields
+(possibly nested or opaque) and is purely intended to address
+miscellaneous needs such as addressing time-to-market considerations
+or other proof-of-concept evaluations. Hence, use of this record
+type is discouraged and should be minimized.
+
+Technology Specific Records – Mobile Flow Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The Mobile Flow Record provides a structure for communicating
+information about data flow through the VNF. It can contain
+information about connectivity and data flows between serving
+elements for mobile service, such as between LTE reference points, etc.
+
+Technology Specific Records – Signaling Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The Signaling Record provides a structure for communicating information
+about signaling messages, parameters and signaling state.  It can
+contain information about data flows for signaling and controlling
+multimedia communication sessions such as voice and video calls.
+
+Technology Specific Records – Voice Quality Fields
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The Voice Quality Record provides a structure for communicating information
+about voice quality statistics including media connection information,
+such as transmitted octet and packet counts, packet loss, packet delay
+variation, round-trip delay, QoS parameters and codec selection.
+
+Technology Specific Records – Future Domains
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The futureDomains Record is a placeholder for additional technology
+specific areas of interest that will be defined and described
+in the future documents.
+
+Data Structure Specification of the Event Record
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+For additional information on the event record formats of the data
+structures mentioned above, please refer to `VES Event
+Listener <https://github.com/att/evel-test-collector/tree/master/docs/att_interface_definition>`__.
+
+Transports and Protocols Supporting Resource Interfaces
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Delivery of data from VNFs to ONAP must use the common transport
+mechanisms and protocols for all VNFs as defined in this document.
+Transport mechanisms and protocols have been selected to enable both
+high volume and moderate volume datasets, as well as asynchronous and
+synchronous communications over secure connections. The specified
+encoding provides self-documenting content, so data fields can be
+changed as needs evolve, while minimizing changes to data delivery.
+
+The term ‘Event Record’ is used throughout this document to represent
+various forms of telemetry or instrumentation made available by the
+VNF including, faults, status events, various other types of VNF
+measurements and logs. Headers received by themselves must be used
+as heartbeat indicators. Common structures and delivery protocols for
+other types of data will be given in future versions of this document
+as we get more insight into data volumes and required processing.
+
+In the following sections, we provide options for encoding, serialization
+and data delivery. Agreements between Service Providers and VNF providers
+shall determine which encoding, serialization and delivery method to use
+for particular data sets. The selected methods must be agreed to prior to
+the on-boarding of the VNF into ONAP design studio.
+
+VNF Telemetry using VES/JSON Model
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The preferred model for data delivery from a VNF to ONAP DCAE is
+the JSON driven model as depicted in Figure 2.
+
+|image1|
+
+Figure 2. VES/JSON Driven Model
+
+VNF providers will provide a YAML artifact to the Service Provider
+that describes:
+
+* standard VES/JSON model information elements (key/values) that
+  the VNF provides
+* any additional non-standard (custom) VES/JSON model information
+  elements (key/values) that the VNF provides
+
+Using the semantics and syntax supported by YAML, VNF providers
+will indicate specific conditions that may arise, and recommend
+actions that should be taken at specific thresholds, or if specific
+conditions repeat within a specified time interval.
+
+Based on the VNF provider's recommendations, the Service Provider may
+create additional YAML artifacts (using ONAP design Studio), which
+finalizes Service Provider engineering rules for the processing of
+the VNF events.  The Service Provider may alter the threshold levels
+recommended by the VNF providor, and may modify and more clearly
+specify actions that should be taken when specified conditions arise.
+The Service Provider-created version of the YAML artifact will be
+distributed to ONAP applications by the Design framework.
+
+VNF Telemetry using YANG Model
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In addition to the JSON driven model described above, a YANG
+driven model can also be supported, as depicted in Figure 3.
+
+|image2|
+
+Figure 3. YANG Driven Model
+
+VNF providers will provide to the Service Provider the following
+YANG model artifacts:
+
+* common IETF YANG modules that support the VNF
+* native (VNF provider-supplied) YANG modules that support the VNF
+* open (OpenConfig) YANG modules and the following
+  configuration-related information, including:
+
+  * telemetry configuration and operational state data; such as:
+
+    * sensor paths
+    * subscription bindings
+    * path destinations
+    * delivery frequency
+    * transport mechanisms
+    * data encodings
+
+* a YAML artifact that provides all necessary mapping relationships
+  between YANG model data types to VES/JSON information elements
+* YANG helper or decoder functions that automate the conversion between
+  YANG model data types to VES/JSON information elements
+* OPTIONAL: YANG Telemetry modules in JSON format per RFC 7951
+
+Using the semantics and syntax supported by YANG, VNF providers
+will indicate specific conditions that may arise, and recommend
+actions that should be taken at specific thresholds, or if specific
+conditions repeat within a specified time interval.
+
+Based on the VNF provider's recommendations, the Service Provider may
+create additional YAML artifacts (using ONAP design Studio), which
+finalizes Service Provider engineering rules for the processing of the
+VNF events.  The Service Provider may alter the threshold levels recommended
+by the VNF provider, and may modify and more clearly specify actions that
+should be taken when specified conditions arise.  The Service
+Provided-created version of the YAML will be distributed to ONAP
+applications by the Design framework.
+
+Note: While supporting the YANG model described above, we are still
+leveraging the VES JSON based model in DCAE.  The purpose of the
+diagram above is to illustrate the concept only and not to imply a
+specific implementation.
+
+VNF Telemetry using Google Protocol Buffers
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In addition to the data delivery models described above, support for
+delivery of VNF telemetry using Google Protocol Buffers (GPB) can
+also be supported, as depicted in Figure 4.
+
+VNF providers will provide to the Service Provider the additional
+following artifacts to support the delivery of VNF telemetry to DCAE
+via the open-source gRPC mechanism using Google's Protocol Buffers:
+
+* the YANG model artifacts described in support of the
+  "VNF Telemetry using YANG Model"
+* valid definition file(s) for all GPB / KV-GPB encoded messages
+* valid definition file(s) for all gRPC services
+* gRPC method parameters and return types specified as Protocol
+  Buffers messages
+
+|image3|
+
+Figure 4. Protocol Buffers Driven Model
+
+Note: if Google Protocol Buffers are employed for delivery of VNF
+telemetry, Key-Value Google Protocol Buffers (KV-GPB) is the
+preferred serialization method.  Details of specifications and
+versioning corresponding to a release can be found at:
+`VES Event Listener <https://github.com/att/evel-test-collector/tree/master/docs/att_interface_definition>`__.
+
+Note: While supporting the VNF telemetry delivery approach described above,
+we are still leveraging the VES JSON based model in DCAE.  The purpose of
+the diagram above is to illustrate the concept only and not to imply a
+specific implementation.
+
+Monitoring & Management Requirements
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+VNF telemetry via standardized interface
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* R-51910 The xNF **MUST** provide all telemetry (e.g., fault event
+  records, syslog records, performance records etc.) to ONAP using the
+  model, format and mechanisms described in this section.
+
+Encoding and Serialization
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Content delivered from VNFs to ONAP is to be encoded and serialized using JSON:
+
+JSON
+~~~~~~~~~~~~~~~~~~
+
+* R-19624 The xNF **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 [5]_ data format are described using JSON.
+
+  Note:
+
+  - JSON plain text format is preferred for moderate volume data sets
+    (option 1), as JSON has the advantage of having well-understood simple
+    processing and being human-readable without additional decoding. Examples
+    of moderate volume data sets include the fault alarms and performance
+    alerts, heartbeat messages, measurements used for xNF scaling and syslogs.
+  - Binary format using Avro is preferred for high volume data sets
+    (option 2) such as mobility flow measurements and other high-volume
+    streaming events (such as mobility signaling events or SIP signaling)
+    or bulk data, as this will significantly reduce the volume of data
+    to be transmitted. As of the date of this document, all events are
+    reported using plain text JSON and REST.
+  - Avro content is self-documented, using a JSON schema. The JSON schema is
+    delivered along with the data content
+    (http://avro.apache.org/docs/current/ ). This means the presence and
+    position of data fields can be recognized automatically, as well as the
+    data format, definition and other attributes. Avro content can be
+    serialized as JSON tagged text or as binary. In binary format, the
+    JSON schema is included as a separate data block, so the content is
+    not tagged, further compressing the volume. For streaming data, Avro
+    will read the schema when the stream is established and apply the
+    schema to the received content.
+
+In addition to the preferred method (JSON), content can be delivered
+from xNFs to ONAP can be encoded and serialized using Google Protocol
+Buffers (GPB).
+
+KV-GPB/GPB
+~~~~~~~~~~~~~~~~~~
+
+Telemetry data delivered using Google Protocol Buffers v3 (proto3)
+can be serialized in one of the following methods:
+
+* Key-value Google Protocol Buffers (KV-GPB) is also known as
+  self-describing GPB:
+
+  * keys are strings that correspond to the path of the system
+    resources for the VNF being monitored.
+  * values correspond to integers or strings that identify the
+    operational state of the VNF resource, such a statistics counters
+    and the state of a VNF resource.
+
+* VNF providers must supply valid KV-GPB definition file(s) to allow
+  for the decoding of all KV-GPB encoded telemetry messages.
+
+* Native Google Protocol Buffers (GPB) is also known as compact GPB:
+
+  * keys are represented as integers pointing to the system resources for
+    the VNF being monitored.
+  * values correspond to integers or strings that identify the operational
+    state of the VNF resource, such a statistics counters and the state
+    of a VNF resource.
+
+* Google Protocol Buffers (GPB) requires metadata in the form of .proto
+  files. VNF providers must supply the necessary GPB .proto files such that
+  GPB telemetry messages can be encoded and decoded.
+
+* In the future, we may consider support for other types of
+  encoding & serialization methods based on industry demand.
+
+
+Reporting Frequency
+~~~~~~~~~~~~~~~~~~~~~
+
+* R-98191 The xNF **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 function’s 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.
+
+Addressing and Delivery Protocol
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ONAP destinations can be addressed by URLs for RESTful data PUT. Future
+data sets may also be addressed by host name and port number for TCP
+streaming, or by host name and landing zone directory for SFTP transfer
+of bulk files.
+
+* R-88482 The xNF **SHOULD** use REST using HTTPS delivery of plain
+  text JSON for moderate sized asynchronous data sets, and for high
+  volume data sets when feasible.
+* R-84879 The xNF **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 xNF. In this case, the network will
+  promptly resolve connectivity problems caused by a collector or network
+  failure transparently to the xNF.
+* R-81777 The xNF **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 xNF using PUTs to a
+  RESTful API, in the same manner that other controls over data reporting
+  will be controlled by policy.
+* R-08312 The xNF **MAY** use another option which is expected to include REST
+  delivery of binary encoded data sets.
+* R-79412 The xNF **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.
+* R-01033 The xNF **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 xNFs.
+  (Preferred is to reorganize the data into more frequent or more focused data
+  sets, and deliver these by REST or TCP as appropriate.)
+* R-63229 The xNF **MAY** use another option which is expected to include REST
+  for synchronous data, using RESTCONF (e.g., for xNF state polling).
+* R-03070 The xNF **MUST**, by ONAP Policy, provide the ONAP addresses
+  as data destinations for each xNF, and may be changed by Policy while
+  the xNF is in operation. We expect the xNF 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.
+
+Asynchronous and Synchronous Data Delivery
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* R-06924 The xNF **MUST** deliver asynchronous data as data becomes
+  available, or according to the configured frequency.
+* R-73285 The xNF **MUST** must encode, address and deliver the data
+  as described in the previous paragraphs.
+* R-42140 The xNF **MUST** respond to data requests from ONAP as soon
+  as those requests are received, as a synchronous response.
+* R-34660 The xNF **MUST** use the RESTCONF/NETCONF framework used by
+  the ONAP configuration subsystem for synchronous communication.
+* R-86586 The xNF **MUST** use the YANG configuration models and RESTCONF
+  [RFC8040] (https://tools.ietf.org/html/rfc8040).
+* R-11240 The xNF **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.
+* R-70266 The xNF **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
+  xNF scaling fields, and syslog fields. Other record types will be added
+  in the future as they become standardized and are made available.)
+* R-46290 The xNF **MUST** respond to an ONAP request to deliver granular
+  data on device or subsystem status or performance, referencing the YANG
+  configuration model for the xNF by returning the requested data elements.
+* R-43327 The xNF **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.
+
+Security
+~~~~~~~~~~
+
+* R-42366 The xNF **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>`_.
+* R-44290 The xNF **MUST** control access to ONAP and to xNFs, and creation
+  of connections, through secure credentials, log-on and exchange mechanisms.
+* R-47597 The xNF **MUST** carry data in motion only over secure connections.
+* R-68165 The xNF **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.
+
+
+.. [1]
+   https://github.com/mbj4668/pyang
+
+.. [2]
+   Recall that the Node Object **is required** to be identical across
+   all VMs of a VNF invoked as part of the action except for the “name”.
+
+.. [3]
+   Upstream elements must provide the appropriate FQDN in the request to
+   ONAP for the desired action.
+
+.. [4]
+   Multiple ONAP actions may map to one playbook.
+
+.. [5]
+   This option is not currently supported in ONAP and it is currently
+   under consideration.
+
+.. |image0| image:: Data_Model_For_Event_Records.png
+      :width: 7in
+      :height: 8in
+
+
+.. |image1| image:: VES_JSON_Driven_Model.png
+      :width: 5in
+      :height: 3in
+
+.. |image2| image:: YANG_Driven_Model.png
+      :width: 5in
+      :height: 3in
+
+.. |image3| image:: Protocol_Buffers_Driven_Model.png
+      :width: 4.74in
+      :height: 3.3in
 
-a. Service Design
-#. VNF On-boarding and package management
-#. Configuration Management
-#. Monitoring & Management