.. This work is licensed under a Creative Commons Attribution 4.0
   International License.
.. http://creativecommons.org/licenses/by/4.0
.. (c) ONAP Project and its contributors
.. _release_notes:

*************************************
ONAP Operations Manager Release Notes
*************************************

Previous Release Notes
======================

- :ref:`Guilin <release_notes_guilin>`
- :ref:`Frankfurt <release_notes_frankfurt>`
- :ref:`El Alto <release_notes_elalto>`
- :ref:`Dublin <release_notes_dublin>`
- :ref:`Casablanca <release_notes_casablanca>`
- :ref:`Beijing <release_notes_beijing>`
- :ref:`Amsterdam <release_notes_amsterdam>`

Abstract
========

This document provides the release notes for the Honolulu release.

Summary
=======

The focus of this release is to strengthen the foundation of OOM installer.

Release Data
============

+--------------------------------------+--------------------------------------+
| **Project**                          | OOM                                  |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Docker images**                    | N/A                                  |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release designation**              | Honolulu                             |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release date**                     | 2021/04/29                           |
|                                      |                                      |
+--------------------------------------+--------------------------------------+

New features
------------

* Kubernetes support for version up to 1.20
* Helm support for version up to 3.5
* Limits are set for most of the components
* Portal-Cassandra image updated to Bitnami, supporting IPv4/IPv6 Dual Stack
* CMPv2 external issuer implemented which extends Cert-Manager with ability  to
  enroll X.509 certificates from CMPv2 servers
* New version for mariadb galera using Bitnami image, supporting IPv4/IPv6 Dual
  Stack
* Bump version of common PostgreSQL and ElasticSearch
* Move to automatic certificates retrieval for 80% of the components
* Consistent retrieval of docker images, with ability to configure proxy for
  the 4 repositories used by ONAP

**Bug fixes**

A list of issues resolved in this release can be found here:
https://jira.onap.org/projects/OOM/versions/11073

major issues solved:

* Better handling of persistence on PostgreSQL
* Better Ingress templating
* Better Service templating

**Known Issues**

- `OOM-2554 <https://jira.onap.org/browse/OOM-2554>`_ Common pods have java 8
- `OOM-2435 <https://jira.onap.org/browse/OOM-2435>`_ SDNC karaf shell:
  log:list: Error executing command: Unrecognized configuration
- `OOM-2629 <https://jira.onap.org/browse/OOM-2629>`_ NetBox demo entry setup
  not complete
- `OOM-2706 <https://jira.onap.org/browse/OOM-2706>`_ CDS Blueprint Processor
  does not work with local DB
- `OOM-2713 <https://jira.onap.org/browse/OOM-2713>`_ Problem on onboarding
  custom cert to SDNC ONAP during deployment
- `OOM-2698 <https://jira.onap.org/browse/OOM-2698>`_ SO helm override fails in
  for value with multi-level replacement
- `OOM-2697 <https://jira.onap.org/browse/OOM-2697>`_ SO with local MariaDB
  deployment fails
- `OOM-2538 <https://jira.onap.org/browse/OOM-2538>`_ strange error with
  CertInitializer template
- `OOM-2547 <https://jira.onap.org/browse/OOM-2547>`_ Health Check failures
  seen after bringing down/up control plane & worker node VM instances on which
  ONAP hosted
- `OOM-2699 <https://jira.onap.org/browse/OOM-2699>`_ SO so-mariadb
  readinessCheck fails for local MariaDB instance
- `OOM-2705 <https://jira.onap.org/browse/OOM-2705>`_ SDNC DB installation fails
  on local MariaDB instance
- `OOM-2603 <https://jira.onap.org/browse/OOM-2603>`_ [SDNC] allign password for
  scaleoutUser/restconfUser/odlUser

Deliverables
------------

Software Deliverables
~~~~~~~~~~~~~~~~~~~~~

OOM provides `Helm charts <https://git.onap.org/oom/>`_ that needs to be
"compiled" into Helm package. see step 6 in
:doc:`quickstart guide <oom_quickstart_guide>`.

Documentation Deliverables
~~~~~~~~~~~~~~~~~~~~~~~~~~

- :doc:`Project Description <oom_project_description>`
- :doc:`Cloud Setup Guide <oom_cloud_setup_guide>`
- :doc:`Quick Start Guide <oom_quickstart_guide>`
- :doc:`Setup Ingress Controller <oom_setup_ingress_controller>`
- :doc:`Developer Guide <oom_developer_guide>`
- :doc:`Hardcoded Certificates <oom_hardcoded_certificates>`

Known Limitations, Issues and Workarounds
=========================================

Known Vulnerabilities
---------------------

- Hard coded password used for all OOM deployments
  [`OJSI-188 <https://jira.onap.org/browse/OJSI-188>`_]
- :doc:`Hard coded certificates <oom_hardcoded_certificates>` in Helm packages

Workarounds
-----------

- `<https://github.com/bitnami/bitnami-docker-mariadb-galera/issues/35>`_
  Workaround is to generate a password with "short" strenght or pregenerate
  passwords without single quote in it. Default deployment is using "short"
  password generation for mariadb.

Security Notes
--------------

**Fixed Security Issues**

References
==========

For more information on the ONAP Frankfurt release, please see:

#. `ONAP Home Page`_
#. `ONAP Documentation`_
#. `ONAP Release Downloads`_
#. `ONAP Wiki Page`_


.. _`ONAP Home Page`: https://www.onap.org
.. _`ONAP Wiki Page`: https://wiki.onap.org
.. _`ONAP Documentation`: https://docs.onap.org
.. _`ONAP Release Downloads`: https://git.onap.org
