diff --git a/CHANGELOG.md b/CHANGELOG.md index 80142f59c..8261c33a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 on a job running on a node (#663). - Add support for running under a subfolder prefix on HTTP server. - Add catch-all route to report page not found with button to clusters. + - Support requesting accounts and users associations with their limits. + - Add page to list account tree from Slurm accounting (#262). + - Add entry in left menu to access accounts page. + - Add page to get details of a specific account with all its user + associations. + - Add page to get details of a specific user with all its accounts + associations. + - Add links to user and account pages in job details page. - agent: - Automatically discover latest Slurm REST API version supported by `slurmrestd` among the list of Slurm-web supported versions declared in @@ -26,9 +34,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Implement Slurm REST API adapter from v0.0.41 to v0.0.42. - Implement Slurm REST API adapter from v0.0.42 to v0.0.43. - Implement Slurm REST API adapter from v0.0.43 to v0.0.44. + - Add `/associations` route to get list of accounts, users and limits. - gateway: - Add `/agent/{cluster}/ping` route to reverse-proxy request to agent `/ping` endpoint. + - Add `/agent/{cluster}/associations` route to reverse-proxy request to agent + `/associations` endpoint. - Possibility to validate agent SSL/TLS certificate with custom CA certificate as an alternative to system default CA certificates (#254). - Replace at runtime base path placeholder in pre-built UI assets by URL path @@ -42,6 +53,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 supported Slurm REST API versions. - Introduce `[agents]` > `cacert` gateway parameter for custom path to CA certificate to validate agent SSL/TLS certificate. + - Introduce `associations-view` action in authorization policy. + - Add permission on `associations-view` to all authenticated users in default + authorization policy. + - Introduce `[filters]` > `associations` parameter in agent configuration. + - Introduce `[cache]` > `associations` parameter in agent configuration. - cli: Introduce `slurm-web` unified executable with subcommands (#655). - docs: Add manpage for unified `slurm-web` command. @@ -89,7 +105,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 command. ### Fixed -- front: Dark mode rendering of info and error messages in clusters list (#661). +- front: + - Dark mode rendering of info and error messages in clusters list (#661). + - Re-initialize all jobs filters in runtime store as soon as a filter is + present in query. - gateway: Use agent provided version instead of agent minimal version from settings to reverse proxy the requests (#656). - front: Update dependencies to fix CVE-2025-64718 (js-yaml), CVE-2025-64756 diff --git a/README.md b/README.md index 84c367fae..1e46376ff 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Many features in a reactive & responsive web UI: * Colored badges to visualize job status at a glance * GPU resources utilization monitoring * Advanced visualization of node status with racking topology -* Intuitive visualization of QOS and advanced reservations +* Intuitive visualization of account tree, QOS and advanced reservations * Dark mode support * Multi-clusters support * LDAP authentication (including Active Directory support) diff --git a/assets/screenshots/build.yaml b/assets/screenshots/build.yaml index e8a994828..839692d70 100644 --- a/assets/screenshots/build.yaml +++ b/assets/screenshots/build.yaml @@ -32,4 +32,6 @@ shadowed: - screenshot_cores_tablet.png - screenshot_qos.png - screenshot_reservations.png +- screenshot_accounts_tree.png +- screenshot_account_page.png - screenshot_perms.png diff --git a/assets/screenshots/raw/screenshot_account_page.png b/assets/screenshots/raw/screenshot_account_page.png new file mode 100644 index 000000000..b9d89c0ef Binary files /dev/null and b/assets/screenshots/raw/screenshot_account_page.png differ diff --git a/assets/screenshots/raw/screenshot_accounts_tree.png b/assets/screenshots/raw/screenshot_accounts_tree.png new file mode 100644 index 000000000..c93e545b7 Binary files /dev/null and b/assets/screenshots/raw/screenshot_accounts_tree.png differ diff --git a/assets/screenshots/shadowed/screenshot_account_page.png b/assets/screenshots/shadowed/screenshot_account_page.png new file mode 100644 index 000000000..b6c71c9f4 Binary files /dev/null and b/assets/screenshots/shadowed/screenshot_account_page.png differ diff --git a/assets/screenshots/shadowed/screenshot_accounts_tree.png b/assets/screenshots/shadowed/screenshot_accounts_tree.png new file mode 100644 index 000000000..46742e010 Binary files /dev/null and b/assets/screenshots/shadowed/screenshot_accounts_tree.png differ diff --git a/conf/vendor/agent.yml b/conf/vendor/agent.yml index 216edcf63..4969209f2 100644 --- a/conf/vendor/agent.yml +++ b/conf/vendor/agent.yml @@ -340,6 +340,17 @@ filters: doc: | List of accounts fields selected in slurmrestd API, all other fields are filtered out. + associations: + type: list + content: str + default: + - account + - max + - parent_account + - qos + - user + doc: | + List of associations fields selected in slurmrestd API, all other fields are filtered out. policy: definition: @@ -483,6 +494,10 @@ cache: type: int default: 60 doc: Expiration delay in seconds for accounts in cache + associations: + type: int + default: 120 + doc: Expiration delay in seconds for associations in cache metrics: enabled: diff --git a/conf/vendor/policy.ini b/conf/vendor/policy.ini index 8d62eb22f..b524f52d7 100644 --- a/conf/vendor/policy.ini +++ b/conf/vendor/policy.ini @@ -13,4 +13,4 @@ user=ALL actions=view-stats,view-jobs,view-nodes [user] -actions=view-stats,view-jobs,view-nodes,view-partitions,view-qos,view-accounts,view-reservations,cache-view,cache-reset +actions=view-stats,view-jobs,view-nodes,view-partitions,view-qos,view-accounts,associations-view,view-reservations,cache-view,cache-reset diff --git a/conf/vendor/policy.yml b/conf/vendor/policy.yml index 092fcbd53..67e82fb8a 100644 --- a/conf/vendor/policy.yml +++ b/conf/vendor/policy.yml @@ -14,6 +14,9 @@ actions: Get _QOS_ entry in main menu and permission to view the list of defined QOS. view-accounts: | Permission to filter jobs by account. + associations-view: | + Get _Accounts_ entry in main menu and permission to view the list of + associations (accounts, users and limits). view-reservations: | Get _Reservations_ entry in main menu and permission to view the list of defined reservations. diff --git a/dev/conf/policy.ini.j2 b/dev/conf/policy.ini.j2 index 7f4a1aae6..d25e44eb0 100644 --- a/dev/conf/policy.ini.j2 +++ b/dev/conf/policy.ini.j2 @@ -18,7 +18,7 @@ special={{ users[3].login }} actions=view-stats,view-jobs [admin] -actions=view-stats,view-jobs,view-nodes,view-partitions,view-qos,view-accounts,view-reservations,cache-view,cache-reset +actions=view-stats,view-jobs,view-nodes,view-partitions,view-qos,view-accounts,associations-view,view-reservations,cache-view,cache-reset [special] actions=view-qos diff --git a/dev/crawler/agent.py b/dev/crawler/agent.py index 4893232b4..e36ec46ce 100644 --- a/dev/crawler/agent.py +++ b/dev/crawler/agent.py @@ -52,6 +52,7 @@ def __init__( Asset("qos", "qos", self._crawl_qos), Asset("reservations", "reservations", self._crawl_reservations), Asset("accounts", "accounts", self._crawl_accounts), + Asset("associations", "associations", self._crawl_associations), Asset( "metrics-nodes-hour", "metrics-nodes-hour", @@ -159,6 +160,12 @@ def _crawl_accounts(self): "accounts", ) + def _crawl_associations(self): + self.dump_component_query( + f"/v{get_version()}/associations", + "associations", + ) + def _crawl_metrics_nodes_hour(self): if self.metrics: self.dump_component_query( diff --git a/dev/crawler/gateway.py b/dev/crawler/gateway.py index 4584f5aa4..5c25e6c3b 100644 --- a/dev/crawler/gateway.py +++ b/dev/crawler/gateway.py @@ -226,6 +226,7 @@ def __init__( Asset("qos", "qos", self._crawl_qos), Asset("reservations", "reservations", self._crawl_reservations), Asset("accounts", "accounts", self._crawl_accounts), + Asset("associations", "associations", self._crawl_associations), Asset("racksdb", "racksdb-draw-coordinates", self._crawl_racksdb), Asset( "metrics", @@ -803,6 +804,12 @@ def _crawl_accounts(self): "accounts", ) + def _crawl_associations(self): + self.dump_component_query( + f"/api/agents/{self.cluster.name}/associations", + "associations", + ) + def _crawl_racksdb(self): # RacksDB infrastructure diagram self.dump_component_query( diff --git a/dev/crawler/slurmrestd.py b/dev/crawler/slurmrestd.py index ee3bff54b..418b5bc63 100644 --- a/dev/crawler/slurmrestd.py +++ b/dev/crawler/slurmrestd.py @@ -188,6 +188,7 @@ def __init__( Asset("qos", "slurm-qos", self._crawl_qos), Asset("accounts", "slurm-accounts", self._crawl_accounts), Asset("reservations", "slurm-reservations", self._crawl_reservations), + Asset("associations", "slurmdb-associations", self._crawl_associations), } super().__init__( @@ -840,3 +841,10 @@ def _crawl_reservations(self): f"/slurm/v{self.api_version}/reservations", "slurm-reservations", ) + + def _crawl_associations(self): + # Download associations + self.dump_component_query( + f"/slurmdb/v{self.api_version}/associations", + "slurmdb-associations", + ) diff --git a/docs/modules/conf/examples/agent.ini b/docs/modules/conf/examples/agent.ini index 3a9dc8635..8f73e2bf4 100644 --- a/docs/modules/conf/examples/agent.ini +++ b/docs/modules/conf/examples/agent.ini @@ -434,6 +434,22 @@ reservations= accounts= name +# List of associations fields selected in slurmrestd API, all other fields are +# filtered out. +# +# Default value: +# - account +# - max +# - parent_account +# - qos +# - user +associations= + account + max + parent_account + qos + user + [policy] # Path to RBAC policy definition file with available actions @@ -588,6 +604,11 @@ reservations=60 # Default value: 60 accounts=60 +# Expiration delay in seconds for associations in cache +# +# Default value: 120 +associations=120 + [metrics] # Determine if metrics feature and integration with Prometheus (or diff --git a/docs/modules/conf/partials/conf-agent.adoc b/docs/modules/conf/partials/conf-agent.adoc index 1a82ed937..86b5069e5 100644 --- a/docs/modules/conf/partials/conf-agent.adoc +++ b/docs/modules/conf/partials/conf-agent.adoc @@ -685,6 +685,30 @@ filtered out. * `name` +|- + +|associations +|list[str] +|List of associations fields selected in slurmrestd API, all other fields are filtered out. + + + + + +*Default:* + + +* `account` + +* `max` + +* `parent_account` + +* `qos` + +* `user` + + |- @@ -1055,6 +1079,17 @@ _No default value_ |- +|associations +|int +|Expiration delay in seconds for associations in cache + + + + +*Default:* `120` + +|- + |=== diff --git a/docs/modules/conf/partials/policy-actions.adoc b/docs/modules/conf/partials/policy-actions.adoc index 351e3bfc3..d63e7ec94 100644 --- a/docs/modules/conf/partials/policy-actions.adoc +++ b/docs/modules/conf/partials/policy-actions.adoc @@ -36,6 +36,11 @@ compute nodes in cluster with their status in Slurm. |Permission to filter jobs by account. +|associations-view +|Get _Accounts_ entry in main menu and permission to view the list of +associations (accounts, users and limits). + + |view-reservations |Get _Reservations_ entry in main menu and permission to view the list of defined reservations. diff --git a/docs/modules/overview/images/screenshot_account_page.png b/docs/modules/overview/images/screenshot_account_page.png new file mode 120000 index 000000000..b9379e9db --- /dev/null +++ b/docs/modules/overview/images/screenshot_account_page.png @@ -0,0 +1 @@ +../../../../assets/screenshots/shadowed/screenshot_account_page.png \ No newline at end of file diff --git a/docs/modules/overview/images/screenshot_accounts_tree.png b/docs/modules/overview/images/screenshot_accounts_tree.png new file mode 120000 index 000000000..dfcf01b43 --- /dev/null +++ b/docs/modules/overview/images/screenshot_accounts_tree.png @@ -0,0 +1 @@ +../../../../assets/screenshots/shadowed/screenshot_accounts_tree.png \ No newline at end of file diff --git a/docs/modules/overview/pages/overview.adoc b/docs/modules/overview/pages/overview.adoc index 7de4c53ae..acb11d1ee 100644 --- a/docs/modules/overview/pages/overview.adoc +++ b/docs/modules/overview/pages/overview.adoc @@ -103,6 +103,27 @@ job-specific GPU usage, and troubleshoot — without needing deep knowledge of Slurm's CLI commands. This streamlined visibility significantly improves productivity and resource efficiency in GPU-accelerated workloads. +== Account Hierarchy + +Slurm-web provides an interactive accounts page that displays the account +hierarchy for each cluster. This feature enables users and administrators to: + +- **Visualize Account Structure:** Display parent/child account relationships in + a tree view, helping users and admins understand project or organizational + hierarchies at a glance. +- **Intuitive Insights:** Inspect account-specific information, such as resource + limits with visual representation of their overrides, associated users, and + QOS assignments, directly from the interface. +- **Easy Navigation:** Links allow you to traverse account structures, with + users and their associations. + +image::screenshot_accounts_tree.png[width=80%] + +image::screenshot_account_page.png[width=80%] + +The accounts interface streamlines account management, improves clarity into +Slurm account policies, and reduces the need for complex CLI queries. + == Advanced Reservations Resources can be pre-allocated for a particular usage in Slurm with *advanced diff --git a/frontend/src/components/MainMenu.vue b/frontend/src/components/MainMenu.vue index 2accc40fc..b2b32e7ee 100644 --- a/frontend/src/components/MainMenu.vue +++ b/frontend/src/components/MainMenu.vue @@ -16,7 +16,8 @@ import { PlayCircleIcon, CpuChipIcon, SwatchIcon, - XMarkIcon + XMarkIcon, + UserGroupIcon } from '@heroicons/vue/24/outline' import { TagIcon } from '@heroicons/vue/16/solid' @@ -41,6 +42,12 @@ const navigation = [ route: 'reservations', icon: CalendarIcon, permission: 'view-reservations' + }, + { + name: 'Accounts', + route: 'accounts', + icon: UserGroupIcon, + permission: 'associations-view' } ] diff --git a/frontend/src/components/accounts/AccountBreadcrumb.vue b/frontend/src/components/accounts/AccountBreadcrumb.vue new file mode 100644 index 000000000..a768b6b5f --- /dev/null +++ b/frontend/src/components/accounts/AccountBreadcrumb.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/frontend/src/components/accounts/AccountTreeNode.vue b/frontend/src/components/accounts/AccountTreeNode.vue new file mode 100644 index 000000000..28e47fb8d --- /dev/null +++ b/frontend/src/components/accounts/AccountTreeNode.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/frontend/src/components/job/JobFieldRaw.vue b/frontend/src/components/job/JobFieldRaw.vue index bff1f3e29..bafa5bf6d 100644 --- a/frontend/src/components/job/JobFieldRaw.vue +++ b/frontend/src/components/job/JobFieldRaw.vue @@ -7,9 +7,17 @@ --> @@ -20,6 +28,15 @@ const { field, monospace = false } = defineProps<{ 'mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0 dark:text-gray-300' ]" > - {{ field }} + + {{ field }} + + diff --git a/frontend/src/composables/GatewayAPI.ts b/frontend/src/composables/GatewayAPI.ts index eb7d90eda..3e032a6a2 100644 --- a/frontend/src/composables/GatewayAPI.ts +++ b/frontend/src/composables/GatewayAPI.ts @@ -605,6 +605,58 @@ export interface ClusterQos { priority: ClusterOptionalNumber } +export interface ClusterAssociation { + account: string + max: { + jobs: { + accruing: ClusterOptionalNumber // MaxJobsAccrue + active: ClusterOptionalNumber // MaxJobs + per: { + accruing: ClusterOptionalNumber // GrpJobsAccrue + count: ClusterOptionalNumber // GrpJobs + submitted: ClusterOptionalNumber // GrpSubmit + wall_clock: ClusterOptionalNumber // MaxWall in minutes + } + total: ClusterOptionalNumber // MaxSubmit + } + per: { + account: { + wall_clock: ClusterOptionalNumber // GrpWall in minutes + } + } + tres: { + group: { + active: ClusterTRES[] // GrpTRESRunMins + minutes: ClusterTRES[] // GrpTRESMins + } + minutes: { + per: { + job: ClusterTRES[] // MaxTRESMins + } + total: ClusterTRES[] // ? + } + per: { + job: ClusterTRES[] // MaxTRES + node: ClusterTRES[] // MaxTRESPerNode + } + total: ClusterTRES[] // GrpTRES + } + } + parent_account: string + qos: string[] + user: string +} + +export interface ClusterAccountTreeNode { + children: ClusterAccountTreeNode[] + level: number + account: string + max: ClusterAssociation['max'] + parent_account: string + qos: string[] + users: string[] +} + export interface ClusterReservation { accounts: string end_time: ClusterOptionalNumber @@ -719,6 +771,13 @@ export function renderQosFlag(flag: string): string { } } +export function renderQosLabel(list?: string[]): string { + if (!list || list.length === 0) { + return '∅' + } + return list.join(', ') +} + export function renderWalltime(value: ClusterOptionalNumber): string { if (!value.set) { return '-' @@ -756,6 +815,7 @@ const GatewayClusterAPIKeys = [ 'qos', 'reservations', 'accounts', + 'associations', 'cache_stats' ] as const export type GatewayClusterAPIKey = (typeof GatewayClusterAPIKeys)[number] @@ -857,6 +917,10 @@ export function useGatewayAPI() { return await restAPI.get(`/agents/${cluster}/accounts`) } + async function associations(cluster: string): Promise> { + return await restAPI.get(`/agents/${cluster}/associations`) + } + async function cache_stats(cluster: string): Promise { return await restAPI.get(`/agents/${cluster}/cache/stats`) } @@ -997,6 +1061,7 @@ export function useGatewayAPI() { qos, reservations, accounts, + associations, cache_stats, cache_reset, metrics_nodes, diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 7f1db592f..5df6d487b 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -28,6 +28,9 @@ import ResourcesDiagramCoresView from '@/views/resources/ResourcesDiagramCoresVi import NodeView from '@/views/NodeView.vue' import QosView from '@/views/QosView.vue' import ReservationsView from '@/views/ReservationsView.vue' +import AccountsView from '@/views/AccountsView.vue' +import AccountView from '@/views/AccountView.vue' +import UserView from '@/views/UserView.vue' import JobsStatusBadges from '@/views/tests/JobsStatusBadges.vue' import NodesStatusBadges from '@/views/tests/NodesStatusBadges.vue' import NotFoundView from '@/views/NotFoundView.vue' @@ -158,6 +161,24 @@ const router = createRouter({ name: 'reservations', component: ReservationsView, props: true + }, + { + path: 'accounts', + name: 'accounts', + component: AccountsView, + props: true + }, + { + path: 'accounts/:account', + name: 'account', + component: AccountView, + props: true + }, + { + path: 'users/:user', + name: 'user', + component: UserView, + props: true } ] }, diff --git a/frontend/src/views/AccountView.vue b/frontend/src/views/AccountView.vue new file mode 100644 index 000000000..875f23ba9 --- /dev/null +++ b/frontend/src/views/AccountView.vue @@ -0,0 +1,589 @@ + + + + + diff --git a/frontend/src/views/AccountsView.vue b/frontend/src/views/AccountsView.vue new file mode 100644 index 000000000..a56a0ef76 --- /dev/null +++ b/frontend/src/views/AccountsView.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/frontend/src/views/JobView.vue b/frontend/src/views/JobView.vue index b232f0d7c..7d62bf69c 100644 --- a/frontend/src/views/JobView.vue +++ b/frontend/src/views/JobView.vue @@ -83,13 +83,24 @@ const jobFieldsContent = computed( (): { id: JobField; label: string; component: Component; props: object }[] => { if (!data.value) return [] return [ - { id: 'user', label: 'User', component: JobFieldRaw, props: { field: data.value.user } }, + { + id: 'user', + label: 'User', + component: JobFieldRaw, + props: { + field: data.value.user, + to: { name: 'user', params: { cluster, user: data.value.user } } + } + }, { id: 'group', label: 'Group', component: JobFieldRaw, props: { field: data.value.group } }, { id: 'account', label: 'Account', component: JobFieldRaw, - props: { field: data.value.association.account } + props: { + field: data.value.association.account, + to: { name: 'account', params: { cluster, account: data.value.association.account } } + } }, { id: 'wckeys', @@ -249,7 +260,19 @@ onMounted(() => { - + + diff --git a/frontend/src/views/JobsView.vue b/frontend/src/views/JobsView.vue index 9475b7edf..26efadc74 100644 --- a/frontend/src/views/JobsView.vue +++ b/frontend/src/views/JobsView.vue @@ -187,6 +187,15 @@ onMounted(() => { (parameter) => parameter in route.query ) ) { + /* Reinitialize filters if route has query parameters */ + runtimeStore.jobs.filters = { + states: [], + users: [], + accounts: [], + qos: [], + partitions: [] + } + if (route.query.sort && runtimeStore.jobs.isValidSortCriterion(route.query.sort)) { /* Retrieve the sort criteria from query and update the store */ runtimeStore.jobs.sort = route.query.sort as JobSortCriterion diff --git a/frontend/src/views/UserView.vue b/frontend/src/views/UserView.vue new file mode 100644 index 000000000..61b927ecb --- /dev/null +++ b/frontend/src/views/UserView.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/frontend/tests/components/accounts/AccountBreadcrumb.spec.ts b/frontend/tests/components/accounts/AccountBreadcrumb.spec.ts new file mode 100644 index 000000000..64a1ab2fd --- /dev/null +++ b/frontend/tests/components/accounts/AccountBreadcrumb.spec.ts @@ -0,0 +1,172 @@ +import { describe, test, expect, beforeEach } from 'vitest' +import { mount } from '@vue/test-utils' +import { RouterLink } from 'vue-router' +import AccountBreadcrumb from '@/components/accounts/AccountBreadcrumb.vue' +import { init_plugins } from '../../lib/common' +import type { ClusterAssociation } from '@/composables/GatewayAPI' +import associations from '../../assets/associations.json' + +describe('AccountBreadcrumb.vue', () => { + beforeEach(() => { + init_plugins() + }) + + test('displays empty symbol when account has no parent', () => { + const accountAssociations: ClusterAssociation[] = [ + { + account: 'root', + parent_account: '', + qos: [], + user: '', + max: associations[0].max + } + ] + + const wrapper = mount(AccountBreadcrumb, { + props: { + cluster: 'foo', + account: 'root', + associations: accountAssociations + } + }) + + console.log(wrapper.html()) + expect(wrapper.text()).toBe('∅') + }) + + test('displays empty symbol when account not found in associations', () => { + const wrapper = mount(AccountBreadcrumb, { + props: { + cluster: 'foo', + account: 'nonexistent', + associations: [] + } + }) + + expect(wrapper.text()).toBe('∅') + }) + + test('displays single parent account', () => { + const accountAssociations: ClusterAssociation[] = [ + { + account: 'root', + parent_account: '', + qos: [], + user: '', + max: associations[0].max + }, + { + account: 'admin', + parent_account: 'root', + qos: [], + user: '', + max: associations[2].max + } + ] + + const wrapper = mount(AccountBreadcrumb, { + props: { + cluster: 'foo', + account: 'admin', + associations: accountAssociations + } + }) + + // Check root link + const rootLink = wrapper.getComponent(RouterLink) + expect(rootLink.props('to')).toEqual({ + name: 'account', + params: { cluster: 'foo', account: 'root' } + }) + }) + + test('displays multiple parent accounts in hierarchy', () => { + const accountAssociations: ClusterAssociation[] = [ + { + account: 'root', + parent_account: '', + qos: [], + user: '', + max: associations[0].max + }, + { + account: 'physic', + parent_account: 'root', + qos: [], + user: '', + max: associations[686]?.max || associations[0].max + }, + { + account: 'acoustic', + parent_account: 'physic', + qos: [], + user: '', + max: associations[763]?.max || associations[0].max + } + ] + + const wrapper = mount(AccountBreadcrumb, { + props: { + cluster: 'foo', + account: 'acoustic', + associations: accountAssociations + } + }) + + // Check root and physic links + const links = wrapper.findAllComponents(RouterLink) + expect(links.length).toBe(2) + expect(links[0].props('to')).toEqual({ + name: 'account', + params: { cluster: 'foo', account: 'root' } + }) + expect(links[1].props('to')).toEqual({ + name: 'account', + params: { cluster: 'foo', account: 'physic' } + }) + + // Check chevron separators + const chevrons = wrapper.findAll('svg') + expect(chevrons.length).toBe(1) + }) + + test('displays current account when showCurrent is true', () => { + const accountAssociations: ClusterAssociation[] = [ + { + account: 'root', + parent_account: '', + qos: [], + user: '', + max: associations[0].max + }, + { + account: 'admin', + parent_account: 'root', + qos: [], + user: '', + max: associations[2].max + } + ] + + const wrapper = mount(AccountBreadcrumb, { + props: { + cluster: 'foo', + account: 'admin', + associations: accountAssociations, + showCurrent: true + } + }) + + // Check root and admin links + const links = wrapper.findAllComponents(RouterLink) + expect(links.length).toBe(2) + expect(links[0].props('to')).toEqual({ + name: 'account', + params: { cluster: 'foo', account: 'root' } + }) + expect(links[1].props('to')).toEqual({ + name: 'account', + params: { cluster: 'foo', account: 'admin' } + }) + }) +}) diff --git a/frontend/tests/components/accounts/AccountTreeNode.spec.ts b/frontend/tests/components/accounts/AccountTreeNode.spec.ts new file mode 100644 index 000000000..b0baa7b5d --- /dev/null +++ b/frontend/tests/components/accounts/AccountTreeNode.spec.ts @@ -0,0 +1,155 @@ +import { describe, test, expect, beforeEach } from 'vitest' +import { mount } from '@vue/test-utils' +import { RouterLink } from 'vue-router' +import AccountTreeNode from '@/components/accounts/AccountTreeNode.vue' +import { init_plugins } from '../../lib/common' +import type { ClusterAccountTreeNode } from '@/composables/GatewayAPI' +import associations from '../../assets/associations.json' + +describe('AccountTreeNode.vue', () => { + beforeEach(() => { + init_plugins() + }) + + test('renders accounts tree collapsed', () => { + const node: ClusterAccountTreeNode = { + account: 'root', + children: [ + { + account: 'admin', + children: [], + level: 1, + parent_account: 'root', + qos: [], + users: [], + max: associations[2].max + } + ], + level: 0, + parent_account: '', + qos: ['normal'], + users: ['root', 'user1'], + max: associations[0].max + } + + const wrapper = mount(AccountTreeNode, { + props: { + node, + expandedAccounts: new Set(), + cluster: 'foo' + } + }) + + // Get root account card + const rootCard = wrapper.get('div#account-tree-node-root') + + // Verify expand button is present + const expandButton = rootCard.get('button') + expect(expandButton.text()).toBe('Toggle root') + + // Verify RouterLink exists and has correct props for account name + const link = rootCard.getComponent(RouterLink) + expect(link.props('to')).toEqual({ + name: 'account', + params: { cluster: 'foo', account: 'root' } + }) + + // Verify admin account card is not expanded + const adminCard = wrapper.find('div#account-tree-node-admin') + expect(adminCard.exists()).toBe(false) + }) + + test('renders children when expanded', () => { + const node: ClusterAccountTreeNode = { + account: 'root', + children: [ + { + account: 'admin', + children: [], + level: 1, + parent_account: 'root', + qos: [], + users: [], + max: associations[2].max + } + ], + level: 0, + parent_account: '', + qos: ['normal'], + users: [], + max: associations[0].max + } + + const wrapper = mount(AccountTreeNode, { + props: { + node, + expandedAccounts: new Set(['root']), + cluster: 'foo' + } + }) + + // Check root card is present + wrapper.get('div#account-tree-node-root') + // Check admin card is present + wrapper.get('div#account-tree-node-admin') + }) + + test('does not show expand button when node has no children', () => { + const node: ClusterAccountTreeNode = { + account: 'root', + children: [], + level: 0, + parent_account: '', + qos: ['normal'], + users: [], + max: associations[0].max + } + + const wrapper = mount(AccountTreeNode, { + props: { + node, + expandedAccounts: new Set(), + cluster: 'foo' + } + }) + + const expandButton = wrapper.get('div#account-tree-node-root').find('button') + expect(expandButton.exists()).toBe(false) + }) + + test('emits toggle event when expand button is clicked', async () => { + const node: ClusterAccountTreeNode = { + account: 'root', + children: [ + { + account: 'admin', + children: [], + level: 1, + parent_account: 'root', + qos: [], + users: [], + max: associations[2].max + } + ], + level: 0, + parent_account: '', + qos: ['normal'], + users: [], + max: associations[0].max + } + + const wrapper = mount(AccountTreeNode, { + props: { + node, + expandedAccounts: new Set(), + cluster: 'foo' + } + }) + + const button = wrapper.get('div#account-tree-node-root').get('button') + await button.trigger('click') + + expect(wrapper.emitted('toggle')).toBeTruthy() + expect(wrapper.emitted('toggle')![0]![0]).toBe('root') + }) +}) diff --git a/frontend/tests/views/AccountView.spec.ts b/frontend/tests/views/AccountView.spec.ts new file mode 100644 index 000000000..21a1751f0 --- /dev/null +++ b/frontend/tests/views/AccountView.spec.ts @@ -0,0 +1,210 @@ +import { describe, test, expect, beforeEach, vi } from 'vitest' +import { mount } from '@vue/test-utils' +import { RouterLink } from 'vue-router' +import AccountView from '@/views/AccountView.vue' +import { init_plugins, getMockClusterDataPoller } from '../lib/common' +import { useRuntimeStore } from '@/stores/runtime' +import type { ClusterAssociation } from '@/composables/GatewayAPI' +import associations from '../assets/associations.json' +import ErrorAlert from '@/components/ErrorAlert.vue' +import InfoAlert from '@/components/InfoAlert.vue' +import LoadingSpinner from '@/components/LoadingSpinner.vue' +import AccountBreadcrumb from '@/components/accounts/AccountBreadcrumb.vue' + +const mockClusterDataPoller = getMockClusterDataPoller() + +vi.mock('@/composables/DataPoller', () => ({ + useClusterDataPoller: () => mockClusterDataPoller +})) + +describe('AccountView.vue', () => { + beforeEach(() => { + init_plugins() + useRuntimeStore().availableClusters = [ + { + name: 'foo', + permissions: { roles: [], actions: [] }, + racksdb: true, + infrastructure: 'foo', + metrics: true, + cache: true + } + ] + mockClusterDataPoller.data.value = undefined + mockClusterDataPoller.unable.value = false + mockClusterDataPoller.loaded.value = false + }) + + test('displays account details', () => { + mockClusterDataPoller.loaded.value = true + mockClusterDataPoller.data.value = associations as ClusterAssociation[] + + const wrapper = mount(AccountView, { + props: { + cluster: 'foo', + account: 'root' + } + }) + + // Back to accounts button + const buttons = wrapper.findAll('button') + const backButton = buttons.find((btn) => btn.text().includes('Back to accounts')) + expect(backButton).toBeDefined() + + // Account heading + const accountHeading = wrapper.get('div#account-heading') + expect(accountHeading.text()).toContain('Account root') + + // View jobs link + const viewJobsLink = accountHeading.getComponent(RouterLink) + expect(viewJobsLink.props('to')).toEqual({ + name: 'jobs', + params: { cluster: 'foo' }, + query: { accounts: 'root' } + }) + + // Account definition + const accountDefinition = wrapper.get('dl') + + // Parent accounts + expect(accountDefinition.get('div#parents dt').text()).toBe('Parent accounts') + accountDefinition.getComponent(AccountBreadcrumb) + + // Subaccounts + expect(accountDefinition.text()).toContain('Subaccounts') + const subaccountsSection = wrapper.get('div#subaccounts') + const links = subaccountsSection.findAllComponents(RouterLink) + expect(links.length).toBeGreaterThan(0) + + // QoS + expect(accountDefinition.get('div#qos dt').text()).toBe('QoS') + + // Job limits + const jobLimitsSection = accountDefinition.get('div#limits-jobs') + expect(jobLimitsSection.get('dt').text()).toBe('Job limits') + expect(jobLimitsSection.get('dd').text()).toContain('Running') + expect(jobLimitsSection.get('dd').text()).toContain('Submitted') + expect(jobLimitsSection.get('dd').text()).toContain('Running / user') + expect(jobLimitsSection.get('dd').text()).toContain('Submitted / user') + + // Resource limits + const resourceLimitsSection = accountDefinition.get('div#limits-resources') + expect(resourceLimitsSection.get('dt').text()).toBe('Resource limits') + expect(resourceLimitsSection.get('dd').text()).toContain('Total') + expect(resourceLimitsSection.get('dd').text()).toContain('Per job') + expect(resourceLimitsSection.get('dd').text()).toContain('Per node') + + // Time limits + const timeLimitsSection = accountDefinition.get('div#limits-time') + expect(accountDefinition.get('div#limits-time dt').text()).toBe('Time limits') + expect(timeLimitsSection.get('dt').text()).toBe('Time limits') + expect(timeLimitsSection.get('dd').text()).toContain('Total') + expect(timeLimitsSection.get('dd').text()).toContain('Per job') + + // User associations table + const userAssociationsTable = wrapper.get('table') + expect(userAssociationsTable.get('thead').text()).toContain('User Associations') + expect(userAssociationsTable.findAll('tbody tr').length).toBeGreaterThan(0) + }) + + test('shows loading spinner when data is not loaded', () => { + mockClusterDataPoller.loaded.value = false + + const wrapper = mount(AccountView, { + props: { + cluster: 'foo', + account: 'root' + } + }) + + expect(wrapper.findComponent(LoadingSpinner).exists()).toBe(true) + expect(wrapper.text()).toContain('Loading account details...') + }) + + test('shows error alert when unable to retrieve associations', () => { + mockClusterDataPoller.unable.value = true + mockClusterDataPoller.loaded.value = true + + const wrapper = mount(AccountView, { + props: { + cluster: 'foo', + account: 'root' + } + }) + + const errorAlert = wrapper.findComponent(ErrorAlert) + expect(errorAlert.exists()).toBe(true) + expect(errorAlert.text()).toContain('Unable to retrieve associations for cluster') + expect(errorAlert.text()).toContain('foo') + }) + + test('shows info alert when account does not exist', () => { + mockClusterDataPoller.loaded.value = true + mockClusterDataPoller.data.value = [] + + const wrapper = mount(AccountView, { + props: { + cluster: 'foo', + account: 'nonexistent' + } + }) + + const infoAlert = wrapper.findComponent(InfoAlert) + expect(infoAlert.exists()).toBe(true) + expect(infoAlert.text()).toContain('Account nonexistent does not exist on this cluster') + }) + + test('displays empty symbol when no subaccounts', () => { + // Create an account with no subaccounts + const accountData: ClusterAssociation[] = [ + { + account: 'leaf', + parent_account: 'root', + qos: [], + user: '', + max: associations[0].max + } + ] + + mockClusterDataPoller.loaded.value = true + mockClusterDataPoller.data.value = accountData + + const wrapper = mount(AccountView, { + props: { + cluster: 'foo', + account: 'leaf' + } + }) + + expect(wrapper.text()).toContain('Subaccounts') + // Should show empty symbol + const subaccountsSection = wrapper.get('div#subaccounts') + expect(subaccountsSection.get('dd').text()).toBe('∅') + }) + + test('shows info alert when account has no user associations', () => { + const accountData: ClusterAssociation[] = [ + { + account: 'empty', + parent_account: '', + qos: [], + user: '', + max: associations[0].max + } + ] + + mockClusterDataPoller.loaded.value = true + mockClusterDataPoller.data.value = accountData + + const wrapper = mount(AccountView, { + props: { + cluster: 'foo', + account: 'empty' + } + }) + + const infoAlert = wrapper.findComponent(InfoAlert) + expect(infoAlert.exists()).toBe(true) + expect(infoAlert.text()).toContain('has no end-user associations') + }) +}) diff --git a/frontend/tests/views/AccountsView.spec.ts b/frontend/tests/views/AccountsView.spec.ts new file mode 100644 index 000000000..7beb5853f --- /dev/null +++ b/frontend/tests/views/AccountsView.spec.ts @@ -0,0 +1,105 @@ +import { describe, test, expect, beforeEach, vi } from 'vitest' +import { mount } from '@vue/test-utils' +import AccountsView from '@/views/AccountsView.vue' +import { init_plugins, getMockClusterDataPoller } from '../lib/common' +import { useRuntimeStore } from '@/stores/runtime' +import type { ClusterAssociation } from '@/composables/GatewayAPI' +import associations from '../assets/associations.json' +import ErrorAlert from '@/components/ErrorAlert.vue' +import InfoAlert from '@/components/InfoAlert.vue' +import LoadingSpinner from '@/components/LoadingSpinner.vue' +import AccountTreeNode from '@/components/accounts/AccountTreeNode.vue' + +const mockClusterDataPoller = getMockClusterDataPoller() + +vi.mock('@/composables/DataPoller', () => ({ + useClusterDataPoller: () => mockClusterDataPoller +})) + +describe('AccountsView.vue', () => { + beforeEach(() => { + init_plugins() + useRuntimeStore().availableClusters = [ + { + name: 'foo', + permissions: { roles: [], actions: [] }, + racksdb: true, + infrastructure: 'foo', + metrics: true, + cache: true + } + ] + mockClusterDataPoller.data.value = undefined + mockClusterDataPoller.unable.value = false + mockClusterDataPoller.loaded.value = false + }) + + test('displays accounts page', () => { + mockClusterDataPoller.loaded.value = true + mockClusterDataPoller.data.value = associations + + const wrapper = mount(AccountsView, { + props: { + cluster: 'foo' + } + }) + + // Check page title and description + expect(wrapper.get('h1').text()).toBe('Accounts') + expect(wrapper.text()).toContain('Accounts defined on cluster') + + // Count unique accounts (excluding user associations) + const uniqueAccounts = associations.filter((a) => !a.user).length + + // Check account count + expect(wrapper.text()).toContain(uniqueAccounts.toString()) + expect(wrapper.text()).toContain('account' + (uniqueAccounts > 1 ? 's' : '')) + + // Check tree nodes + const treeNodes = wrapper.findAllComponents(AccountTreeNode) + expect(treeNodes.length).toBeGreaterThan(0) + }) + + test('shows loading spinner when data is not loaded', () => { + mockClusterDataPoller.loaded.value = false + + const wrapper = mount(AccountsView, { + props: { + cluster: 'foo' + } + }) + + wrapper.getComponent(LoadingSpinner) + expect(wrapper.text()).toContain('Loading accounts…') + }) + + test('shows error alert when unable to retrieve associations', () => { + mockClusterDataPoller.unable.value = true + mockClusterDataPoller.loaded.value = true + + const wrapper = mount(AccountsView, { + props: { + cluster: 'foo' + } + }) + + const errorAlert = wrapper.getComponent(ErrorAlert) + expect(errorAlert.text()).toContain('Unable to retrieve associations from cluster') + expect(errorAlert.text()).toContain('foo') + }) + + test('shows info alert when no associations', () => { + mockClusterDataPoller.loaded.value = true + mockClusterDataPoller.data.value = [] + + const wrapper = mount(AccountsView, { + props: { + cluster: 'foo' + } + }) + + const infoAlert = wrapper.getComponent(InfoAlert) + expect(infoAlert.text()).toContain('No association defined on cluster') + expect(infoAlert.text()).toContain('foo') + }) +}) diff --git a/frontend/tests/views/JobView.spec.ts b/frontend/tests/views/JobView.spec.ts index 778de06da..0250baef8 100644 --- a/frontend/tests/views/JobView.spec.ts +++ b/frontend/tests/views/JobView.spec.ts @@ -8,6 +8,7 @@ import { init_plugins, getMockClusterDataPoller } from '../lib/common' import type { ClusterIndividualJob } from '@/composables/GatewayAPI' import jobRunning from '../assets/job-running.json' import type { RouterMock } from 'vue-router-mock' +import JobFieldRaw from '@/components/job/JobFieldRaw.vue' const mockClusterDataPoller = getMockClusterDataPoller() @@ -33,6 +34,7 @@ describe('JobView.vue', () => { }) test('display job details', () => { mockClusterDataPoller.data.value = jobRunning + mockClusterDataPoller.loaded.value = true const wrapper = mount(JobView, { props: { cluster: 'foo', @@ -45,9 +47,29 @@ describe('JobView.vue', () => { expect(backButton.props('cluster')).toBe('foo') expect(backButton.text()).toBe('Back to jobs') // Check some jobs fields - expect(wrapper.get('dl div#user dd').text()).toBe(jobRunning.user) + + // User field has RouterLink, so check JobFieldRaw component and props + const userField = wrapper.get('dl div#user').getComponent(JobFieldRaw) + expect(userField.props('field')).toBe(jobRunning.user) + expect(userField.props('to')).toEqual({ + name: 'user', + params: { cluster: 'foo', user: jobRunning.user } + }) + + // Account field has RouterLink, so check JobFieldRaw component and props. + // If the account is empty, the component is not rendered. This is actually a + // workaround for this Slurm bug: + // https://support.schedmd.com/show_bug.cgi?id=24215 + if (jobRunning.association.account !== '') { + const accountField = wrapper.get('dl div#account').getComponent(JobFieldRaw) + expect(accountField.props('field')).toBe(jobRunning.association.account) + expect(accountField.props('to')).toEqual({ + name: 'account', + params: { cluster: 'foo', account: jobRunning.association.account } + }) + } + // Fields without RouterLink should have text directly accessible expect(wrapper.get('dl div#group dd').text()).toBe(jobRunning.group) - expect(wrapper.get('dl div#account dd').text()).toBe(jobRunning.association.account) expect(wrapper.get('dl div#priority dd').text()).toBe(jobRunning.priority.number.toString()) expect(wrapper.get('dl div#workdir dd').text()).toBe(jobRunning.working_directory) expect(wrapper.get('dl div#nodes dd').text()).toBe(jobRunning.nodes) diff --git a/frontend/tests/views/UserView.spec.ts b/frontend/tests/views/UserView.spec.ts new file mode 100644 index 000000000..c1127c752 --- /dev/null +++ b/frontend/tests/views/UserView.spec.ts @@ -0,0 +1,133 @@ +import { describe, test, expect, beforeEach, vi } from 'vitest' +import { mount } from '@vue/test-utils' +import { RouterLink } from 'vue-router' +import UserView from '@/views/UserView.vue' +import { init_plugins, getMockClusterDataPoller } from '../lib/common' +import { useRuntimeStore } from '@/stores/runtime' +import type { ClusterAssociation } from '@/composables/GatewayAPI' +import associations from '../assets/associations.json' +import ErrorAlert from '@/components/ErrorAlert.vue' +import InfoAlert from '@/components/InfoAlert.vue' +import LoadingSpinner from '@/components/LoadingSpinner.vue' +import AccountBreadcrumb from '@/components/accounts/AccountBreadcrumb.vue' + +const mockClusterDataPoller = getMockClusterDataPoller() + +vi.mock('@/composables/DataPoller', () => ({ + useClusterDataPoller: () => mockClusterDataPoller +})) + +describe('UserView.vue', () => { + beforeEach(() => { + init_plugins() + useRuntimeStore().availableClusters = [ + { + name: 'foo', + permissions: { roles: [], actions: [] }, + racksdb: true, + infrastructure: 'foo', + metrics: true, + cache: true + } + ] + mockClusterDataPoller.data.value = undefined + mockClusterDataPoller.unable.value = false + mockClusterDataPoller.loaded.value = false + }) + + test('displays user details', () => { + mockClusterDataPoller.loaded.value = true + mockClusterDataPoller.data.value = associations as ClusterAssociation[] + + const wrapper = mount(UserView, { + props: { + cluster: 'foo', + user: 'root' + } + }) + + // Back to accounts button + const buttons = wrapper.findAll('button') + const backButton = buttons.find((btn) => btn.text().includes('Back to accounts')) + expect(backButton).toBeDefined() + + // User heading + const userHeading = wrapper.get('div#user-heading') + expect(userHeading.text()).toContain('User root') + + // root is associated with root account only + expect(userHeading.text()).toContain('1') + expect(userHeading.text()).toContain('account associated') + + // View jobs link + const viewJobsLink = userHeading.getComponent(RouterLink) + expect(viewJobsLink.props('to')).toEqual({ + name: 'jobs', + params: { cluster: 'foo' }, + query: { users: 'root' } + }) + + // User associations table + const userAssociationsTable = wrapper.get('table') + + // Column headers + const columnHeaders = userAssociationsTable.get('thead').findAll('th') + expect(columnHeaders[0].text()).toBe('Account') + expect(columnHeaders[1].text()).toBe('Job limits') + expect(columnHeaders[2].text()).toBe('Resource limits') + expect(columnHeaders[3].text()).toBe('Time limits') + expect(columnHeaders[4].text()).toBe('QOS') + expect(userAssociationsTable.findAll('tbody tr').length).toBeGreaterThan(0) + + // Check presence of breadcrumbs + const breadcrumbs = userAssociationsTable.findAllComponents(AccountBreadcrumb) + expect(breadcrumbs.length).toBeGreaterThan(0) + }) + + test('shows loading spinner when data is not loaded', () => { + mockClusterDataPoller.loaded.value = false + + const wrapper = mount(UserView, { + props: { + cluster: 'foo', + user: 'root' + } + }) + + expect(wrapper.findComponent(LoadingSpinner).exists()).toBe(true) + expect(wrapper.text()).toContain('Loading user details...') + }) + + test('shows error alert when unable to retrieve associations', () => { + mockClusterDataPoller.unable.value = true + mockClusterDataPoller.loaded.value = true + + const wrapper = mount(UserView, { + props: { + cluster: 'foo', + user: 'root' + } + }) + + const errorAlert = wrapper.findComponent(ErrorAlert) + expect(errorAlert.exists()).toBe(true) + expect(errorAlert.text()).toContain('Unable to retrieve associations for cluster') + expect(errorAlert.text()).toContain('foo') + }) + + test('shows info alert when user has no associations', () => { + mockClusterDataPoller.loaded.value = true + mockClusterDataPoller.data.value = [] + + const wrapper = mount(UserView, { + props: { + cluster: 'foo', + user: 'nonexistent' + } + }) + + const infoAlert = wrapper.findComponent(InfoAlert) + expect(infoAlert.exists()).toBe(true) + expect(infoAlert.text()).toContain('User nonexistent has no associations on this cluster') + }) +}) diff --git a/slurmweb/apps/agent.py b/slurmweb/apps/agent.py index 1c2dc374e..03b2acd5b 100644 --- a/slurmweb/apps/agent.py +++ b/slurmweb/apps/agent.py @@ -51,6 +51,7 @@ class SlurmwebAppAgent(SlurmwebWebApp, RFLTokenizedRBACWebApp): SlurmwebAppRoute(f"/v{get_version()}/qos", views.qos), SlurmwebAppRoute(f"/v{get_version()}/reservations", views.reservations), SlurmwebAppRoute(f"/v{get_version()}/accounts", views.accounts), + SlurmwebAppRoute(f"/v{get_version()}/associations", views.associations), SlurmwebAppRoute(f"/v{get_version()}/cache/stats", views.cache_stats), SlurmwebAppRoute( f"/v{get_version()}/cache/reset", views.cache_reset, methods=["POST"] diff --git a/slurmweb/apps/gateway.py b/slurmweb/apps/gateway.py index c22c9a614..8a7e457a8 100644 --- a/slurmweb/apps/gateway.py +++ b/slurmweb/apps/gateway.py @@ -131,6 +131,7 @@ class SlurmwebAppGateway(SlurmwebWebApp, RFLTokenizedWebApp): SlurmwebAppRoute("/api/agents//qos", views.qos), SlurmwebAppRoute("/api/agents//reservations", views.reservations), SlurmwebAppRoute("/api/agents//accounts", views.accounts), + SlurmwebAppRoute("/api/agents//associations", views.associations), SlurmwebAppRoute( "/api/agents//racksdb/", views.racksdb, diff --git a/slurmweb/slurmrestd/__init__.py b/slurmweb/slurmrestd/__init__.py index 28f521f2f..dae009452 100644 --- a/slurmweb/slurmrestd/__init__.py +++ b/slurmweb/slurmrestd/__init__.py @@ -375,6 +375,9 @@ def partitions(self, **kwargs): def accounts(self, **kwargs): return self._request("slurmdb", "accounts", "accounts", **kwargs) + def associations(self: str, **kwargs): + return self._request("slurmdb", "associations", "associations", **kwargs) + def reservations(self: str, **kwargs): return self._request("slurm", "reservations", "reservations", **kwargs) @@ -515,6 +518,11 @@ def accounts(self): super().accounts(), self.filters.accounts ) + def associations(self: str): + return SlurmrestdFiltered.filter_fields( + super().associations(), self.filters.associations + ) + def reservations(self: str): return SlurmrestdFiltered.filter_fields( super().reservations(), self.filters.reservations @@ -587,10 +595,15 @@ def partitions(self): def accounts(self): return self._cached(CacheKey("accounts"), self.cache.accounts, super().accounts) - def reservations(self: str): + def associations(self): + return self._cached( + CacheKey("associations"), self.cache.associations, super().associations + ) + + def reservations(self): return self._cached( CacheKey("reservations"), self.cache.reservations, super().reservations ) - def qos(self: str): + def qos(self): return self._cached(CacheKey("qos"), self.cache.qos, super().qos) diff --git a/slurmweb/slurmrestd/adapters/base.py b/slurmweb/slurmrestd/adapters/base.py index 49ac4b0a7..6649438a2 100644 --- a/slurmweb/slurmrestd/adapters/base.py +++ b/slurmweb/slurmrestd/adapters/base.py @@ -50,6 +50,10 @@ def adapt_slurmdb_accounts(self, data: t.Any) -> t.Any: """Adapt accounts data.""" return data + def adapt_slurmdb_associations(self, data: t.Any) -> t.Any: + """Adapt associations data.""" + return data + def adapt_slurm_reservations(self, data: t.Any) -> t.Any: """Adapt reservations data.""" return data diff --git a/slurmweb/slurmrestd/adapters/v0_0_41.py b/slurmweb/slurmrestd/adapters/v0_0_41.py index 7fd2a0f54..18a956d9d 100644 --- a/slurmweb/slurmrestd/adapters/v0_0_41.py +++ b/slurmweb/slurmrestd/adapters/v0_0_41.py @@ -42,6 +42,40 @@ class AdapterV0_0_41(BaseAdapter): → not used by Slurm-web + responses.200.properties.jobs.items.properties.qosreq → not used by Slurm-web + + GET /slurmdb/v{version}/associations/ + + responses.200.properties.associations.items.properties.accounting.items + .properties.id_alt + → not used by Slurm-web + - parameters.with_deleted + → not used by Slurm-web + - parameters.only_defaults + → not used by Slurm-web + - parameters.without_parent_info + → not used by Slurm-web + - parameters.with_sub_accts + → not used by Slurm-web + - parameters.with_raw_qos + → not used by Slurm-web + - parameters.without_parent_limits + → not used by Slurm-web + - parameters.with_usage + → not used by Slurm-web + + parameters.Include sub acct information + → not used by Slurm-web + + parameters.Include the raw QOS or delta_qos + → not used by Slurm-web + + parameters.Exclude limits from parents + → not used by Slurm-web + + parameters.Exclude parent id/name + → not used by Slurm-web + + parameters.Include usage + → not used by Slurm-web + + parameters.Include deleted associations + → not used by Slurm-web + + parameters.Filter to only defaults + → not used by Slurm-web + """ def adapt_slurmdb_qos(self, data: t.Any) -> t.Any: diff --git a/slurmweb/tests/views/test_agent.py b/slurmweb/tests/views/test_agent.py index 51c6dc7ef..88f5918bb 100644 --- a/slurmweb/tests/views/test_agent.py +++ b/slurmweb/tests/views/test_agent.py @@ -571,6 +571,26 @@ def test_request_accounts(self, slurm_version, api_version): for idx in range(len(response.json)): self.assertEqual(response.json[idx]["name"], accounts_asset[idx]["name"]) + @all_slurm_api_versions + def test_request_associations(self, slurm_version, api_version): + self.setup_slurmrestd(slurm_version, api_version) + [associations_asset] = self.mock_slurmrestd_responses( + slurm_version, + api_version, + [("slurmdb-associations", "associations")], + ) + response = self.client.get(f"/v{get_version()}/associations") + self.assertEqual(response.status_code, 200) + self.assertIsInstance(response.json, list) + self.assertEqual(len(response.json), len(associations_asset)) + for idx in range(len(response.json)): + self.assertEqual( + response.json[idx]["account"], associations_asset[idx]["account"] + ) + self.assertEqual( + response.json[idx]["user"], associations_asset[idx]["user"] + ) + def test_cache_stats_disabled(self): with self.assertLogs("slurmweb", level="WARNING") as cm: response = self.client.get(f"/v{get_version()}/cache/stats") diff --git a/slurmweb/views/agent.py b/slurmweb/views/agent.py index 569a99f4b..4e9bd1d49 100644 --- a/slurmweb/views/agent.py +++ b/slurmweb/views/agent.py @@ -194,6 +194,11 @@ def accounts(): return jsonify(slurmrest("accounts")) +@rbac_action("associations-view") +def associations(): + return jsonify(slurmrest("associations")) + + @rbac_action("cache-view") def cache_stats(): if current_app.cache is None: diff --git a/slurmweb/views/gateway.py b/slurmweb/views/gateway.py index 02cb07e6a..fedfd6c23 100644 --- a/slurmweb/views/gateway.py +++ b/slurmweb/views/gateway.py @@ -336,6 +336,12 @@ def accounts(cluster: str): return proxy_agent(cluster, "accounts", request.token) +@check_jwt +@validate_cluster +def associations(cluster: str): + return proxy_agent(cluster, "associations", request.token) + + @check_jwt @validate_cluster def metrics(cluster: str, metric: str): diff --git a/tests/assets/agent/associations.json b/tests/assets/agent/associations.json new file mode 100644 index 000000000..4d79ca680 --- /dev/null +++ b/tests/assets/agent/associations.json @@ -0,0 +1,1370 @@ +[ + { + "account": "root", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "root", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "root" + }, + { + "account": "admin", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "root", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "admin", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "jwilson" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "root", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "jbeck" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "jthomas" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "progers" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "vhartman" + }, + { + "account": "physic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "root", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "acoustic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "physic", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "acoustic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "acuevas" + }, + { + "account": "acoustic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "dperez" + }, + { + "account": "acoustic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "mcarrillo" + }, + { + "account": "optic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "physic", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "optic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "rcarson" + }, + { + "account": "optic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "sevans" + }, + { + "account": "scientists", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "root", + "qos": [ + "normal", + "study" + ], + "user": "" + } +] diff --git a/tests/assets/agent/status.json b/tests/assets/agent/status.json index 4c97a19f6..adaa2ec1c 100644 --- a/tests/assets/agent/status.json +++ b/tests/assets/agent/status.json @@ -3,6 +3,10 @@ "content-type": "application/json", "status": 200 }, + "associations": { + "content-type": "application/json", + "status": 200 + }, "cache-reset": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/gateway/associations.json b/tests/assets/gateway/associations.json new file mode 100644 index 000000000..4d79ca680 --- /dev/null +++ b/tests/assets/gateway/associations.json @@ -0,0 +1,1370 @@ +[ + { + "account": "root", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "root", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "root" + }, + { + "account": "admin", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "root", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "admin", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "jwilson" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "root", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "jbeck" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "jthomas" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "progers" + }, + { + "account": "biology", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "vhartman" + }, + { + "account": "physic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "root", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "acoustic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "physic", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "acoustic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "acuevas" + }, + { + "account": "acoustic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "dperez" + }, + { + "account": "acoustic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "mcarrillo" + }, + { + "account": "optic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "physic", + "qos": [ + "normal", + "study" + ], + "user": "" + }, + { + "account": "optic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "rcarson" + }, + { + "account": "optic", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "", + "qos": [ + "normal", + "study" + ], + "user": "sevans" + }, + { + "account": "scientists", + "max": { + "jobs": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "active": { + "infinite": true, + "number": 0, + "set": false + }, + "per": { + "accruing": { + "infinite": true, + "number": 0, + "set": false + }, + "count": { + "infinite": true, + "number": 0, + "set": false + }, + "submitted": { + "infinite": true, + "number": 0, + "set": false + }, + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + }, + "total": { + "infinite": true, + "number": 0, + "set": false + } + }, + "per": { + "account": { + "wall_clock": { + "infinite": true, + "number": 0, + "set": false + } + } + }, + "tres": { + "group": { + "active": [], + "minutes": [] + }, + "minutes": { + "per": { + "job": [] + }, + "total": [] + }, + "per": { + "job": [], + "node": [] + }, + "total": [] + } + }, + "parent_account": "root", + "qos": [ + "normal", + "study" + ], + "user": "" + } +] diff --git a/tests/assets/gateway/status.json b/tests/assets/gateway/status.json index 9de52dfe7..b4bb48774 100644 --- a/tests/assets/gateway/status.json +++ b/tests/assets/gateway/status.json @@ -3,6 +3,10 @@ "content-type": "application/json", "status": 200 }, + "associations": { + "content-type": "application/json", + "status": 200 + }, "cache-stats": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/24.05/0.0.41/slurmdb-associations.json b/tests/assets/slurmrestd/24.05/0.0.41/slurmdb-associations.json new file mode 100644 index 000000000..2eac23809 --- /dev/null +++ b/tests/assets/slurmrestd/24.05/0.0.41/slurmdb-associations.json @@ -0,0 +1,1829 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 1, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 2, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 4, + "is_default": true, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 9, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 5, + "is_default": true, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 12, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 13, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 10, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 11, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 6, + "is_default": true, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 7, + "is_default": true, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 16, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 14, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 15, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 8, + "is_default": true, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 17, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 18, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 3, + "is_default": true, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.41", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "/run/slurmrestd/slurmrestd.socket->socket:[2119538481] (fd 8)", + "user": "", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "24", + "micro": "3", + "minor": "05" + }, + "release": "24.05.3", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/24.05/0.0.41/status.json b/tests/assets/slurmrestd/24.05/0.0.41/status.json index 95f34e9dc..a6b220006 100644 --- a/tests/assets/slurmrestd/24.05/0.0.41/status.json +++ b/tests/assets/slurmrestd/24.05/0.0.41/status.json @@ -159,6 +159,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/24.11/0.0.41/slurmdb-associations.json b/tests/assets/slurmrestd/24.11/0.0.41/slurmdb-associations.json new file mode 100644 index 000000000..f281591bc --- /dev/null +++ b/tests/assets/slurmrestd/24.11/0.0.41/slurmdb-associations.json @@ -0,0 +1,1811 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.41", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "[admin]:42010(fd:11)", + "user": "", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "24", + "micro": "5", + "minor": "11" + }, + "release": "24.11.5", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/24.11/0.0.41/status.json b/tests/assets/slurmrestd/24.11/0.0.41/status.json index 700af1825..c6e3bc20b 100644 --- a/tests/assets/slurmrestd/24.11/0.0.41/status.json +++ b/tests/assets/slurmrestd/24.11/0.0.41/status.json @@ -175,6 +175,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/24.11/0.0.42/slurm-node-planned.json b/tests/assets/slurmrestd/24.11/0.0.42/slurm-node-planned.json new file mode 100644 index 000000000..9d61fa2ab --- /dev/null +++ b/tests/assets/slurmrestd/24.11/0.0.42/slurm-node-planned.json @@ -0,0 +1,135 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266697 + }, + "cluster_name": "", + "cores": 16, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 432, + "free_mem": { + "set": true, + "infinite": false, + "number": 2368 + }, + "cpus": 32, + "effective_cpus": 32, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "gpu:h100:2,gpu:h200:4", + "gres_drained": "N/A", + "gres_used": "gpu:h100:0(IDX:N/A),gpu:h200:0(IDX:N/A)", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763479176 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "ia1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "ia1", + "hostname": "ia1", + "state": [ + "IDLE", + "PLANNED" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "standard" + ], + "port": 6818, + "real_memory": 524288, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 0 + }, + "reason_set_by_user": "", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 0, + "alloc_cpus": 0, + "alloc_idle_cpus": 32, + "tres_used": "", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763125563 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "tres": "cpu=32,mem=512G,billing=32", + "version": "24.11.5" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763479176 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.42", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "[admin]:42010(fd:11)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "24", + "micro": "5", + "minor": "11" + }, + "release": "24.11.5", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/24.11/0.0.42/slurmdb-associations.json b/tests/assets/slurmrestd/24.11/0.0.42/slurmdb-associations.json new file mode 100644 index 000000000..1b25b942f --- /dev/null +++ b/tests/assets/slurmrestd/24.11/0.0.42/slurmdb-associations.json @@ -0,0 +1,1811 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.42", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "[admin]:42010(fd:11)", + "user": "", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "24", + "micro": "5", + "minor": "11" + }, + "release": "24.11.5", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/24.11/0.0.42/status.json b/tests/assets/slurmrestd/24.11/0.0.42/status.json index 97ff47b17..e2cc4ef6a 100644 --- a/tests/assets/slurmrestd/24.11/0.0.42/status.json +++ b/tests/assets/slurmrestd/24.11/0.0.42/status.json @@ -115,6 +115,10 @@ "content-type": "application/json", "status": 200 }, + "slurm-node-planned": { + "content-type": "application/json", + "status": 200 + }, "slurm-node-unfound": { "content-type": "application/json", "status": 200 @@ -159,6 +163,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/25.05/0.0.41/slurm-node-with-gpus-model-mixed.json b/tests/assets/slurmrestd/25.05/0.0.41/slurm-node-with-gpus-model-mixed.json new file mode 100644 index 000000000..f01af786b --- /dev/null +++ b/tests/assets/slurmrestd/25.05/0.0.41/slurm-node-with-gpus-model-mixed.json @@ -0,0 +1,135 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266697 + }, + "cluster_name": "", + "cores": 16, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 524, + "free_mem": { + "set": true, + "infinite": false, + "number": 1493 + }, + "cpus": 32, + "effective_cpus": 32, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "gpu:h100:4", + "gres_drained": "N/A", + "gres_used": "gpu:h100:2(IDX:0-1)", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763481719 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "gpu1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "gpu1", + "hostname": "gpu1", + "state": [ + "MIXED", + "PLANNED" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "gpu" + ], + "port": 6818, + "real_memory": 524288, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 0 + }, + "reason_set_by_user": "", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 1536, + "alloc_cpus": 2, + "alloc_idle_cpus": 30, + "tres_used": "cpu=2,mem=1.50G", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763117550 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "tres": "cpu=32,mem=512G,billing=32", + "version": "25.05.4" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763481744 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.41", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "4", + "minor": "05" + }, + "release": "25.05.4", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.05/0.0.41/slurmdb-associations.json b/tests/assets/slurmrestd/25.05/0.0.41/slurmdb-associations.json new file mode 100644 index 000000000..ae0beb8b4 --- /dev/null +++ b/tests/assets/slurmrestd/25.05/0.0.41/slurmdb-associations.json @@ -0,0 +1,1829 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.41", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "4", + "minor": "05" + }, + "release": "25.05.4", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.05/0.0.41/status.json b/tests/assets/slurmrestd/25.05/0.0.41/status.json index 822ca90a3..e2cc4ef6a 100644 --- a/tests/assets/slurmrestd/25.05/0.0.41/status.json +++ b/tests/assets/slurmrestd/25.05/0.0.41/status.json @@ -163,6 +163,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/25.05/0.0.42/slurm-node-planned.json b/tests/assets/slurmrestd/25.05/0.0.42/slurm-node-planned.json new file mode 100644 index 000000000..23f812f11 --- /dev/null +++ b/tests/assets/slurmrestd/25.05/0.0.42/slurm-node-planned.json @@ -0,0 +1,135 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266697 + }, + "cluster_name": "", + "cores": 16, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 483, + "free_mem": { + "set": true, + "infinite": false, + "number": 1878 + }, + "cpus": 32, + "effective_cpus": 32, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "gpu:h100:4", + "gres_drained": "N/A", + "gres_used": "gpu:h100:0(IDX:N/A)", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763479263 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "gpu1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "gpu1", + "hostname": "gpu1", + "state": [ + "IDLE", + "PLANNED" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "gpu" + ], + "port": 6818, + "real_memory": 524288, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 0 + }, + "reason_set_by_user": "", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 0, + "alloc_cpus": 0, + "alloc_idle_cpus": 32, + "tres_used": "", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763117550 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "tres": "cpu=32,mem=512G,billing=32", + "version": "25.05.4" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763479267 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.42", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "4", + "minor": "05" + }, + "release": "25.05.4", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.05/0.0.42/slurmdb-associations.json b/tests/assets/slurmrestd/25.05/0.0.42/slurmdb-associations.json new file mode 100644 index 000000000..3836551b1 --- /dev/null +++ b/tests/assets/slurmrestd/25.05/0.0.42/slurmdb-associations.json @@ -0,0 +1,1829 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.42", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "4", + "minor": "05" + }, + "release": "25.05.4", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.05/0.0.42/status.json b/tests/assets/slurmrestd/25.05/0.0.42/status.json index 97ff47b17..e2cc4ef6a 100644 --- a/tests/assets/slurmrestd/25.05/0.0.42/status.json +++ b/tests/assets/slurmrestd/25.05/0.0.42/status.json @@ -115,6 +115,10 @@ "content-type": "application/json", "status": 200 }, + "slurm-node-planned": { + "content-type": "application/json", + "status": 200 + }, "slurm-node-unfound": { "content-type": "application/json", "status": 200 @@ -159,6 +163,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/25.05/0.0.43/slurm-node-planned.json b/tests/assets/slurmrestd/25.05/0.0.43/slurm-node-planned.json new file mode 100644 index 000000000..386d5dfc5 --- /dev/null +++ b/tests/assets/slurmrestd/25.05/0.0.43/slurm-node-planned.json @@ -0,0 +1,143 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266697 + }, + "tls_cert_last_renewal": { + "set": true, + "infinite": false, + "number": 0 + }, + "cert_flags": [], + "cluster_name": "", + "cores": 16, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 483, + "free_mem": { + "set": true, + "infinite": false, + "number": 1878 + }, + "cpus": 32, + "effective_cpus": 32, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "gpu:h100:4", + "gres_drained": "N/A", + "gres_used": "gpu:h100:0(IDX:N/A)", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763479237 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "gpu1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "gpu1", + "hostname": "gpu1", + "state": [ + "IDLE", + "COMPLETING", + "PLANNED" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "gpu" + ], + "port": 6818, + "real_memory": 524288, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 0 + }, + "reason_set_by_user": "", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 0, + "alloc_cpus": 0, + "alloc_idle_cpus": 32, + "tres_used": "", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763117550 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "topology": "", + "tres": "cpu=32,mem=512G,billing=32", + "version": "25.05.4" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763479238 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.43", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "4", + "minor": "05" + }, + "release": "25.05.4", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.05/0.0.43/slurm-node-with-gpus-model-mixed.json b/tests/assets/slurmrestd/25.05/0.0.43/slurm-node-with-gpus-model-mixed.json new file mode 100644 index 000000000..4cf34990f --- /dev/null +++ b/tests/assets/slurmrestd/25.05/0.0.43/slurm-node-with-gpus-model-mixed.json @@ -0,0 +1,141 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266697 + }, + "tls_cert_last_renewal": { + "set": true, + "infinite": false, + "number": 0 + }, + "cert_flags": [], + "cluster_name": "", + "cores": 16, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 212, + "free_mem": { + "set": true, + "infinite": false, + "number": 870 + }, + "cpus": 32, + "effective_cpus": 32, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "gpu:h100:4", + "gres_drained": "N/A", + "gres_used": "gpu:h100:1(IDX:0)", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763482411 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "gpu1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "gpu1", + "hostname": "gpu1", + "state": [ + "MIXED" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "gpu" + ], + "port": 6818, + "real_memory": 524288, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 0 + }, + "reason_set_by_user": "", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 1024, + "alloc_cpus": 1, + "alloc_idle_cpus": 31, + "tres_used": "cpu=1,mem=1G", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763117550 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "topology": "", + "tres": "cpu=32,mem=512G,billing=32", + "version": "25.05.4" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763482844 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.43", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "4", + "minor": "05" + }, + "release": "25.05.4", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.05/0.0.43/slurmdb-associations.json b/tests/assets/slurmrestd/25.05/0.0.43/slurmdb-associations.json new file mode 100644 index 000000000..ab5611d53 --- /dev/null +++ b/tests/assets/slurmrestd/25.05/0.0.43/slurmdb-associations.json @@ -0,0 +1,1829 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 1, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 2, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 4, + "is_default": false, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 9, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 5, + "is_default": false, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 12, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 13, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 10, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 11, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 6, + "is_default": false, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 7, + "is_default": false, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 16, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 14, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 15, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 8, + "is_default": false, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 17, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 18, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 3, + "is_default": false, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.43", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "4", + "minor": "05" + }, + "release": "25.05.4", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.05/0.0.43/status.json b/tests/assets/slurmrestd/25.05/0.0.43/status.json index 97ff47b17..e2cc4ef6a 100644 --- a/tests/assets/slurmrestd/25.05/0.0.43/status.json +++ b/tests/assets/slurmrestd/25.05/0.0.43/status.json @@ -115,6 +115,10 @@ "content-type": "application/json", "status": 200 }, + "slurm-node-planned": { + "content-type": "application/json", + "status": 200 + }, "slurm-node-unfound": { "content-type": "application/json", "status": 200 @@ -159,6 +163,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/25.11/0.0.41/slurm-node-draining.json b/tests/assets/slurmrestd/25.11/0.0.41/slurm-node-draining.json new file mode 100644 index 000000000..604a241d2 --- /dev/null +++ b/tests/assets/slurmrestd/25.11/0.0.41/slurm-node-draining.json @@ -0,0 +1,135 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266696 + }, + "cluster_name": "", + "cores": 32, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 462, + "free_mem": { + "set": true, + "infinite": false, + "number": 2138 + }, + "cpus": 64, + "effective_cpus": 64, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "", + "gres_drained": "N/A", + "gres_used": "", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763479149 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "cn1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "cn1", + "hostname": "cn1", + "state": [ + "MIXED", + "DRAIN" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "normal" + ], + "port": 6818, + "real_memory": 131072, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "ECC memory error", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 1763479152 + }, + "reason_set_by_user": "slurm", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 20480, + "alloc_cpus": 40, + "alloc_idle_cpus": 24, + "tres_used": "cpu=40,mem=20G", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763120974 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "tres": "cpu=64,mem=128G,billing=64", + "version": "25.11.0" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763479153 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.41", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "0", + "minor": "11" + }, + "release": "25.11.0", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.11/0.0.41/slurm-node-planned.json b/tests/assets/slurmrestd/25.11/0.0.41/slurm-node-planned.json new file mode 100644 index 000000000..1aa014d7a --- /dev/null +++ b/tests/assets/slurmrestd/25.11/0.0.41/slurm-node-planned.json @@ -0,0 +1,135 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266697 + }, + "cluster_name": "", + "cores": 16, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 424, + "free_mem": { + "set": true, + "infinite": false, + "number": 2491 + }, + "cpus": 32, + "effective_cpus": 32, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "gpu:h100:4", + "gres_drained": "N/A", + "gres_used": "gpu:h100:0(IDX:N/A)", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763479152 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "gpu1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "gpu1", + "hostname": "gpu1", + "state": [ + "IDLE", + "PLANNED" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "gpu" + ], + "port": 6818, + "real_memory": 524288, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 0 + }, + "reason_set_by_user": "", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 0, + "alloc_cpus": 0, + "alloc_idle_cpus": 32, + "tres_used": "", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763120974 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "tres": "cpu=32,mem=512G,billing=32", + "version": "25.11.0" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763479153 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.41", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "0", + "minor": "11" + }, + "release": "25.11.0", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.11/0.0.41/slurmdb-associations.json b/tests/assets/slurmrestd/25.11/0.0.41/slurmdb-associations.json new file mode 100644 index 000000000..bb999ee7e --- /dev/null +++ b/tests/assets/slurmrestd/25.11/0.0.41/slurmdb-associations.json @@ -0,0 +1,1829 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.41", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "nobody", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "0", + "minor": "11" + }, + "release": "25.11.0", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.11/0.0.41/status.json b/tests/assets/slurmrestd/25.11/0.0.41/status.json index 72ce4c16c..8a294210e 100644 --- a/tests/assets/slurmrestd/25.11/0.0.41/status.json +++ b/tests/assets/slurmrestd/25.11/0.0.41/status.json @@ -107,6 +107,10 @@ "content-type": "application/json", "status": 200 }, + "slurm-node-draining": { + "content-type": "application/json", + "status": 200 + }, "slurm-node-idle": { "content-type": "application/json", "status": 200 @@ -115,6 +119,10 @@ "content-type": "application/json", "status": 200 }, + "slurm-node-planned": { + "content-type": "application/json", + "status": 200 + }, "slurm-node-unfound": { "content-type": "application/json", "status": 200 @@ -171,6 +179,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/25.11/0.0.42/slurm-node-planned.json b/tests/assets/slurmrestd/25.11/0.0.42/slurm-node-planned.json new file mode 100644 index 000000000..d7f967395 --- /dev/null +++ b/tests/assets/slurmrestd/25.11/0.0.42/slurm-node-planned.json @@ -0,0 +1,136 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266697 + }, + "cluster_name": "", + "cores": 16, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 424, + "free_mem": { + "set": true, + "infinite": false, + "number": 2491 + }, + "cpus": 32, + "effective_cpus": 32, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "gpu:h100:4", + "gres_drained": "N/A", + "gres_used": "gpu:h100:0(IDX:N/A)", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763479147 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "gpu1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "gpu1", + "hostname": "gpu1", + "state": [ + "IDLE", + "COMPLETING", + "PLANNED" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "gpu" + ], + "port": 6818, + "real_memory": 524288, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 0 + }, + "reason_set_by_user": "", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 0, + "alloc_cpus": 0, + "alloc_idle_cpus": 32, + "tres_used": "", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763120974 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "tres": "cpu=32,mem=512G,billing=32", + "version": "25.11.0" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763479148 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.42", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "0", + "minor": "11" + }, + "release": "25.11.0", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.11/0.0.42/slurmdb-associations.json b/tests/assets/slurmrestd/25.11/0.0.42/slurmdb-associations.json new file mode 100644 index 000000000..ebfb88f14 --- /dev/null +++ b/tests/assets/slurmrestd/25.11/0.0.42/slurmdb-associations.json @@ -0,0 +1,1829 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 0, + "is_default": false, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.42", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "nobody", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "0", + "minor": "11" + }, + "release": "25.11.0", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.11/0.0.42/status.json b/tests/assets/slurmrestd/25.11/0.0.42/status.json index 72ce4c16c..3f7a3fcad 100644 --- a/tests/assets/slurmrestd/25.11/0.0.42/status.json +++ b/tests/assets/slurmrestd/25.11/0.0.42/status.json @@ -115,6 +115,10 @@ "content-type": "application/json", "status": 200 }, + "slurm-node-planned": { + "content-type": "application/json", + "status": 200 + }, "slurm-node-unfound": { "content-type": "application/json", "status": 200 @@ -171,6 +175,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/25.11/0.0.43/slurm-node-planned.json b/tests/assets/slurmrestd/25.11/0.0.43/slurm-node-planned.json new file mode 100644 index 000000000..64a3ae7a7 --- /dev/null +++ b/tests/assets/slurmrestd/25.11/0.0.43/slurm-node-planned.json @@ -0,0 +1,143 @@ +{ + "nodes": [ + { + "architecture": "x86_64", + "burstbuffer_network_address": "", + "boards": 1, + "boot_time": { + "set": true, + "infinite": false, + "number": 1758266697 + }, + "tls_cert_last_renewal": { + "set": true, + "infinite": false, + "number": 0 + }, + "cert_flags": [], + "cluster_name": "", + "cores": 16, + "specialized_cores": 0, + "cpu_binding": 0, + "cpu_load": 458, + "free_mem": { + "set": true, + "infinite": false, + "number": 2955 + }, + "cpus": 32, + "effective_cpus": 32, + "specialized_cpus": "", + "energy": { + "average_watts": 0, + "base_consumed_energy": 0, + "consumed_energy": 0, + "current_watts": { + "set": true, + "infinite": false, + "number": 0 + }, + "previous_consumed_energy": 0, + "last_collected": 0 + }, + "external_sensors": {}, + "extra": "", + "power": {}, + "features": [], + "active_features": [], + "gpu_spec": "", + "gres": "gpu:h100:4", + "gres_drained": "N/A", + "gres_used": "gpu:h100:0(IDX:N/A)", + "instance_id": "", + "instance_type": "", + "last_busy": { + "set": true, + "infinite": false, + "number": 1763479143 + }, + "mcs_label": "", + "specialized_memory": 0, + "name": "gpu1", + "next_state_after_reboot": [ + "INVALID" + ], + "address": "gpu1", + "hostname": "gpu1", + "state": [ + "IDLE", + "COMPLETING", + "PLANNED" + ], + "operating_system": "Linux 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27)", + "owner": "", + "partitions": [ + "gpu" + ], + "port": 6818, + "real_memory": 524288, + "res_cores_per_gpu": 0, + "comment": "", + "reason": "", + "reason_changed_at": { + "set": true, + "infinite": false, + "number": 0 + }, + "reason_set_by_user": "", + "resume_after": { + "set": true, + "infinite": false, + "number": 0 + }, + "reservation": "", + "alloc_memory": 0, + "alloc_cpus": 0, + "alloc_idle_cpus": 32, + "tres_used": "", + "tres_weighted": 0.0, + "slurmd_start_time": { + "set": true, + "infinite": false, + "number": 1763120974 + }, + "sockets": 2, + "threads": 1, + "temporary_disk": 0, + "weight": 1, + "topology": "", + "tres": "cpu=32,mem=512G,billing=32", + "version": "25.11.0" + } + ], + "last_update": { + "set": true, + "infinite": false, + "number": 1763479144 + }, + "meta": { + "plugin": { + "type": "openapi/slurmctld", + "name": "Slurm OpenAPI slurmctld", + "data_parser": "data_parser/v0.0.43", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "root", + "group": "root" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "0", + "minor": "11" + }, + "release": "25.11.0", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.11/0.0.43/slurmdb-associations.json b/tests/assets/slurmrestd/25.11/0.0.43/slurmdb-associations.json new file mode 100644 index 000000000..10c0d187e --- /dev/null +++ b/tests/assets/slurmrestd/25.11/0.0.43/slurmdb-associations.json @@ -0,0 +1,1829 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 1, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 2, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 4, + "is_default": false, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 9, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 5, + "is_default": false, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 12, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 13, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 10, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 11, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 6, + "is_default": false, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 7, + "is_default": false, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 16, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 14, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 15, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 8, + "is_default": false, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 17, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 18, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 3, + "is_default": false, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.43", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "nobody", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "0", + "minor": "11" + }, + "release": "25.11.0", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.11/0.0.43/status.json b/tests/assets/slurmrestd/25.11/0.0.43/status.json index 72ce4c16c..3f7a3fcad 100644 --- a/tests/assets/slurmrestd/25.11/0.0.43/status.json +++ b/tests/assets/slurmrestd/25.11/0.0.43/status.json @@ -115,6 +115,10 @@ "content-type": "application/json", "status": 200 }, + "slurm-node-planned": { + "content-type": "application/json", + "status": 200 + }, "slurm-node-unfound": { "content-type": "application/json", "status": 200 @@ -171,6 +175,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200 diff --git a/tests/assets/slurmrestd/25.11/0.0.44/slurmdb-associations.json b/tests/assets/slurmrestd/25.11/0.0.44/slurmdb-associations.json new file mode 100644 index 000000000..a8942de4f --- /dev/null +++ b/tests/assets/slurmrestd/25.11/0.0.44/slurmdb-associations.json @@ -0,0 +1,1829 @@ +{ + "associations": [ + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 1, + "is_default": false, + "lineage": "/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "root", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 2, + "is_default": true, + "lineage": "/0-root/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "root" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 4, + "is_default": false, + "lineage": "/admin/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "admin", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 9, + "is_default": true, + "lineage": "/admin/0-jwilson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jwilson" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 5, + "is_default": false, + "lineage": "/biology/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 12, + "is_default": true, + "lineage": "/biology/0-jbeck/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jbeck" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 13, + "is_default": true, + "lineage": "/biology/0-jthomas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "jthomas" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 10, + "is_default": true, + "lineage": "/biology/0-progers/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "progers" + }, + { + "accounting": [], + "account": "biology", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 11, + "is_default": true, + "lineage": "/biology/0-vhartman/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "vhartman" + }, + { + "accounting": [], + "account": "physic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 6, + "is_default": false, + "lineage": "/physic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 7, + "is_default": false, + "lineage": "/physic/acoustic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 16, + "is_default": true, + "lineage": "/physic/acoustic/0-acuevas/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "acuevas" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 14, + "is_default": true, + "lineage": "/physic/acoustic/0-dperez/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "dperez" + }, + { + "accounting": [], + "account": "acoustic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 15, + "is_default": true, + "lineage": "/physic/acoustic/0-mcarrillo/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "mcarrillo" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 8, + "is_default": false, + "lineage": "/physic/optic/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "physic", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 17, + "is_default": true, + "lineage": "/physic/optic/0-rcarson/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "rcarson" + }, + { + "accounting": [], + "account": "optic", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 18, + "is_default": true, + "lineage": "/physic/optic/0-sevans/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "sevans" + }, + { + "accounting": [], + "account": "scientists", + "cluster": "hpc", + "comment": "", + "default": { + "qos": "" + }, + "flags": [], + "max": { + "jobs": { + "per": { + "count": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "submitted": { + "set": false, + "infinite": true, + "number": 0 + }, + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "active": { + "set": false, + "infinite": true, + "number": 0 + }, + "accruing": { + "set": false, + "infinite": true, + "number": 0 + }, + "total": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "tres": { + "total": [], + "group": { + "minutes": [], + "active": [] + }, + "minutes": { + "total": [], + "per": { + "job": [] + } + }, + "per": { + "job": [], + "node": [] + } + }, + "per": { + "account": { + "wall_clock": { + "set": false, + "infinite": true, + "number": 0 + } + } + } + }, + "id": 3, + "is_default": false, + "lineage": "/scientists/", + "min": { + "priority_threshold": { + "set": false, + "infinite": true, + "number": 0 + } + }, + "parent_account": "root", + "partition": "", + "priority": { + "set": false, + "infinite": true, + "number": 0 + }, + "qos": [ + "normal", + "study" + ], + "shares_raw": 1, + "user": "" + } + ], + "meta": { + "plugin": { + "type": "openapi/slurmdbd", + "name": "Slurm OpenAPI slurmdbd", + "data_parser": "data_parser/v0.0.44", + "accounting_storage": "accounting_storage/slurmdbd" + }, + "client": { + "source": "admin:6820(fd:48)", + "user": "nobody", + "group": "" + }, + "command": [], + "slurm": { + "version": { + "major": "25", + "micro": "0", + "minor": "11" + }, + "release": "25.11.0", + "cluster": "hpc" + } + }, + "errors": [], + "warnings": [] +} diff --git a/tests/assets/slurmrestd/25.11/0.0.44/status.json b/tests/assets/slurmrestd/25.11/0.0.44/status.json index 7eea19532..6edf375fc 100644 --- a/tests/assets/slurmrestd/25.11/0.0.44/status.json +++ b/tests/assets/slurmrestd/25.11/0.0.44/status.json @@ -175,6 +175,10 @@ "content-type": "application/json", "status": 200 }, + "slurmdb-associations": { + "content-type": "application/json", + "status": 200 + }, "slurmdb-job-archived": { "content-type": "application/json", "status": 200