/charm-relation-interfaces

Opinionated and standardized interface specifications for charmed operator relations

Primary LanguagePythonApache License 2.0Apache-2.0

Charm Relation Interfaces

A catalogue of opinionated and standardized interface specifications for charmed operator relations.

Mattermost badge

Purpose

The purpose of the repository is to outline the behavior and requirements for key interface names, ensuring that charms claiming to implement a certain interface actually are capable of being integrated with each other.

Contributing

To contribute a new interface specification, open a pull request containing:

  • a new directory: /interfaces/{your-interface-name}. In it, there should be:
    • a README.md explaining the purpose of the interface and the protocol
    • a schema.py file containing pydantic models that specify the app and unit databag model for either side of the interface.
    • charms.yaml file consisting of a list of any providers and requirers known to adhere to the specification.
    • a interface_tests directory in which you can put python files containing interface tests. Read more about interface tests here
  • under docs/, the json schemas generated from the pydantic schemas. You can use command tox -e build-json-schemas to generate them automatically. Do not edit those files manually.
  • in this repo's root README.md, add the interface to the table, if applicable.

To quickly get started, see the template interface for a template of what to include and how it should be structured.

Interfaces

Category Interface Status
Data mysql_client Status: Draft
postgresql_client Status: Draft
mongodb_client Status: Draft
kafka_client Status: Draft
opensearch_client Status: Draft
database_backup Status: Draft
Identity hydra_endpoints Status: Draft
oauth Status: Draft
openfga Status: Live
saml Status: Live
Observability grafana_auth Status: Draft
prometheus_remote_write Status: Live
prometheus_scrape Status: Live
tracing Status: Draft
Networking ingress/v1 Status: Live
ingress/v2 Status: Live
ingress_per_unit Status: Live
nginx_route Status: Draft
ip_router Status: Draft
Security certificate_transfer Status: Draft
tls_certificates/v0 Status: Live
tls_certificates/v1 Status: Draft
vault-kv Status: Draft
Metadata k8s-service Status: Draft
Storage s3 Status: Draft

Project-internal Interfaces

Charmed Kubeflow

Category Interface Status
Metadata k8s-service Status: Draft
Metadata kubeflow-dashboard-sidebar Status: Live

Identity

Category Interface Status
Identity hydra_endpoints Status: Draft
kratos_external_idp Status: Draft
kratos_endpoints Status: Draft
login_ui_endpoints Status: Draft

Observability

Category Interface Status
Observability cos_agent Status: Draft

Telco

Category Interface Status
Charmed 5G fiveg_gnb_identity Status: Draft
fiveg_nrf Status: Draft
fiveg_n2 Status: Draft
fiveg_n3 Status: Draft
fiveg_n4 Status: Draft
sdcore_management Status: Draft

For a more detailed explanation of statuses and how they should be used, see the legend.

Relation interface testers

In order to automatically validate whether a charm satisfies a given relation interface, the relation interface maintainer(s) need to write one or more relation interface tests. A relation interface test is a scenario-based test case which checks that, given an intitial context, when a relation event is triggered, the charm will do what the interface specifies. For example, most interface testers will check that, on relation changed, the charm will write a certain value into its (app/unit) databag and that that value matches a certain (Pydantic) schema.

See the tester documentation for more.