XSKY pools API

PoolController Operations about Pools

OpenAPI Specification

xsky-pools-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  description: XMS is the controller of distributed storage system
  version: SDS_4.2.000.0.200302
  title: XMS access-paths pools API
  contact: {}
  license:
    name: Commercial
basePath: /v1
tags:
- name: pools
  description: 'PoolController Operations about Pools

    '
paths:
  /pools/:
    get:
      tags:
      - pools
      description: List pools
      operationId: ListPools
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: limit
        in: query
        description: paging param
        required: false
        type: integer
        format: int64
        x-exportParamName: Limit
      - name: offset
        in: query
        description: paging param
        required: false
        type: integer
        format: int64
        x-exportParamName: Offset
      - name: all
        in: query
        description: show all pools
        required: false
        type: boolean
        x-exportParamName: All
      - name: protection_domain_id
        in: query
        description: protection domain id
        required: false
        type: integer
        format: int64
        x-exportParamName: ProtectionDomainId
      - name: compound_osd_only
        in: query
        description: filter pool with only compound osds
        required: false
        type: boolean
        x-exportParamName: CompoundOsdOnly
      - name: osd_group_id
        in: query
        description: osd group id
        required: false
        type: integer
        format: int64
        x-exportParamName: OsdGroupId
      - name: pool_type
        in: query
        description: filter pool by type
        required: false
        type: string
        x-exportParamName: PoolType
      - name: pool_role
        in: query
        description: filter pool by role
        required: false
        type: string
        x-exportParamName: PoolRole
      - name: pool_mode
        in: query
        description: filter pool by pool_mode
        required: false
        type: string
        x-exportParamName: PoolMode
      - name: stretched
        in: query
        description: filter stretched pool
        required: false
        type: boolean
        x-exportParamName: Stretched
      - name: with_compound
        in: query
        description: with compound pool
        required: false
        type: boolean
        x-exportParamName: WithCompound
      - name: os_policy_id
        in: query
        description: filter data pool by object storage policy id
        required: false
        type: integer
        format: int64
        x-exportParamName: OsPolicyId
      - name: storage_class_id
        in: query
        description: filter data pool by os storage class id
        required: false
        type: integer
        format: int64
        x-exportParamName: StorageClassId
      - name: storage_class_pool_type
        in: query
        description: storage class pool type(active inactive) to query
        required: false
        type: string
        x-exportParamName: StorageClassPoolType
      - name: q
        in: query
        description: query param of search
        required: false
        type: string
        x-exportParamName: Q
      - name: sort
        in: query
        description: sort param of search
        required: false
        type: string
        x-exportParamName: Sort
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolsResp'
        400:
          description: BadRequest
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
    post:
      tags:
      - pools
      description: Create pool
      operationId: CreatePool
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - in: body
        name: body
        description: the pool info
        required: true
        schema:
          $ref: '#/definitions/PoolCreateReq'
        x-exportParamName: Body
      responses:
        202:
          description: Accepted
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:
    get:
      tags:
      - pools
      description: get pool
      operationId: GetPool
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInHeader: []
      - tokenInQuery: []
    delete:
      tags:
      - pools
      description: Delete pool
      operationId: DeletePool
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      - name: force
        in: query
        description: force delete or not
        required: false
        type: boolean
        x-exportParamName: Force
      responses:
        202:
          description: Accepted
          schema:
            $ref: '#/definitions/PoolResp'
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
    patch:
      tags:
      - pools
      description: update pool info
      operationId: UpdatePool
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      - in: body
        name: body
        description: pool info
        required: true
        schema:
          $ref: '#/definitions/PoolUpdateReq'
        x-exportParamName: Body
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}/osds:
    put:
      tags:
      - pools
      description: Add osds to pool
      operationId: AddOsdsToPool
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      - in: body
        name: body
        description: osd infos
        required: true
        schema:
          $ref: '#/definitions/OsdsAddReq'
        x-exportParamName: Body
      responses:
        202:
          description: Accepted
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
    delete:
      tags:
      - pools
      description: Remove multiple osds from a pool
      operationId: RemoveOsdsFromPool
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      - in: body
        name: body
        description: osd infos
        required: true
        schema:
          $ref: '#/definitions/OsdsRemoveReq'
        x-exportParamName: Body
      responses:
        202:
          description: Accepted
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}/predictions:
    get:
      tags:
      - pools
      description: get a pool's prediction
      operationId: GetPoolPredictions
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolPredictionsResp'
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}/samples:
    get:
      tags:
      - pools
      description: get pool's samples
      operationId: GetPoolSamples
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      - name: duration_begin
        in: query
        description: duration begin timestamp
        required: false
        type: string
        x-exportParamName: DurationBegin
      - name: duration_end
        in: query
        description: duration end timestamp
        required: false
        type: string
        x-exportParamName: DurationEnd
      - name: period
        in: query
        description: samples period
        required: false
        type: string
        x-exportParamName: Period
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolSamplesResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}/topology:
    get:
      tags:
      - pools
      description: get pool topology
      operationId: GetPoolTopology
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolTopologyResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:disable-device-type-check:
    post:
      tags:
      - pools
      description: Disable device type check when add osd
      operationId: DisableDeviceTypeCheck
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:enable-device-type-check:
    post:
      tags:
      - pools
      description: Enable device type check when add osd
      operationId: EnableDeviceTypeCheck
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:reweight:
    post:
      tags:
      - pools
      description: Reweight a pool
      operationId: ReweightPool
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
  /pools/{pool_id}:switch-role:
    post:
      tags:
      - pools
      description: Switch pool role to compound
      operationId: SwitchPoolRole
      consumes:
      - application/json
      produces:
      - application/json
      parameters:
      - name: pool_id
        in: path
        description: pool id
        required: true
        type: integer
        format: int64
        x-exportParamName: PoolId
      responses:
        200:
          description: OK
          schema:
            $ref: '#/definitions/PoolResp'
        202:
          description: Accepted
          schema:
            $ref: '#/definitions/PoolResp'
        400:
          description: BadRequest
        404:
          description: NotFound
        409:
          description: Conflict
        500:
          description: InternalServerError
      security:
      - tokenInQuery: []
      - tokenInHeader: []
