4040from typing import List , Optional , Union , cast
4141
4242try :
43- from charms .tls_certificates_interface .v2 .tls_certificates import ( # type: ignore
43+ from charms .tls_certificates_interface .v3 .tls_certificates import ( # type: ignore
4444 AllCertificatesInvalidatedEvent ,
4545 CertificateAvailableEvent ,
4646 CertificateExpiringEvent ,
4747 CertificateInvalidatedEvent ,
48- TLSCertificatesRequiresV2 ,
48+ TLSCertificatesRequiresV3 ,
4949 generate_csr ,
5050 generate_private_key ,
5151 )
5252except ImportError as e :
5353 raise ImportError (
54- "failed to import charms.tls_certificates_interface.v2 .tls_certificates; "
54+ "failed to import charms.tls_certificates_interface.v3 .tls_certificates; "
5555 "Either the library itself is missing (please get it through charmcraft fetch-lib) "
5656 "or one of its dependencies is unmet."
5757 ) from e
6767
6868LIBID = "b5cd5cd580f3428fa5f59a8876dcbe6a"
6969LIBAPI = 0
70- LIBPATCH = 9
70+ LIBPATCH = 10
7171
7272
7373def is_ip_address (value : str ) -> bool :
@@ -132,7 +132,7 @@ def __init__(
132132 self .peer_relation_name = peer_relation_name
133133 self .certificates_relation_name = certificates_relation_name
134134
135- self .certificates = TLSCertificatesRequiresV2 (self .charm , self .certificates_relation_name )
135+ self .certificates = TLSCertificatesRequiresV3 (self .charm , self .certificates_relation_name )
136136
137137 self .framework .observe (
138138 self .charm .on .config_changed ,
@@ -282,7 +282,7 @@ def _generate_csr(
282282 if clear_cert :
283283 self ._ca_cert = ""
284284 self ._server_cert = ""
285- self ._chain = []
285+ self ._chain = ""
286286
287287 def _on_certificate_available (self , event : CertificateAvailableEvent ) -> None :
288288 """Get the certificate from the event and store it in a peer relation.
@@ -304,7 +304,7 @@ def _on_certificate_available(self, event: CertificateAvailableEvent) -> None:
304304 if event_csr == self ._csr :
305305 self ._ca_cert = event .ca
306306 self ._server_cert = event .certificate
307- self ._chain = event .chain
307+ self ._chain = event .chain_as_pem ()
308308 self .on .cert_changed .emit () # pyright: ignore
309309
310310 @property
@@ -375,21 +375,21 @@ def _server_cert(self, value: str):
375375 rel .data [self .charm .unit ].update ({"certificate" : value })
376376
377377 @property
378- def _chain (self ) -> List [ str ] :
378+ def _chain (self ) -> str :
379379 if self ._peer_relation :
380- if chain := self ._peer_relation .data [self .charm .unit ].get ("chain" , [] ):
380+ if chain := self ._peer_relation .data [self .charm .unit ].get ("chain" , "" ):
381381 return json .loads (cast (str , chain ))
382- return []
382+ return ""
383383
384384 @_chain .setter
385- def _chain (self , value : List [ str ] ):
385+ def _chain (self , value : str ):
386386 # Caller must guard. We want the setter to fail loudly. Failure must have a side effect.
387387 rel = self ._peer_relation
388388 assert rel is not None # For type checker
389389 rel .data [self .charm .unit ].update ({"chain" : json .dumps (value )})
390390
391391 @property
392- def chain (self ) -> List [ str ] :
392+ def chain (self ) -> str :
393393 """Return the ca chain."""
394394 return self ._chain
395395
0 commit comments