.. This work is licensed under a
   Creative Commons Attribution 4.0 International License.

.. _master_index:

Open Network Automation Platform
================================

Open Network Automation Platform (ONAP) is an open source project hosted by
the Linux Foundation.

ONAP provides a comprehensive platform for real-time, policy-driven service
orchestration and automation. ONAP enables service providers and developers
to rapidly automate the instantiation and configuration of physical and
virtual network functions and to support complete life cycle management
activities. By unifying the resources of open source members, ONAP enables
the acceleration of the development of a vibrant ecosystem around a globally
shared architecture and the implementation of network automation faster than
any product could on its own.

Please find some guidance here on the content of the Casablanca Release documentation for ONAP:

 +-------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | Main documentation areas 	                         |   Description                                                                                 |
 +=======================================================+===============================================================================================+
 | :ref:`ONAP Overview <getting-started>`                | ONAP Overview provides generic and high-level guidance on the mission and main                |
 |                                                       | functionalities of ONAP. Basic guidelines on license details, limitations and                 |
 |                                                       | security references support understanding the solution.                                       |
 +-------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`ONAP Architecture <ONAP-architecture>`          | The ONAP architecture and its functional elements are described in details                    |
 |                                                       | here. We can learn how the two main frameworks, namely the Design-time                        |
 |                                                       | framework and the Run-time framework cooperate and how the Microservices,                     |
 |                                                       | Common services and the ONAP Portal support the certain functions.                            |
 +-------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Setting Up ONAP <installing-onap>`              | Installation guidelines and requirements help the very first set up of an                     |
 |                                                       | ONAP environment. The ONAP Operations Manager Cloud setup Guide and the                       |
 |                                                       | ONAP Operations Manager Quick Start Guide support the deployment and installation activities. |
 +-------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Developer Guides <ONAP_developer_guides>`       | Developers contributing to the ONAP development can find crucial information                  |
 |                                                       | in the Developer Guides. The reader can search among the developers’ topics                   |
 |                                                       | in alphabetical order.                                                                        |
 +-------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`User Guides <user-guides>`                      | The User Guides provide details on the ONAP portal, which portal integrates                   |
 |                                                       | numerous different ONAP applications at one place. Platform operations are                    |
 |                                                       | supported with ONAP Operations Quick Start Guide and with an ONAP Operations                  |
 |                                                       | User Guide. The instantiation and the management of resources and the services                |
 |                                                       | are supported with a Service Design Guide and with guidelines on Service Deployment.          |
 +-------------------------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`VNF/PNF Requirements and Guidelines <vnf_reqs>` | Harmonized VNF and PNF requirements and reduced customization of onboarding VNFs              |
 |                                                       | and PNFs can accelerate the optimal usage of this ONAP environment. The guidelines            |
 |                                                       | on VNF/PNF requirements facilitates synchronized and aligned activities for all participants. |
 +-------------------------------------------------------+-----------------------------------------------------------------------------------------------+

You can reach the complete Casablanca Release documentation from the Navigation bar on the left.

.. toctree::
   :maxdepth: 1
   :hidden:

   Home <self>
   guides/overview/index
   release/index
   guides/onap-developer/architecture/index
   guides/onap-developer/settingup/index
   guides/onap-developer/index
   guides/onap-user/index
   guides/onap-provider/index
