openapi: 3.0.3
info:
  title: Eliatra Managed EOD API (MEOD)
  version: '1.0'
  description: The MEOD API to administrate your managed OpenSearch clusters
  contact:
    name: Eliatra
    url: https://eliatra.com
    email: info@eliatra.com
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
servers:
  - url: https://api.controlplane.prod.eliatra.cloud/v1
  - url: https://api.controlplane.staging.eliatra.cloud/v1
  - url: https://api.controlplane.dev.eliatra.cloud/v1
security:
  - bearerAuth: []
tags:
  - name: Clusters
    description: Endpoints interacting with OpenSearch clusters
  - name: Accounts
    description: Endpoints interacting with MEOD accounts
  - name: Limits/Costs
    description: Endpoints interacting with limits/costs
  - name: Logs
    description: |
      We expose an endpoint under <code>/v1/clusterlogs</code> to retrieve cluster logs (logfiles of all nodes and dashboard instances).
      <p/>
      </ul>
      <li>/v1/clusterlogs</li>
      </ul>
      <p/>
      Requests need to have a mandatory <code>X-Scope-OrgID</code> HTTP header which denotes the cluster ID for which the logs should be retrieved.
      Requester needs also to be authenticated as <a href="https://docs.meod.eliatra.cloud" target="_blank">explained here</a>.
  - name: Metrics
    description: |
      We expose a <a href="https://prometheus.io/docs/prometheus/latest/querying/api/" target="_blank">Prometheus compatible API</a> under <code>/v1/clustermetrics</code>.
      <p/>
      </ul>
      <li><code>/v1/clustermetrics/label/{label_name}/values</code></li>
      <li><code>/v1/clustermetrics/query_range</code></li>
      <li><code>/v1/clustermetrics/query</code></li>
      <li><code>/v1/clustermetrics/series</code></li>
      <li><code>/v1/clustermetrics/labels</code></li>
      </ul>
      <p/>
      Requests need to have a mandatory <code>X-Scope-OrgID</code> HTTP header which denotes the cluster ID for which metrics should be retrieved.
      Requester needs also to be authenticated as <a href="https://docs.meod.eliatra.cloud" target="_blank">explained here</a>.
      <p/>
      Alle OpenSearch metrics starts with <code>opensearch_</code> and maps to the node info and node stats requests.
