# 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-ng-ui

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

display-name: OSM NG-UI

summary: OSM Next-generation User Interface (NG-UI)

description: |
  A Kubernetes operator that deploys the Next-generation User Interface of OSM.

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

containers:
  ng-ui:
    resource: ng-ui-image

# This file populates the Resources tab on Charmhub.

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

requires:
  ingress:
    interface: ingress
    limit: 1
  nbi:
    interface: nbi