definitions:
  PoolTopologyResp:
    type: object
    required:
    - pool_topology
    properties:
      pool_topology:
        description: pool topology
        $ref: '#/definitions/PoolPlacementNode'
    title: PoolTopologyResp
    example:
      pool_topology:
        children:
        - null
        - null
        create: '2000-01-23T04:56:07.000+00:00'
        replicate_num: 1
        update: '2000-01-23T04:56:07.000+00:00'
        id: 0
        placement_node:
          parent: null
          name: name
          create: '2000-01-23T04:56:07.000+00:00'
          update: '2000-01-23T04:56:07.000+00:00'
          id: 6
          type: type
          properties:
            is_witness: true
        status: status
  PoolUpdateReq_Pool:
    type: object
    properties:
      default_managed_volume_format:
        type: integer
        format: int64
        description: 'default managed volume format: 128 or 129'
      failure_domain_type:
        type: string
      io_bypass_enabled:
        type: boolean
      io_bypass_threshold:
        type: integer
        format: int64
      name:
        type: string
      primary_placement_node_id:
        type: integer
        format: int64
      property:
        type: object
        additionalProperties:
          $ref: '#/definitions/RawMessage'
      qos:
        $ref: '#/definitions/OsdQos'
      ruleset:
        type: array
        items:
          $ref: '#/definitions/PoolRuleReq'
      size:
        type: integer
        format: int64
    title: PoolUpdateReq_Pool
    example:
      failure_domain_type: failure_domain_type
      io_bypass_enabled: true
      qos:
        mode: 5
        bandwidth: 0
        bandwidth_max: 6
        id: 5
        client_threshold: 1
        recovery_rate_type: recovery_rate_type
      size: 5
      name: name
      property:
        key: ''
      ruleset:
      - placement_node_id: 2
        replicate_num: 7
      - placement_node_id: 2
        replicate_num: 7
      primary_placement_node_id: 1
      default_managed_volume_format: 0
      io_bypass_threshold: 6
  PoolRecord:
    title: PoolRecord
    allOf:
    - $ref: '#/definitions/Pool'
    - properties:
        samples:
          type: array
          items:
            $ref: '#/definitions/PoolStat'
    description: PoolRecord is used to combine Pool and PoolStat to let API comfortable
  OsdsRemoveReq:
    type: object
    required:
    - osd_ids
    properties:
      osd_ids:
        type: array
        items:
          type: integer
          format: int64
    title: OsdsRemoveReq
    example:
      osd_ids:
      - 0
      - 0
  PoolSamplesResp:
    type: object
    required:
    - pool_samples
    properties:
      pool_samples:
        type: array
        description: pool samples
        items:
          $ref: '#/definitions/PoolStat'
    title: PoolSamplesResp
    example:
      pool_samples:
      - healthy_percent: 9.301444243932576
        error_kbyte: 2
        recovery_percent: 1.1730742509559433
        total_bandwidth_kbyte: 4.965218492984954
        read_latency_us: 1.0246457001441578
        data_kbyte: 1
        read_bandwidth_kbyte: 7.386281948385884
        healthy_num: 7
        recovery_iops: 6.84685269835264
        omap_total_kbyte: 3.616076749251911
        degraded_num: 5
        create: '2000-01-23T04:56:07.000+00:00'
        recovery_bandwidth_kbyte: 1.4894159098541704
        write_iops: 3.5571952270680973
        total_kbyte: 9
        degraded_percent: 5.637376656633329
        unavailable_num: 9
        write_latency_us: 6.965117697638846
        total_iops: 5.025004791520295
        unavailable_percent: 6.683562403749608
        read_iops: 1.2315135367772556
        actual_kbyte: 0
        omap_used_kbyte: 2.027123023002322
        omap_used_percent: 4.145608029883936
        used_kbyte: 8
        write_bandwidth_kbyte: 6.438423552598547
        creating_num: 6
        used_percent: 9.018348186070783
        recovery_num: 7
      - healthy_percent: 9.301444243932576
        error_kbyte: 2
        recovery_percent: 1.1730742509559433
        total_bandwidth_kbyte: 4.965218492984954
        read_latency_us: 1.0246457001441578
        data_kbyte: 1
        read_bandwidth_kbyte: 7.386281948385884
        healthy_num: 7
        recovery_iops: 6.84685269835264
        omap_total_kbyte: 3.616076749251911
        degraded_num: 5
        create: '2000-01-23T04:56:07.000+00:00'
        recovery_bandwidth_kbyte: 1.4894159098541704
        write_iops: 3.5571952270680973
        total_kbyte: 9
        degraded_percent: 5.637376656633329
        unavailable_num: 9
        write_latency_us: 6.965117697638846
        total_iops: 5.025004791520295
        unavailable_percent: 6.683562403749608
        read_iops: 1.2315135367772556
        actual_kbyte: 0
        omap_used_kbyte: 2.027123023002322
        omap_used_percent: 4.145608029883936
        used_kbyte: 8
        write_bandwidth_kbyte: 6.438423552598547
        creating_num: 6
        used_percent: 9.018348186070783
        recovery_num: 7
  PlacementNode:
    type: object
    properties:
      create:
        type: string
        format: date-time
        description: time of creating placement node
      id:
        type: integer
        format: int64
        description: id of placement node
      name:
        type: string
        description: name of placement node
      parent:
        description: parent of placement node
        $ref: '#/definitions/PlacementNode'
      properties:
        description: properties for this placement node like is_witness
        $ref: '#/definitions/PlacementNodeProperties'
      type:
        type: string
        description: type of placement node
      update:
        type: string
        format: date-time
        description: time of updating placement node
    title: PlacementNode
    description: PlacementNode defines a placement node managing a range of hosts
    example:
      parent: null
      name: name
      create: '2000-01-23T04:56:07.000+00:00'
      update: '2000-01-23T04:56:07.000+00:00'
      id: 6
      type: type
      properties:
        is_witness: true
  PoolRuleReq:
    type: object
    properties:
      placement_node_id:
        type: integer
        format: int64
      replicate_num:
        type: integer
        format: int64
    title: PoolRuleReq
    example:
      placement_node_id: 2
      replicate_num: 7
  RawMessage:
    type: array
    description: 'RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler

      and can be used to delay JSON decoding or precompute a JSON encoding.'
    items:
      type: string
      format: byte
      pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
  ProtectionDomain_Nestview:
    type: object
    properties:
      id:
        type: integer
        format: int64
        description: id of protection domain
      name:
        type: string
        description: name of protection domain
    title: ProtectionDomain_Nestview
    example:
      name: name
      id: 5
  PredictionPoint:
    type: object
    properties:
      create:
        type: string
        format: date-time
      used_kbyte:
        type: integer
        format: int64
    title: PredictionPoint
    description: PredictionPoint is a point in a prediction graph
    example:
      used_kbyte: 5
      create: '2000-01-23T04:56:07.000+00:00'
  PoolsResp:
    type: object
    required:
    - pools
    properties:
      pools:
        type: array
        description: pools
        items:
          $ref: '#/definitions/PoolRecord'
    title: PoolsResp
    example:
      pools:
      - ''
      - ''
  PlacementNodeProperties:
    type: object
    properties:
      is_witness:
        type: boolean
        description: whether this is a witness node
    title: PlacementNodeProperties
    description: PlacementNodeProperties contains properties for a placement node.
    example:
      is_witness: true
  PoolPredictionsResp:
    type: object
    required:
    - pool_predictions
    properties:
      pool_predictions:
        type: array
        description: pool predictions
        items:
          $ref: '#/definitions/PoolPrediction'
    title: PoolPredictionsResp
    example:
      pool_predictions:
      - used_kbyte_30days: 2
        data_kbyte_1day: 0
        used_kbyte_7days: 7
        used_kbyte_points:
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        data_kbyte_7days: 1
        used_kbyte_1day: 5
        create: '2000-01-23T04:56:07.000+00:00'
        data_kbyte_points:
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        id: 5
        data_kbyte_30days: 6
      - used_kbyte_30days: 2
        data_kbyte_1day: 0
        used_kbyte_7days: 7
        used_kbyte_points:
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        data_kbyte_7days: 1
        used_kbyte_1day: 5
        create: '2000-01-23T04:56:07.000+00:00'
        data_kbyte_points:
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        - used_kbyte: 5
          create: '2000-01-23T04:56:07.000+00:00'
        id: 5
        data_kbyte_30days: 6
  PoolUpdateReq:
    type: object
    required:
    - pool
    properties:
      pool:
        $ref: '#/definitions/PoolUpdateReq_Pool'
    title: PoolUpdateReq
    example:
      pool:
        failure_domain_type: failure_domain_type
        io_bypass_enabled: true
        qos:
          mode: 5
          bandwidth: 0
          bandwidth_max: 6
          id: 5
          client_threshold: 1
          recovery_rate_type: recovery_rate_type
        size: 5
        name: name
        property:
          key: ''
        ruleset:
        - placement_node_id: 2
          replicate_num: 7
        - placement_node_id: 2
          replicate_num: 7
        primary_placement_node_id: 1
        default_managed_volume_format: 0
        io_bypass_threshold: 6
  PoolResp:
    type: object
    required:
    - pool
    properties:
      pool:
        description: pool
        $ref: '#/definitions/PoolRecord'
    title: PoolResp
    example:
      pool: ''
  OsdQos:
    type: object
    properties:
      bandwidth:
        type: integer
        format: int64
      bandwidth_max:
        type: integer
        format: int64
      client_threshold:
        type: integer
        format: int64
      id:
        type: integer
        format: int64
      mode:
        type: integer
        format: int64
      recovery_rate_type:
        type: string
    title: OsdQos
    description: OsdQos defines qos for osd
    example:
      mode: 5
      bandwidth: 0
      bandwidth_max: 6
      id: 5
      client_threshold: 1
      recovery_rate_type: recovery_rate_type
  OsdsAddReq:
    type: object
    required:
    - osd_ids
    properties:
      osd_ids:
        type: array
        items:
          type: integer
          format: int64
    title: OsdsAddReq
    example:
      osd_ids:
      - 0
      - 0
  Pool:
    type: object
    properties:
      action_status:
        type: string
      block_volume_num:
        type: integer
        format: int64
      coding_chunk_num:
        type: integer
        format: int64
      create:
        type: string
        format: date-time
      data_chunk_num:
        type: integer
        format: int64
      default_managed_volume_format:
        type: integer
        format: int64
      device_type:
        type: string
      device_type_check_disabled:
        type: boolean
      failure_domain_type:
        type: string
      hidden:
        type: boolean
      id:
        type: integer
        format: int64
      io_bypass_enabled:
        type: boolean
      io_bypass_threshold:
        type: integer
        format: int64
      name:
        type: string
      osd_group:
        $ref: '#/definitions/OsdGroup_Nestview'
      osd_num:
        type: integer
        format: int64
      pool_id:
        type: integer
        format: int32
      pool_mode:
        type: string
      pool_name:
        type: string
      pool_role:
        type: string
      pool_type:
        type: string
      primary_placement_node:
        description: placement node with the primary replica
        $ref: '#/definitions/PlacementNode_Nestview'
      property:
        type: object
      protection_domain:
        $ref: '#/definitions/ProtectionDomain_Nestview'
      qos:
        $ref: '#/definitions/OsdQos'
      replicate_size:
        type: integer
        format: int64
      status:
        type: string
      stretched:
        type: boolean
      update:
        type: string
        format: date-time
    title: Pool
    description: 'A Pool is a set of temporary objects that may be individually saved and

      retrieved.


      Any item stored in the Pool may be removed automatically at any time without

      notification. If the Pool holds the only reference when this happens, the item

      might be deallocated.


      A Pool is safe for use by multiple goroutines simultaneously.


      Pool''s purpose is to cache allocated but unused items for later reuse, relieving

      pressure on the garbage collector. That is, it makes it easy to build efficient,

      thread-safe free lists. However, it is not suitable for all free lists.


      An appropriate use of a Pool is to manage a group of temporary items silently

      shared among and potentially reused by concurrent independent clients of a

      package. Pool provides a way to amortize allocation overhead across many

      clients.


      An example of good use of a Pool is in the fmt package, which maintains a

      dynamically-sized store of temporary output buffers. The store scales under load

      (when many goroutines are actively printing) and shrinks when quiescent.


      On the other hand, a free list maintained as part of a short-lived object is not

      a suitable use for a Pool, since the overhead does not amortize well in that

      scenario. It is more efficient to have such objects implement their own free

      list.


      A Pool must not be copied after first use.'
  PoolCreateReq_Pool:
    type: object
    properties:
      coding_chunk_num:
        type: integer
        format: int64
      data_chunk_num:
        type: integer
        format: int64
      failure_domain_type:
        type: string
      name:
        type: string
      osd_ids:
        type: array
        items:
          type: integer
          format: int64
      pool_role:
        type: string
      pool_type:
        type: string
      primary_placement_node_id:
        type: integer
        format: int64
      protection_domain_id:
        type: integer
        format: int64
      ruleset:
        type: array
        items:
          $ref: '#/definitions/PoolRuleReq'
      shared_pool_id:
        type: integer
        format: int64
      size:
        type: integer
        format: int64
      stretched:
        type: boolean
    title: PoolCreateReq_Pool
    example:
      data_chunk_num: 6
      failure_domain_type: failure_domain_type
      osd_ids:
      - 1
      - 1
      ruleset:
      - placement_node_id: 2
        replicate_num: 7
      - placement_node_id: 2
        replicate_num: 7
      coding_chunk_num: 0
      primary_placement_node_id: 5
      protection_domain_id: 5
      stretched: true
      size: 3
      name: name
      pool_role: pool_role
      pool_type: pool_type
      shared_pool_id: 9
  PlacementNode_Nestview:
    type: object
    properties:
      id:
        type: integer
        format: int64
        description: id of placement node
      parent:
        $ref: '#/definitions/PlacementNode_Nestview_parent'
    title: PlacementNode_Nestview
  PoolPlacementNode:
    type: object
    properties:
      children:
        type: array
        items:
          $ref: '#/definitions/PoolPlacementNode'
      create:
        type: string
        format: date-time
      id:
        type: integer
        format: int64
      placement_node:
        $ref: '#/definitions/PlacementNode'
      replicate_num:
        type: integer
        format: int64
      status:
        type: string
      update:
        type: string
        format: date-time
    title: PoolPlacementNode
    description: PoolPlacementNode defines a shadow placement node in a pool
    example:
      children:
      - null
      - null
      create: '2000-01-23T04:56:07.000+00:00'
      replicate_num: 1
      update: '2000-01-23T04:56:07.000+00:00'
      id: 0
      placement_node:
        parent: null
        name: name
        create: '2000-01-23T04:56:07.000+00:00'
        update: '2000-01-23T04:56:07.000+00:00'
        id: 6
        type: type
        properties:
          is_witness: true
      status: status
  PoolCreateReq:
    type: object
    properties:
      pool:
        $ref: '#/definitions/PoolCreateReq_Pool'
    title: PoolCreateReq
    example:
      pool:
        data_chunk_num: 6
        failure_domain_type: failure_domain_type
        osd_ids:
        - 1
        - 1
        ruleset:
        - placement_node_id: 2
          replicate_num: 7
        - placement_node_id: 2
          replicate_num: 7
        coding_chunk_num: 0
        primary_placement_node_id: 5
        protection_domain_id: 5
        stretched: true
        size: 3
        name: name
        pool_role: pool_role
        pool_type: pool_type
        shared_pool_id: 9
  PoolStat:
    type: object
    properties:
      actual_kbyte:
        type: integer
        format: int64
      create:
        type: string
        format: date-time
      creating_num:
        type: integer
        format: int64
      data_kbyte:
        type: integer
        format: int64
      degraded_num:
        type: in

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