swagger: "2.0"
info:
  title: MinIO Console Server
  version: 0.1.0
consumes:
  - application/json
produces:
  - application/json
schemes:
  - http
  - ws
basePath: /api/v1
# We are going to be taking `Authorization: Bearer TOKEN` header for our authentication
securityDefinitions:
  key:
    type: oauth2
    flow: accessCode
    authorizationUrl: http://min.io
    tokenUrl: http://min.io
# Apply the key security definition to all APIs
security:
  - key: [ ]
paths:
  /login:
    get:
      summary: Returns login strategy, form or sso.
      operationId: LoginDetail
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/loginDetails"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      # Exclude this API from the authentication requirement
      security: [ ]
      tags:
        - Auth
  /login/operator:
    post:
      summary: Login to Operator Console.
      operationId: LoginOperator
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/loginOperatorRequest"
      responses:
        204:
          description: A successful login.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      security: [ ]
      tags:
        - Auth

  /login/oauth2/auth:
    post:
      summary: Identity Provider oauth2 callback endpoint.
      operationId: LoginOauth2Auth
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/loginOauth2AuthRequest"
      responses:
        204:
          description: A successful login.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      security: [ ]
      tags:
        - Auth

  /logout:
    post:
      summary: Logout from Operator.
      operationId: Logout
      responses:
        200:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - Auth

  /session:
    get:
      summary: Endpoint to check if your session is still valid
      operationId: SessionCheck
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/operatorSessionResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - Auth

  /check-version:
    get:
      summary: Checks the current Operator version against the latest
      operationId: CheckMinIOVersion”
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/checkOperatorVersionResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      security: [ ]
      tags:
        - UserAPI

  /subscription/info:
    get:
      summary: Subscription info
      operationId: SubscriptionInfo
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/license"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /subscription/validate:
    post:
      summary: Validates subscription license
      operationId: SubscriptionValidate
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/subscriptionValidateRequest"
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/license"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /subscription/refresh:
    post:
      summary: Refresh existing subscription license
      operationId: SubscriptionRefresh
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/license"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /subscription/namespaces/{namespace}/tenants/{tenant}/activate:
    post:
      summary: Activate a particular tenant using the existing subscription license
      operationId: SubscriptionActivate
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /tenants:
    get:
      summary: List Tenant of All Namespaces
      operationId: ListAllTenants
      parameters:
        - name: sort_by
          in: query
          required: false
          type: string
        - name: offset
          in: query
          required: false
          type: integer
          format: int32
        - name: limit
          in: query
          required: false
          type: integer
          format: int32
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/listTenantsResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    post:
      summary: Create Tenant
      operationId: CreateTenant
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/createTenantRequest"
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/createTenantResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespace:
    post:
      summary: Creates a new Namespace with given information
      operationId: CreateNamespace
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/namespace"
      responses:
        201:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants:
    get:
      summary: List Tenants by Namespace
      operationId: ListTenants
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: sort_by
          in: query
          required: false
          type: string
        - name: offset
          in: query
          required: false
          type: integer
          format: int32
        - name: limit
          in: query
          required: false
          type: integer
          format: int32
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/listTenantsResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/csr:
    get:
      summary: List Tenant Certificate Signing Request
      operationId: ListTenantCertificateSigningRequest
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/csrElements"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/identity-provider:
    get:
      summary: Tenant Identity Provider
      operationId: TenantIdentityProvider
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/idpConfiguration"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    post:
      summary: Update Tenant Identity Provider
      operationId: UpdateTenantIdentityProvider
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/idpConfiguration"
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/set-administrators:
    post:
      summary: Set the consoleAdmin policy to the specified users and groups
      operationId: SetTenantAdministrators
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/setAdministratorsRequest"
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/security:
    get:
      summary: Tenant Security
      operationId: TenantSecurity
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/tenantSecurityResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    post:
      summary: Update Tenant Security
      operationId: UpdateTenantSecurity
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/updateTenantSecurityRequest"
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/log:
    get:
      summary: Get Tenant Logs
      operationId: GetTenantLogs
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/tenantLogs"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    put:
      summary: Set Tenant Logs
      operationId: SetTenantLogs
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: data
          in: body
          required: true
          schema:
            $ref: "#/definitions/tenantLogs"
      responses:
        200:
          description: A successful response.
          schema:
            type: boolean
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/enable-logging:
    post:
      summary: Enable Tenant Logging
      operationId: EnableTenantLogging
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            type: boolean
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/disable-logging:
    post:
      summary: Disable Tenant Logging
      operationId: DisableTenantLogging
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            type: boolean
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}:
    get:
      summary: Tenant Details
      operationId: TenantDetails
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/tenant"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    delete:
      summary: Delete tenant and underlying pvcs
      operationId: DeleteTenant
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: false
          schema:
            $ref: "#/definitions/deleteTenantRequest"
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    put:
      summary: Update Tenant
      operationId: UpdateTenant
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/updateTenantRequest"
      responses:
        201:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pools:
    post:
      summary: Tenant Add Pool
      operationId: TenantAddPool
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/pool"
      responses:
        201:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    put:
      summary: Tenant Update Pools
      operationId: TenantUpdatePools
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/poolUpdateRequest"
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/tenant"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pvcs:
    get:
      summary: List all PVCs from given Tenant
      operationId: ListPVCsForTenant
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/listPVCsResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/usage:
    get:
      summary: Get Usage For The Tenant
      operationId: GetTenantUsage
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/tenantUsage"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pods:
    get:
      summary: Get Pods For The Tenant
      operationId: GetTenantPods
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            type: array
            items:
              $ref: "#/definitions/tenantPod"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/events:
    get:
      summary: Get Events for given Tenant
      operationId: GetTenantEvents
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/eventListWrapper"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pods/{podName}:
    get:
      summary: Get Logs for Pod
      operationId: GetPodLogs
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: podName
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            type: string
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    delete:
      summary: Delete pod
      operationId: DeletePod
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: podName
          in: path
          required: true
          type: string
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events:
    get:
      summary: Get Events for Pod
      operationId: GetPodEvents
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: podName
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/eventListWrapper"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/describe:
    get:
      summary: Describe Pod
      operationId: DescribePod
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: podName
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/describePodWrapper"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/monitoring:
    get:
      summary: Get Prometheus Monitoring config info For The Tenant
      operationId: GetTenantMonitoring
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/tenantMonitoringInfo"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    put:
      summary: Set Prometheus monitoring fields for tenant
      operationId: SetTenantMonitoring
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: data
          in: body
          required: true
          schema:
            $ref: "#/definitions/tenantMonitoringInfo"
      responses:
        201:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/certificates:
    put:
      summary: Tenant Update Certificates
      operationId: TenantUpdateCertificate
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/tlsConfiguration"
      responses:
        201:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/encryption:
    delete:
      summary: Tenant Delete Encryption
      operationId: TenantDeleteEncryption
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    put:
      summary: Tenant Update Encryption
      operationId: TenantUpdateEncryption
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/encryptionConfiguration"
      responses:
        201:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

    get:
      summary: Tenant Encryption Info
      operationId: TenantEncryptionInfo
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/encryptionConfigurationResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/yaml:
    get:
      summary: Get the Tenant YAML
      operationId: GetTenantYAML
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/tenantYAML"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    put:
      summary: Put the Tenant YAML
      operationId: PutTenantYAML
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/tenantYAML"
      responses:
        201:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/domains:
    put:
      summary: Update Domains for a Tenant
      operationId: UpdateTenantDomains
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/updateDomainsRequest"
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/resourcequotas/{resource-quota-name}:
    get:
      summary: Get Resource Quota
      operationId: GetResourceQuota
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: resource-quota-name
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/resourceQuota"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /cluster/max-allocatable-memory:
    get:
      summary: Get maximum allocatable memory for given number of nodes
      operationId: GetMaxAllocatableMem
      parameters:
        - name: num_nodes
          in: query
          required: true
          type: integer
          format: int32
          minimum: 1
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/maxAllocatableMemResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /cluster/allocatable-resources:
    get:
      summary: Get allocatable cpu and memory for given number of nodes
      operationId: GetAllocatableResources
      parameters:
        - name: num_nodes
          in: query
          required: true
          type: integer
          format: int32
          minimum: 1
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/allocatableResourcesResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /get-parity/{nodes}/{disksPerNode}:
    get:
      summary: Gets parity by sending number of nodes & number of disks
      operationId: GetParity
      parameters:
        - name: nodes
          in: path
          required: true
          type: integer
          minimum: 2
        - name: disksPerNode
          in: path
          required: true
          type: integer
          minimum: 1
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/parityResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /list-pvcs:
    get:
      summary: List all PVCs from namespaces that the user has access to
      operationId: ListPVCs
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/listPVCsResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /mp-integration:
    get:
      summary: Returns email registered for marketplace integration
      operationId: GetMPIntegration
      responses:
        200:
          description: A successful response.
          schema:
            type: object
            properties:
              isEmailSet:
                type: boolean
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
    post:
      summary: Set email to register for marketplace integration
      operationId: PostMPIntegration
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/mpIntegration"
      responses:
        201:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pvc/{PVCName}:
    delete:
      summary: Delete PVC
      operationId: DeletePVC
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: PVCName
          in: path
          required: true
          type: string
      responses:
        204:
          description: A successful response.
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/events:
    get:
      summary: Get Events for PVC
      operationId: GetPVCEvents
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: PVCName
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/eventListWrapper"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/describe:
    get:
      summary: Get Describe output for PVC
      operationId: GetPVCDescribe
      parameters:
        - name: namespace
          in: path
          required: true
          type: string
        - name: tenant
          in: path
          required: true
          type: string
        - name: PVCName
          in: path
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/describePVCWrapper"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /nodes/labels:
    get:
      summary: List node labels
      operationId: ListNodeLabels
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/nodeLabels"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
  /subnet/login:
    post:
      summary: Login to subnet
      operationId: OperatorSubnetLogin
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/operatorSubnetLoginRequest"
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/operatorSubnetLoginResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
  /subnet/login/mfa:
    post:
      summary: Login to subnet using mfa
      operationId: OperatorSubnetLoginMFA
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/operatorSubnetLoginMFARequest"
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/operatorSubnetLoginResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
  /subnet/apikey:
    get:
      summary: Subnet api key
      operationId: OperatorSubnetApiKey
      parameters:
        - name: token
          in: query
          required: true
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/operatorSubnetAPIKey"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
  /subnet/apikey/register:
    post:
      summary: Register Operator with Subnet
      operationId: OperatorSubnetRegisterAPIKey
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/operatorSubnetAPIKey"
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/operatorSubnetRegisterAPIKeyResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI
  /subnet/apikey/info:
    get:
      summary: Subnet API key info
      operationId: OperatorSubnetAPIKeyInfo
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/operatorSubnetRegisterAPIKeyResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /directpv/drives:
    get:
      summary: Get directpv drives list
      operationId: GetDirectPVDriveList
      parameters:
        - name: nodes
          in: query
          required: false
          type: string
        - name: drives
          in: query
          required: false
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/getDirectPVDriveListResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /directpv/volumes:
    get:
      summary: Get directpv volumes list
      operationId: GetDirectPVVolumeList
      parameters:
        - name: nodes
          in: query
          required: false
          type: string
        - name: drives
          in: query
          required: false
          type: string
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/getDirectPVVolumeListResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

  /directpv/drives/format:
    post:
      summary: Format directpv drives from a list
      operationId: DirectPVFormatDrive
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/formatConfiguration"
      responses:
        200:
          description: A successful response.
          schema:
            $ref: "#/definitions/formatDirectPVDrivesResponse"
        default:
          description: Generic error response.
          schema:
            $ref: "#/definitions/error"
      tags:
        - OperatorAPI

