Certificate Transfer Interface
- Canonical Telco
Channel | Revision | Published | Runs on |
---|---|---|---|
latest/edge | 115 | 20 Apr 2025 |
juju deploy certificate-transfer-interface --channel edge
Deploy universal operators easily with Juju, the Universal Operator Lifecycle Manager.
Platform:
charms.certificate_transfer_interface.v1.certificate_transfer
-
- Last updated 25 Mar 2025
- Revision Library version 1.5
Library for the certificate_transfer relation.
This library contains the Requires and Provides classes for handling the certificate-transfer interface.
Getting Started
From a charm directory, fetch the library using charmcraft
:
charmcraft fetch-lib charms.certificate_transfer_interface.v1.certificate_transfer
Provider charm
The provider charm is the charm providing public certificates to another charm that requires them.
Example:
from ops.charm import CharmBase, RelationJoinedEvent
from ops.main import main
from lib.charms.certificate_transfer_interface.v1.certificate_transfer import (
CertificateTransferProvides,
)
class DummyCertificateTransferProviderCharm(CharmBase):
def __init__(self, *args):
super().__init__(*args)
self.certificate_transfer = CertificateTransferProvides(self, "certificates")
self.framework.observe(
self.on.certificates_relation_joined, self._on_certificates_relation_joined
)
def _on_certificates_relation_joined(self, event: RelationJoinedEvent):
certificate = "my certificate"
self.certificate_transfer.add_certificates(certificate)
if __name__ == "__main__":
main(DummyCertificateTransferProviderCharm)
Requirer charm
The requirer charm is the charm requiring certificates from another charm that provides them.
Example:
import logging
from ops.charm import CharmBase
from ops.main import main
from lib.charms.certificate_transfer_interface.v1.certificate_transfer import (
CertificatesAvailableEvent,
CertificatesRemovedEvent,
CertificateTransferRequires,
)
class DummyCertificateTransferRequirerCharm(CharmBase):
def __init__(self, *args):
super().__init__(*args)
self.certificate_transfer = CertificateTransferRequires(self, "certificates")
self.framework.observe(
self.certificate_transfer.on.certificate_set_updated, self._on_certificates_available
)
self.framework.observe(
self.certificate_transfer.on.certificates_removed, self._on_certificates_removed
)
def _on_certificates_available(self, event: CertificatesAvailableEvent):
logging.info(event.certificates)
logging.info(event.relation_id)
def _on_certificates_removed(self, event: CertificatesRemovedEvent):
logging.info(event.relation_id)
if __name__ == "__main__":
main(DummyCertificateTransferRequirerCharm)
You can integrate both charms by running:
juju integrate <certificate_transfer provider charm> <certificate_transfer requirer charm>
Index
class TLSCertificatesError
Description
Base class for custom errors raised by this library. None
class DataValidationError
Description
Raised when data validation fails. None
class DatabagModel
Description
Base databag model. None
Methods
DatabagModel. load( cls , databag: MutableMapping )
Description
Load this model from a Juju databag. None
DatabagModel. dump( self , databag , clear: bool )
Write the contents of this model to Juju databag.
Arguments
The databag to write to.
Whether to clear the databag before writing.
Returns
The databag.
class ProviderApplicationData
Description
Provider App databag model. None
class RequirerApplicationData
Description
Requirer App databag model. None
class CertificateTransferProvides
Description
Certificate Transfer provider class to be instantiated by charms sending certificates. None
Methods
CertificateTransferProvides. __init__( self , charm: CharmBase , relationship_name: str )
CertificateTransferProvides. add_certificates( self , certificates , relation_id )
Add certificates from a set to relation data.
Arguments
A set of certificate strings in PEM format
Juju relation ID
Returns
None
Description
Adds certificate to all relations if relation_id is not provided.
CertificateTransferProvides. remove_all_certificates( self , relation_id )
Remove all certificates from relation data.
Arguments
Relation ID
Returns
None
Description
Removes all certificates from all relations if relation_id not given
CertificateTransferProvides. remove_certificate( self , certificate: str , relation_id )
Remove a given certificate from relation data.
Arguments
Certificate in PEM format that's in the list
Relation ID
Returns
None
Description
Removes certificate from all relations if relation_id not given
class CertificatesAvailableEvent
Description
Charm Event triggered when the set of provided certificates is updated. None
Methods
CertificatesAvailableEvent. __init__( self , handle: Handle , certificates , relation_id: int )
CertificatesAvailableEvent. snapshot( self )
Description
Return snapshot. None
CertificatesAvailableEvent. restore( self , snapshot: dict )
Description
Restores snapshot. None
class CertificatesRemovedEvent
Description
Charm Event triggered when the set of provided certificates is removed. None
Methods
CertificatesRemovedEvent. __init__( self , handle: Handle , relation_id: int )
CertificatesRemovedEvent. snapshot( self )
Description
Return snapshot. None
CertificatesRemovedEvent. restore( self , snapshot: dict )
Description
Restores snapshot. None
class CertificateTransferRequirerCharmEvents
Description
List of events that the Certificate Transfer requirer charm can leverage. None
class CertificateTransferRequires
Description
Certificate transfer requirer class to be instantiated by charms expecting certificates. None
Methods
CertificateTransferRequires. __init__( self , charm: CharmBase , relationship_name: str )
Observe events related to the relation.
Arguments
Charm object
Juju relation name
CertificateTransferRequires. get_all_certificates( self , relation_id )
Get transferred certificates.
Arguments
The id of the relation to get the certificates from.
Description
If no relation id is given, certificates from all relations will be provided in a concatenated list.
CertificateTransferRequires. is_ready( self , relation: Relation )
Description
Check if the relation is ready by checking that it has valid relation data. None