Skip to content

Commit 0704fe4

Browse files
feat: use event for information
Using the event reveals all the information required, no need to ask for the information from somewhere else.
1 parent cab507f commit 0704fe4

2 files changed

Lines changed: 29 additions & 17 deletions

File tree

src/charm.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from charms.certificate_transfer_interface.v1.certificate_transfer import (
1616
CertificateTransferRequires,
1717
)
18-
from charms.data_platform_libs.v0.s3 import S3Requirer
18+
from charms.data_platform_libs.v0.s3 import CredentialsChangedEvent, S3Requirer
1919
from ops.charm import CharmBase, CollectStatusEvent
2020
from ops.framework import StoredState
2121
from ops.charm import InstallEvent, RelationJoinedEvent, RelationDepartedEvent
@@ -365,13 +365,18 @@ def _update_charm_tracing_config(self):
365365
ca_cert=self._stored.ca_cert,
366366
)
367367

368-
def _on_s3_credentials_changed(self, _event):
368+
def _on_s3_credentials_changed(self, event: CredentialsChangedEvent):
369369
"""Handle new or updated S3 credentials."""
370370
if self.unit.is_leader():
371-
credentials = self._s3.get_s3_connection_info()
371+
credentials = {
372+
'access_key': event.access_key,
373+
'secret_key': event.secret_key,
374+
'endpoint': event.endpoint,
375+
}
372376
self._stored.s3_credentials = credentials
373377

374378
try:
379+
logger.info("applying new S3 credentials")
375380
self._control_socket.add_s3_credentials(credentials)
376381
self.unit.status = MaintenanceStatus("applying s3 credentials")
377382
except Exception as exc: # pragma: no cover - defensive
@@ -383,10 +388,10 @@ def _on_s3_credentials_gone(self, _event):
383388
if self.unit.is_leader():
384389
try:
385390
self._control_socket.remove_s3_credentials()
391+
self._stored.s3_credentials = dict()
386392
except Exception as exc: # pragma: no cover - defensive
387393
logger.error("failed to remove S3 credentials: %s", exc)
388394
self.unit.status = BlockedStatus("failed to remove s3 credentials")
389-
self._stored.s3_credentials = dict()
390395

391396
def metrics_username(relation: Relation) -> str:
392397
"""

tests/test_charm.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -501,16 +501,16 @@ def test_s3_relation_credentials_changed(self, mock_add_s3_credentials):
501501
},
502502
)
503503

504+
expected_credentials = {
505+
"access_key": "ak",
506+
"secret_key": "sk",
507+
"endpoint": "https://s3.example",
508+
}
504509
self.assertEqual(
505510
harness.charm._stored.s3_credentials,
506-
{
507-
"access-key": "ak",
508-
"secret-key": "sk",
509-
"bucket": "test-bucket",
510-
"endpoint": "https://s3.example",
511-
},
511+
expected_credentials,
512512
)
513-
mock_add_s3_credentials.assert_called_once_with(harness.charm._stored.s3_credentials)
513+
mock_add_s3_credentials.assert_called_once_with(expected_credentials)
514514
self.assertIsInstance(harness.charm.unit.status, MaintenanceStatus)
515515

516516
@patch(
@@ -532,7 +532,7 @@ def test_s3_relation_credentials_changed_failure_sets_blocked(self, _mock_add):
532532

533533
self.assertEqual(
534534
harness.charm._stored.s3_credentials,
535-
{"access-key": "ak", "secret-key": "sk", "bucket": "test-bucket"},
535+
{"access_key": "ak", "secret_key": "sk", "endpoint": None},
536536
)
537537
self.assertIsInstance(harness.charm.unit.status, BlockedStatus)
538538
self.assertIn(
@@ -570,7 +570,10 @@ def test_s3_relation_credentials_updated(self, mock_add_s3_credentials):
570570
"s3-integrator",
571571
{"access-key": "ak", "secret-key": "sk", "bucket": "test-bucket"},
572572
)
573-
self.assertEqual(harness.charm._stored.s3_credentials["access-key"], "ak")
573+
self.assertEqual(
574+
harness.charm._stored.s3_credentials,
575+
{"access_key": "ak", "secret_key": "sk", "endpoint": None},
576+
)
574577

575578
harness.update_relation_data(
576579
relation_id,
@@ -579,10 +582,10 @@ def test_s3_relation_credentials_updated(self, mock_add_s3_credentials):
579582
)
580583
self.assertEqual(
581584
harness.charm._stored.s3_credentials,
582-
{"access-key": "ak2", "secret-key": "sk2", "bucket": "test-bucket"},
585+
{"access_key": "ak2", "secret_key": "sk2", "endpoint": None},
583586
)
584587
mock_add_s3_credentials.assert_called_with(
585-
{"access-key": "ak2", "secret-key": "sk2", "bucket": "test-bucket"}
588+
{"access_key": "ak2", "secret_key": "sk2", "endpoint": None}
586589
)
587590
self.assertIsInstance(harness.charm.unit.status, MaintenanceStatus)
588591

@@ -612,7 +615,8 @@ def test_s3_relation_credentials_gone(self, *_):
612615
"s3-integrator",
613616
{"access-key": "ak", "secret-key": "sk"},
614617
)
615-
self.assertIn("access-key", harness.charm._stored.s3_credentials)
618+
expected_credentials = {"access_key": "ak", "secret_key": "sk", "endpoint": None}
619+
self.assertEqual(harness.charm._stored.s3_credentials, expected_credentials)
616620

617621
harness.remove_relation(relation_id)
618622
self.assertEqual(harness.charm._stored.s3_credentials, {})
@@ -654,7 +658,10 @@ def test_s3_relation_credentials_gone_failure_sets_blocked(self, _mock_remove):
654658

655659
harness.remove_relation(relation_id)
656660

657-
self.assertEqual(harness.charm._stored.s3_credentials, {})
661+
self.assertEqual(
662+
harness.charm._stored.s3_credentials,
663+
{"access_key": "ak", "secret_key": "sk", "endpoint": None},
664+
)
658665
self.assertIsInstance(harness.charm.unit.status, BlockedStatus)
659666
self.assertIn("failed to remove s3 credentials", harness.charm.unit.status.message)
660667

0 commit comments

Comments
 (0)