Skip to content

Commit

Permalink
Create Minio Interface Charm Library
Browse files Browse the repository at this point in the history
Add Minio Interface Charm Library which uses
Serialized Data Interface Library.
  • Loading branch information
Dominik Fleischmann committed Mar 1, 2021
1 parent 30da56a commit ee73393
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 8 deletions.
6 changes: 3 additions & 3 deletions config.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
options:
port:
type: string
default: '9000'
type: int
default: 9000
description: HTTP port
access-key:
type: string
default: minio
default: 'minio'
description: Access key
secret-key:
type: string
Expand Down
38 changes: 38 additions & 0 deletions lib/charms/minio/v0/minio_interface.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""
Minio Interface
This Interface requires the serialized-data-interface package
please add it to your requirements.txt
"""
from provide_interface import ProvideAppInterface
from require_interface import RequireAppInterface

# The unique Charmhub library identifier, never change it
LIBID = "7d0810fb78cf4afd81cc70118b27a127"

# Increment this major API version when introducing breaking changes
LIBAPI = 0

# Increment this PATCH version before using `charmcraft push-lib` or reset
# to 0 if you are raising the major API version
LIBPATCH = 2

# Serialized Data Schema for Minio Interface
MINIO_SCHEMA = """
service:
type: string
port:
type: number
access-key:
type: string
secret-key:
type: string
"""


class MinioProvide(ProvideAppInterface):
SCHEMA = MINIO_SCHEMA


class MinioRequire(RequireAppInterface):
SCHEMA = MINIO_SCHEMA
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
ops==1.1.0
git+https://github.com/juju-solutions/resource-oci-image@1964d748022b762b9dce6e8bb7bdf12835102c72
git+https://github.com/canonical/serialized-data-interface.git
21 changes: 16 additions & 5 deletions src/charm.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from ops.model import ActiveStatus, MaintenanceStatus

from oci_image import OCIImageResource, OCIImageResourceError
from charms.minio.v0.minio_interface import MinioProvide

log = logging.getLogger()

Expand All @@ -34,18 +35,28 @@ def gen_pass() -> str:
class MinioCharm(CharmBase):
def __init__(self, *args):
super().__init__(*args)
self.minio_interface = MinioProvide(self, "minio")
self.image = OCIImageResource(self, "oci-image")
self.framework.observe(self.on.install, self.set_pod_spec)
self.framework.observe(self.on.upgrade_charm, self.set_pod_spec)
self.framework.observe(self.on.config_changed, self.set_pod_spec)
self.framework.observe(self.on.minio_relation_joined, self.send_info)

def send_info(self, event):
secret_key = get_or_set("password", default=gen_pass)
event.relation.data[self.unit]["service"] = self.model.app.name
event.relation.data[self.unit]["port"] = self.model.config["port"]
event.relation.data[self.unit]["access-key"] = self.model.config["access-key"]
event.relation.data[self.unit]["secret-key"] = secret_key
secret_key = get_or_set(
"password",
configured=self.model.config["secret-key"],
default=gen_pass(),
)

self.minio_interface.update_relation_data(
{
"service": self.model.app.name,
"port": self.model.config["port"],
"access-key": self.model.config["access-key"],
"secret-key": secret_key,
}
)

def set_pod_spec(self, event):
if not self.model.unit.is_leader():
Expand Down

0 comments on commit ee73393

Please sign in to comment.