Portworx OpenStorageNode API

The OpenStorageNode API from Portworx — 9 operation(s) for openstoragenode.

OpenAPI Specification

portworx-openstoragenode-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: OpenStorage SDK OpenStorageAlerts OpenStorageNode API
  version: 0.186.0
security:
- bearerAuth: []
tags:
- name: OpenStorageNode
paths:
  /v1/nodes:
    get:
      operationId: OpenStorageNode_Enumerate
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkNodeEnumerateResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: Enumerate returns the ids of all the nodes in the current cluster
      tags:
      - OpenStorageNode
  /v1/nodes/attachments/disable/{node_id}:
    put:
      operationId: OpenStorageNode_CordonAttachments
      parameters:
      - description: Node ID on which any further volume attachments will be disabled
        in: path
        name: node_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apiSdkNodeCordonAttachmentsRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkNodeCordonAttachmentsResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: 'CordonAttachments disables any new volume attachments

        from the provided node in the cluster. Existing volume attachments

        will stay on the node.'
      tags:
      - OpenStorageNode
  /v1/nodes/attachments/drain/{node_id}:
    put:
      operationId: OpenStorageNode_DrainAttachments
      parameters:
      - description: Id of the node to drain
        in: path
        name: node_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apiSdkNodeDrainAttachmentsRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkJobResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: 'DrainAttachments creates a task to drain volume attachments

        from the provided node in the cluster.'
      tags:
      - OpenStorageNode
  /v1/nodes/attachments/enable/{node_id}:
    put:
      operationId: OpenStorageNode_UncordonAttachments
      parameters:
      - description: Node ID on which any further volume attachments will be enabled
        in: path
        name: node_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apiSdkNodeUncordonAttachmentsRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkNodeUncordonAttachmentsResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: 'UncordonAttachments re-enables volume attachments

        on the provided node in the cluster.'
      tags:
      - OpenStorageNode
  /v1/nodes/bytesused:
    post:
      operationId: OpenStorageNode_VolumeBytesUsedByNode
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apiSdkVolumeBytesUsedRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkVolumeBytesUsedResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: Returns bytes used of multiple volumes for a give node
      tags:
      - OpenStorageNode
  /v1/nodes/filters:
    get:
      operationId: OpenStorageNode_EnumerateWithFilters
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkNodeEnumerateWithFiltersResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: EnumerateWithFilters returns all the nodes in the current cluster
      tags:
      - OpenStorageNode
  /v1/nodes/inspect/{node_id}:
    get:
      operationId: OpenStorageNode_Inspect
      parameters:
      - description: Id of node to inspect
        in: path
        name: node_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkNodeInspectResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: Inspect returns information about the specified node
      tags:
      - OpenStorageNode
  /v1/nodes/inspectcurrent:
    get:
      operationId: OpenStorageNode_InspectCurrent
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkNodeInspectCurrentResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: 'InspectCurrent returns information about the storage node

        where the client is currently connected to.'
      tags:
      - OpenStorageNode
  /v1/nodes/usage/{node_id}:
    get:
      operationId: OpenStorageNode_RelaxedReclaimPurge
      parameters:
      - description: Id of the node to trigger the purge
        in: path
        name: node_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apiSdkNodeRelaxedReclaimPurgeResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/runtimeError'
          description: An unexpected error response.
      summary: Triggers RelaxedReclaim purge for a give node
      tags:
      - OpenStorageNode
