diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fe3ac28..a69aee5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Changed +- Sessions that specify nodes that aren't in the current tenant will fail ## [2.10.1] - 2023-10-31 ### Fixed diff --git a/src/bos/operators/session_setup.py b/src/bos/operators/session_setup.py index 3cf5de51..3c34c304 100644 --- a/src/bos/operators/session_setup.py +++ b/src/bos/operators/session_setup.py @@ -137,6 +137,13 @@ def _get_boot_set_component_list(self, boot_set) -> Set[str]: # Populate from nodelist for node_name in boot_set.get('node_list', []): nodes.add(node_name) + if nodes: + tenant_nodes = self._apply_tenant_limit(nodes) + if nodes != tenant_nodes: + invalid_nodes = ",".join(list(nodes.difference(tenant_nodes))) + raise SessionSetupException( + f"The session template includes nodes which do not exist" + f" or are not available to this tenant: {invalid_nodes}") # Populate from node_groups for group_name in boot_set.get('node_groups', []): if group_name not in self.inventory.groups: diff --git a/src/bos/server/controllers/v2/components.py b/src/bos/server/controllers/v2/components.py index 7bdb9859..fdfb6535 100644 --- a/src/bos/server/controllers/v2/components.py +++ b/src/bos/server/controllers/v2/components.py @@ -196,7 +196,7 @@ def patch_v2_components_list(data): component_id = component_data['id'] if component_id not in DB or not _is_valid_tenant_component(component_id): return connexion.problem( - status=404, title="Component could not found.", + status=404, title="Component not found.", detail="Component {} could not be found".format(component_id)) components.append((component_id, component_data)) except Exception as err: @@ -251,7 +251,7 @@ def get_v2_component(component_id): LOGGER.debug("GET /components/id invoked get_component") if component_id not in DB or not _is_valid_tenant_component(component_id): return connexion.problem( - status=404, title="Component could not found.", + status=404, title="Component not found.", detail="Component {} could not be found".format(component_id)) component = DB.get(component_id) component = _set_status(component) @@ -281,7 +281,7 @@ def patch_v2_component(component_id): LOGGER.debug("PATCH /components/id invoked patch_component") if component_id not in DB or not _is_valid_tenant_component(component_id): return connexion.problem( - status=404, title="Component could not found.", + status=404, title="Component not found.", detail="Component {} could not be found".format(component_id)) try: data = connexion.request.get_json() @@ -325,7 +325,7 @@ def delete_v2_component(component_id): LOGGER.debug("DELETE /components/id invoked delete_component") if component_id not in DB or not _is_valid_tenant_component(component_id): return connexion.problem( - status=404, title="Component could not found.", + status=404, title="Component not found.", detail="Component {} could not be found".format(component_id)) return DB.delete(component_id), 204