From 56237e076887af76c7cd2abdbb9b82017e3d2fd1 Mon Sep 17 00:00:00 2001 From: Daniela Plascencia Date: Tue, 8 Oct 2024 14:55:26 +0200 Subject: [PATCH] refactor, chore: move TAGGED_IMAGE away from charm code, add tools/get-images.sh (#51) * refactor: move TAGGED_IMAGE from charm code to config.yaml This commit removes the TAGGED_IMAGE variable from the charm code and places the image to be used as a configuration option for the charm. * chore: add tools/get-images.sh to gather images from this charm This commit adds the support script for gathering the images this charm uses. Part of canonical/bundle-kubeflow#1084 --- config.yaml | 5 +++++ src/charm.py | 3 +-- .../test_operator.cpython-38-pytest-7.4.0.pyc | Bin 0 -> 8325 bytes tests/unit/test_operator.py | 4 ++-- tools/get-images.sh | 12 ++++++++++++ 5 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 tests/unit/__pycache__/test_operator.cpython-38-pytest-7.4.0.pyc create mode 100644 tools/get-images.sh diff --git a/config.yaml b/config.yaml index 788f857..b683bb4 100644 --- a/config.yaml +++ b/config.yaml @@ -1,4 +1,9 @@ options: + namespace-node-affinity-image: + type: string + default: 'charmedkubeflow/namespace-node-affinity:2.2.0' + description: | + Container image to be used by the namespace-node-affinity workload. settings_yaml: type: string default: '' diff --git a/src/charm.py b/src/charm.py index cca1f8c..802ce4d 100755 --- a/src/charm.py +++ b/src/charm.py @@ -28,7 +28,6 @@ from certs import gen_certs K8S_RESOURCE_FILES = ["src/templates/webhook_resources.yaml"] -TAGGED_IMAGE = "charmedkubeflow/namespace-node-affinity:2.2.0" class NamespaceNodeAffinityOperator(CharmBase): @@ -146,7 +145,7 @@ def _context(self): return { "app_name": self._name, "namespace": self._namespace, - "image": TAGGED_IMAGE, + "image": self.config["namespace-node-affinity-image"], "ca_bundle": b64encode(self._cert_ca.encode("ascii")).decode("utf-8"), "cert": b64encode(self._cert.encode("ascii")).decode("utf-8"), "cert_key": b64encode(self._cert_key.encode("ascii")).decode("utf-8"), diff --git a/tests/unit/__pycache__/test_operator.cpython-38-pytest-7.4.0.pyc b/tests/unit/__pycache__/test_operator.cpython-38-pytest-7.4.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37d404dd50c8fcddf4de287255b522ad55b51699 GIT binary patch literal 8325 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 T1#s7D8NFtxwS4t2l;{2r)^*r^ literal 0 HcmV?d00001 diff --git a/tests/unit/test_operator.py b/tests/unit/test_operator.py index 3fc275b..7f0e540 100644 --- a/tests/unit/test_operator.py +++ b/tests/unit/test_operator.py @@ -15,7 +15,7 @@ from ops.model import WaitingStatus from ops.testing import Harness -from charm import K8S_RESOURCE_FILES, TAGGED_IMAGE, NamespaceNodeAffinityOperator +from charm import K8S_RESOURCE_FILES, NamespaceNodeAffinityOperator # Used for test_get_settings_yaml SETTINGS_YAML = """ @@ -53,7 +53,7 @@ def test_not_leader(self, harness: Harness): def test_context(self, harness: Harness): """Test context property.""" model_name = "test-model" - image = TAGGED_IMAGE + image = harness.model.config["namespace-node-affinity-image"] ca_bundle = "bundle123" cert = "cert123" cert_key = "cert_key123" diff --git a/tools/get-images.sh b/tools/get-images.sh new file mode 100644 index 0000000..de990fe --- /dev/null +++ b/tools/get-images.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# +# This script returns list of container images that are managed by this charm and/or its workload +# +# dynamic list + +set -xe + +IMAGE_LIST=() +IMAGE_LIST+=($(find -type f -name config.yaml -exec yq '.options | with_entries(select(.key | test("-image$"))) | .[].default' {} \; | tr -d '"')) +printf "%s\n" "${IMAGE_LIST[@]}" +