openapi: 3.0.0 info: title: Object Storage Interoperability Services API version: 1.0.0-oas3 contact: email: wachen@vmware.com description: 'This is VMware Cloud Director Object Storage Interoperability Services API. Once storage platform vendor implements REST APIs complying with this specification, Object Storage Extension can integrate with the platform without coding effort.' paths: '/api/v1/tenants/{tenantId}': head: tags: - tenant - required summary: Check whether the tenant exists operationId: headTenant description: | Operation ID: headTenant
Check whether the tenant exists parameters: - in: path name: tenantId required: true description: Tenant ID to check on the platform schema: type: string responses: '200': description: The tenant exists '404': description: "The tenant doesn't exist" get: tags: - tenant - optional summary: Get the tenant operationId: getTenant description: | Operation ID: getTenant
Get the tenant with tenant ID. The cd_tenant_id in the response indicates the mapping between Cloud Direct tenant and platform tenant. " parameters: - in: path name: tenantId required: true description: Tenant ID to get the tenant from the platform schema: type: string responses: '200': description: The tenant is returned content: application/json: schema: $ref: '#/components/schemas/OsisTenant' '404': description: "The tenant doesn't exist" '501': description: The optional API is not implemented patch: tags: - tenant - required summary: Update Cloud Director tenand IDs of the platform tenant operationId: updateTenant description: | Operation ID: updateTenant
Update Cloud Director tenand IDs of the platform tenant parameters: - in: path name: tenantId required: true description: Tenant ID of the tenant to update schema: type: string responses: '200': description: The Cloud Director IDs are updated content: application/json: schema: $ref: '#/components/schemas/OsisTenant' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/OsisError' requestBody: content: application/json: schema: $ref: '#/components/schemas/OsisTenant' description: "Cloud Director tenant IDs to update in the platform tenant. Only property 'cd_tenant_ids' takes effect" required: true delete: tags: - tenant - optional summary: Delete a tenant in the platform operationId: deleteTenant description: | Operation ID: deleteTenant
Delete a tenant in the platform parameters: - in: path name: tenantId required: true description: Tenant ID of the tenant to delete schema: type: string - in: query name: purge_data required: false description: Purge data when the tenant is deleted schema: type: boolean default: 'false' responses: '204': description: The tenant is deleted '501': description: The optional API is not implemented /api/v1/tenants: get: tags: - tenant - required summary: List tenants of platform operationId: listTenants description: | Operation ID: listTenants
List tenants of the platform parameters: - in: query name: offset description: The start index of tenants to return schema: type: integer format: int64 - in: query name: limit description: Maximum number of tenants to return schema: type: integer format: int64 responses: '200': description: Tenants of the platform are returned content: application/json: schema: $ref: '#/components/schemas/PageOfTenants' post: tags: - tenant - required summary: Create a tenant in the platform operationId: createTenant description: | Operation ID: createTenant
Create a tenant in the platform. The platform decides whether to adopt the cd_tenand_id in request body as tenant_id. This means the platform could generate new tenant_id by itself for the new tenant. The tenant_id in request body is ignored. responses: '201': description: A tenant is created headers: Location: description: the new created tenant URI schema: type: string content: application/json: schema: $ref: '#/components/schemas/OsisTenant' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/OsisError' requestBody: content: application/json: schema: $ref: '#/components/schemas/OsisTenant' description: Tenant to create in the platform required: true /api/v1/tenants/query: get: tags: - tenant - required summary: Query tenants of platform operationId: queryTenants description: | Operation ID: queryTenants
Query tenants of the platform parameters: - in: query name: offset description: The start index of tenants to return schema: type: integer format: int64 - in: query name: limit description: Maximum number of tenants to return schema: type: integer format: int64 - in: query name: filter description: The conditions to query platform tenants schema: type: string example: cd_tenant_id==deb3dcd0-07d9-472e-a535-ef59d082a13c responses: '200': description: Tenants of the platform are returned content: application/json: schema: $ref: '#/components/schemas/PageOfTenants' /api/v1/users/query: get: tags: - user - required summary: Query users of the platform tenant operationId: queryUsers description: | Operation ID: queryUsers
Query users of the platform tenant responses: '200': description: Users of the platform tenant are returned content: application/json: schema: $ref: '#/components/schemas/PageOfUsers' parameters: - in: query name: offset description: The start index of users to return schema: type: integer format: int64 - in: query name: limit description: Maximum number of users to return schema: type: integer format: int64 - in: query name: filter description: The conditions to query platform users schema: type: string example: cd_user_id==2480b2b3-7889-46f0-ab64-69b56a9b1e41;user_id==rachelw '/api/v1/tenants/{tenantId}/users': post: tags: - user - required summary: Create a user in the platform tenant operationId: createUser description: | Operation ID: createUser
Create a user in the platform. The platform decides whether to adopt the cd_user_id in request body as canonical ID. This means the platform could generate new user_id by itself for the new user. The user_id in request body is ignored. parameters: - in: path name: tenantId required: true description: The ID of the tenant which the created user belongs to schema: type: string responses: '201': description: A user is created content: application/json: schema: $ref: '#/components/schemas/OsisUser' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/OsisError' requestBody: content: application/json: schema: $ref: '#/components/schemas/OsisUser' description: User to create in the platform tenant. canonical_user_id is ignored. required: true get: tags: - user - required summary: List users of the platform tenant description: | Operation ID: listUsers
List users of the platform tenant responses: '200': description: Users of the platform tenant are returned content: application/json: schema: $ref: '#/components/schemas/PageOfUsers' parameters: - in: path name: tenantId required: true description: The ID of the tenant which the listed users belongs to schema: type: string - in: query name: offset description: The start index of users to return schema: type: integer format: int64 - in: query name: limit description: Maximum number of users to return schema: type: integer format: int64 operationId: listUsers '/api/v1/tenants/{tenantId}/users/{userId}': get: tags: - user - required summary: Get the user with user ID of the tenant operationId: getUserWithId description: | Operation ID: getUserWithId
Get the user with the user ID in the tenant. The cd_user_id in the response indicates the mapping between Cloud Direct user and platform user. parameters: - in: path name: tenantId required: true description: The ID of the tenant which the user belongs to schema: type: string - in: path name: userId required: true description: The ID of the user to get schema: type: string responses: '200': description: The user is returned content: application/json: schema: $ref: '#/components/schemas/OsisUser' '404': description: "The tenant doesn't exist" head: tags: - user - optional summary: Check whether the user exists operationId: headUser description: | Operation ID: headUser
Check whether the user exists in the platform tenant parameters: - in: path name: tenantId required: true description: The ID of the tenant which the user belongs to schema: type: string - in: path name: userId required: true description: The ID of the user to check schema: type: string responses: '200': description: The user exists '404': description: "The user doesn't exist" '501': description: The optional API is not implemented patch: tags: - user - required summary: Enable or disable status in the tenant operationId: updateUserStatus description: | Operation ID: updateUserStatus
Update status of the user in the platform tenant parameters: - in: path name: tenantId required: true description: The ID of the tenant which the user to update belongs to schema: type: string - in: path name: userId required: true description: The ID of the user to update schema: type: string responses: '201': description: The user status is updated content: application/json: schema: $ref: '#/components/schemas/OsisUser' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/OsisError' requestBody: content: application/json: schema: $ref: '#/components/schemas/OsisUser' description: "User status to update in the platform tenant. Only property 'active' takes effect" required: true delete: tags: - user - required summary: Delete the user in the platform tenant operationId: deleteUser description: | Operation ID: deleteUser
Delete the user in the platform tenant parameters: - in: path name: tenantId required: true description: The ID of the tenant which the deleted user belongs to schema: type: string - in: path name: userId required: true description: The ID of the user to delete schema: type: string - in: query name: purge_data required: false description: Purge data when the user is deleted schema: type: boolean default: 'false' responses: '204': description: The user is deleted '/api/v1/users/{canonicalUserId}': get: tags: - user - required summary: Get the user with user canonical ID operationId: getUserWithCanonicalID description: | Operation ID: getUserWithCanonicalID
Get the user with the user canonical ID parameters: - in: path name: canonicalUserId required: true description: The canonical ID of the user to get schema: type: string responses: '200': description: The user is returned content: application/json: schema: $ref: '#/components/schemas/OsisUser' '404': description: "The tenant doesn't exist" '/api/v1/s3credentials/query': get: tags: - s3credential - required summary: Query S3 credentials of the platform user operationId: queryCredentials description: | Operation ID: queryCredentials
Query S3 credentials of the platform user responses: '200': description: S3 credentials of the platform user are returned content: application/json: schema: $ref: '#/components/schemas/PageOfS3Credentials' parameters: - in: query name: offset description: The start index of credentials to return schema: type: integer format: int64 - in: query name: limit description: Maximum number of credentials to return schema: type: integer format: int64 - in: query name: filter description: The conditions to query platform users schema: type: string example: user_id==2480b2b3-7889-46f0-ab64-69b56a9b1e41;tenant_id=0083ab1a5c6605c8b985 '/api/v1/tenants/{tenantId}/users/{userId}/s3credentials': get: tags: - s3credential - required summary: List S3 credentials of the platform user operationId: listCredentials description: | Operation ID: listCredentials
List S3 credentials of the platform user responses: '200': description: S3 credentials of the platform user are returned content: application/json: schema: $ref: '#/components/schemas/PageOfS3Credentials' parameters: - in: path name: tenantId required: true description: The ID of the tenant which the user belongs to schema: type: string - in: path name: userId required: true description: The ID of user which the S3 credenitials belong to schema: type: string - in: query name: offset description: The start index of credentials to return schema: type: integer format: int64 - in: query name: limit description: Maximum number of credentials to return schema: type: integer format: int64 post: tags: - s3credential - required summary: Create S3 credential for the platform user operationId: createCredential description: | Operation ID: createCredential
Create S3 credential for the platform user parameters: - in: path name: tenantId required: true description: The ID of the tenant which the user belongs to schema: type: string - in: path name: userId required: true description: The ID of the user which the created S3 credential belongs to schema: type: string responses: '201': description: S3 credential is created for the user content: application/json: schema: $ref: '#/components/schemas/OsisS3Credential' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/OsisError' '/api/v1/s3credentials/{accessKey}': get: tags: - s3credential - required summary: Get S3 credential of the platform user operationId: getCredential description: | Operation ID: createCredential
Get S3 credential of the platform user. Parameters tenant_id and tenant_id are always in request; the platform decides whehter to use them. parameters: - in: query name: tenant_id required: false description: The ID of the tenant which the user belongs to schema: type: string - in: query name: user_id required: false description: The ID of the user which the S3 credential belongs to schema: type: string - in: path name: accessKey description: The access key of the S3 credential to get required: true schema: type: string responses: '200': description: The S3 credenital is returned content: application/json: schema: $ref: '#/components/schemas/OsisS3Credential' '404': description: Not Found content: application/json: schema: type: object properties: {} patch: tags: - s3credential - optional summary: Enable or disable S3 credential for the platform user operationId: updateCredentialStatus description: | Operation ID: updateCredentialStatus
Enabled or disable S3 credential for the platform user. Parameters tenant_id and tenant_id are always in request; the platform decides whehter to use them. parameters: - in: query name: tenant_id required: false description: The ID of the tenant which the user belongs to schema: type: string - in: query name: user_id required: false description: The ID of the user which the status updated S3 credential belongs to schema: type: string - in: path name: accessKey description: The access key of the S3 credential to update status required: true schema: type: string responses: '200': description: The status of the S3 credential is updated content: application/json: schema: $ref: '#/components/schemas/OsisS3Credential' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/OsisError' '501': description: The optional API is not implemented requestBody: content: application/json: schema: $ref: '#/components/schemas/OsisS3Credential' description: "The S3 credential containing the status to update. Only property 'active' takes effect" required: true delete: tags: - s3credential - optional summary: Delete the S3 credential of the platform user operationId: deleteCredential description: | Operation ID: deleteCredential
Delete the S3 credential of the platform user. Parameters tenant_id and tenant_id are always in request; the platform decides whehter to use them. parameters: - in: query name: tenant_id required: false description: The ID of the tenant which the user belongs to schema: type: string - in: query name: user_id required: false description: The ID of the user which the deleted S3 credential belongs to schema: type: string - in: path name: accessKey description: The access key of the S3 credential to delete required: true schema: type: string responses: '204': description: The S3 credential is deleted '501': description: The optional API is not implemented /api/v1/usage: get: tags: - usage - optional summary: Get the usage of the platform tenant or user operationId: getUsage description: | Operation ID: getUsage
Get the platform usage of global (without query parameter), tenant (only with tenant_id) or user (with tenant_id and user_id). parameters: - in: query name: tenant_id description: "The ID of the tenant to get its usage." schema: type: string - in: query name: user_id description: "The ID of the user to get its usage." schema: type: string responses: '200': description: The usage of the tenant or user is returned content: application/json: schema: $ref: '#/components/schemas/OsisUsage' '501': description: The optional API is not implemented /api/v1/bucket-list: get: tags: - bucketlist - optional summary: Get the bucket list of the platform tenant operationId: getBucketList description: | Operation ID: getBucketList
Get the bucket list of the platform tenant parameters: - in: query name: tenant_id description: The ID of the tenant to get its bueckt list required: true schema: type: string - in: query name: offset description: The start index of buckets to return schema: type: integer format: int64 - in: query name: limit description: The maximum number of buckets to return schema: type: integer format: int64 responses: '200': description: The bucket list of the platform tenant is returned content: application/json: schema: $ref: '#/components/schemas/PageOfBucketMeta' '501': description: The optional API is not implemented /api/v1/bucket-logging-id: get: tags: - bucketloggingid - optional summary: Get the bucket logging id of the platform operationId: getBucketLoggingId description: | Operation ID: getBucketLoggingId
Get the bucket logging id of the platform responses: '200': description: The bucket logging id of the platform is returned content: application/json: schema: type: string example: '|logging' '501': description: The optional API is not implemented /api/v1/anonymous-user: get: tags: - anonymoususer - optional summary: Get the anonymous user id and name of the platform operationId: getAnonymousUser description: | Operation ID: getAnonymousUser
Get the anonymous user id and name of the platform responses: '200': description: The anonymous user of the platform is returned content: application/json: schema: type: object properties: id: type: string description: The anonymous user ID. name: type: string description: The anonymous user name. '501': description: The optional API is not implemented /api/v1/console: get: tags: - console - optional summary: Get the console URI of the platform or platform tenant operationId: getConsole description: | Operation ID: getConsole
Get the console URI of the platform or platform tenant if tenantId is specified responses: '200': description: The console URI is returned content: application/json: schema: type: string example: 'https://endpoint/admin-console?groupId=8c3a25ab-b55e-4d98-82d2-4acdb96595ad&token=00d5e91b0bcd3696ed47&apiToken=rmbpsurwertr' '501': description: The optional API is not implemented parameters: - in: query name: tenant_id description: The ID of the tenant to get its console URI required: false schema: type: string - in: query name: lang description: The language of console page to show required: false schema: type: string /api/v1/s3capabilities: get: tags: - s3capability - required summary: Get S3 capabilities of the platform operationId: getS3Capabilities description: | Operation ID: getS3Capabilities
Get S3 capabilities of the platform responses: '200': description: S3 capabilities of the platform content: application/json: schema: $ref: '#/components/schemas/OsisS3Capabilities' /api/info: get: summary: Get the REST servcies information tags: - info - required responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Information' operationId: getInfo description: | Operation ID: getInfo
'Get the information of the REST Services, including platform name, OSIS version and etc' security: [] parameters: [] /api/v1/auth/token: post: summary: Refresh JWT access token with refresh token tags: - token - required responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RefreshResponse' requestBody: content: application/json: schema: $ref: '#/components/schemas/RefreshRequest' required: false operationId: refreshToken description: | Operation ID: refreshToken
Refresh JWT access token with refresh token. This API is required as it is highly recommended to use API token instead of basic authentication. security: [] parameters: [] tags: - name: info description: Information APIs - name: tenant description: Tenant APIs - name: user description: User APIs - name: s3credential description: S3Credential APIs - name: s3capability description: S3Capability APIs - name: usage description: Usage APIs - name: bucketlist description: Bucket List APIs - name: region description: Region APIs - name: console description: Console APIs - name: bucketloggingid description: Bucket Logging ID API - name: anonymoususer description: Anonymous User - name: required description: 'Mandatory APIs to integrate with OSE for essential functions, like basic S3 bucket/object CRUD operations' - name: optional description: "Optional APIs to integrate with OSE extension platform, including statistic, tenant off-board, etc. If the optional API is not implemented, it is required to add its operationId to Info resource's not_implemented array field" security: - basicAuth: [] - bearerAuth: [] servers: - url: 'https://localhost/osis' components: securitySchemes: basicAuth: type: http scheme: basic bearerAuth: type: http scheme: bearer bearerFormat: JWT schemas: RefreshRequest: type: object title: refresh request properties: refresh_token: type: string example: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJNUEcwUlZDRENERFRTUkpKT05KSyIsInNjb3BlcyI6WyJST0xFX1JFRlJFU0hfVE9LRU4iXSwiaXNzIjoiaHR0cDovL2NlcGgub3Npcy5vc2Uudm13YXJlLmNvbSIsImp0aSI6IjZiMGFmMGUwLTI3ZDctNDA2Zi1iM2JhLTkwYTUyZjRmZDJmNyIsImlhdCI6MTU5NjUzMzU5NSwiZXhwIjoxNTk2NTM3MTk1fQ.2i1UWqWs2fgjjP9Z2uWbFJTiZu5fWoey3OOJQNt6Fe3fZbKN5Jbv7INCT4l9lD5lnu_kqEavy_xm8DO_jXjPbA description: refresh token of OSIS required: - refresh_token RefreshResponse: type: object title: refresh response properties: access_token: type: string example: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJNUEcwUlZDRENERFRTUkpKT05KSyIsInNjb3BlcyI6WyJST0xFX0FETUlOIl0sImlzcyI6Imh0dHA6Ly9jZXBoLm9zaXMub3NlLnZtd2FyZS5jb20iLCJpYXQiOjE1OTY1MzM1OTUsImV4cCI6MTU5NjUzNDQ5NX0.OvUJS0kA745Bo8G9EWb_xOw7FFe6rVDZt9Au0vSPltDEuxcb0fpLPC360D_j5nwpb3ajzub6BMQgJroJGts0zg description: access token of OSIS required: - access_token OsisTenant: type: object title: platform tenant properties: name: type: string example: ACME description: tenant name active: type: boolean example: true description: tenant status tenant_id: type: string example: d290f1ee-6c54-4b01-90e6-d701748f0851 description: tenant id cd_tenant_ids: type: array items: type: string example: - 8daca9a9-5b11-4f63-9c52-953a2ef77739 description: Cloud Director tenant ids required: - name - active - tenant_id - cd_tenant_id OsisUser: type: object title: platform user properties: user_id: type: string example: rachelw description: user id canonical_user_id: type: string example: 68fb0f20-4a0c-4036-a584-cc3ee421093f description: canonical user id tenant_id: type: string example: bb8287a9-874e-46d2-abbd-58278e1ac046 description: id of the tenant which the user belongs to active: type: boolean description: user status username: type: string description: username mapped with Cloud Director username email: type: string format: email description: user email example: rachelw@acme.com role: type: string enum: - PROVIDER_ADMIN - TENANT_ADMIN - TENANT_USER - ANONYMOUS - UNKNOWN description: user role cd_user_id: type: string example: rachelw description: Cloud Director user id cd_tenant_id: type: string example: 40b97e3c-c3b1-4251-b7de-e9637324683f description: id of Cloud Director tenant which the user belongs to required: - user_id - canonical_user_id - active - tenant_id - cd_user_id - cd_tenant_id OsisS3Credential: type: object title: platform s3 credential properties: access_key: type: string example: 00e4a3d674aada749f04 description: S3 access key secret_key: type: string example: yz8PIwNjmm2zlHX8m7st6BSKh8PCe7bqAaRGkF5K description: S3 secret key active: type: boolean example: true description: S3 credential status creation_date: type: string format: date-time description: S3 credential creation date tenant_id: type: string description: The ID of the tenant which the S3 credential belongs to example: acme user_id: type: string description: The ID of the user which the S3 credential belongs to example: 961515dd-8348-4cac-8780-5edcb8a87b58 username: type: string description: The name of the user which the S3 credential belongs to example: rachelw cd_user_id: type: string example: 2b4d76d7-89fa-45fb-ab3e-3fa3bb268335 description: Cloud Director user id cd_tenant_id: type: string example: 40b97e3c-c3b1-4251-b7de-e9637324683f description: id of Cloud Director tenant which the user belongs to required: - access_key - secret_key OsisUsage: type: object title: platform usage for tenant or user properties: bucket_count: type: integer format: int64 example: 532 description: bucket count of tenant or user object_count: type: integer format: int64 example: 298635 description: object count of tenant or user total_bytes: type: integer format: int64 example: 80948230763 description: total storage bytes of tenant or user available_bytes: type: integer format: int64 example: 48193854929 description: available storage bytes of tenant or user used_bytes: type: integer format: int64 example: 32754375834 description: used storage bytes of tenant or user required: - bucket_count - object_count - total_bytes - avaialble_bytes - used_bytes OsisBucketMeta: type: object title: metadata of bucket properties: name: type: string description: bucket name creation_date: type: string format: date-time description: bucket creation date user_id: type: string description: user id of bucket owner required: - name - creation_date - user_id OsisError: title: OsisError type: object description: a standard error object properties: code: type: string example: E_BAD_REQUEST message: type: string example: invalid value for the property xyz. required: - code Information: title: information type: object properties: platform_name: type: string example: ceph description: name of the storage platform platform_version: type: string example: 15.2.3 description: version of the storage platform api_version: type: string example: '1.0' description: OSIS version the REST services complying with logo_uri: type: string description: uri of the platform logo so that OSE can use it on UI format: uri example: 'https://ceph.ose.vmware.com/static/images/ceph.svg' status: type: string enum: - NORMAL - WARNING - ERROR - UNKNOWN auth_modes: type: array items: type: string enum: - Basic - Bearer services: type: object additionalProperties: type: string example: iam: 'https://iam.ceph.ose.vmware.com' description: Supported Services' URL of the storage platform regions: type: array items: type: string example: us-west-2 description: 'regions for the storage platform; if it is not appliable for the platform, return default' storage_classes: type: array items: type: string example: standard description: 'storage classes of the storage platforms; if it is not applicable for the platform, return standard' not_implemented: type: array description: the operation id array of optional OSIS APIs which is not implemented items: type: string example: - getUsage - getConsole required: - platform_name - api_version - status - not_implemented PageOfTenants: type: object properties: items: type: array items: $ref: '#/components/schemas/OsisTenant' page_info: $ref: '#/components/schemas/PageInfo' PageOfUsers: type: object properties: items: type: array items: $ref: '#/components/schemas/OsisUser' page_info: $ref: '#/components/schemas/PageInfo' PageOfS3Credentials: type: object properties: items: type: array items: $ref: '#/components/schemas/OsisS3Credential' page_info: $ref: '#/components/schemas/PageInfo' PageOfBucketMeta: type: object properties: items: type: array items: $ref: '#/components/schemas/OsisBucketMeta' page_info: $ref: '#/components/schemas/PageInfo' PageInfo: type: object properties: limit: type: integer format: int64 description: maxium number of the items in each page offset: type: integer format: int64 description: offset of the current page in the whole set of items total: type: integer format: int64 description: total number of the items required: - limit - offset - total OsisS3Capabilities: title: S3Capabilities type: object properties: exclusions: type: object additionalProperties: type: object properties: by_params: type: array items: type: string by_headers: type: array items: type: string by_payload: type: array items: type: string description: 'return the S3 API code which is not supported by the storage platform; the API code complies with https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html'