diff --git a/modules/coactd.py b/modules/coactd.py index 53aedad..5fb5dcd 100644 --- a/modules/coactd.py +++ b/modules/coactd.py @@ -601,14 +601,21 @@ def do_new_repo( if principal not in repo_leaders: repo_leaders.append(principal) except Exception as e: - # Query failed due to other error - do not proceed - error_msg = f"Failed to query existing repo data for {facility}:{repo}: {e}" - self.logger.error(error_msg) - raise RuntimeError( - f"Cannot safely proceed with NewRepo: database query failed. " - f"Proceeding with defaults could overwrite existing users/leaders. " - f"Original error: {e}" - ) from e + # Check if this is the specific "repo does not exist" message from API + error_str = str(e) + if "does not exist" in error_str: + # This is the repo-not-found case - treat as normal + self.logger.info(f"Repo {facility}:{repo} not found in database, creating new with principal only") + # Fall through with defaults: repo_users = [principal], repo_leaders = [principal] + else: + # Query failed due to other error - do not proceed + error_msg = f"Failed to query existing repo data for {facility}:{repo}: {e}" + self.logger.error(error_msg) + raise RuntimeError( + f"Cannot safely proceed with NewRepo: database query failed. " + f"Proceeding with defaults could overwrite existing users/leaders. " + f"Original error: {e}" + ) from e # run the facility tasks for this repo self.run_playbook( diff --git a/tests/test_slurm_node_memory.py b/tests/test_slurm_node_memory.py index 1946f22..947be56 100644 --- a/tests/test_slurm_node_memory.py +++ b/tests/test_slurm_node_memory.py @@ -28,29 +28,29 @@ def test_parse_slurm_nodelist_single(self): def test_parse_slurm_nodelist_range(self): """Test parsing a SLURM node range.""" result = self.importer.parse_slurm_nodelist("sdfmilan[269-272]") - expected = ["sdfmilan0269", "sdfmilan0270", "sdfmilan0271", "sdfmilan0272"] + expected = ["sdfmilan269", "sdfmilan270", "sdfmilan271", "sdfmilan272"] assert result == expected def test_parse_slurm_nodelist_list(self): """Test parsing a comma-separated list of nodes.""" result = self.importer.parse_slurm_nodelist("sdfmilan[006,011,027]") - expected = ["sdfmilan0006", "sdfmilan0011", "sdfmilan0027"] + expected = ["sdfmilan006", "sdfmilan011", "sdfmilan027"] assert result == expected def test_parse_slurm_nodelist_mixed(self): """Test parsing a mixed range and list.""" result = self.importer.parse_slurm_nodelist("sdfmilan[001-003,010,020-022]") expected = [ - "sdfmilan0001", "sdfmilan0002", "sdfmilan0003", - "sdfmilan0010", - "sdfmilan0020", "sdfmilan0021", "sdfmilan0022" + "sdfmilan001", "sdfmilan002", "sdfmilan003", + "sdfmilan010", + "sdfmilan020", "sdfmilan021", "sdfmilan022" ] assert result == expected def test_parse_slurm_nodelist_different_prefix(self): """Test parsing with different node prefix.""" result = self.importer.parse_slurm_nodelist("sdfrome[001-003]") - expected = ["sdfrome0001", "sdfrome0002", "sdfrome0003"] + expected = ["sdfrome001", "sdfrome002", "sdfrome003"] assert result == expected def test_parse_slurm_nodelist_unparseable(self):