.. 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:`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 Frankfurt 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**              | Frankfurt                            |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release date**                     | 2020/06/15                           |
|                                      |                                      |
+--------------------------------------+--------------------------------------+

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

* Ingress deployment is getting more and more usable
* Use of dynamic Persistent Volume is available

**Bug fixes**

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

**Known Issues**

- `OOM-1237 <https://jira.onap.org/browse/OOM-1237>`_ Source Helm Charts from
  ONAP Repo. Having helm charts repo is not possible for Frankfurt release.
- `OOM-1720 <https://jira.onap.org/browse/OOM-1237>`_ galera container is
  outdated. containers used for mariadb are outdated and not supported anymore.
- `OOM-1817 <https://jira.onap.org/browse/OOM-1817>`_ Use of global.repository
  inconsistent across Helm Charts. it's then may be hard to retrieve some
  containers when deploying in constrained environment.
- `OOM-2075 <https://jira.onap.org/browse/OOM-2075>`_ Invalid MTU for Canal CNI
  interfaces
- `OOM-2227 <https://jira.onap.org/browse/OOM-2227>`_ Cassandra Backup Mechanism
  works only on "static PV" mode.
- `OOM-2230 <https://jira.onap.org/browse/OOM-2230>`_ Missing requests/limits
  for some PODS. This can lead to "memory bombing" so cautious monitoring of
  Kubernetes resources usage must be set up.
- `OOM-2279 <https://jira.onap.org/browse/OOM-2279>`_ OOM El Alto and master
  clamp mariadb resources doesn't match chart.
- `OOM-2285 <https://jira.onap.org/browse/OOM-2285>`_ deploy.sh does not work
  for mariadb-galera. deploy script doesn't behave well with "-" in the
  component name.
- `OOM-2369 <https://jira.onap.org/browse/OOM-2369>`_ DMAAP Helm install takes
  too long and often fails.
- `OOM-2418 <https://jira.onap.org/browse/OOM-2418>`_ Readiness-check 2.0.2 not
  working properly for stateful set.
- `OOM-2421 <https://jira.onap.org/browse/OOM-2421>`_ OOM NBI chart deployment
  error. In some case, NBI deployment fails.
- `OOM-2422 <https://jira.onap.org/browse/OOM-2422>`_ Portal App is unreachable
  when deploying without HTTPs


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
-----------

- `OOM-1237 <https://jira.onap.org/browse/OOM-1237>`_ Workaround is to generate
  them as explained in documentation.
- `OOM-1817 <https://jira.onap.org/browse/OOM-1817>`_ Workaround is to use
  offline installer if needed.
- `OOM-2227 <https://jira.onap.org/browse/OOM-2227>`_ Workaround is to stick to
  "static PV" (so, not using storage class) if backup is needed.
- `OOM-2285 <https://jira.onap.org/browse/OOM-2285>`_ Workaround is to use
  directly helm upgrade if needed.
- `OOM-2369 <https://jira.onap.org/browse/OOM-2369>`_ Workaround is to play
  postinstall jobs by hand.
- `OOM-2418 <https://jira.onap.org/browse/OOM-2418>`_ Workaround is to use
  version 2.2.2 in global part of override file if the new check is needed.
- `OOM-2421 <https://jira.onap.org/browse/OOM-2421>`_ Workaround is to
  undeploy/redeploy NBI.
- `OOM-2422 <https://jira.onap.org/browse/OOM-2421>`_ Workaround is to create
  first portal app service with service type Cluster IP then changing it to
  NodePort or LoadBalancer so all the port are available.

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

**Fixed Security Issues**

- In default deployment OOM (consul-server-ui) exposes HTTP port 30270 outside
  of cluster. [`OJSI-134 <https://jira.onap.org/browse/OJSI-134>`_]
- CVE-2019-12127 - OOM exposes unprotected API/UI on port 30270
  [`OJSI-202 <https://jira.onap.org/browse/OJSI-202>`_]

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
