# Copyright 2021 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
##

name: prometheus
summary: OSM Prometheus
description: |
  A CAAS charm to deploy OSM's Prometheus.
series:
  - kubernetes
tags:
  - kubernetes
  - osm
  - prometheus
min-juju-version: 2.8.0
deployment:
  type: stateful
  service: cluster
resources:
  backup-image:
    type: oci-image
    description: Container image to run backup actions
    upstream-source: "ed1000/prometheus-backup:latest"
  image:
    type: oci-image
    description: OSM docker image for Prometheus
    upstream-source: "ubuntu/prometheus:latest"
provides:
  prometheus:
    interface: prometheus
storage:
  data:
    type: filesystem
    location: /prometheus
