Metadata-Version: 2.1
Name: csp-billing-adapter-k8s-rancher-saas
Version: 1.1.0
Summary: TBD
Home-page: https://gitlab.suse.de/public-cloud/csp-billing-adapter-k8s-rancher-saas/
Author: SUSE
Author-email: public-cloud-dev@susecloud.net
License: Apache-2.0
Keywords: csp-billing-adapter-k8s-rancher-saas csp_billing_adapter_k8s_rancher_saas
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Topic :: System :: Monitoring
Classifier: License :: OSI Approved :: Apache License 2.0
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: csp-billing-adapter @ git+https://github.com/suse-enceladus/csp-billing-adapter@main
Requires-Dist: kubernetes
Requires-Dist: pluggy
Provides-Extra: dev
Requires-Dist: bumpversion ; extra == 'dev'
Requires-Dist: coverage ; extra == 'dev'
Requires-Dist: flake8 ; extra == 'dev'
Requires-Dist: pytest-cov ; extra == 'dev'
Provides-Extra: test
Requires-Dist: coverage ; extra == 'test'
Requires-Dist: flake8 ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'

# CSP Billing Adapter Kubernetes Rancher SaaS Plugin

This is a plugin for
[csp-billing-adapter](https://github.com/SUSE-Enceladus/csp-billing-adapter)
that provides storage hook implementations. It also implements the
get_usage_data hook for the adapter. The namespace is configured based on
the **ADAPTER_NAMESPACE** environment variable which is expected to be set
in the container.

The following function hooks are implemented:

## Setup

### Setup adapter

The `setup_adapter` function authenticates the current session. It
tries both the in cluster config and Kube config. If both fail an
exception is raised.

## Cache

### save_cache

Stores the adapter cache in an opaque secret named *csp-adapter-cache* in
the namespace determined by the above environment varaible. If the cache
already exists no save is performed. In this case it's expected to use the
`update_cache` function instead.

### update_cache

Updates or replaces the adapter cache in the *csp-adapter-cache* secret
using the configured namespace.

### get_cache

Retrieves the cache from the secret named *csp-adapter-cache*. If the cache
is not found `None` is returned.

## CSP Config

### save_csp_config

Stores the adapter csp config in configMap named *csp-config* in the
configured namespace. If *csp-config* already exists nothing is saved.
It is expected to use `update_csp_config` to make updates to an existing
*csp-config*.

### update_csp_config

Updates or replace the configMap named *csp-config* in the configured
namespace.

### get_csp_config

Retrieves the csp config from the configMap named *csp-config*. If the
csp config is not found `None` is returned.

## Usage

### get_usage_data

Retrieves usage data from the configured custom resource definition (CRD).
The location, name and namespace of the CR are configured using environment
variables:

**ADAPTER_NAMESPACE**:The namespace where the adapter is deployed.

**USAGE_CRD_PLURAL**: The plural name of the K8s CRD.

**USAGE_RESOURCE**: The name of the CRD object that contains the usage data.

**USAGE_API_VERSION**: The API version of the usage CRD to use. Example "v1.

**USAGE_API_GROUP**: The API group where the CRD exists.

The CRD is expected to have a number of fields. *reporting_time* is required
and is expected to be a RFC 3339 compliant in UTC with the following format:
YYYY-MM-DDTHH:MM:SS.FFFFFF+00:00. *base_product* is optional and if it's
provided it is a string containing information about the product name and
version. At least one usage field but there can be more than one.

## Archive

### save_metering_archive

Stores the adapter metering archive in a configMap named *metering-archive*
in the configured namespace. If *metering-archive* already exists it is
updated with the latest data.

### get_metering_archive

Retrieves the metering archive from the configMap named *metering-archive*.
If the metering archive is not found an empty list is returned.

### get_archive_location

Returns the location of the metering archive. This is the config map name
*metering-archive*.
