.. This work is licensed under a Creative Commons Attribution 4.0
   International License. http://creativecommons.org/licenses/by/4.0


.. _casablancarelease-notes:

Casablanca Release Notes
^^^^^^^^^^^^^^^^^^^^^^^^

This page is the ONAP Casablanca Release Notes. The first release was labelled
Amsterdam, second release Beijing and subsequent major release will be named
using city names.

Release notes are cumulative for the release, meaning this release note for Casablanca will have an entry for each Major, Minor, and Maintenance release, if applicable. Information that is applicable regardless of release is included in the `Getting Started With ONAP`_ section of this document.

Each component within the ONAP solution maintains their own component level release notes and links to those release notes are provided below. Details on the specific items delivered in each releaese by each component is maintained in the component specific release notes.

Casablanca Releases
===================

The following releases are available for Casablanca:
  - `Casablanca Maintenance Release 3.0.2`_
  - `Casablanca Maintenance Release 3.0.1`_
  - `Casablanca Major Release 3.0.0`_

Casablanca Maintenance Release 3.0.2
====================================

* Release Name: Casablanca
* Release Version: 3.0.2
* Release Date: Apr 15, 2019

Casablanca Maintenance Release 3.0.2 addresses issue of certificate expiry across the following projects:
 - AAI
 - CLAMP
 - DMAAP Data Router
 - Policy
 - VID
 - Portal

Details on the specific Jira tickets addressed by each project can be found in the component specific Release Notes. Link can be found below in section `Project Specific Release Notes`_.


Casablanca Maintenance Release 3.0.1
====================================

* Release Name: Casablanca
* Release Version: 3.0.1
* Release Date: Jan 31, 2019

Casablanca Maintenance Release 3.0.1 delivered a number of fixes and updates across the following projects:
 - AAI
 - APPC
 - CCSDK
 - CLAMP
 - DCAEGEN2
 - DOC
 - EXTAPI
 - Integration
 - MultiCloud
 - OOM
 - OOF
 - Policy
 - Portal
 - SDC
 - SDNC
 - SO

Details on the specific Jira tickets addressed by each project can be found in the component specific Release Notes. Link can be found below in section `Project Specific Release Notes`_.

Casablanca Major Release 3.0.0
==============================

* Release Name: Casablanca
* Release Version: 3.0.0
* Release Date: Nov 30, 2018

The Casablanca 3.0.0 is the first of Casablanca.

.. _getting-started:

Getting Started With ONAP
=========================

Summary
-------
ONAP provides a comprehensive platform for real-time, policy-driven
service orchestration and automation including virtual network functions and
applications instantiation and configuration, but also physical network
functions configuration.
ONAP will enable software, network, IT and cloud providers and developers
to rapidly automate new services and support complete life cycle management.
By unifying member resources, ONAP will accelerate the development of a
vibrant ecosystem around a globally shared architecture and implementation
for network automation-with an open standards focus-faster than any one
product could on its own.

Functionality
-------------
**Portal** - a single, consistent user experience for both design time
and run time environments, based on the user’s role.

**Design Time Framework** - a comprehensive development environment with
tools, techniques, and repositories for defining/describing resources,
and services:

 - Service Design and Creation (SDC) provides tools, techniques, and
   repositories to define/simulate/certify system assets as well as their
   associated processes and policies.

 - A VNF Software Development Kit (VNFSDK) and VNF Validation Program (VVP)
   with tools for VNF supplier packaging and validation.

 - Policy Creation (POLICY) deals with conditions, requirements,
   constraints, attributes, or needs that must be provided, maintained,
   and/or enforced.

 - Closed Loop Automation Management Platform (CLAMP) provides a method
   for designing and managing control loops.

 - Optimization Framework (OOF) provides a policy-driven and model-driven
   framework for creating optimization applications.

**Runtime Framework** - The runtime execution framework executes the
rules and policies distributed by the design and creation environment
and Controllers that manage resources corresponding to their assigned
controlled domain:

 - Service Orchestrator (SO) executes the specified BPMN processes and
   automates sequences of activities, tasks, rules and policies needed for
   on-demand creation, modification or removal of network, application or
   infrastructure services and resources. SO is especially able to drive
   any OpenStack-based cloud platform.

 - Software Defined Network Controller (SDNC) executes network configuration
   for cloud computing resources and network.

 - Application Controller (APPC) executes Virtual Network Functions (VNF)
   configurations and lifecycle management operations.

 - Virtual Function Controller (VF-C) is responsible for lifecycle management
   of virtual network functions and network services based on VNF using
   VNF Manager.

 - Active and Available Inventory (A&AI) provides real-time views of a
   system’s resources, services, products and their relationships with each
   other.