components:
  schemas:
    apiSdkStoragePoolOperationType:
      default: OPERATION_RESIZE
      description: '- OPERATION_RESIZE: Resize operation'
      enum:
      - OPERATION_RESIZE
      title: OperationType defines the various operations that are performed on a storage pool
      type: string
    apiSdkDiagsCollectRequest:
      properties:
        filename:
          description: Filename is an optional flag only to be used for testing purposes.
          type: string
        issuer:
          title: Issuer is an optional  user friendly name for the caller invoking the API
          type: string
        live:
          title: Live is an optional flag if true will collect live cores from running processes of the driver
          type: boolean
        node:
          $ref: '#/components/schemas/apiDiagsNodeSelector'
        profile_only:
          title: 'ProfileOnly is an optional flag if true will only collect the stack and heap profile of the driver and will skip

            other diag components'
          type: boolean
        timeout_mins:
          format: int64
          title: 'TimeoutMins is the timeout in minutes for the job. This is an optional field and if not provided, the

            implementation of the SDK will use a sane default'
          type: string
        volume:
          $ref: '#/components/schemas/apiDiagsVolumeSelector'
      title: 'SdkDiagsCollectRequest is the request object that specifies what should be part of the diags that are collected

        User can specify both Node and Volume or just one of them. If both are provided, the implementation will select

        nodes based on both and also handle overlaps'
      type: object
    apiHardwareType:
      default: UnknownMachine
      enum:
      - UnknownMachine
      - VirtualMachine
      - BareMetalMachine
      title: "- UnknownMachine: When we do not know the machine type alsp the default\n - VirtualMachine: when we are running on virtual machine\n - BareMetalMachine: when we are running on physical hardware"
      type: string
    openstorageapiStatus:
      default: STATUS_NONE
      enum:
      - STATUS_NONE
      - STATUS_INIT
      - STATUS_OK
      - STATUS_OFFLINE
      - STATUS_ERROR
      - STATUS_NOT_IN_QUORUM
      - STATUS_DECOMMISSION
      - STATUS_MAINTENANCE
      - STATUS_STORAGE_DOWN
      - STATUS_STORAGE_DEGRADED
      - STATUS_NEEDS_REBOOT
      - STATUS_STORAGE_REBALANCE
      - STATUS_STORAGE_DRIVE_REPLACE
      - STATUS_NOT_IN_QUORUM_NO_STORAGE
      - STATUS_POOLMAINTENANCE
      - STATUS_MAX
      title: '- STATUS_MAX: Add statuses before MAX and update the number for MAX'
      type: string
    apiSchedulerTopology:
      properties:
        labels:
          additionalProperties:
            type: string
          title: Key-value pairs defining the topology of the node
          type: object
      title: 'SchedulerTopology defines the topology information of the storage node

        in scheduler context'
      type: object
    apiCosType:
      default: NONE
      enum:
      - NONE
      - LOW
      - MEDIUM
      - HIGH
      type: string
    apiSdkNodeCordonAttachmentsResponse:
      title: 'SdkNodeCordonAttachmentsRespinse response for disabling new volume

        attachments from a node'
      type: object
    apiSdkNodeDrainAttachmentsRequest:
      properties:
        issuer:
          title: 'Issuer is a user friendly name for the caller who is

            invoking the API. It can be used by caller to filter out

            drain requests from a particular issuer'
          type: string
        node_id:
          title: Id of the node to drain
          type: string
        only_sharedv4:
          description: 'Drain only sharedv4 volumes from a node

            By default all volumes will be drained.'
          type: boolean
        selector:
          description: 'Selector is used for selecting volumes whose

            attachment needs to be moved from this node.

            The selector could be a list of volume label

            key value pairs to select a subset of volumes.'
          items:
            $ref: '#/components/schemas/apiLabelSelectorRequirement'
          type: array
      title: Defines a node drain volume attachments request
      type: object
    apiStorageResource:
      description: StorageResource groups properties of a storage device.
      properties:
        cache:
          title: True if dedicated as cache
          type: boolean
        cloud_drive_type:
          title: Cloud drive type
          type: string
        id:
          description: Id is the LUN identifier.
          type: string
        iops:
          format: uint64
          title: IOPS
          type: string
        last_scan:
          description: Timestamp of last time this device was scanned.
          format: date-time
          type: string
        medium:
          $ref: '#/components/schemas/apiStorageMedium'
        metadata:
          description: True if dedicated for metadata.
          type: boolean
        online:
          description: True if this device is online.
          type: boolean
        path:
          description: Path device path for this storage resource.
          type: string
        pool_metadata_dev:
          title: True if the resource is used as thin pool metadata disk
          type: boolean
        randRW:
          format: double
          title: RandRW
          type: number
        rotation_speed:
          description: True if this device is rotational.
          type: string
        seq_read:
          format: double
          title: SeqRead
          type: number
        seq_write:
          format: double
          title: SeqWrite
          type: number
        size:
          description: Total size in bytes.
          format: uint64
          type: string
        used:
          description: Physical Bytes used.
          format: uint64
          type: string
        volume_spec:
          title: volume spec that created this drive
          type: string
      type: object
    apiCloudDriveTransferJob:
      properties:
        destination_instance_id:
          title: DestinationInstanceID is the ID of the storageless instance that needs to take over the SourceDriveSetID
          type: string
        source_driveset_id:
          title: SourceDrivesetID is the ID of the current driveset that needs to be transferred
          type: string
        status:
          title: Status describes a helpful status of this operation
          type: string
      type: object
    StorageNodeSecurityStatus:
      default: UNSPECIFIED
      description: " - UNSPECIFIED: Security status type is unknown\n - UNSECURED: Node is unsecure\n - SECURED: Node is secured with authentication and authorization\n - SECURED_ALLOW_SECURITY_REMOVAL: Node is secured, but in the process of removing security. This state allows\nother unsecured nodes to join the cluster since the cluster is in the process\nof removing security authentication and authorization."
      enum:
      - UNSPECIFIED
      - UNSECURED
      - SECURED
      - SECURED_ALLOW_SECURITY_REMOVAL
      type: string
    apiLabelSelectorRequirement:
      description: 'LabelSelectorRequirement is a selector that contains values, a key, and an operator that

        relates the key and values.'
      properties:
        key:
          description: Key is the label key that the selector applies to.
          type: string
        operator:
          $ref: '#/components/schemas/LabelSelectorRequirementOperator'
        values:
          description: 'Values is an array of string values. If the operator is In or NotIn,

            the values array must be non-empty. If the operator is Exists or DoesNotExist,

            the values array must be empty. This array is replaced during a strategic

            merge patch.'
          items:
            type: string
          type: array
      type: object
    apiSdkNodeRelaxedReclaimPurgeResponse:
      properties:
        status:
          $ref: '#/components/schemas/apiRelaxedReclaimPurge'
      title: Defines response containing status of the trigger
      type: object
    apiDiagsCollectionStatus:
      properties:
        message:
          title: Message is a user friendly message for current status of diags collection
          type: string
        node:
          title: Node is the node that's collecting the diags
          type: string
        state:
          $ref: '#/components/schemas/apiDiagsCollectionStatusState'
      type: object
    apiDiagsVolumeSelector:
      properties:
        volume_ids:
          items:
            type: string
          title: 'VolumeIDs selects volumes by their unique IDs and then uses replica and attached nodes for those volumes for diags

            collection'
          type: array
        volume_label_selector:
          items:
            $ref: '#/components/schemas/apiLabelSelectorRequirement'
          title: 'VolumeLabelSelector selects volumes by their labels and then uses replica and attached nodes for those volumes for

            diags collection'
          type: array
      title: 'DiagsVolumeSelector allows selecting volumes for diags collection

        User can select VolumeLabelSelector AND/OR VolumeIDs. If both are provided, the implementation will select nodes

        based on both labels and IDs and also handle overlaps'
      type: object
    apiSdkNodeUncordonAttachmentsResponse:
      title: 'SdkNodeUncordonAttachmentsRespinse response for enabling new volume

        attachments from a node'
      type: object
    apiDefragJob:
      properties:
        current_running_nodes:
          items:
            type: string
          title: CurrentRunningNodes stores the nodes on which the job is currently running
          type: array
        exclude_nodes:
          items:
            type: string
          title: 'ExcludeNodes is a list of node UUID: if provided, the job will skip these nodes;

            if not provided, will run on all nodes

            cannot coexist with IncludeNodes'
          type: array
        include_nodes:
          items:
            type: string
          title: 'IncludeNodes is a list of node UUID: if provided, will only run the job on these nodes;

            if not provided, will run on all nodes

            cannot coexist with ExcludeNodes and NodeSelector'
          type: array
        max_duration_minutes:
          format: int64
          title: MaxDurationMinutes defines the time limit in minutes
          type: integer
        max_nodes_in_parallel:
          format: int64
          title: MaxNodesInParallel defines the maximum number of nodes running the defrag job in parallel
          type: integer
        node_selector:
          items:
            $ref: '#/components/schemas/apiLabelSelectorRequirement'
          title: 'NodeSelector is a list of node label `key=value` pairs,

            which selects the nodes to be run on for the job

            can coexist with ExcludeNodes but cannot coexist with IncludeNodes'
          type: array
        schedule_id:
          title: ScheduleId is the ID of the schedule which started this job
          type: string
        schedule_one_iteration_only:
          title: ScheduleOneIterationOnly is true when the defragJob is run by a one-iteration-only schedule
          type: boolean
      title: DefragJob describes a job to run defragmentation on cluster nodes
      type: object
    apiSdkNodeUncordonAttachmentsRequest:
      properties:
        node_id:
          title: Node ID on which any further volume attachments will be enabled
          type: string
      title: 'SdkNodeUncordonAttachmentsRequest request for re-enabling volume

        attachments for a node'
      type: object
    SdkStoragePoolOperationStatus:
      default: OPERATION_PENDING
      description: "- OPERATION_PENDING: Operation pending\n - OPERATION_IN_PROGRESS: Operation is in progress\n - OPERATION_SUCCESSFUL: Operation is successful\n - OPERATION_FAILED: Operation failed"
      enum:
      - OPERATION_PENDING
      - OPERATION_IN_PROGRESS
      - OPERATION_SUCCESSFUL
      - OPERATION_FAILED
      title: OperationStatus captures the various statuses of a storage pool operation
      type: string
    apiCollectDiagsJob:
      properties:
        request:
          $ref: '#/components/schemas/apiSdkDiagsCollectRequest'
        statuses:
          items:
            $ref: '#/components/schemas/apiDiagsCollectionStatus'
          title: Statuses is a list of statuses for diags collection for each node that is part of the request
          type: array
      type: object
    apiStoragePoolOperation:
      properties:
        msg:
          title: Msg is a user friendly message for the operation
          type: string
        params:
          additionalProperties:
            type: string
          title: Params for the parameters for the operation
          type: object
        status:
          $ref: '#/components/schemas/SdkStoragePoolOperationStatus'
        type:
          $ref: '#/components/schemas/apiSdkStoragePoolOperationType'
      title: StoragePoolOperation defines an operation being performed on a storage pool
      type: object
    apiStorageNode:
      properties:
        HWType:
          $ref: '#/components/schemas/apiHardwareType'
        avg_load:
          format: int64
          title: Average load (percentage)
          type: string
        cluster_domain:
          description: Name of the cluster domain where the node belongs.
          type: string
        cpu:
          format: double
          title: Cpu usage of the node
          type: number
        cpu_cores:
          format: int64
          title: Number of Cpu Cores
          type: string
        data_ip:
          title: Data IP
          type: string
        disks:
          additionalProperties:
            $ref: '#/components/schemas/apiStorageResource'
          title: List of disks on the node
          type: object
        hostname:
          title: Hostname of the node
          type: string
        id:
          title: Id of the node
          type: string
        mem_free:
          format: uint64
          title: Free memory of the node
          type: string
        mem_total:
          format: uint64
          title: Total memory of the node
          type: string
        mem_used:
          format: uint64
          title: Used memory of the node
          type: string
        mgmt_ip:
          title: Management IP
          type: string
        node_labels:
          additionalProperties:
            type: string
          title: User defined labels for the node
          type: object
        non_quorum_member:
          description: 'Flag indicating whether the node is a quorum member or not. Using inverse value

            to handle intialization and upgrades. Node will always be counted as a quorum member

            when initializing until it reaches a point where we can definitely determine whether

            it is a quorum member or not.'
          type: boolean
        pools:
          items:
            $ref: '#/components/schemas/apiStoragePool'
          title: List of storage pools this node supports
          type: array
        scheduler_node_name:
          description: 'SchedulerNodeName is name of the node in scheduler context. It can be

            empty if unable to get the name from the scheduler.'
          type: string
        scheduler_topology:
          $ref: '#/components/schemas/apiSchedulerTopology'
        security_status:
          $ref: '#/components/schemas/StorageNodeSecurityStatus'
        status:
          $ref: '#/components/schemas/openstorageapiStatus'
      title: StorageNode describes the state of the node
      type: object
    apiStorageMedium:
      default: STORAGE_MEDIUM_MAGNETIC
      enum:
      - STORAGE_MEDIUM_MAGNETIC
      - STORAGE_MEDIUM_SSD
      - STORAGE_MEDIUM_NVME
      title: "- STORAGE_MEDIUM_MAGNETIC: Magnetic spinning disk.\n - STORAGE_MEDIUM_SSD: SSD disk\n - STORAGE_MEDIUM_NVME: NVME disk"
      type: string
    apiSdkNodeCordonAttachmentsRequest:
      properties:
        node_id:
          title: Node ID on which any further volume attachments will be disabled
          type: string
      title: 'SdkNodeCordonAttachmentsRequest request for disabling new volume

        attachments from a node'
      type: object
    apiNodeDrainAttachmentsJob:
      properties:
        Status:
          title: Status describes a helpful status of this node drain operation
          type: string
        create_time:
          format: date-time
          title: CreateTime is the time the job was created
          type: string
        issuer:
          title: 'Issuer is a user friendly name for the caller who is

            invoking the API. It can be used by caller to filter out

            drain requests from a particular issuer'
          type: string
        last_update_time:
          format: date-time
          title: LastUpdateTime is the time the job was updated
          type: string
        node_id:
          title: NodeID of the node for which this drain job is running
          type: string
        parameters:
          $ref: '#/components/schemas/apiSdkNodeDrainAttachmentsRequest'
      title: NodeDrainAttachmentsJob describe a job to drain volume attachments from a node
      type: object
    apiSdkNodeInspectCurrentResponse:
      properties:
        node:
          $ref: '#/components/schemas/apiStorageNode'
      title: Defines a response when inspecting a node
      type: object
    apiRelaxedReclaimPurge:
      properties:
        num_purged:
          format: uint64
          title: num_purged returns number of volumes purged
          type: string
      title: Purges the RelaxedReclaim queue
      type: object
    apiSdkNodeInspectResponse:
      properties:
        node:
          $ref: '#/components/schemas/apiStorageNode'
      title: Defines a response when inspecting a node
      type: object
    runtimeError:
      properties:
        code:
          format: int32
          type: integer
        details:
          items:
            $ref: '#/components/schemas/protobufAny'
          type: array
        error:
          type: string
        message:
          type: string
      type: object
    apiSdkNodeEnumerateWithFiltersResponse:
      properties:
        nodes:
          items:
            $ref: '#/components/schemas/apiStorageNode'
          title: List of all the nodes in the cluster
          type: array
      title: Defines a response with a list of nodes
      type: object
    apiDiagsCollectionStatusState:
      default: UNSPECIFIED
      description: "- UNSPECIFIED: Unspecified means uninitialized or unknown state\n - PENDING: Pending indicates the diags collection is pending and hasn't started\n - RUNNING: Running indicates diags collection is actively running\n - DONE: Done indicates diags collection has finished\n - FAILED: Failed indicates diags collection has failed"
      enum:
      - UNSPECIFIED
      - PENDING
      - RUNNING
      - DONE
      - FAILED
      title: State is an enum for state of diags collection on a given node
      type: string
    LabelSelectorRequirementOperator:
      default: In
      description: "- In: In means the value for 'key' should be in one of the given value(s)\n - NotIn: NotIn means the value for 'key' should NOT be in one of the given value(s)\n - Exists: Exists means the 'key' should just exist regardless of the value\n - DoesNotExist: DoesNotExist means the 'key' should NOT exist\n - Gt: Gt means the 'key' should be greater than the value(s)\n - Lt: Lt means the 'key' should be less than the value(s)"
      enum:
      - In
      - NotIn
      - Exists
      - DoesNotExist
      - Gt
      - Lt
      title: This defines operator types used in a label matching rule
      type: string
    apiJob:
      properties:
        clouddrive_transfer:
          $ref: '#/components/schemas/apiCloudDriveTransferJob'
        collect_diags:
          $ref: '#/components/schemas/apiCollectDiagsJob'
        create_time:
          format: date-time
          title: CreateTime is the time the job was created
          type: string
        defrag:
          $ref: '#/components/schemas/apiDefragJob'
        drain_attachments:
          $ref: '#/components/schemas/apiNodeDrainAttachmentsJob'
        id:
          title: ID of the job
          type: string
        last_update_time:
          format: date-time
          title: LastUpdateTime is the time the job was updated
          type: string
        state:
          $ref: '#/components/schemas/apiJobState'
        type:
          $ref: '#/components/schemas/apiJobType'
      title: 'Job is a generic job object that can encapsulate other

        messages which follow the job framework of APIs'
      type: object
    apiVolumeBytesUsedByNode:
      properties:
        node_id:
          title: machine uuid
          type: string
        vol_usage:
          items:
            $ref: '#/components/schemas/apiVolumeBytesUsed'
          title: VolumeBytesUsed for each requested volume on the given node
          type: array
      title: VolumeBytesUsedByNode defines volume utilization for multiple volumes in a given node
      type: object
    apiDiagsNodeSelector:
      properties:
        all:
          title: All selects all nodes for diags collection
          type: boolean
        node_ids:
          items:
            type: string
          title: NodeIDs are unique IDs fo the nodes for which the diags will be collected
          type: array
        node_label_selector:
          items:
            $ref: '#/components/schemas/apiLabelSelectorRequirement'
          title: NodeLabelSelector is a label selector used to select the nodes for which diags will be collected
          type: array
      title: 'DiagsNodeSelector allows selecting nodes for diags collection

        User can select NodeLabelSelector AND/OR NodeIDs. If both are provided, the implementation will select nodes based on

        both labels and IDs and also handle overlaps

        If All is set to true, other selectors are ignored since it selects all nodes'
      type: object
    protobufAny:
      properties:
        type_url:
          type: string
        value:
          format: byte
          type: string
      type: object
    apiSdkJobResponse:
      properties:
        job:
          $ref: '#/components/schemas/apiJob'
      title: 'Defines a response for an SDK request that spins up a new job

        to perform the request'
      type: object
    apiJobState:
      default: UNSPECIFIED_STATE
      description: "- UNSPECIFIED_STATE: Unspecified\n - PENDING: Pending indicates job is still pending and has not started work\n - RUNNING: Running indicates job is actively running\n - DONE: Done indicates job has finished processing\n - PAUSED: Paused indicates job is paused\n - CANCELLED: Cancelled indicates job is cancelled\n - FAILED: Failed indicates job has failed"
      enum:
      - UNSPECIFIED_STATE
      - PENDING
      - RUNNING
      - DONE
      - PAUSED
      - CANCELLED
      - FAILED
      title: State is an enum for state of a node drain operation
      type: string
    apiStoragePool:
      properties:
        Cos:
          $ref: '#/components/schemas/apiCosType'
        ID:
          format: int32
          title: Deprecated! Use `uuid` instead. ID pool ID
          type: integer
        Medium:
          $ref: '#/components/schemas/apiStorageMedium'
        RaidLevel:
          title: RaidLevel storage raid level
          type: string
        TotalSize:
          format: uint64
          title: TotalSize of the pool
          type: string
        Used:
          format: uint64
          title: Used size of the pool
          type: string
        labels:
          additionalProperties:
            type: string
          title: Labels is a list of user defined name-value pairs
          type: object
        last_operation:
          $ref: '#/components/schemas/apiStoragePoolOperation'
        uuid:
          title: UUID is the unique identifier for a storage pool
          type: string
      title: StoragePool groups different storage devices based on their CosType
      type: object
    apiSdkNodeEnumerateResponse:
      properties:
        node_ids:
          items:
            type: string
          title: List of all the node ids in the cluster
          type: array
      title: Defines a response with a list of node ids
      type: object
    apiJobType:
      default: UNSPECIFIED_TYPE
      description: "- UNSPECIFIED_TYPE: Unspecified\n - NONE: None\n - DRAIN_ATTACHMENTS: Job for draining volume attachments\n - CLOUD_DRIVE_TRANSFER: Job for transferring cloud drives between nodes\n - COLLECT_DIAGS: Job for collecting diags from the cluster nodes\n - DEFRAG: Job for storage defragmentation on cluster nodes"
      enum:
      - UNSPECIFIED_TYPE
      - NO

# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/portworx/refs/heads/main/openapi/portworx-openstoragenode-api-openapi.yml