From ac835d7853e8690541719be9ecf26fa6b5fa0a4d Mon Sep 17 00:00:00 2001 From: Justin Riley Date: Fri, 22 Sep 2023 06:05:47 -0400 Subject: [PATCH 1/2] moc_openshift: add labels kwarg to create_project This allows for setting namespace/project lables in addition to annotations. --- acct_mgt/moc_openshift.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/acct_mgt/moc_openshift.py b/acct_mgt/moc_openshift.py index 9edc331..ab85b21 100644 --- a/acct_mgt/moc_openshift.py +++ b/acct_mgt/moc_openshift.py @@ -168,7 +168,8 @@ def project_exists(self, project_name): return False return True - def create_project(self, project_name, display_name, user_name, annotations=None): + def create_project(self, project_name, display_name, user_name, + annotations=None, labels=None): if annotations is None: annotations = {} else: @@ -182,9 +183,17 @@ def create_project(self, project_name, display_name, user_name, annotations=None "openshift.io/requester": user_name, } ) - labels = { + + _nerc_project_label = { "nerc.mghpcc.org/project": "true", } + + if labels is None: + labels = _nerc_project_label + else: + labels = dict(labels) + labels.update(_nerc_project_label) + payload = { "metadata": { "name": project_name, From 97f23263f9a861005cb7b64e0c91c8d382761393 Mon Sep 17 00:00:00 2001 From: Justin Riley Date: Fri, 22 Sep 2023 06:06:46 -0400 Subject: [PATCH 2/2] create_app: support for setting project/ns labels This is useful, for example, for enabling RHODS support for a given namespace/project, e.g.: opendatahub.io/dashboard: "true" --- acct_mgt/app.py | 7 ++++++- acct_mgt/moc_openshift.py | 8 ++++++-- tests/unit/app/test_app_project.py | 22 +++++++++++++++++++--- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/acct_mgt/app.py b/acct_mgt/app.py index e6c812c..83e6e0f 100644 --- a/acct_mgt/app.py +++ b/acct_mgt/app.py @@ -147,9 +147,14 @@ def create_moc_project(project_name, user_name=None): payload = request.get_json(silent=True) or {} display_name = payload.pop("displayName", project_name) annotations = payload.pop("annotations", {}) + labels = payload.pop("labels", {}) shift.create_project( - project_name, display_name, user_name, annotations=annotations + project_name, + display_name, + user_name, + annotations=annotations, + labels=labels, ) return {"msg": f"project created ({project_name})"} diff --git a/acct_mgt/moc_openshift.py b/acct_mgt/moc_openshift.py index ab85b21..79c8dff 100644 --- a/acct_mgt/moc_openshift.py +++ b/acct_mgt/moc_openshift.py @@ -168,8 +168,10 @@ def project_exists(self, project_name): return False return True - def create_project(self, project_name, display_name, user_name, - annotations=None, labels=None): + # pylint: disable-msg=too-many-arguments + def create_project( + self, project_name, display_name, user_name, annotations=None, labels=None + ): if annotations is None: annotations = {} else: @@ -205,6 +207,8 @@ def create_project(self, project_name, display_name, user_name, self.create_limits(project_name) return res + # pylint: enable-msg=too-many-arguments + def delete_project(self, project_name): api = self.get_resource_api(API_PROJECT, "Project") return api.delete(name=project_name).to_dict() diff --git a/tests/unit/app/test_app_project.py b/tests/unit/app/test_app_project.py index 9aff937..5529d06 100644 --- a/tests/unit/app/test_app_project.py +++ b/tests/unit/app/test_app_project.py @@ -33,7 +33,7 @@ def test_create_moc_project_no_display_name(moc, client): res = client.put("/projects/test-project") assert res.status_code == 200 moc.create_project.assert_called_with( - "test-project", "test-project", None, annotations={} + "test-project", "test-project", None, annotations={}, labels={} ) @@ -48,7 +48,7 @@ def test_create_moc_project_with_display_name(moc, client): ) assert res.status_code == 200 moc.create_project.assert_called_with( - "test-project", "Test Project", None, annotations={} + "test-project", "Test Project", None, annotations={}, labels={} ) @@ -64,7 +64,23 @@ def test_create_moc_project_with_annotations(moc, client): ) assert res.status_code == 200 moc.create_project.assert_called_with( - "test-project", "test-project", None, annotations=annotations + "test-project", "test-project", None, annotations=annotations, labels={} + ) + + +def test_create_moc_project_with_labels(moc, client): + moc.cnvt_project_name.return_value = "test-project" + moc.project_exists.return_value = False + moc.create_project.return_value = {} + labels = {"opendatahub.io/dashboard": True} + res = client.put( + "/projects/test-project", + data=json.dumps({"labels": labels}), + content_type="application/json", + ) + assert res.status_code == 200 + moc.create_project.assert_called_with( + "test-project", "test-project", None, annotations={}, labels=labels )