openapi: 3.0.3 info: title: Orchestrator Admin Settings Clusters API description: 'API for the GPUaaS Orchestrator microservice. Handles tenants, clusters, VMs, storage, networking, catalogs, quotas, and related infrastructure operations. ' version: 1.0.0 contact: name: GPUaaS Platform servers: - url: / description: Relative base (prefix with deployment base URL) security: - bearerAuth: [] tags: - name: Clusters paths: /tenants/{tenant}/clusters: get: tags: - Clusters summary: List clusters parameters: - name: tenant in: path required: true schema: type: string responses: '200': description: List of clusters '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' post: tags: - Clusters summary: Create cluster parameters: - name: tenant in: path required: true schema: type: string responses: '200': description: Cluster created '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '201': $ref: '#/components/responses/Created' '409': $ref: '#/components/responses/Conflict' /tenants/{tenant}/clusters/external: post: tags: - Clusters summary: Onboard external cluster parameters: - name: tenant in: path required: true schema: type: string responses: '200': description: External cluster onboarded '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '201': $ref: '#/components/responses/Created' '409': $ref: '#/components/responses/Conflict' /tenants/{tenant}/clusters/{clusterID}: get: tags: - Clusters summary: Get cluster parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: Cluster '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' patch: tags: - Clusters summary: Update cluster parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: Updated '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' put: tags: - Clusters summary: Scale cluster parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: Scaled '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' delete: tags: - Clusters summary: Delete cluster parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: Deleted '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '204': $ref: '#/components/responses/NoContent' /tenants/{tenant}/clusters/{clusterID}/kubeconfig: get: tags: - Clusters summary: Get cluster kubeconfig parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: Kubeconfig '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /tenants/{tenant}/clusters/{clusterID}/workloads: get: tags: - Clusters summary: Get workloads parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: List of workloads '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' post: tags: - Clusters summary: Add workloads parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: Workloads added '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '201': $ref: '#/components/responses/Created' '409': $ref: '#/components/responses/Conflict' delete: tags: - Clusters summary: Delete workloads parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: Deleted '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '204': $ref: '#/components/responses/NoContent' /tenants/{tenant}/clusters/{clusterID}/upgrade: post: tags: - Clusters summary: Upgrade cluster parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: Upgrade started '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '201': $ref: '#/components/responses/Created' '409': $ref: '#/components/responses/Conflict' /tenants/{tenant}/clusters/{clusterID}/migs: get: tags: - Clusters summary: Get MIG status parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: MIG status '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' post: tags: - Clusters summary: Enable MIG parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: MIG enabled '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '201': $ref: '#/components/responses/Created' '409': $ref: '#/components/responses/Conflict' /tenants/{tenant}/clusters/{clusterID}/migs/capacity: get: tags: - Clusters summary: Get cluster MIG capacity parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: MIG capacity '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' /tenants/{tenant}/clusters/{clusterID}/csi-drivers: post: tags: - Clusters summary: Deploy CSI driver parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string responses: '200': description: CSI deployed '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '201': $ref: '#/components/responses/Created' '409': $ref: '#/components/responses/Conflict' /tenants/{tenant}/clusters/{clusterID}/csi-drivers/{csiID}: delete: tags: - Clusters summary: Delete CSI driver parameters: - name: tenant in: path required: true schema: type: string - name: clusterID in: path required: true schema: type: string - name: csiID in: path required: true schema: type: string responses: '200': description: Deleted '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' '204': $ref: '#/components/responses/NoContent' /clusters/versions: get: tags: - Clusters summary: Get cluster versions operationId: getClusterVersions responses: '200': description: List of versions '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' components: responses: NoContent: description: No Content - success with no response body InternalServerError: description: Internal Server Error - server error Unauthorized: description: Unauthorized - missing or invalid authentication BadRequest: description: Bad Request - invalid or malformed request Conflict: description: Conflict - resource conflict (e.g. duplicate) NotFound: description: Not Found - resource does not exist Forbidden: description: Forbidden - insufficient permissions Created: description: Created - resource created successfully securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: JWT from auth middleware