definitions:
  error:
    type: object
    required:
      - message
      - detailedMessage
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
      detailedMessage:
        type: string
  loginDetails:
    type: object
    properties:
      loginStrategy:
        type: string
        enum: [ form, redirect, service-account, redirect-service-account ]
      redirect:
        type: string
      isDirectPV:
        type: boolean
  loginRequest:
    type: object
    properties:
      accessKey:
        type: string
      secretKey:
        type: string
      sts:
        type: string
      features:
        type: object
        properties:
          hide_menu:
            type: boolean
  loginOauth2AuthRequest:
    type: object
    required:
      - state
      - code
    properties:
      state:
        type: string
      code:
        type: string
  loginOperatorRequest:
    type: object
    required:
      - jwt
    properties:
      jwt:
        type: string
  operatorSessionResponse:
    type: object
    properties:
      features:
        type: array
        items:
          type: string
      status:
        type: string
        enum: [ ok ]
      operator:
        type: boolean
      directPV:
        type: boolean
      permissions:
        type: object
        additionalProperties:
          type: array
          items:
            type: string

  tenantStatus:
    type: object
    properties:
      write_quorum:
        type: integer
        format: int32
      drives_online:
        type: integer
        format: int32
      drives_offline:
        type: integer
        format: int32
      drives_healing:
        type: integer
        format: int32
      health_status:
        type: string
      usage:
        type: object
        properties:
          raw:
            type: integer
            format: int64
          raw_usage:
            type: integer
            format: int64
          capacity:
            type: integer
            format: int64
          capacity_usage:
            type: integer
            format: int64

  tenantSecurityResponse:
    type: object
    properties:
      autoCert:
        type: boolean
      customCertificates:
        type: object
        properties:
          minio:
            type: array
            items:
              $ref: "#/definitions/certificateInfo"
          minioCAs:
            type: array
            items:
              $ref: "#/definitions/certificateInfo"
      securityContext:
        type: object
        $ref: "#/definitions/securityContext"

  updateTenantSecurityRequest:
    type: object
    properties:
      autoCert:
        type: boolean
      customCertificates:
        type: object
        properties:
          secretsToBeDeleted:
            type: array
            items:
              type: string
          minio:
            type: array
            items:
              $ref: "#/definitions/keyPairConfiguration"
          minioCAs:
            type: array
            items:
              type: string
      securityContext:
        type: object
        $ref: "#/definitions/securityContext"
        
  certificateInfo:
    type: object
    properties:
      serialNumber:
        type: string
      name:
        type: string
      domains:
        type: array
        items:
          type: string
      expiry:
        type: string

  tenant:
    type: object
    properties:
      name:
        type: string
      creation_date:
        type: string
      deletion_date:
        type: string
      currentState:
        type: string
      pools:
        type: array
        items:
          $ref: "#/definitions/pool"
      image:
        type: string
      namespace:
        type: string
      total_size:
        type: integer
        format: int64
      enable_prometheus:
        type: boolean
      subnet_license:
        $ref: "#/definitions/license"
      endpoints:
        type: object
        properties:
          minio:
            type: string
          console:
            type: string
      logEnabled:
        type: boolean
      monitoringEnabled:
        type: boolean
      idpAdEnabled:
        type: boolean
      idpOidcEnabled:
        type: boolean
      encryptionEnabled:
        type: boolean
      status:
        $ref: "#/definitions/tenantStatus"
      minioTLS:
        type: boolean
      domains:
        $ref: "#/definitions/domainsConfiguration"

  tenantUsage:
    type: object
    properties:
      used:
        type: integer
        format: int64
      disk_used:
        type: integer
        format: int64

  tenantList:
    type: object
    properties:
      name:
        type: string
      pool_count:
        type: integer
      instance_count:
        type: integer
      total_size:
        type: integer
      volume_count:
        type: integer
      creation_date:
        type: string
      deletion_date:
        type: string
      currentState:
        type: string
      namespace:
        type: string
      health_status:
        type: string
      capacity_raw:
        type: integer
        format: int64
      capacity_raw_usage:
        type: integer
        format: int64
      capacity:
        type: integer
        format: int64
      capacity_usage:
        type: integer
        format: int64
      tiers:
        type: array
        items:
          $ref: "#/definitions/tenantTierElement"
      domains:
        type: object
        $ref: "#/definitions/domainsConfiguration"

  listTenantsResponse:
    type: object
    properties:
      tenants:
        type: array
        items:
          $ref: "#/definitions/tenantList"
        title: list of resulting tenants
      total:
        type: integer
        format: int64
        title: number of tenants accessible to tenant user

  updateTenantRequest:
    type: object
    properties:
      image:
        type: string
        pattern: "^((.*?)/(.*?):(.+))$"
      image_registry:
        $ref: "#/definitions/imageRegistry"
      image_pull_secret:
        type: string
      enable_prometheus:
        type: boolean

  imageRegistry:
    type: object
    required:
      - registry
      - username
      - password
    properties:
      registry:
        type: string
      username:
        type: string
      password:
        type: string

  csrElements:
    type: object
    properties:
      csrElement:
        type: array
        items:
          $ref: "#/definitions/csrElement"

  csrElement:
    type: object
    properties:
      status:
        type: string
      name:
        type: string
      generate_name:
        type: string
      namespace:
        type: string
      resource_version:
        type: string
      generation:
        type: integer
        format: int64
      deletion_grace_period_seconds:
        type: integer
        format: int64
      annotations:
        type: array
        items:
          $ref: "#/definitions/annotation"

  createTenantRequest:
    type: object
    required:
      - name
      - namespace
      - pools
    properties:
      name:
        type: string
        pattern: "^[a-z0-9-]{3,63}$"
      image:
        type: string
      pools:
        type: array
        items:
          $ref: "#/definitions/pool"
      mounth_path:
        type: string
      access_key:
        type: string
      secret_key:
        type: string
      enable_console:
        type: boolean
        default: true
      enable_tls:
        type: boolean
        default: true
      enable_prometheus:
        type: boolean
        default: false
      namespace:
        type: string
      erasureCodingParity:
        type: integer
      annotations:
        type: object
        additionalProperties:
          type: string
      labels:
        type: object
        additionalProperties:
          type: string
      logSearchConfiguration:
        $ref: "#/definitions/logSearchConfiguration"
      prometheusConfiguration:
        $ref: "#/definitions/prometheusConfiguration"
      image_registry:
        $ref: "#/definitions/imageRegistry"
      image_pull_secret:
        type: string
      idp:
        type: object
        $ref: "#/definitions/idpConfiguration"
      tls:
        type: object
        $ref: "#/definitions/tlsConfiguration"
      encryption:
        type: object
        $ref: "#/definitions/encryptionConfiguration"
      expose_minio:
        type: boolean
      expose_console:
        type: boolean
      domains:
        type: object
        $ref: "#/definitions/domainsConfiguration"

  metadataFields:
    type: object
    properties:
      annotations:
        type: object
        additionalProperties:
          type: string
      labels:
        type: object
        additionalProperties:
          type: string
      node_selector:
        type: object
        additionalProperties:
          type: string

  keyPairConfiguration:
    type: object
    required:
      - crt
      - key
    properties:
      crt:
        type: string
      key:
        type: string

  tlsConfiguration:
    type: object
    properties:
      minio:
        type: array
        items:
          $ref: "#/definitions/keyPairConfiguration"
      ca_certificates:
        type: array
        items:
          type: string

  logSearchConfiguration:
    type: object
    properties:
      storageClass:
        type: string
        default: ""
      storageSize:
        type: number
        default: 5
      image:
        type: string
      securityContext:
        type: object
        $ref: "#/definitions/securityContext"
      postgres_securityContext:
        type: object
        $ref: "#/definitions/securityContext"
      postgres_image:
        type: string
      postgres_init_image:
        type: string
  prometheusConfiguration:
    type: object
    properties:
      storageClass:
        type: string
        default: ""
      storageSize:
        type: number
        default: 5
      image:
        type: string
      sidecar_image:
        type: string
      init_image:
        type: string
      securityContext:
        type: object
        $ref: "#/definitions/securityContext"

  setAdministratorsRequest:
    type: object
    properties:
      user_dns:
        type: array
        items:
          type: string
      group_dns:
        type: array
        items:
          type: string

  idpConfiguration:
    type: object
    properties:
      oidc:
        type: object
        required:
          - configuration_url
          - client_id
          - secret_id
          - claim_name
        properties:
          configuration_url:
            type: string
          client_id:
            type: string
          secret_id:
            type: string
          callback_url:
            type: string
          claim_name:
            type: string
          scopes:
            type: string
      keys:
        type: array
        items:
          type: object
          required:
            - access_key
            - secret_key
          properties:
            access_key:
              type: string
            secret_key:
              type: string
      active_directory:
        type: object
        required:
          - url
          - lookup_bind_dn
        properties:
          url:
            type: string
          group_search_base_dn:
            type: string
          group_search_filter:
            type: string
          skip_tls_verification:
            type: boolean
          server_insecure:
            type: boolean
          server_start_tls:
            type: boolean
          lookup_bind_dn:
            type: string
          lookup_bind_password:
            type: string
          user_dn_search_base_dn:
            type: string
          user_dn_search_filter:
            type: string
          user_dns:
            type: array
            items:
              type: string

  encryptionConfiguration:
    allOf:
      - $ref: "#/definitions/metadataFields"
      - type: object
        properties:
          image:
            type: string
          replicas:
            type: string
          secretsToBeDeleted:
            type: array
            items:
              type: string
          server:
            type: object
            $ref: "#/definitions/keyPairConfiguration"
          client:
            type: object
            $ref: "#/definitions/keyPairConfiguration"
          gemalto:
            type: object
            $ref: "#/definitions/gemaltoConfiguration"
          aws:
            type: object
            $ref: "#/definitions/awsConfiguration"
          vault:
            type: object
            $ref: "#/definitions/vaultConfiguration"
          gcp:
            type: object
            $ref: "#/definitions/gcpConfiguration"
          azure:
            type: object
            $ref: "#/definitions/azureConfiguration"
          securityContext:
            type: object
            $ref: "#/definitions/securityContext"

  encryptionConfigurationResponse:
    allOf:
      - $ref: "#/definitions/metadataFields"
      - type: object
        properties:
          image:
            type: string
          replicas:
            type: string
          server:
            type: object
            $ref: "#/definitions/certificateInfo"
          mtls_client:
            type: object
            $ref: "#/definitions/certificateInfo"
          gemalto:
            type: object
            $ref: "#/definitions/gemaltoConfigurationResponse"
          aws:
            type: object
            $ref: "#/definitions/awsConfiguration"
          vault:
            type: object
            $ref: "#/definitions/vaultConfigurationResponse"
          gcp:
            type: object
            $ref: "#/definitions/gcpConfiguration"
          azure:
            type: object
            $ref: "#/definitions/azureConfiguration"
          securityContext:
            type: object
            $ref: "#/definitions/securityContext"

  vaultConfiguration:
    type: object
    required:
      - endpoint
      - approle
    properties:
      endpoint:
        type: string
      engine:
        type: string
      namespace:
        type: string
      prefix:
        type: string
      approle:
        type: object
        required:
          - id
          - secret
        properties:
          engine:
            type: string
          id:
            type: string
          secret:
            type: string
          retry:
            type: integer
            format: int64
      status:
        type: object
        properties:
          ping:
            type: integer
            format: int64
      tls:
        type: object
        properties:
          key:
            type: string
          crt:
            type: string
          ca:
            type: string

  vaultConfigurationResponse:
    type: object
    required:
      - endpoint
      - approle
    properties:
      endpoint:
        type: string
      engine:
        type: string
      namespace:
        type: string
      prefix:
        type: string
      approle:
        type: object
        required:
          - id
          - secret
        properties:
          engine:
            type: string
          id:
            type: string
          secret:
            type: string
          retry:
            type: integer
            format: int64
      status:
        type: object
        properties:
          ping:
            type: integer
            format: int64
      tls:
        type: object
        properties:
          crt:
            type: object
            $ref: "#/definitions/certificateInfo"
          ca:
            type: object
            $ref: "#/definitions/certificateInfo"

  awsConfiguration:
    type: object
    required:
      - secretsmanager
    properties:
      secretsmanager:
        type: object
        required:
          - endpoint
          - region
          - credentials
        properties:
          endpoint:
            type: string
          region:
            type: string
          kmskey:
            type: string
          credentials:
            type: object
            required:
              - accesskey
              - secretkey
            properties:
              accesskey:
                type: string
              secretkey:
                type: string
              token:
                type: string

  gemaltoConfiguration:
    type: object
    required:
      - keysecure
    properties:
      keysecure:
        type: object
        required:
          - endpoint
          - credentials
        properties:
          endpoint:
            type: string
          credentials:
            type: object
            required:
              - token
              - domain
            properties:
              token:
                type: string
              domain:
                type: string
              retry:
                type: integer
                format: int64
          tls:
            type: object
            required:
              - ca
            properties:
              ca:
                type: string

  gemaltoConfigurationResponse:
    type: object
    required:
      - keysecure
    properties:
      keysecure:
        type: object
        required:
          - endpoint
          - credentials
        properties:
          endpoint:
            type: string
          credentials:
            type: object
            required:
              - token
              - domain
            properties:
              token:
                type: string
              domain:
                type: string
              retry:
                type: integer
                format: int64
          tls:
            type: object
            required:
              - ca
            properties:
              ca:
                type: object
                $ref: "#/definitions/certificateInfo"

  gcpConfiguration:
    type: object
    required:
      - secretmanager
    properties:
      secretmanager:
        type: object
        required:
          - project_id
        properties:
          project_id:
            type: string
          endpoint:
            type: string
          credentials:
            type: object
            properties:
              client_email:
                type: string
              client_id:
                type: string
              private_key_id:
                type: string
              private_key:
                type: string

  azureConfiguration:
    type: object
    required:
      - keyvault
    properties:
      keyvault:
        type: object
        required:
          - endpoint
        properties:
          endpoint:
            type: string
          credentials:
            type: object
            required:
              - tenant_id
              - client_id
              - client_secret
            properties:
              tenant_id:
                type: string
              client_id:
                type: string
              client_secret:
                type: string

  createTenantResponse:
    type: object
    properties:
      externalIDP:
        type: boolean
      console:
        type: array
        items:
          $ref: "#/definitions/tenantResponseItem"

  tenantResponseItem:
    type: object
    properties:
      access_key:
        type: string
      secret_key:
        type: string
      url:
        type: string

  tenantPod:
    type: object
    required:
      - name
    properties:
      name:
        type: string
      status:
        type: string
      timeCreated:
        type: integer
      podIP:
        type: string
      restarts:
        type: integer
      node:
        type: string

  pool:
    type: object
    required:
      - servers
      - volumes_per_server
      - volume_configuration
    properties:
      name:
        type: string
      servers:
        type: integer
      volumes_per_server:
        type: integer
        format: int32
      volume_configuration:
        type: object
        required:
          - size
        properties:
          size:
            type: integer
          storage_class_name:
            type: string
          labels:
            type: object
            additionalProperties:
              type: string
          annotations:
            type: object
            additionalProperties:
              type: string
      resources:
        $ref: "#/definitions/poolResources"
      node_selector:
        type: object
        additionalProperties:
          type: string
        description: "NodeSelector is a selector which must be true for
          the pod to fit on a node. Selector which must match a node's
          labels for the pod to be scheduled on that node. More info:
          https://kubernetes.io/docs/concepts/configuration/assign-pod-node/"
      affinity:
        $ref: "#/definitions/poolAffinity"
      tolerations:
        $ref: "#/definitions/poolTolerations"
      securityContext:
        type: object
        $ref: "#/definitions/securityContext"

  poolTolerations:
    description: Tolerations allows users to set entries like effect,
      key, operator, value.
    items:
      description: The pod this Toleration is attached to tolerates
        any taint that matches the triple <key,value,effect> using
        the matching operator <operator>.
      properties:
        effect:
          description: Effect indicates the taint effect to match.
            Empty means match all taint effects. When specified, allowed
            values are NoSchedule, PreferNoSchedule and NoExecute.
          type: string
        key:
          description: Key is the taint key that the toleration applies
            to. Empty means match all taint keys. If the key is empty,
            operator must be Exists; this combination means to match
            all values and all keys.
          type: string
        operator:
          description: Operator represents a key's relationship to
            the value. Valid operators are Exists and Equal. Defaults
            to Equal. Exists is equivalent to wildcard for value,
            so that a pod can tolerate all taints of a particular
            category.
          type: string
        tolerationSeconds:
          $ref: "#/definitions/poolTolerationSeconds"
        value:
          description: Value is the taint value the toleration matches
            to. If the operator is Exists, the value should be empty,
            otherwise just a regular string.
          type: string
      type: object
    type: array

  poolTolerationSeconds:
    description: TolerationSeconds represents the period of
      time the toleration (which must be of effect NoExecute,
      otherwise this field is ignored) tolerates the taint.
      By default, it is not set, which means tolerate the taint
      forever (do not evict). Zero and negative values will
      be treated as 0 (evict immediately) by the system.
    type: object
    required:
      - seconds
    properties:
      seconds:
        type: integer
        format: int64

  poolResources:
    description: If provided, use these requests and limit for cpu/memory
      resource allocation
    properties:
      limits:
        additionalProperties:
          type: integer
          format: int64
        description: "Limits describes the maximum amount of compute
          resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/"
        type: object
      requests:
        additionalProperties:
          additionalProperties:
          type: integer
          format: int64
        description: "Requests describes the minimum amount of compute
          resources required. If Requests is omitted for a container,
          it defaults to Limits if that is explicitly specified, otherwise
          to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/"
        type: object
    type: object

  poolAffinity:
    description: If specified, affinity will define the pod's scheduling
      constraints
    properties:
      nodeAffinity:
        description: Describes node affinity scheduling rules for
          the pod.
        properties:
          preferredDuringSchedulingIgnoredDuringExecution:
            description: The scheduler will prefer to schedule pods
              to nodes that satisfy the affinity expressions specified
              by this field, but it may choose a node that violates
              one or more of the expressions. The node that is most
              preferred is the one with the greatest sum of weights,
              i.e. for each node that meets all of the scheduling
              requirements (resource request, requiredDuringScheduling
              affinity expressions, etc.), compute a sum by iterating
              through the elements of this field and adding "weight"
              to the sum if the node matches the corresponding matchExpressions;
              the node(s) with the highest sum are the most preferred.
            items:
              description: An empty preferred scheduling term matches
                all objects with implicit weight 0 (i.e. it's a no-op).
                A null preferred scheduling term matches no objects
                (i.e. is also a no-op).
              properties:
                preference:
                  description: A node selector term, associated with
                    the corresponding weight.
                  $ref: "#/definitions/nodeSelectorTerm"
                  type: object
                weight:
                  description: Weight associated with matching the
                    corresponding nodeSelectorTerm, in the range 1-100.
                  format: int32
                  type: integer
              required:
                - preference
                - weight
              type: object
            type: array
          requiredDuringSchedulingIgnoredDuringExecution:
            description: If the affinity requirements specified by
              this field are not met at scheduling time, the pod will
              not be scheduled onto the node. If the affinity requirements
              specified by this field cease to be met at some point
              during pod execution (e.g. due to an update), the system
              may or may not try to eventually evict the pod from
              its node.
            properties:
              nodeSelectorTerms:
                description: Required. A list of node selector terms.
                  The terms are ORed.
                items:
                  $ref: "#/definitions/nodeSelectorTerm"
                type: array
            required:
              - nodeSelectorTerms
            type: object
        type: object
      podAffinity:
        description: Describes pod affinity scheduling rules (e.g.
          co-locate this pod in the same node, pool, etc. as some
          other pod(s)).
        properties:
          preferredDuringSchedulingIgnoredDuringExecution:
            description: The scheduler will prefer to schedule pods
              to nodes that satisfy the affinity expressions specified
              by this field, but it may choose a node that violates
              one or more of the expressions. The node that is most
              preferred is the one with the greatest sum of weights,
              i.e. for each node that meets all of the scheduling
              requirements (resource request, requiredDuringScheduling
              affinity expressions, etc.), compute a sum by iterating
              through the elements of this field and adding "weight"
              to the sum if the node has pods which matches the corresponding
              podAffinityTerm; the node(s) with the highest sum are
              the most preferred.
            items:
              description:
                The weights of all of the matched WeightedPodAffinityTerm
                fields are added per-node to find the most preferred
                node(s)
              properties:
                podAffinityTerm:
                  $ref: "#/definitions/podAffinityTerm"
                weight:
                  description: weight associated with matching the
                    corresponding podAffinityTerm, in the range 1-100.
                  format: int32
                  type: integer
              required:
                - podAffinityTerm
                - weight
              type: object
            type: array
          requiredDuringSchedulingIgnoredDuringExecution:
            description: If the affinity requirements specified by
              this field are not met at scheduling time, the pod will
              not be scheduled onto the node. If the affinity requirements
              specified by this field cease to be met at some point
              during pod execution (e.g. due to a pod label update),
              the system may or may not try to eventually evict the
              pod from its node. When there are multiple elements,
              the lists of nodes corresponding to each podAffinityTerm
              are intersected, i.e. all terms must be satisfied.
            items:
              $ref: "#/definitions/podAffinityTerm"
            type: array
        type: object
      podAntiAffinity:
        description: Describes pod anti-affinity scheduling rules
          (e.g. avoid putting this pod in the same node, pool, etc.
          as some other pod(s)).
        properties:
          preferredDuringSchedulingIgnoredDuringExecution:
            description: The scheduler will prefer to schedule pods
              to nodes that satisfy the anti-affinity expressions
              specified by this field, but it may choose a node that
              violates one or more of the expressions. The node that
              is most preferred is the one with the greatest sum of
              weights, i.e. for each node that meets all of the scheduling
              requirements (resource request, requiredDuringScheduling
              anti-affinity expressions, etc.), compute a sum by iterating
              through the elements of this field and adding "weight"
              to the sum if the node has pods which matches the corresponding
              podAffinityTerm; the node(s) with the highest sum are
              the most preferred.
            items:
              description:
                The weights of all of the matched WeightedPodAffinityTerm
                fields are added per-node to find the most preferred
                node(s)
              properties:
                podAffinityTerm:
                  $ref: "#/definitions/podAffinityTerm"
                weight:
                  description: weight associated with matching the
                    corresponding podAffinityTerm, in the range 1-100.
                  format: int32
                  type: integer
              required:
                - podAffinityTerm
                - weight
              type: object
            type: array
          requiredDuringSchedulingIgnoredDuringExecution:
            description: If the anti-affinity requirements specified
              by this field are not met at scheduling time, the pod
              will not be scheduled onto the node. If the anti-affinity
              requirements specified by this field cease to be met
              at some point during pod execution (e.g. due to a pod
              label update), the system may or may not try to eventually
              evict the pod from its node. When there are multiple
              elements, the lists of nodes corresponding to each podAffinityTerm
              are intersected, i.e. all terms must be satisfied.
            items:
              $ref: "#/definitions/podAffinityTerm"
            type: array
        type: object
    type: object

  nodeSelectorTerm:
    type: object
    description: A null or empty node selector term
      matches no objects. The requirements of them are
      ANDed. The TopologySelectorTerm type implements
      a subset of the NodeSelectorTerm.
    properties:
      matchExpressions:
        description: A list of node selector requirements
          by node's labels.
        items:
          description: A node selector requirement is
            a selector that contains values, a key,
            and an operator that relates the key and
            values.
          properties:
            key:
              description: The label key that the selector
                applies to.
              type: string
            operator:
              description: Represents a key's relationship
                to a set of values. Valid operators
                are In, NotIn, Exists, DoesNotExist.
                Gt, and Lt.
              type: string
            values:
              description: 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. If the
                operator is Gt or Lt, the values array
                must have a single element, which will
                be interpreted as an integer. This array
                is replaced during a strategic merge
                patch.
              items:
                type: string
              type: array
          required:
            - key
            - operator
          type: object
        type: array
      matchFields:
        description: A list of node selector requirements
          by node's fields.
        items:
          description: A node selector requirement is
            a selector that contains values, a key,
            and an operator that relates the key and
            values.
          properties:
            key:
              description: The label key that the selector
                applies to.
              type: string
            operator:
              description: Represents a key's relationship
                to a set of values. Valid operators
                are In, NotIn, Exists, DoesNotExist.
                Gt, and Lt.
              type: string
            values:
              description: 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. If the
                operator is Gt or Lt, the values array
                must have a single element, which will
                be interpreted as an integer. This array
                is replaced during a strategic merge
                patch.
              items:
                type: string
              type: array
          required:
            - key
            - operator
          type: object
        type: array

  podAffinityTerm:
    description: Required. A pod affinity term, associated
      with the corresponding weight.
    properties:
      labelSelector:
        description: A label query over a set of resources,
          in this case pods.
        properties:
          matchExpressions:
            description: matchExpressions is a list
              of label selector requirements. The requirements
              are ANDed.
            items:
              description: A label selector requirement
                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:
                  description: operator represents a
                    key's relationship to a set of values.
                    Valid operators are In, NotIn, Exists
                    and DoesNotExist.
                  type: string
                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
              required:
                - key
                - operator
              type: object
            type: array
          matchLabels:
            additionalProperties:
              type: string
            description: matchLabels is a map of {key,value}
              pairs. A single {key,value} in the matchLabels
              map is equivalent to an element of matchExpressions,
              whose key field is "key", the operator
              is "In", and the values array contains
              only "value". The requirements are ANDed.
            type: object
        type: object
      namespaces:
        description: namespaces specifies which namespaces
          the labelSelector applies to (matches against);
          null or empty list means "this pod's namespace"
        items:
          type: string
        type: array
      topologyKey:
        description: This pod should be co-located (affinity)
          or not co-located (anti-affinity) with the
          pods matching the labelSelector in the specified
          namespaces, where co-located is defined as
          running on a node whose value of the label
          with key topologyKey matches that of any node
          on which any of the selected pods is running.
          Empty topologyKey is not allowed.
        type: string
    required:
      - topologyKey
    type: object

  resourceQuota:
    type: object
    properties:
      name:
        type: string
      elements:
        type: array
        items:
          $ref: "#/definitions/resourceQuotaElement"

  resourceQuotaElement:
    type: object
    properties:
      name:
        type: string
      hard:
        type: integer
        format: int64
      used:
        type: integer
        format: int64

  deleteTenantRequest:
    type: object
    properties:
      delete_pvcs:
        type: boolean

  poolUpdateRequest:
    type: object
    required:
      - pools
    properties:
      pools:
        type: array
        items:
          $ref: "#/definitions/pool"

  maxAllocatableMemResponse:
    type: object
    properties:
      max_memory:
        type: integer
        format: int64

  parityResponse:
    type: array
    items:
      type: string

  subscriptionValidateRequest:
    type: object
    properties:
      license:
        type: string
      email:
        type: string
      password:
        type: string
  license:
    type: object
    properties:
      email:
        type: string
      organization:
        type: string
      account_id:
        type: integer
      storage_capacity:
        type: integer
      plan:
        type: string
      expires_at:
        type: string

  getDirectPVDriveListResponse:
    type: object
    properties:
      drives:
        type: array
        items:
          $ref: "#/definitions/directPVDriveInfo"

  directPVDriveInfo:
    type: object
    properties:
      drive:
        type: string
      capacity:
        type: number
        format: int64
      allocated:
        type: number
        format: int64
      volumes:
        type: number
        format: int64
      node:
        type: string
      status:
        type: string
      message:
        type: string

  getDirectPVVolumeListResponse:
    type: object
    properties:
      volumes:
        type: array
        items:
          $ref: "#/definitions/directPVVolumeInfo"

  directPVVolumeInfo:
    type: object
    properties:
      volume:
        type: string
      capacity:
        type: number
        format: int64
      node:
        type: string
      drive:
        type: string

  pvFormatErrorResponse:
    type: object
    properties:
      node:
        type: string
      drive:
        type: string
      error:
        type: string

  formatDirectPVDrivesResponse:
    type: object
    properties:
      formatIssuesList:
        type: array
        items:
          $ref: "#/definitions/pvFormatErrorResponse"

  tenantYAML:
    type: object
    properties:
      yaml:
        type: string

  tenantLogs:
    type: object
    properties:
      image:
        type: string
      labels:
        type: array
        items:
          $ref: "#/definitions/label"
      annotations:
        type: array
        items:
          $ref: "#/definitions/annotation"
      diskCapacityGB:
        type: string
      nodeSelector:
        type: array
        items:
          $ref: "#/definitions/nodeSelector"
      serviceAccountName:
        type: string
      dbImage:
        type: string
      dbInitImage:
        type: string
      dbLabels:
        type: array
        items:
          $ref: "#/definitions/label"
      dbAnnotations:
        type: array
        items:
          $ref: "#/definitions/annotation"
      dbNodeSelector:
        type: array
        items:
          $ref: "#/definitions/nodeSelector"
      dbServiceAccountName:
        type: string
      disabled:
        type: boolean
      logCPURequest:
        type: string
      logMemRequest:
        type: string
      logDBCPURequest:
        type: string
      logDBMemRequest:
        type: string
      securityContext:
        type: object
        $ref: "#/definitions/securityContext"
      dbSecurityContext:
        type: object
        $ref: "#/definitions/securityContext"


  listPVCsResponse:
    type: object
    properties:
      pvcs:
        type: array
        items:
          $ref: "#/definitions/pvcsListResponse"

  pvcsListResponse:
    type: object
    properties:
      namespace:
        type: string
      name:
        type: string
      status:
        type: string
      volume:
        type: string
      tenant:
        type: string
      capacity:
        type: string
      storageClass:
        type: string
      age:
        type: string

  nodeLabels:
    type: object
    additionalProperties:
      type: array
      items:
        type: string

  namespace:
    type: object
    required:
      - name
    properties:
      name:
        type: string

  eventListWrapper:
    type: array
    items:
      $ref: "#/definitions/eventListElement"

  eventListElement:
    type: object
    properties:
      namespace:
        type: string
      last_seen:
        type: integer
        format: int64
      event_type:
        type: string
      reason:
        type: string
      object:
        type: string
      message:
        type: string

  describePodWrapper:
    type: object
    properties:
      name:
        type: string
      namespace:
        type: string
      priority:
        type: integer
      priorityClassName:
        type: string
      nodeName:
        type: string
      startTime:
        type: string
      labels:
        type: array
        items:
          $ref: "#/definitions/label"
      annotations:
        type: array
        items:
          $ref: "#/definitions/annotation"
      deletionTimestamp:
        type: string
      deletionGracePeriodSeconds:
        type: integer
      phase:
        type: string
      reason:
        type: string
      message:
        type: string
      podIP:
        type: string
      controllerRef:
        type: string
      containers:
        type: array
        items:
          $ref: "#/definitions/container"
      conditions:
        type: array
        items:
          $ref: "#/definitions/condition"
      volumes:
        type: array
        items:
          $ref: "#/definitions/volume"
      qosClass:
        type: string
      nodeSelector:
        type: array
        items:
          $ref: "#/definitions/nodeSelector"
      tolerations:
        type: array
        items:
          $ref: "#/definitions/toleration"

  describePVCWrapper:
    type: object
    properties:
      name:
        type: string
      namespace:
        type: string
      storageClass:
        type: string
      status:
        type: string
      volume:
        type: string
      labels:
        type: array
        items:
          $ref: "#/definitions/label"
      annotations:
        type: array
        items:
          $ref: "#/definitions/annotation"
      finalizers:
        type: array
        items:
          type: string
      capacity:
        type: string
      accessModes:
        type: array
        items:
          type: string
      volumeMode:
        type: string

  container:
    type: object
    properties:
      name:
        type: string
      containerID:
        type: string
      image:
        type: string
      imageID:
        type: string
      ports:
        type: array
        items:
          type: string
      hostPorts:
        type: array
        items:
          type: string
      args:
        type: array
        items:
          type: string
      state:
        $ref: "#/definitions/state"
      lastState:
        $ref: "#/definitions/state"
      ready:
        type: boolean
      restartCount:
        type: integer
      environmentVariables:
        type: array
        items:
          $ref: "#/definitions/environmentVariable"
      mounts:
        type: array
        items:
          $ref: "#/definitions/mount"

  state:
    type: object
    properties:
      state:
        type: string
      reason:
        type: string
      message:
        type: string
      exitCode:
        type: integer
      started:
        type: string
      finished:
        type: string
      signal:
        type: integer

  environmentVariable:
    type: object
    properties:
      key:
        type: string
      value:
        type: string

  mount:
    type: object
    properties:
      mountPath:
        type: string
      name:
        type: string
      readOnly:
        type: boolean
      subPath:
        type: string

  condition:
    type: object
    properties:
      type:
        type: string
      status:
        type: string

  volume:
    type: object
    properties:
      name:
        type: string
      pvc:
        $ref: "#/definitions/pvc"
      projected:
        $ref: "#/definitions/projectedVolume"

  pvc:
    type: object
    properties:
      claimName:
        type: string
      readOnly:
        type: boolean

  projectedVolume:
    type: object
    properties:
      sources:
        type: array
        items:
          $ref: "#/definitions/projectedVolumeSource"

  projectedVolumeSource:
    type: object
    properties:
      secret:
        $ref: "#/definitions/secret"
      downwardApi:
        type: boolean
      configMap:
        $ref: "#/definitions/configMap"
      serviceAccountToken:
        $ref: "#/definitions/serviceAccountToken"

  secret:
    type: object
    properties:
      name:
        type: string
      optional:
        type: boolean

  configMap:
    type: object
    properties:
      name:
        type: string
      optional:
        type: boolean

  serviceAccountToken:
    type: object
    properties:
      expirationSeconds:
        type: integer

  toleration:
    type: object
    properties:
      tolerationSeconds:
        type: integer
      key:
        type: string
      value:
        type: string
      effect:
        type: string
      operator:
        type: string

  tenantMonitoringInfo:
    type: object
    properties:
      prometheusEnabled:
        type: boolean
      toggle:
        type: boolean
      image:
        type: string
      sidecarImage:
        type: string
      initImage:
        type: string
      labels:
        type: array
        items:
          $ref: "#/definitions/label"
      annotations:
        type: array
        items:
          $ref: "#/definitions/annotation"
      diskCapacityGB:
        type: string
      nodeSelector:
        type: array
        items:
          $ref: "#/definitions/nodeSelector"
      serviceAccountName:
        type: string
      storageClassName:
        type: string
      monitoringCPURequest:
        type: string
      monitoringMemRequest:
        type: string
      securityContext:
        type: object
        $ref: "#/definitions/securityContext"

  label:
    type: object
    properties:
      key:
        type: string
      value:
        type: string

  annotation:
    type: object
    properties:
      key:
        type: string
      value:
        type: string

  nodeSelector:
    type: object
    properties:
      key:
        type: string
      value:
        type: string

  configureTenantRequest:
    type: object
    properties:
      prometheusEnabled:
        type: boolean

  formatConfiguration:
    type: object
    required:
      - drives
      - force
    properties:
      drives:
        type: array
        minLength: 1
        items:
          type: string
      force:
        type: boolean
  securityContext:
    type: object
    required:
      - runAsUser
      - runAsGroup
      - runAsNonRoot
    properties:
      runAsUser:
        type: string
      runAsGroup:
        type: string
      runAsNonRoot:
        type: boolean
      fsGroup:
        type: string
      fsGroupChangePolicy:
        type: string

  allocatableResourcesResponse:
    type: object
    properties:
      min_allocatable_mem:
        type: integer
        format: int64
      min_allocatable_cpu:
        type: integer
        format: int64
      cpu_priority:
        $ref: "#/definitions/nodeMaxAllocatableResources"
      mem_priority:
        $ref: "#/definitions/nodeMaxAllocatableResources"

  nodeMaxAllocatableResources:
    type: object
    properties:
      max_allocatable_cpu:
        type: integer
        format: int64
      max_allocatable_mem:
        type: integer
        format: int64

  checkOperatorVersionResponse:
    type: object
    properties:
      current_version:
        type: string
      latest_version:
        type: string

  tenantTierElement:
    type: object
    properties:
      name:
        type: string
      type:
        type: string
      size:
        type: integer
        format: int64
  domainsConfiguration:
    type: object
    properties:
      minio:
        type: array
        items:
          type: string
      console:
        type: string

  updateDomainsRequest:
    type: object
    properties:
      domains:
        $ref: "#/definitions/domainsConfiguration"
  
  mpIntegration:
    type: object
    properties:
      email:
        type: string
      isInEU:
        type: boolean

  operatorSubnetLoginRequest:
    type: object
    properties:
      username:
        type: string
      password:
        type: string

  operatorSubnetLoginResponse:
    type: object
    properties:
      access_token:
        type: string
      mfa_token:
        type: string

  operatorSubnetLoginMFARequest:
    type: object
    required:
      - username
      - otp
      - mfa_token
    properties:
      username:
        type: string
      otp:
        type: string
      mfa_token:
        type: string

  operatorSubnetAPIKey:
    type: object
    properties:
      apiKey:
        type: string

  operatorSubnetRegisterAPIKeyResponse:
    type: object
    properties:
      registered:
        type: boolean
