# Copyright 2022 Canonical Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact: legal@canonical.com
#
# To get in touch with the maintainers, please contact:
# osm-charmers@lists.launchpad.net
#
#
# This file populates the Overview on Charmhub.
# See https://juju.is/docs/some-url-to-be-determined/ for a checklist and guidance.

name: osm-nbi

# The following metadata are human-readable and will be published prominently on Charmhub.

display-name: OSM NBI

summary: OSM Northbound Interface (NBI)

description: |
  A Kubernetes operator that deploys the Northbound Interface of OSM.

  OSM provides a unified northbound interface (NBI), based on NFV SOL005, which enables
  the full operation of system and the Network Services and Network Slices under its control.

  In fact, OSM’s NBI offers the service of managing the lifecycle of Network Services (NS)
  and Network Slices Instances (NSI), providing as a service all the necessary abstractions
  to allow the complete control, operation and supervision of the NS/NSI lifecycle by client
  systems, avoiding the exposure of unnecessary details of its constituent elements.

  This charm doesn't make sense on its own.
  See more:
    - https://charmhub.io/osm

containers:
  nbi:
    resource: nbi-image

# This file populates the Resources tab on Charmhub.

resources:
  nbi-image:
    type: oci-image
    description: OCI image for nbi
    upstream-source: opensourcemano/nbi

requires:
  kafka:
    interface: kafka
    limit: 1
  mongodb:
    interface: mongodb_client
    limit: 1
  keystone:
    interface: keystone
    limit: 1
  prometheus:
    interface: prometheus
    limit: 1
  ingress:
    interface: ingress
    limit: 1

provides:
  nbi:
    interface: nbi
