.. 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 and PNF Requirements and Guidelines <vnf_pnf_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 and 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