**Closed-Loop Automation** -- Design -> Create -> Collect -> Analyze >
Detect -> Publish -> Respond:

 - Data Collection, Analytics and Events (DCAE) collects events, performance,
   usage and publishes information to policy that executes the rules to perform
   closed loop actions.

 - Holmes provides alarm correlation and analysis for Telecom cloud
   infrastructure and services, including servers, cloud infrastructure,
   VNFs and Network Services.

 - Common Services - operational services for all ONAP components including
   activity logging, reporting, common data layer, access control, resiliency,
   multisite state coordination, credential/secret management and
   software lifecycle management.

**Microservices Support**

 - ONAP Operation Manager (OOM) use Kubernetes and Helm to manage ONAP components.
 - Microservices Bus (MSB) provides service registration/discovery,
   external API gateway, internal API gateway, client software development kit
   (SDK), and Swagger SDK.

Project Specific Release Notes
==============================
ONAP releases are specified by a list of project artifact versions in a :ref:`manifest artifacts <doc-release-manifest-artifacts>` and :ref:`manifest dockers <doc-release-manifest-docker>`.

.. toctree::
   :hidden:

   release-manifest-docker.rst
   release-manifest.rst

Each project provides detailed :ref:`release notes<doc-releaserepos>`
and prepends to these if/when any updated versions the project team believes
are compatible with a major release are made available.

.. index:: Download

Installation
============
ONAP is installed using :ref:`ONAP Operations Manager (OOM) over Kubernetes<installing-onap>`

Documentation
=============
ONAP Casablanca Release provides multiple documents including the following:

 * A high level :ref:`architecture view<doc-architecture>` of how component
   relate to each other.

 * A collection of documentation provided
   by :ref:`each project <doc_onap-developer_guide_projects>`.

 * Application Programming Interface
   Reference :ref:`available here <doc-apiref>`.

 * The `developer wiki <http://wiki.onap.org>`_ remains a good source of
   information on meeting plans and notes from committees, project teams and
   community events.

.. index:: Licensing

Security Notes
==============
ONAP has adopted the `CII Best Practice Badge Program <https://bestpractices.coreinfrastructure.org/en>`_.
The goal of the Casablanca release is for all ONAP projects to be close to achieving a CII Passing badge.

- `Badging Requirements <https://github.com/coreinfrastructure/best-practices-badge#core-infrastructure-initiative-best-practices-badge>`_
- `Badging Status for all ONAP projects <https://bestpractices.coreinfrastructure.org/en/projects?q=onap>`_

Project specific details are in the :ref:`release notes<doc-releaserepos>` for each project.

.. index:: maturity

ONAP Maturity Testing Notes
===========================
For the Casablanca release, ONAP continues to improve in multiple areas of Scalability, Security, Stability and Performance (S3P) metrics.

The Integration team ran the 72 hours stability testing (100% passing rate) and full resilience testing (96.9% passing rate) at ONAP OpenLabs. More details in :ref:`ONAP Maturity Testing Notes <integration-s3p>`

Licenses
========
ONAP Source Code is licensed under the `Apache Version 2 License <http://www.apache.org/licenses/LICENSE-2.0>`_.
ONAP Documentation is licensed under the `Creative Commons Attribution 4.0
International License <http://creativecommons.org/licenses/by/4.0>`_.

Known Issues and Limitations
============================
Known Issues and limitations are documented in each :ref:`project Release Notes <doc-releaserepos>`.

.. index:: Reporting Bugs

How to Report a Bug
===================
There are 2 ways to report a bug in ONAP.

 * In case you are familiar within ONAP, you can directly report a bug by
   creating a Jira issue at `ONAP Jira <https://jira.onap.org>`_.

 * If you don't know you are facing a bug or have a question, post your
   question into the `Ask question <https://wiki.onap.org/display/DW/questions/all>`_.
   You will need a Linux Foundation ID to login and post your question.
   Get a Linux Foundation Identity using this `quick procedure <https://wiki.onap.org/display/DW/Joining+the+ONAP+Technical+Community#JoiningtheONAPTechnicalCommunity-WhereDoIStart?>`_.

To properly report a bug in Jira, you may want to consider these `recommendations <https://wiki.onap.org/display/DW/Tracking+Issues+with+JIRA#TrackingIssueswithJIRA-RecommendationsforwrittingProperJIRAIssue>`_ to elaborate the issue you are facing.


.. Include files referenced by link in the toctree as hidden

.. toctree::
   :hidden:

   releaserepos.rst
   repolist.rst
