diff --git a/src/coldfront_plugin_cloud/openshift.py b/src/coldfront_plugin_cloud/openshift.py index 315846d..a22896a 100644 --- a/src/coldfront_plugin_cloud/openshift.py +++ b/src/coldfront_plugin_cloud/openshift.py @@ -304,7 +304,8 @@ def get_quota(self, project_id): cloud_quotas = self._openshift_get_resourcequotas(project_id) combined_quota = {} for cloud_quota in cloud_quotas: - combined_quota.update(cloud_quota["spec"]["hard"]) + if quota_spec := cloud_quota["spec"].get("hard"): + combined_quota.update(quota_spec) return combined_quota @@ -606,7 +607,10 @@ def _wait_for_quota_to_settle(self, project_id, resource_quota): resourcequota objects. """ - if "resourcequotas" in resource_quota["spec"]["hard"]: + if ( + resource_quota["spec"].get("hard") + and "resourcequotas" in resource_quota["spec"]["hard"] + ): logger.info("waiting for resourcequota quota") api = self.get_resource_api(API_CORE, "ResourceQuota") diff --git a/src/coldfront_plugin_cloud/tests/functional/openshift/test_allocation.py b/src/coldfront_plugin_cloud/tests/functional/openshift/test_allocation.py index 1cd3988..76229e0 100644 --- a/src/coldfront_plugin_cloud/tests/functional/openshift/test_allocation.py +++ b/src/coldfront_plugin_cloud/tests/functional/openshift/test_allocation.py @@ -566,3 +566,39 @@ def test_limitrange_defaults_update(self): ), [], ) + + def test_preexisting_project(self): + """Test allocation activation and validation when the project already exists on OpenShift.""" + user = self.new_user() + project = self.new_project(pi=user) + allocation = self.new_allocation(project, self.resource, 1) + self.new_allocation_user(allocation, user) + allocator = openshift.OpenShiftResourceAllocator(self.resource, allocation) + + project_id = allocator.create_project(project.title).id + + self.assertEqual(allocator.get_quota(project_id), {}) + self.assertEqual(allocator.get_users(project_id), set()) + + utils.set_attribute_on_allocation( + allocation, attributes.ALLOCATION_PROJECT_ID, project_id + ) + utils.set_attribute_on_allocation( + allocation, attributes.ALLOCATION_PROJECT_NAME, project_id + ) + tasks.activate_allocation(allocation.pk) + call_command("validate_allocations", apply=True) + + self.assertEqual( + allocator.get_quota(project_id), + { + "limits.cpu": "1", + "limits.memory": "4Gi", + "limits.ephemeral-storage": "5Gi", + "ocs-external-storagecluster-ceph-rbd.storageclass.storage.k8s.io/requests.storage": "20Gi", + "ibm-spectrum-scale-fileset.storageclass.storage.k8s.io/requests.storage": "0", + "requests.nvidia.com/gpu": "0", + "persistentvolumeclaims": "2", + }, + ) + assert set([user.username]) == allocator.get_users(project_id)