paths:
  /accounts:
    get:
      operationId: getOwnAccount
      tags:
        - Accounts
      description: |
        Get own account (the callers own account) or return 404 if the caller does not have one yet."
      summary: Get own account.
      responses:
        '200':
          description: An Account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountGet'
        '404':
          $ref: '#/components/responses/NoContent'
        default:
          $ref: '#/components/responses/DefaultError'
    put:
      operationId: updateOwnAccount
      tags:
        - Accounts
      description: |
        Update own account (the callers own account) or return 404 if the caller does not have one yet."
      summary: Update own account.
      requestBody:
        required: true
        description: Object containing account update information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Account'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '404':
          $ref: '#/components/responses/NoContent'
        default:
          $ref: '#/components/responses/DefaultError'
    post:
      operationId: createAccountAsync
      tags:
        - Accounts
      description: |
        Create a new account asynchronously and return
        the resource id also in the location header.
        Check the status field - if it is `ready` the account is usable.
      summary: Create a new account asynchronously.
      requestBody:
        required: true
        description: Object containing account creation parameters.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountCreate'
      responses:
        '202':
          $ref: '#/components/responses/AsyncLocation'
        default:
          $ref: '#/components/responses/DefaultError'
  /clusters:
    get:
      operationId: getClustersForAccount
      tags:
        - Clusters
      description: Get all clusters the caller owns.
      summary: Get all clusters the caller owns.
      parameters:
        - name: deleted
          description: If true, the endpoint returns also deleted clusters. Default is <code>false</code>.
          in: query
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Clusters'
        default:
          $ref: '#/components/responses/DefaultError'
    post:
      operationId: createClusterAsync
      tags:
        - Clusters
      description: Create a new OpenSearch cluster asynchronously.
      summary: Create a new OpenSearch cluster asynchronously.
      requestBody:
        required: true
        description: Object containing cluster creation parameters.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusterCreate'
      responses:
        '202':
          $ref: '#/components/responses/AsyncLocation'
        default:
          $ref: '#/components/responses/DefaultError'
  /clusters/{clusterIUUID}:
    get:
      operationId: getCluster
      tags:
        - Clusters
      description: Get an OpenSearch cluster.
      summary: Get an OpenSearch cluster (must be owned by the caller, if not 404 is returned).
      parameters:
        - name: clusterIUUID
          description: Internal UUID (IUUID) identifier of the cluster
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: deleted
          description: If true, the endpoint returns also deleted clusters. Default is <code>false</code>.
          in: query
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cluster'
        default:
          $ref: '#/components/responses/DefaultError'
    put:
      operationId: updateCluster
      tags:
        - Clusters
      description: Update a cluster
      summary: Update a cluster
      parameters:
        - name: clusterIUUID
          description: Internal UUID (IUUID) identifier of the cluster to get (must be owned by the caller, if not 404 is returned).
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Object containing cluster update parameters.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusterSpec'
      responses:
        '202':
          $ref: '#/components/responses/AsyncLocation'
        default:
          $ref: '#/components/responses/DefaultError'
    delete:
      operationId: deleteCluster
      tags:
        - Clusters
      description: Delete a cluster
      summary: Delete a cluster
      parameters:
        - name: clusterIUUID
          description: Internal UUID (IUUID) identifier of the cluster to delete (must be owned by the caller, if not 404 is returned).
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '202':
          $ref: '#/components/responses/AsyncLocation'
        default:
          $ref: '#/components/responses/DefaultError'
  /versions:
    get:
      tags:
        - Clusters
      summary: List all supported EOD and OpenSearch versions
      description: Returns a list of supported EOD and OpenSearch versions
      operationId: getVersions
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Version'
  /resources:
    post:
      operationId: verifyResource
      tags:
        - Limits/Costs
      description: |
        Retrieve limits/usage/costs and validate new cluster requests.
      summary: Retrieve limits/usage/costs and validate new cluster requests.
      requestBody:
        required: true
        description: Object containing requested resources.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResourceVerifyRequest'
      responses:
        '200':
          description: Object containing limits/usage/costs information and validation results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceVerifyResponse'
        '400':
          description: Bad request.
        default:
          $ref: '#/components/responses/DefaultError'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  schemas:
    Error:
      type: object
      description: General Error object
      required:
        - status
        - code
        - timestamp
        - errors
      properties:
        status:
          description: The type of error status.
          type: string
          enum:
            - VALIDATION_ERROR
            - AUTHORIZATION_ERROR
            - NOT_FOUND
            - INTERNAL_SERVER_ERROR
            - BAD_REQUEST
            - UNPROCESSABLE
            - OTHER
          example: VALIDATION_ERROR
        code:
          description: The HTTP status code applicable to this problem.
          type: integer
          format: int
          example: 400
        timestamp:
          description: The timestamp when the error occurred, in ISO 8601 format.
          type: string
          format: date-time
          example: '2024-02-20T15:33:14.988531Z'
        payload:
          description: Arbitrary payload for the error
          type: object
          additionalProperties: {}
          default: {}
        errors:
          description: A list of detailed error messages associated with specific fields.
          type: array
          items:
            type: object
            required:
              - message
              - field
            properties:
              message:
                description: A human-readable message specific to the field error.
                type: string
                example: Provided value is out of range '^[a-zA-Z]+$'
              field:
                description: The specific field associated with this error.
                type: string
                example: dashboard.cpuCores
    Account:
      type: object
      description: An account.
      properties:
        companyName:
          type: string
          minLength: 2
        vatId:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
        billingAddress:
          type: string
          nullable: true
      required:
        - companyName
    User:
      type: object
      description: A user.
      properties:
        fullName:
          type: string
          minLength: 2
        email:
          type: string
          format: email
          minLength: 5
      required:
        - fullName
        - email
    Quota:
      type: object
      description: Account quotas.
      required:
        - ramInGb
        - ramInGbPerNode
        - cpuCores
        - cpuCoresPerNode
        - storageInGb
        - storageInGbPerVolume
      properties:
        ramInGb:
          description: Quota for RAM (total)
          type: integer
          format: uint
        ramInGbPerNode:
          description: Quota for RAM per node
          type: integer
          format: uint
        cpuCores:
          description: Quota for CPU cores (total)
          type: integer
          format: uint
        cpuCoresPerNode:
          description: Quota for CPU cores per node
          type: integer
          format: uint
        storageInGb:
          description: Quota for disk space (total)
          type: integer
          format: uint
        storageInGbPerVolume:
          description: Quota for disk space per volume
          type: integer
          format: uint
    QuotaFull:
      allOf:
        - type: object
          description: Current quota and usage.
          required:
            - ramInGbUsage
            - cpuCoresUsage
            - storageInGbUsage
            - clusters
            - clustersUsage
            - maxNodePoolsPerCluster
          properties:
            ramInGbUsage:
              description: Current utilization for RAM (total)
              type: integer
              format: uint
            cpuCoresUsage:
              description: Current utilization for CPU cores (total)
              type: integer
              format: uint
            storageInGbUsage:
              description: Current utilization for disk space (total)
              type: integer
              format: uint
            clusters:
              description: Quota for amount of clusters (total)
              type: integer
              format: uint
            clustersUsage:
              description: Current utilization for clusters (total)
              type: integer
              format: uint
            maxNodePoolsPerCluster:
              description: Quota for amount of nodepools per cluster
              type: integer
              format: uint
        - $ref: '#/components/schemas/Quota'
    AccountGet:
      type: object
      description: An account with its status, the current user and quotas.
      allOf:
        - type: object
          required:
            - IUUID
            - status
          properties:
            IUUID:
              type: string
              format: uuid
            status:
              type: string
        - $ref: '#/components/schemas/Account'
        - type: object
          required:
            - currentUser
          properties:
            currentUser:
              $ref: '#/components/schemas/User'
        - type: object
          required:
            - quotas
          properties:
            quotas:
              $ref: '#/components/schemas/QuotaFull'
    AccountCreate:
      allOf:
        - $ref: '#/components/schemas/Account'
        - type: object
          required:
            - adminUser
          properties:
            adminUser:
              $ref: '#/components/schemas/User'
    AsyncStatus:
      type: object
      description: Status of an async request.
      properties:
        uuid:
          type: string
          format: uuid
    CustomRoleSet:
      type: array
      items:
        type: string
      nullable: false
      minItems: 0
    PredefinedRoleSet:
      type: string
      enum:
        - default
        - default_but_manager
        - dedicated_manager
        - data_only
        - ingest_only
        - ml_only
        - coordinating_only
        - searchable_snapshots_only
      default: default
      nullable: false
    NodePoolSpec:
      type: object
      required:
        - name
        - nodes
        - roles
        - zone
        - nodeResources
      properties:
        name:
          type: string
          maxLength: 25
          minLength: 1
          description: Only lowercase, number, and dash, max 25 length
          pattern: ^[a-z]+(?:[a-z0-9-]*[a-z0-9])?$
        nodes:
          type: integer
          format: uint
          default: 3
          minimum: 1
          maximum: 20
        roles:
          type: object
          default: default
          oneOf:
            - $ref: '#/components/schemas/CustomRoleSet'
            - $ref: '#/components/schemas/PredefinedRoleSet'
        zone:
          type: string
          enum:
            - ZONE_1
            - ZONE_2
            - AUTO
          default: AUTO
        nodeResources:
          type: object
          default: {}
          required:
            - ramInGb
            - cpuCores
            - storageInGb
          properties:
            ramInGb:
              description: RAM in GB per node
              type: integer
              format: uint
              minimum: 4
              maximum: 64
              default: 4
            cpuCores:
              description: Number of CPU cores per node
              type: integer
              format: uint
              minimum: 1
              maximum: 32
              default: 1
            storageInGb:
              description: Amount of storage in GB per node
              type: integer
              format: uint
              minimum: 10
              maximum: 50000
              default: 10
    ClusterSpec:
      type: object
      description: Describes the specification of a OpenSearch cluster
      required:
        - name
        - openSearchVersion
        - flavor
        - nodepools
        - dashboard
        - customSettings
        - supportLevel
        - expertMode
        - automaticUpdates
        - automaticBackups
      properties:
        name:
          type: string
          maxLength: 35
          minLength: 1
          description: Cluster name (only lowercase, numbers and dash, max 35 length)
          pattern: ^[a-z]+(?:[a-z0-9-]*[a-z0-9])?$
        flavor:
          description: 'Flavor: Either eod or opensearch'
          type: string
          enum:
            - eod
            - opensearch
          example: eod
          default: eod
        openSearchVersion:
          description: 'OpenSearch or EOD version (examples: 2.13.0 or 2.11.1-ee2)'
          type: string
          pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-ee([1-9]\d*))?$
          example: 2.11.1-ee2
          default: 2.11.1-ee2
        supportLevel:
          description: Support level, see https://docs.meod.eliatra.cloud
          type: string
          enum:
            - basic
            - plus
            - pro
            - enterprise
            - time_material
          example: basic
          default: basic
        expertMode:
          description: Expert mode.
          type: string
          enum:
            - enabled
            - disabled
          example: enabled
          default: enabled
        automaticUpdates:
          description: Automatic updates, see https://docs.meod.eliatra.cloud
          type: string
          enum:
            - 'off'
            - critical_security_fixes_only
            - critical_security_fixes_bugfixes
            - critical_security_fixes_bugfixes_newfeatures
          example: critical_security_fixes_bugfixes
          default: critical_security_fixes_bugfixes
        automaticBackups:
          description: Automatic backups, see https://docs.meod.eliatra.cloud
          type: string
          enum:
            - 'off'
            - 24h-1d
            - 24h-7d
            - 24h-14d
            - 24h-30d
          example: 24h-1d
          default: 24h-1d
        customSettings:
          description: Add custom settings for all opensearch nodes to opensearch.yml
          type: object
          additionalProperties: true
          default: {}
        nodepools:
          type: array
          description: Describes an OpenSearch Operator Nodepool
          items:
            $ref: '#/components/schemas/NodePoolSpec'
          nullable: false
          minItems: 1
          maxItems: 50
        dashboard:
          type: object
          description: Describes the specification of OpenSearch Dashboards
          required:
            - replicas
            - cpuCores
            - ramInGb
            - customSettings
          default: {}
          properties:
            customSettings:
              description: Add custom settings for dashboards to opensearch_dashboards.yml
              type: object
              additionalProperties: true
              default: {}
            replicas:
              description: Set to 0 to disable dashboard. If replicas > 1 it will be deployed across zones
              type: integer
              format: uint
              minimum: 0
              maximum: 8
              default: 1
            ramInGb:
              description: RAM in GB per replica
              type: integer
              format: uint
              minimum: 4
              maximum: 16
              default: 4
            cpuCores:
              description: Number of CPU cores per replica
              type: integer
              format: uint
              minimum: 1
              maximum: 8
              default: 1
    ClusterInfo:
      type: object
      required:
        - url
        - adminApiUrl
        - dashboardUrl
        - health
        - adminUserName
        - initialAdminUserPassword
        - adminCert
        - adminCertKey
        - createdAt
      properties:
        url:
          type: string
          format: uri
        adminApiUrl:
          type: string
          format: uri
        dashboardUrl:
          type: string
          format: uri
        health:
          type: string
        adminUserName:
          type: string
        initialAdminUserPassword:
          type: string
        adminCert:
          type: string
        adminCertKey:
          type: string
        createdAt:
          type: string
          format: date-time
        deletedAt:
          type: string
          format: date-time
    Cluster:
      type: object
      required:
        - IUUID
        - status
        - clusterSpec
        - clusterInfo
      properties:
        IUUID:
          type: string
          format: uuid
        status:
          type: string
        clusterSpec:
          $ref: '#/components/schemas/ClusterSpec'
        clusterInfo:
          $ref: '#/components/schemas/ClusterInfo'
    Clusters:
      type: object
      required:
        - clusters
      properties:
        clusters:
          items:
            $ref: '#/components/schemas/Cluster'
          type: array
          nullable: false
    ClusterCreate:
      type: object
      allOf:
        - $ref: '#/components/schemas/ClusterSpec'
    Version:
      type: object
      required:
        - flavor
        - version
        - status
        - latest
      properties:
        flavor:
          type: string
          enum:
            - eod
            - opensearch
          example: eod
        version:
          type: string
          pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-ee([1-9]\d*))?$
          minLength: 5
          example: 2.11.1-ee1
        status:
          type: string
          enum:
            - supported
            - deprecated
          example: supported
        latest:
          type: boolean
    ResourceVerifyRequest:
      type: object
      description: Request resource calculation and pricing for a new cluster. Validate that there is enough quota left to create such a cluster. If replicas and nodepools (or nodes) are zero this request can be used to retrieve resource calculation and pricing for current deployed clusters.
      required:
        - dashboard
        - nodepools
        - pricing
      properties:
        pricing:
          type: object
          description: Options that influence pricing/cost of a cluster.
          required:
            - flavor
            - supportLevel
            - expertMode
            - automaticUpdates
            - automaticBackups
          properties:
            flavor:
              description: 'Flavor: Either eod or opensearch.'
              type: string
              enum:
                - eod
                - opensearch
              example: eod
              default: eod
            supportLevel:
              description: Support level.
              type: string
              enum:
                - basic
                - plus
                - pro
                - enterprise
                - time_material
              example: basic
              default: basic
            expertMode:
              description: Expert mode.
              type: string
              enum:
                - enabled
                - disabled
              example: enabled
              default: enabled
            automaticUpdates:
              description: Automatic updates.
              type: string
              enum:
                - 'off'
                - critical_security_fixes_only
                - critical_security_fixes_bugfixes
                - critical_security_fixes_bugfixes_newfeatures
              example: critical_security_fixes_bugfixes
              default: critical_security_fixes_bugfixes
            automaticBackups:
              description: Automatic backups.
              type: string
              enum:
                - 'off'
                - 24h-1d
                - 24h-7d
                - 24h-14d
                - 24h-30d
              example: 24h-1d
              default: 24h-1d
        dashboard:
          type: object
          description: Requested resource calculation and pricing for Dashboards.
          required:
            - cpuCores
            - ramInGb
            - replicas
          properties:
            cpuCores:
              type: integer
              description: Requested number of CPU cores for the dashboard
              minimum: 0
              default: 0
            ramInGb:
              type: integer
              description: Requested amount of RAM in GB for the dashboard
              minimum: 0
              default: 0
            replicas:
              type: integer
              description: Requested number of replicas for the dashboard
              minimum: 0
              default: 0
        nodepools:
          type: array
          description: Request resource calculation and pricing for OpenSearch nodepools.
          items:
            type: object
            properties:
              nodes:
                type: integer
                description: Number of nodes in this nodepool
                minimum: 0
                default: 0
              nodeResources:
                type: object
                required:
                  - ramInGb
                  - cpuCores
                  - storageInGb
                properties:
                  ramInGb:
                    type: integer
                    description: Requested amount of RAM in GB per node
                    minimum: 0
                    default: 0
                  cpuCores:
                    type: integer
                    description: Requested number of CPU cores per node
                    minimum: 0
                    default: 0
                  storageInGb:
                    type: integer
                    description: Requested storage size in GB per node
                    minimum: 0
                    default: 0
    ResourceVerifyResponse:
      type: object
      description: Provide comprehensive information about resource consumption and costs about currently used resources and potentially requested resources. For the meaning of -standby- resources please refer to the MEOD user documentation.
      properties:
        requestedCost:
          type: object
          description: The requested resources and costs without any standby resources. This is NOT for calculating quotas/limits but for calculating costs and real resource consumption.
          properties:
            eurPerMinute:
              type: number
              format: double
              description: Requested cost per minute in EUR excluding VAT - without any standby resources
            eurPerHour:
              type: number
              format: double
              description: Requested cost per hour (est.) in EUR excluding VAT - without any standby resources
            eurPerMonth:
              type: number
              format: double
              description: Requested cost per month (est.) in EUR excluding VAT - without any standby resources
            ramInGb:
              type: integer
              description: Requested amount of RAM in GB - without any standby resources
            cpuCores:
              type: integer
              description: Requested number of CPU cores - without any standby resources
            storageInGb:
              type: integer
              description: Requested storage size in GB - without any standby resources
            clusters:
              type: integer
              description: Requested amount of clusters. Always 1
          required:
            - eurPerMinute
            - eurPerHour
            - eurPerMonth
            - ramInGb
            - cpuCores
            - storageInGb
            - clusters
        usedCost:
          type: object
          description: The used resources and costs without any standby resources. This is NOT for calculating quotas/limits but for calculating costs and real resource consumption.
          properties:
            eurPerMinute:
              type: number
              format: double
              description: Cost for current running clusters per minute in EUR excluding VAT - without any standby resources
            eurPerHour:
              type: number
              format: double
              description: Cost for current running clusters per hour (est.) in EUR excluding VAT - without any standby resources
            eurPerMonth:
              type: number
              format: double
              description: Cost for current running clusters per month (est.) in EUR excluding VAT - without any standby resources
            ramInGb:
              type: integer
              description: Requested amount of RAM in GB - without any standby resources
            cpuCores:
              type: integer
              description: Requested number of CPU cores - without any standby resources
            storageInGb:
              type: integer
              description: Requested storage size in GB - without any standby resources
            clusters:
              type: integer
              description: Requested amount of clusters. Always 1
          required:
            - eurPerMinute
            - eurPerHour
            - eurPerMonth
            - ramInGb
            - cpuCores
            - storageInGb
            - clusters
        requested:
          type: object
          description: Requested resources (including standby resources). This is only for calculating quotas/limits.
          properties:
            ramInGb:
              type: integer
              description: Requested amount of RAM in GB
            cpuCores:
              type: integer
              description: Requested number of CPU cores
            storageInGb:
              type: integer
              description: Requested storage size in GB
            clusters:
              type: integer
              description: Requested amount of clusters. Always 1
          required:
            - ramInGb
            - cpuCores
            - storageInGb
            - clusters
        used:
          type: object
          description: 'Resources, including standby resources, used by currently running clusters (more precisely: non-deleted clusters). This is only for calculating quotas/limits. The actual resource consumption maybe lower.'
          properties:
            ramInGb:
              type: integer
              description: Used amount of RAM in GB
            cpuCores:
              type: integer
              description: Used number of CPU cores
            storageInGb:
              type: integer
              description: Used storage size in GB
            clusters:
              type: integer
              description: Used amount of clusters
          required:
            - ramInGb
            - cpuCores
            - storageInGb
            - clusters
        available:
          type: object
          description: Available resources define by the contract limits. Can only be changed by the support.
          properties:
            ramInGb:
              type: integer
              description: Available amount of RAM in GB
            cpuCores:
              type: integer
              description: Available number of CPU cores
            storageInGb:
              type: integer
              description: Available storage size in GB
            clusters:
              type: integer
              description: Available amount of clusters
          required:
            - ramInGb
            - cpuCores
            - storageInGb
            - clusters
        remaining:
          type: object
          description: 'Remaining resources, including standby resources, after requested resources are potentially fulfilled. In other words: (available - used - requested). This is only for calculating quotas/limits.'
          properties:
            ramInGb:
              type: integer
              description: Remaining amount of RAM in GB
            cpuCores:
              type: integer
              description: Remaining number of CPU cores
            storageInGb:
              type: integer
              description: Remaining storage size in GB
            clusters:
              type: integer
              description: Remaining amount of clusters
          required:
            - ramInGb
            - cpuCores
            - storageInGb
            - clusters
        result:
          type: string
          enum:
            - rejected
            - accepted
            - exhausted
          description: Result status of the request
      required:
        - requested
        - available
        - used
        - remaining
        - result
        - requestedCost
        - usedCost
  responses:
    DefaultError:
      description: Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NoContent:
      description: No content is returned.
    AsyncLocation:
      description: Location of a resource which has a status.
      headers:
        Location:
          schema:
            type: string
          description: Location of a resource which has a status.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AsyncStatus'
