diff --git a/cloud-info/cloud_info_catchall/share_discovery.py b/cloud-info/cloud_info_catchall/share_discovery.py index a5ba7d21..3bd5b59e 100644 --- a/cloud-info/cloud_info_catchall/share_discovery.py +++ b/cloud-info/cloud_info_catchall/share_discovery.py @@ -18,6 +18,21 @@ def __init__(self, config, secret): def build_share(self, project, access_token): return {"auth": {"project_id": project["id"]}} + def get_project_vo(self, project): + if not project.get("enabled", False): + logging.warning( + f"Discarding project {project['name']} as it is not enabled" + ) + return None + vo = project.get("egi.VO", None) + if not vo: + vo = project.get("VO", None) + if not vo: + logging.warning( + f"Discarding project {project['name']} as it does not have VO property" + ) + return vo + def get_token_shares(self): access_token = self.get_token() # rely on fedcloudclient for getting token @@ -32,14 +47,8 @@ def get_token_shares(self): return shares projects = fedcli.get_projects_from_single_site(self.auth_url, token) for p in projects: - vo = p.get("VO", None) + vo = self.get_project_vo(p) if not vo: - logging.warning( - "Discarding project %s as it does not have VO property", p["name"] - ) - continue - if not p.get("enabled", False): - logging.warning("Discarding project %s as it is not enabled", p["name"]) continue shares[vo] = self.build_share(p, access_token) self.config_shares(shares, access_token) diff --git a/cloud-info/cloud_info_catchall/test_share_discovery.py b/cloud-info/cloud_info_catchall/test_share_discovery.py index 3861d417..64cec439 100644 --- a/cloud-info/cloud_info_catchall/test_share_discovery.py +++ b/cloud-info/cloud_info_catchall/test_share_discovery.py @@ -25,6 +25,38 @@ class ShareDiscoveryTest(unittest.TestCase): def setUp(self): self.discoverer = self.DISCOVERER_CLASS(self.CONFIG, self.SECRET) + def test_get_project_vo_disabled(self): + p = { + "enabled": False, + "name": "foo.eu", + "VO": "foo", + } + self.assertEqual(self.discoverer.get_project_vo(p), None) + + def test_get_project_vo_egi_property(self): + p = { + "enabled": True, + "name": "foo.eu", + "VO": "bar", + "egi.VO": "foo", + } + self.assertEqual(self.discoverer.get_project_vo(p), "foo") + + def test_get_project_vo_property(self): + p = { + "enabled": True, + "name": "foo.eu", + "VO": "bar", + } + self.assertEqual(self.discoverer.get_project_vo(p), "bar") + + def test_get_project_no_vo_property(self): + p = { + "enabled": True, + "name": "foo.eu", + } + self.assertEqual(self.discoverer.get_project_vo(p), None) + @patch("fedcloudclient.endpoint.get_projects_from_single_site") @patch("fedcloudclient.endpoint.retrieve_unscoped_token") def test_token_shares(self, m_fedcli_token, m_proj):