From d748eab4d59739e95ebcd6f84e9d2b6023b6f3d6 Mon Sep 17 00:00:00 2001 From: proposalbot Date: Wed, 9 Nov 2022 23:26:45 +0000 Subject: [PATCH] Changes to dds_api-ref from docs/doc-exports#410 (DDS API 20221101 version DDS Reviewed-by: Boka, Ladislav Co-authored-by: proposalbot Co-committed-by: proposalbot --- .../_static/images/en-us_image_0208249507.png | Bin 0 -> 11567 bytes .../_static/images/en-us_image_0208249570.jpg | Bin 0 -> 112824 bytes api-ref/source/api_calling/example.rst | 132 +++++ api-ref/source/api_calling/index.rst | 18 + api-ref/source/api_calling/rest_apis.rst | 120 ++++ api-ref/source/api_calling/scenarios.rst | 20 + .../creating_a_db_instance.rst | 410 ++++++++++++++ .../deleting_a_db_instance.rst | 73 +++ .../db_instance_management/index.rst | 18 + .../querying_db_instances.rst | 512 ++++++++++++++++++ api-ref/source/api_description/index.rst | 20 + ...uerying_all_db_instance_specifications.rst | 318 +++++++++++ .../querying_database_version_information.rst | 77 +++ .../querying_the_api_version/index.rst | 16 + .../querying_api_version_information.rst | 108 ++++ .../querying_the_api_version_list.rst | 114 ++++ api-ref/source/api_overview.rst | 23 + api-ref/source/appendix/dds_metrics.rst | 408 ++++++++++++++ api-ref/source/appendix/error_code.rst | 273 ++++++++++ api-ref/source/appendix/index.rst | 20 + .../appendix/obtaining_a_project_id.rst | 66 +++ api-ref/source/appendix/status_code.rst | 57 ++ api-ref/source/before_you_start.rst | 26 + api-ref/source/change_history.rst | 26 + .../source/environment_preparations/index.rst | 14 + .../token_authentication.rst | 83 +++ api-ref/source/index.rst | 10 + 27 files changed, 2962 insertions(+) create mode 100644 api-ref/source/_static/images/en-us_image_0208249507.png create mode 100644 api-ref/source/_static/images/en-us_image_0208249570.jpg create mode 100644 api-ref/source/api_calling/example.rst create mode 100644 api-ref/source/api_calling/index.rst create mode 100644 api-ref/source/api_calling/rest_apis.rst create mode 100644 api-ref/source/api_calling/scenarios.rst create mode 100644 api-ref/source/api_description/db_instance_management/creating_a_db_instance.rst create mode 100644 api-ref/source/api_description/db_instance_management/deleting_a_db_instance.rst create mode 100644 api-ref/source/api_description/db_instance_management/index.rst create mode 100644 api-ref/source/api_description/db_instance_management/querying_db_instances.rst create mode 100644 api-ref/source/api_description/index.rst create mode 100644 api-ref/source/api_description/querying_all_db_instance_specifications.rst create mode 100644 api-ref/source/api_description/querying_database_version_information.rst create mode 100644 api-ref/source/api_description/querying_the_api_version/index.rst create mode 100644 api-ref/source/api_description/querying_the_api_version/querying_api_version_information.rst create mode 100644 api-ref/source/api_description/querying_the_api_version/querying_the_api_version_list.rst create mode 100644 api-ref/source/api_overview.rst create mode 100644 api-ref/source/appendix/dds_metrics.rst create mode 100644 api-ref/source/appendix/error_code.rst create mode 100644 api-ref/source/appendix/index.rst create mode 100644 api-ref/source/appendix/obtaining_a_project_id.rst create mode 100644 api-ref/source/appendix/status_code.rst create mode 100644 api-ref/source/before_you_start.rst create mode 100644 api-ref/source/change_history.rst create mode 100644 api-ref/source/environment_preparations/index.rst create mode 100644 api-ref/source/environment_preparations/token_authentication.rst diff --git a/api-ref/source/_static/images/en-us_image_0208249507.png b/api-ref/source/_static/images/en-us_image_0208249507.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfc7ca41716330fe27cdd9713dd05c2a4d15316 GIT binary patch literal 11567 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 ABme*a literal 0 HcmV?d00001 diff --git a/api-ref/source/_static/images/en-us_image_0208249570.jpg b/api-ref/source/_static/images/en-us_image_0208249570.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0e263d9b79bf2d87a08575ce6509555ca60d44c GIT binary patch literal 112824 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 literal 0 HcmV?d00001 diff --git a/api-ref/source/api_calling/example.rst b/api-ref/source/api_calling/example.rst new file mode 100644 index 0000000..4741241 --- /dev/null +++ b/api-ref/source/api_calling/example.rst @@ -0,0 +1,132 @@ +:original_name: dds_api_0017.html + +.. _dds_api_0017: + +Example +======= + +This section describes how to create a cluster instance by calling APIs. + +.. note:: + + The validity period of a token obtained from IAM is 24 hours. If you want to use a token for authentication, cache it to avoid frequent IAM API calling. + +Involved APIs +------------- + +If you use a token for authentication, you must obtain the user's token and add **X-Auth-Token** to the request message header of the service API when making an API call. + +- API for obtaining tokens from IAM +- Creating a DDS DB instance using an open API + +Procedure +--------- + +#. Obtain the token by following instructions in section :ref:`Token Authentication `. + +#. Send **POST https://DDS endpoint/v3/{project_id}/instances**. + +#. Add **X-Auth-Token** to the request header. + +#. Specify the following parameters in the request body: + + .. note:: + + The values of **region** and **availability_zone** are used as examples. + + For details about the API used for creating DB instances, see :ref:`Creating a DB Instance `. + + .. code-block:: text + + { + "name": "test-cluster", //DB instance name + "datastore": { + "type": "DDS-Community", // Database type and version + "version": "3.4", //Database version + "storage_engine": "wiredTiger" //Storage engine + }, + "region": "aaa", //Region name + "availability_zone": "bbb", //AZ name + "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", //VPC ID + "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007b", //Subnet ID + "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", //Security group ID + "password": "Test@123", //Administrator password + "disk_encryption_id": "d4825f1b-5e47-4ff7-8ca9-0960da1770b1", //Key ID for encrypting disks + "mode": "Sharding", //Sharded-cluster instance type + "flavor": [ + { + "type":"mongos", //mongos node + "num": 2, //Quantity + "spec_code": "dds.mongodb.s2.medium.4.mongos" //Node resource code + }, + { + "type":"shard", //shard node + "num": 2, //Quantity + "storage": "ULTRAHIGH", //Disk type + "size": 20, //Disk size + "spec_code": "dds.mongodb.s2.medium.4.shard" //Node resource code + }, + { + "type":"config", //config node + "num": 1, //Quantity + "storage": "ULTRAHIGH", //Disk type + "size": 20, //Disk size + "spec_code": "dds.mongodb.s2.large.2.config" //Node resource type + } + ], + "backup_strategy": { + "start_time": "08:15-09:15", //Backup time window + "keep_days": "8" //Retention days of backup files + }, + "ssl_option":"1" + } + + If the following information is displayed, the request is successful: + + .. code-block:: text + + { + "id": "46125c43ca4d424a9f5c97354223c4e0in02", + "name": "test-cluster", + "datastore": { + "type": "DDS-Community", + "version": "3.4", + "storage_engine": "wiredTiger" + }, + "created": "2019-01-14 08:50:27", + "status": "creating", + "region": "aaa", + "availability_zone": "bbb", + "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", + "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007b", + "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", + "disk_encryption_id": "d4825f1b-5e47-4ff7-8ca9-0960da1770b1", + "mode": "Sharding", + "flavor": [ + { + "type": "mongos", + "num": 2, + "spec_code": "dds.mongodb.s2.medium.4.mongos" + }, + { + "type": "shard", + "num": 2, + "size": 20, + "spec_code": "dds.mongodb.s2.medium.4.shard" + }, + { + "type": "config", + "num": 1, + "size": 20, + "spec_code": "dds.mongodb.s2.large.2.config" + } + ], + "backup_strategy": { + "start_time": "08:15-09:15", + "keep_days": "8" + }, + "ssl_option":"1", + "job_id": "c0c606b6-470a-48c7-97a2-6c7f146014d4" + } + + If the request fails, an error code and error information are returned. For details, see section :ref:`Error Code `. diff --git a/api-ref/source/api_calling/index.rst b/api-ref/source/api_calling/index.rst new file mode 100644 index 0000000..82aa44e --- /dev/null +++ b/api-ref/source/api_calling/index.rst @@ -0,0 +1,18 @@ +:original_name: dds_api_0014.html + +.. _dds_api_0014: + +API Calling +=========== + +- :ref:`Scenarios ` +- :ref:`REST APIs ` +- :ref:`Example ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + scenarios + rest_apis + example diff --git a/api-ref/source/api_calling/rest_apis.rst b/api-ref/source/api_calling/rest_apis.rst new file mode 100644 index 0000000..fdbfb6e --- /dev/null +++ b/api-ref/source/api_calling/rest_apis.rst @@ -0,0 +1,120 @@ +:original_name: dds_api_0016.html + +.. _dds_api_0016: + +REST APIs +========= + +API requests sent by third-party applications to public cloud services must be authenticated using signatures. + +Public cloud APIs follow RESTful API design rules. + +In REST, specific information or data on a network is represented by resources. REST allows users to access service resources by creating, querying, updating, and deleting resources. + +A REST API request and response are divided into the following parts: + +- Request URI +- Request header +- Request body +- Response header +- Response body + +Request URI +----------- + +A request URI consists of the following: + +**{URI-scheme}://{Endpoint}/{resource-path}?{query-string}** + +Although a request URI is included in a request header, most programming languages or frameworks require the request URI to be separately transmitted, rather than being conveyed in a request message. + +.. table:: **Table 1** URI parameter description + + +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Description | + +===================================+=================================================================================================================================================+ + | URI-scheme | Specifies the protocol used for transmitting requests. | + +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+ + | Endpoint | Specifies the domain name or IP address of the server bearing the REST service endpoint. | + | | | + | | To obtain the parameter value, see `Regions and Endpoints `__. | + +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource-path | Specifies the API access path for performing a specified operation. Obtain this value from the URI of the API, for example, **v3/auth/tokens**. | + +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+ + | query-string | This parameter is optional. For example, you can set it to API version or resource selection criteria. | + +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Methods +--------------- + +HTTP methods, which are also called operations or actions, specify the type of operations that you are requesting. + +.. table:: **Table 2** HTTP methods + + +--------+--------------------------------------------------------------------------+ + | Method | Description | + +========+==========================================================================+ + | GET | Requests a server to return the specified resources. | + +--------+--------------------------------------------------------------------------+ + | POST | Requests a server to add resources or perform special operations. | + +--------+--------------------------------------------------------------------------+ + | DELETE | Requests a server to delete specified resources, for example, an object. | + +--------+--------------------------------------------------------------------------+ + +Request Header +-------------- + +You can also add additional fields to the request header, for example, the fields required by a specified URI and an HTTP method. :ref:`Table 3 ` lists common request header fields. + +.. _dds_api_0016__table18389930: + +.. table:: **Table 3** Common request headers + + +----------------+------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+----------------------------------+ + | Name | Description | Mandatory | Example | + +================+==============================================================================================================================+========================================================================================+==================================+ + | Content-Type | Specifies the MIME type of the request body. | Yes | application/json | + +----------------+------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+----------------------------------+ + | Content-Length | Specifies the length of the request body. The unit is byte. | This parameter is optional for POST requests, but must be left blank for GET requests. | 3495 | + +----------------+------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+----------------------------------+ + | X-Project-Id | Specifies the project ID. For details about how to obtain the project ID, see :ref:`Obtaining a Project ID `. | No | e9993fc787d94b6c886cbaa340f9c0f4 | + +----------------+------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+----------------------------------+ + | X-Auth-Token | Specifies the user token. | Yes | ``-`` | + +----------------+------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+----------------------------------+ + +(Optional) Request Body +----------------------- + +A request body is generally sent in a structured format (for example, JSON or XML), corresponding to **Content-Type** in the request header, and is used to transfer content other than the request header. + +If the request body contains Chinese characters, convert the Chinese characters into the UTF-8 encoding format. + +Response Headers +---------------- + +A response header consists of the following two parts: + +- An HTTP status code, which is a service-defined status code indicating a success or an error + +- Additional fields, for example **Content-Type** + + :ref:`Table 4 ` lists common response header fields. + + .. _dds_api_0016__en-us_topic_0113746487_en-us_topic_0020536997_table3877208613139: + + .. table:: **Table 4** Common response headers + + +----------------+---------------------------------------------------------------------------------------------------------------------------------------+-------------------------------+ + | Name | Description | Example | + +================+=======================================================================================================================================+===============================+ + | Date | Standard HTTP header field, which represents the date and time at which the message was originated. The format is defined by RFC 822. | Wed, 27 Dec 2018 06:49:46 GMT | + +----------------+---------------------------------------------------------------------------------------------------------------------------------------+-------------------------------+ + | Content-Length | Standard HTTP header field, which specifies the size of the entity body, in decimal number of bytes, sent to the recipient. | ``-`` | + +----------------+---------------------------------------------------------------------------------------------------------------------------------------+-------------------------------+ + | Content-Type | Standard HTTP header field, which specifies the media type of the entity body sent to the recipient. | application/json | + +----------------+---------------------------------------------------------------------------------------------------------------------------------------+-------------------------------+ + +(Optional) Response Body +------------------------ + +A response body is generally returned in a structured format (for example, JSON or XML), corresponding to **Content-Type** in the response header, and is used to transfer content other than the response header. diff --git a/api-ref/source/api_calling/scenarios.rst b/api-ref/source/api_calling/scenarios.rst new file mode 100644 index 0000000..3f9c842 --- /dev/null +++ b/api-ref/source/api_calling/scenarios.rst @@ -0,0 +1,20 @@ +:original_name: dds_api_0015.html + +.. _dds_api_0015: + +Scenarios +========= + +DDS open APIs allow users to create, view, or delete DB instances, query API versions, DB engines, DB engine versions, and DB instance class supported by the system. The application scenarios are shown as follows. + + +.. figure:: /_static/images/en-us_image_0208249507.png + :alt: **Figure 1** Scenarios + + **Figure 1** Scenarios + +Before creating a DB instance, you need to obtain the DB engines and versions, DB instance class, and AZs supported by the system. + +After obtaining the information, you can use the returned results as invoked parameters to create a DB instance. + +After a DB instance is created, you can query the instance list and delete the instance. diff --git a/api-ref/source/api_description/db_instance_management/creating_a_db_instance.rst b/api-ref/source/api_description/db_instance_management/creating_a_db_instance.rst new file mode 100644 index 0000000..f4bb3f4 --- /dev/null +++ b/api-ref/source/api_description/db_instance_management/creating_a_db_instance.rst @@ -0,0 +1,410 @@ +:original_name: dds_api_0020.html + +.. _dds_api_0020: + +Creating a DB Instance +====================== + +Function +-------- + +This API is used to create cluster, replica set instances. + +URI +--- + +- URI format + + POST /v3/{project_id}/instances + +- Parameter description + + .. table:: **Table 1** Parameter description + + ========== ========= ================================================= + Name Mandatory Description + ========== ========= ================================================= + project_id Yes Specifies the project ID of a tenant in a region. + ========== ========= ================================================= + +Requests +-------- + +- Parameter description + + .. table:: **Table 2** Parameter description + + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Mandatory | Type | Description | + +====================+=================+==================+=================================================================================================================================================================================================================+ + | name | Yes | String | Specifies the DB instance name. The DB instance name of the same DB engine is unique for the same tenant. | + | | | | | + | | | | The value must be 4 to 64 characters in length and start with a letter (from A to Z or from a to z). It is case-sensitive and can contain only letters, digits (from 0 to 9), hyphens (-), and underscores (_). | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | datastore | Yes | Object | Specifies the database information. For more information, see :ref:`Table 3 `. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | region | Yes | String | Specifies the region ID. | + | | | | | + | | | | The value cannot be empty. For details about how to obtain this parameter value, see `Regions and Endpoints `__. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | availability_zone | Yes | String | Specifies the AZ ID. | + | | | | | + | | | | The value cannot be empty. For details about how to obtain this parameter value, see `Regions and Endpoints `__. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vpc_id | Yes | String | Specifies the VPC ID. For details about how to obtain this parameter value, see section "Virtual Private Cloud" in the *Virtual Private Cloud API Reference*. | + | | | | | + | | | | The value cannot be empty. The string length and whether the string complying with UUID regular expression rules are verified. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | subnet_id | Yes | String | Specifies the subnet ID. For details about how to obtain this parameter value, see section "Subnet" in the *Virtual Private Cloud API Reference*. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | security_group_id | Yes | String | Specifies the ID of the security group where a specified DB instance belongs to. | + | | | | | + | | | | For details about how to obtain this parameter value, see section "Security Group" in the *Virtual Private Cloud API Reference*. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | password | Yes | String | Specifies the database password. | + | | | | | + | | | | The value must be 8 to 32 characters in length and contain uppercase letters (A to Z), lowercase letters (a to z), digits (0 to 9), and special characters, such as ``~!@#%^*-_=+?`` | + | | | | | + | | | | You are advised to enter a strong password to improve security, preventing security risks such as brute force cracking. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | disk_encryption_id | No | String | Specifies the key ID used for disk encryption. The string must comply with UUID regular expression rules. | + | | | | | + | | | | If this parameter is not transferred, disk encryption is not performed. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | mode | Yes | String | Specifies the instance type. Cluster, replica set instances are supported. | + | | | | | + | | | | Valid value: | + | | | | | + | | | | - Sharding | + | | | | - ReplicaSet | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | flavor | Yes | Array of objects | Specifies the instance specifications. For more information, see :ref:`Table 4 `. | + | | | | | + | | | | For details about how to obtain the value, see the response values of **flavor** in :ref:`Querying All DB Instance Specifications `. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | backup_strategy | No | Object | Specifies the advanced backup policy. For more information, see :ref:`Table 5 `. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ssl_option | No | String | Specifies whether to enable SSL. | + | | | | | + | | | | Valid value: | + | | | | | + | | | | - The value **0** indicates that SSL is disabled by default. | + | | | | - The value **1** indicates that SSL is enabled by default. | + | | | | - If this parameter is not transferred, SSL is enabled by default. | + +--------------------+-----------------+------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0020__table228903751753: + + .. table:: **Table 3** datastore field data structure description + + +----------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------+ + | Name | Mandatory | Type | Description | + +================+===========+========+===================================================================================================================+ + | type | Yes | String | Specifies the database type. DDS Community Edition is supported. The value is **DDS-Community**. | + +----------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------+ + | version | Yes | String | Specifies the database version. The value is **3.2** or **3.4**. | + +----------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------+ + | storage_engine | Yes | String | Specifies the storage engine. Currently, DDS supports the WiredTiger storage engine. The value is **wiredTiger**. | + +----------------+-----------+--------+-------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0020__table94791241013: + + .. table:: **Table 4** flavor field data structure description + + +-----------------+----------------------------------------------------------------------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Mandatory | Type | Description | + +=================+==========================================================================================================+=================+=================================================================================================================================================================================================================================================+ + | type | Yes | String | Specifies the node type. | + | | | | | + | | | | Valid value: | + | | | | | + | | | | - For a cluster instance, the value can be **mongos**, **shard**, or **config**. | + | | | | - For a replica set instance, the value is **replica**. | + +-----------------+----------------------------------------------------------------------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | num | Yes | Integer | Specifies node quantity. | + | | | | | + | | | | Valid value: | + | | | | | + | | | | - mongos: The value ranges from 2 to 16. | + | | | | - shard: The value ranges from 2 to 16. | + | | | | - config: The value is **1**. | + | | | | - replica: The value is **1**. | + +-----------------+----------------------------------------------------------------------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | storage | This parameter is optional for all nodes except mongos. This parameter is invalid for the mongos nodes. | String | Specifies the disk type. | + | | | | | + | | | | Valid value: ULTRAHIGH, which indicates the type SSD. | + | | | | | + | | | | This parameter is valid for the shard and config nodes of a community edition cluster instance, replica set instances. This parameter is invalid for mongos nodes. Therefore, you do not need to specify the storage space for mongos nodes. | + +-----------------+----------------------------------------------------------------------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | size | This parameter is mandatory for all nodes except mongos. This parameter is invalid for the mongos nodes. | Integer | Specifies the disk size. | + | | | | | + | | | | The value must be a multiple of 10. The unit is GB. | + | | | | | + | | | | - For a cluster instance, the storage space of a shard node can be 10 to 1000 GB, and the config storage space is 20 GB. This parameter is invalid for mongos nodes. Therefore, you do not need to specify the storage space for mongos nodes. | + | | | | - For a replica set instance, the value ranges from 10 to 2000. | + +-----------------+----------------------------------------------------------------------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | spec_code | Yes | String | Specifies the resource specification code. For details about how to obtain the value, see the response values of **spec_code** in :ref:`Querying All DB Instance Specifications `. | + +-----------------+----------------------------------------------------------------------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0020__table15990419397: + + .. table:: **Table 5** backup_strategy field data structure description + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Mandatory | Type | Description | + +=================+=================+=================+================================================================================================================================================+ + | start_time | Yes | String | Specifies the backup time window. Automated backups will be triggered during the backup time window. | + | | | | | + | | | | The value cannot be empty. It must be a valid value in the "hh:mm-HH:MM" format. The current time is in the UTC format. | + | | | | | + | | | | - The **HH** value must be 1 greater than the **hh** value. | + | | | | - The values of **mm** and **MM** must be the same and must be set to any of the following: **00**, **15**, **30**, or **45**. | + | | | | | + | | | | Example value: | + | | | | | + | | | | - 08:15-09:15 | + | | | | - 23:00-00:00 | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------+ + | keep_days | No | String | Specifies the number of days to retain the generated backup files. | + | | | | | + | | | | The value range is from 0 to 732. | + | | | | | + | | | | - If this parameter is set to **0**, the automated backup policy is not set. | + | | | | - If this parameter is not transferred, the automated backup policy is enabled by default. Backup files are stored for seven days by default. | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. note:: + + The values of **region** and **availability_zone** are used as examples. + +- Request header + + .. code-block:: text + + POST https://DDS endpoint/v3/{project_id}/instances. + +- Example request + + Create a cluster instance. + + .. code-block:: text + + { + "name": "test-cluster-01", + "datastore": { + "type": "DDS-Community", + "version": "3.4", + "storage_engine": "wiredTiger" + }, + "region": "aaa", + "availability_zone": "bbb", + "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", + "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007b", + "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", + "password": "Test@123", + "mode": "Sharding", + "flavor": [ + { + "type": "mongos", + "num": 2, + "spec_code": "dds.mongodb.s2.medium.4.mongos" + }, + { + "type": "shard", + "num": 2, + "storage": "ULTRAHIGH", + "size": 20, + "spec_code": "dds.mongodb.s2.medium.4.shard" + }, + { + "type": "config", + "num": 1, + "storage": "ULTRAHIGH", + "size": 20, + "spec_code": "dds.mongodb.s2.large.2.config" + } + ], + "backup_strategy": { + "start_time": "08:15-09:15", + "keep_days": "8" + }, + "ssl_option":"1" + } + + Create a replica set instance. + + .. code-block:: text + + { + "name": "test-replicaset", + "datastore": { + "type": "DDS-Community", + "version": "3.4", + "storage_engine": "wiredTiger" + }, + "region": "aaa", + "availability_zone": "bbb", + "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", + "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007b", + "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", + "password": "Test@123", + "mode": "ReplicaSet", + "flavor": [ + { + "type": "replica", + "num": 1, + "storage": "ULTRAHIGH", + "size": 30, + "spec_code": "dds.mongodb.s2.medium.4.repset" + } + ], + "backup_strategy": { + "start_time": "08:15-09:15", + "keep_days": "8" + }, + "ssl_option":"1" + } + +Responses +--------- + +- Parameter description + + .. table:: **Table 6** Parameter description + + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +====================+==================+==============================================================================================================================================================+ + | id | String | Indicates the DB instance ID. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | name | String | Same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | datastore | Object | Indicates the database information, which is the same as the request parameter. For more information, see :ref:`Table 3 `. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | created | String | Indicates the creation time in the following format: yyyy-mm-dd hh:mm:ss. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status | String | Indicates the DB instance status. The value is **creating**. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | region | String | Indicates the region ID, which is the same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | availability_zone | String | Indicates the AZ ID, which is the same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vpc_id | String | Indicates the VPC ID, which is the same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | subnet_id | String | Indicates the subnet ID, which is the same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | security_group_id | String | Indicates the ID of the security group to which the instance belongs, which is the same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | disk_encryption_id | String | Indicates the ID of the disk encryption key, which is the same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | mode | String | Indicates the instance type, which is the same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | flavor | Array of objects | Indicates the instance specification, which is the same as the request parameter. For more information, see :ref:`Table 4 `. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | backup_strategy | Object | Indicates the advanced backup policy, which is the same as the request parameter. For more information, see :ref:`Table 5 `. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ssl_option | String | Indicates whether to enable SSL, which functions the same as the request parameter. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | job_id | String | Indicates the ID of the workflow for creating a DB instance. | + +--------------------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. note:: + + The values of **region** and **availability_zone** are used as examples. + +- Response example + + Cluster instance: + + .. code-block:: text + + { + "id": "39b6a1a278844ac48119d86512e0000bin02", + "name": "test-cluster-01", + "datastore": { + "type": "DDS-Community", + "version": "3.4", + "storage_engine": "wiredTiger" + }, + "created": "2019-01-16 09:34:36", + "status": "creating", + "region": "aaa", + "availability_zone": "bbb", + "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", + "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007b", + "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", + "disk_encryption_id": "", + "mode": "Sharding", + "flavor": [ + { + "type": "mongos", + "num": 2, + "spec_code": "dds.mongodb.s2.medium.4.mongos" + }, + { + "type": "shard", + "num": 2, + "spec_code": "dds.mongodb.s2.medium.4.shard", + "size": 20 + }, + { + "type": "config", + "num": 1, + "spec_code": "dds.mongodb.s2.large.2.config", + "size": 20 + } + ], + "backup_strategy": { + "start_time": "08:15-09:15", + "keep_days": "8" + }, + "ssl_option":"1", + "job_id": "c010abd0-48cf-4fa8-8cbc-090f093eaa2f" + } + + Replica set instance: + + .. code-block:: text + + { + "id": "46dfadfd2b674585a430217f23606cd7in02", + "name": "test-replicaset", + "datastore": { + "type": "DDS-Community", + "version": "3.4", + "storage_engine": "wiredTiger" + }, + "created": "2019-01-16 09:33:08", + "status": "creating", + "region": "aaa", + "availability_zone": "bbb", + "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", + "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007b", + "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", + "disk_encryption_id": "", + "mode": "ReplicaSet", + "flavor": [ + { + "type": "replica", + "num": 1, + "spec_code": "dds.mongodb.s2.medium.4.repset", + "size": 30 + } + ], + "backup_strategy": { + "start_time": "08:15-09:15", + "keep_days": "7" + }, + "ssl_option":"1", + "job_id": "2408417d-fd4b-40ae-bec6-e09ce594eb5f" + } + +**Status Code** +--------------- + +For more information, see :ref:`Status Code `. + +Error Code +---------- + +For more information, see :ref:`Error Code `. diff --git a/api-ref/source/api_description/db_instance_management/deleting_a_db_instance.rst b/api-ref/source/api_description/db_instance_management/deleting_a_db_instance.rst new file mode 100644 index 0000000..86e2b11 --- /dev/null +++ b/api-ref/source/api_description/db_instance_management/deleting_a_db_instance.rst @@ -0,0 +1,73 @@ +:original_name: dds_api_0022.html + +.. _dds_api_0022: + +Deleting a DB Instance +====================== + +Function +-------- + +This API is used to delete a DB instance. + +URI +--- + +- URI format + + DELETE /v3/{project_id}/instances/{instance_id} + +- Parameter description + + .. table:: **Table 1** Parameter description + + =========== ========= ================================================= + Name Mandatory Description + =========== ========= ================================================= + project_id Yes Specifies the project ID of a tenant in a region. + instance_id Yes Specifies the DB instance ID. + =========== ========= ================================================= + +Requests +-------- + +- Request header + + .. code-block:: text + + DELETE https://DDS endpoint/v3/{project_id}/instances/{instance_id} + +- Request body + + N/A + +Responses +--------- + +- Parameter description + + .. table:: **Table 2** Parameter description + + ====== ====== ========================== + Name Type Description + ====== ====== ========================== + job_id String Indicates the workflow ID. + ====== ====== ========================== + +- Response example + + .. code-block:: text + + { + "job_id": "252f11f1-2912-4c06-be55-1999bde659c5" + } + +**Status Code** +--------------- + +For more information, see :ref:`Status Code `. + +Error Code +---------- + +For more information, see :ref:`Error Code `. diff --git a/api-ref/source/api_description/db_instance_management/index.rst b/api-ref/source/api_description/db_instance_management/index.rst new file mode 100644 index 0000000..0d88c6e --- /dev/null +++ b/api-ref/source/api_description/db_instance_management/index.rst @@ -0,0 +1,18 @@ +:original_name: dds_instance_mgmt.html + +.. _dds_instance_mgmt: + +DB Instance Management +====================== + +- :ref:`Creating a DB Instance ` +- :ref:`Deleting a DB Instance ` +- :ref:`Querying DB Instances ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + creating_a_db_instance + deleting_a_db_instance + querying_db_instances diff --git a/api-ref/source/api_description/db_instance_management/querying_db_instances.rst b/api-ref/source/api_description/db_instance_management/querying_db_instances.rst new file mode 100644 index 0000000..145db2b --- /dev/null +++ b/api-ref/source/api_description/db_instance_management/querying_db_instances.rst @@ -0,0 +1,512 @@ +:original_name: dds_api_0023.html + +.. _dds_api_0023: + +Querying DB Instances +===================== + +Function +-------- + +This API is used to query DB instances based on specified conditions. + +URI +--- + +- URI format + + GET /v3/{project_id}/instances?id={id}&name={name}&mode={mode}&datastore_type={datastore_type}&vpc_id={vpc_id}&subnet_id={subnet_id}&offset={offset}&limit={limit} + +- Parameter description + + .. table:: **Table 1** Parameter description + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================================================================================================================+ + | project_id | Yes | String | Specifies the project ID of a tenant in a region. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | No | String | Specifies the DB instance ID. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | name | No | String | Specifies the DB instance name. | + | | | | | + | | | | If you use asterisk (*) at the beginning of the name, fuzzy search results are returned. Otherwise, the exact results are returned. | + | | | | | + | | | | .. note:: | + | | | | | + | | | | The asterisk (*) is a reserved character in the system and cannot be used alone. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | mode | No | String | Specifies the instance type. | + | | | | | + | | | | - **Sharding** indicates the cluster instance. | + | | | | - **ReplicaSet** indicate the replica set instance. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | datastore_type | No | String | Specifies the database type. The value is **DDS-Community**. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vpc_id | No | String | Specifies the VPC ID. You can log in to the VPC console and obtain the ID of the VPC where the DDS instance is located. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | subnet_id | No | String | Specifies the network ID of the subnet. You can log in to the VPC console and obtain the network ID of the subnet in the VPC where the DDS instance is located. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | offset | No | Integer | Specifies the index position. The query starts from the next instance creation time indexed by this parameter under a specified project. If offset is set to N, the resource query starts from the N+1 piece of data | + | | | | | + | | | | The value must be greater than or equal to **0**. If this parameter is not transferred, offset is set to **0** by default, indicating that the query starts from the latest created DB instance. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Specifies the maximum allowed number of DB instances. | + | | | | | + | | | | The value ranges from 1 to 100. If this parameter is not transferred, the first 100 DB instances are queried by default. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Requests +-------- + +- Request header + + Query all DB instances. + + .. code-block:: text + + GET https://DDS endpoint/v3/0483b6b16e954cb88930a360d2c4e663/instances + + Query DB instances based on specified conditions. + + .. code-block:: text + + GET https://DDS endpoint/v3/0483b6b16e954cb88930a360d2c4e663/instances?offset=0&limit=10&id=ed7cc6166ec24360a5ed5c5c9c2ed726in02&name=hy&mode=ReplicaSet&datastore_type=DDS-Community&vpc_id=19e5d45d-70fd-4a91-87e9-b27e71c9891f&subnet_id=bd51fb45-2dcb-4296-8783-8623bfe89bb7 + +- Request body + + N/A + +Responses +--------- + +- Parameter description + + .. table:: **Table 2** Parameter description + + +-------------+------------------+---------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=============+==================+=====================================================================================================================+ + | instances | Array of objects | Indicates the DB instance information. For more information, see :ref:`Table 3 `. | + +-------------+------------------+---------------------------------------------------------------------------------------------------------------------+ + | total_count | Integer | Indicates the total number of queried records. | + +-------------+------------------+---------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0023__table4062895917262: + + .. table:: **Table 3** instances field data structure description + + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=======================+=======================+==================================================================================================================+ + | id | String | Indicates the DB instance ID. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | name | String | Indicates the DB instance name. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | status | String | Indicates the DB instance status. | + | | | | + | | | Valid value: | + | | | | + | | | - **normal**: indicates that the instance is running properly. | + | | | - **abnormal**: indicates that the instance is abnormal. | + | | | - **creating**: indicates that the instance is being created. | + | | | - **data_disk_full**: indicates that the instance disk is full. | + | | | - **createfail**: indicates that the instance failed to be created. | + | | | - **enlargefail**: indicates that nodes failed to be added to the instance. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | port | Integer | Indicates the database port number. The port range is 2100 to 9500. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | mode | String | Indicates the instance type, which is the same as the request parameter. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | region | String | Indicates the region where the DB instance is deployed. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | datastore | Object | Indicates the database information. For more information, see :ref:`Table 4 `. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | engine | String | Indicates the storage engine. The value is **wiredTiger**. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | created | String | Indicates the DB instance creation time. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | updated | String | Indicates the time when a DB instance is updated. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | db_user_name | String | Indicates the default username. The value is **rwuser**. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | ssl | Integer | Indicates that SSL is enabled or not. | + | | | | + | | | - **1**: indicate that SSL is enabled. | + | | | - **0**: indicate that SSL is disabled. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | vpc_id | String | Indicates the VPC ID. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | subnet_id | String | Indicates the subnet ID. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | security_group_id | String | Indicates the security group ID. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | backup_strategy | Object | Indicates the backup policy. For more information, see :ref:`Table 5 `. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | pay_mode | String | Indicates the billing mode. **0**: indicates the pay-per-use billing mode. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | maintenance_window | String | Indicates the maintenance time window. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | groups | Array of objects | Indicates group information. For more information, see :ref:`Table 6 `. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | disk_encryption_id | String | Indicates the disk encryption key ID. This parameter is returned only when the instance disk is encrypted. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | time_zone | String | Indicates the time zone. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + | actions | Array of strings | Indicates the operation that is executed on the DB instance. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0023__table5636104310403: + + .. table:: **Table 4** datastore field data structure description + + ======= ====== =============================== + Name Type Description + ======= ====== =============================== + type String Indicates the DB engine. + version String Indicates the database version. + ======= ====== =============================== + + .. _dds_api_0023__table50876711173859: + + .. table:: **Table 5** backup_strategy field data structure description + + +------------+---------+----------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +============+=========+========================================================================================================================================+ + | start_time | String | Indicates the backup time window. Automated backups will be triggered during the backup time window. The current time is the UTC time. | + +------------+---------+----------------------------------------------------------------------------------------------------------------------------------------+ + | keep_days | Integer | Indicates the number of days to retain the generated backup files. The value range is from 0 to 732. | + +------------+---------+----------------------------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0023__table0581104824211: + + .. table:: **Table 6** groups field data structure description + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=======================+=======================+===========================================================================================================================================================================================+ + | type | String | Indicates the node type. | + | | | | + | | | Valid value: | + | | | | + | | | - shard | + | | | - config | + | | | - mongos | + | | | - replica | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id | String | Indicates the group ID. This parameter is valid only when the node type is shard or config. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | name | String | Indicates the group name. This parameter is valid only when the node type is shard or config. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status | String | Indicates the group status. This parameter is valid only when the node type is shard or config. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | volume | Object | Indicates the volume information. For more information, see :ref:`Table 7 `. This parameter is valid only when the node type is shard, config, replica. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nodes | Array of objects | Indicates node information. For more information, see :ref:`Table 8 `. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0023__table1149918231246: + + .. table:: **Table 7** volume field data structure description + + ==== ====== ================================== + Name Type Description + ==== ====== ================================== + size String Indicates the disk size. Unit: GB + used String Indicates the disk usage. Unit: GB + ==== ====== ================================== + + .. _dds_api_0023__table3426155424213: + + .. table:: **Table 8** nodes field data structure description + + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=======================+=======================+=================================================================================================================================================================================================================================+ + | id | String | Indicates the node ID. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | name | String | Indicates the node name. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status | String | Indicates the node status. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | role | String | Indicates the node role. | + | | | | + | | | Valid value: | + | | | | + | | | - **master**: This value is returned for the mongos node. | + | | | - **Primary**: This value is returned for the primary node of shards, primary node of configs, primary node of a replica set. | + | | | - **Secondary**: This value is returned for the secondary node of shards, secondary node of configs, and secondary node of a replica set. | + | | | - **Hidden**: This value is returned for the hidden node of shards, hidden node of configs, and hidden node of a replica set. | + | | | - **unknown**. This value is returned when the node is abnormal. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | private_ip | String | Indicates the private IP address of a node. This parameter is valid only for mongos nodes, replica set instances. The value exists only after ECSs are created successfully. Otherwise, the value is **""**. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | public_ip | String | Indicates the EIP that has been bound. This parameter is valid only for mongos nodes of cluster instances, primary nodes and secondary nodes of replica set instances. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | spec_code | String | Indicates the resource specifications code. For details about the instance specifications, see the value of the **flavors.spec_code** parameter in :ref:`Querying All DB Instance Specifications `. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | availability_zone | String | Indicates the AZ. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + + .. note:: + + The values of **region** and **availability_zone** are used as examples. + +- Response example + + Query all DB instances. + + .. code-block:: text + + { + "instances": [ + { + "id": "8436a91546294036b75931e879882200in02", + "name": "dds-efa6", + "status": "normal", + "port": "8635", + "mode": "ReplicaSet", + "region": "aaa", + "datastore": { + "type": "DDS-Community", + "version": "3.4" + }, + "engine": "wiredTiger", + "created": "2019-01-17T07:05:52", + "updated": "2019-01-17T07:05:47", + "db_user_name": "rwuser", + "ssl": "1", + "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", + "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007b", + "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", + "backup_strategy": { + "start_time": "16:00-17:00", + "keep_days": 7 + }, + "pay_mode": "0", + "maintenance_window": "02:00-06:00", + "groups": [ + { + "type": "replica", + "volume": { + "size": "10", + "used": "0.33" + }, + "nodes": [ + { + "id": "233eaac9c6f245c0bb9c2d21eea12d1bno02", + "name": "dds-efa6_replica_node_2", + "status": "normal", + "role": "Primary", + "private_ip": "192.168.0.174", + "public_ip": "", + "spec_code": "dds.mongodb.s2.medium.4.repset", + "availability_zone": "bbb" + }, + { + "id": "d57d76d6320a4a7b86db82c317550c4ano02", + "name": "dds-efa6_replica_node_1", + "status": "normal", + "role": "Hidden", + "private_ip": "192.168.0.39", + "public_ip": "", + "spec_code": "dds.mongodb.s2.medium.4.repset", + "availability_zone": "bbb" + }, + { + "id": "f46b0a1cf4d9400e9fd7af17f8742d37no02", + "name": "dds-efa6_replica_node_3", + "status": "normal", + "role": "Secondary", + "private_ip": "192.168.0.176", + "public_ip": "", + "spec_code": "dds.mongodb.s2.medium.4.repset", + "availability_zone": "bbb" + } + ] + } + ], + "time_zone": "", + "actions": [ + "CREATE" + ] + }, + { + "id": "9136fd2a9fcd405ea4674276ce36dae8in02", + "name": "dds-32f4", + "status": "normal", + "port": "8635", + "mode": "Sharding", + "region": "aaa", + "datastore": { + "type": "DDS-Community", + "version": "3.4" + }, + "engine": "wiredTiger", + "created": "2019-01-17T07:04:37", + "updated": "2019-01-17T07:04:31", + "db_user_name": "rwuser", + "ssl": "1", + "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", + "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007b", + "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", + "backup_strategy": { + "start_time": "19:00-20:00", + "keep_days": 7 + }, + "pay_mode": "0", + "maintenance_window": "02:00-06:00", + "groups": [ + { + "type": "mongos", + "nodes": [ + { + "id": "a742c13a284949adad177672e8a0f01cno02", + "name": "dds-32f4_mongos_node_1", + "status": "normal", + "role": "master", + "private_ip": "192.168.0.56", + "public_ip": "", + "spec_code": "dds.mongodb.s2.medium.4.mongos", + "availability_zone": "bbb" + }, + { + "id": "d4f66666b1d64ab28719da0526341c7eno02", + "name": "dds-32f4_mongos_node_2", + "status": "normal", + "role": "master", + "private_ip": "192.168.0.185", + "public_ip": "", + "spec_code": "dds.mongodb.s2.medium.4.mongos", + "availability_zone": "bbb" + } + ] + }, + { + "type": "shard", + "id": "d1b92d2cbd544e85ac7ce6a7f33ba205gr02", + "name": "shard_2", + "status": "normal", + "volume": { + "size": "10", + "used": "0.33" + }, + "nodes": [ + { + "id": "0e9abaebe5974b63a5b221de6ee34cfeno02", + "name": "dds-32f4_shard_2_node_3", + "status": "normal", + "role": "Primary", + "spec_code": "dds.mongodb.s2.medium.4.shard", + "availability_zone": "bbb" + }, + { + "id": "1d7f4c5476c04cc187f920925c2b601fno02", + "name": "dds-32f4_shard_2_node_2", + "status": "normal", + "role": "Hidden", + "spec_code": "dds.mongodb.s2.medium.4.shard", + "availability_zone": "bbb" + }, + { + "id": "3dd2cce03da54fc08f10651cbfea778dno02", + "name": "dds-32f4_shard_2_node_1", + "status": "normal", + "role": "Secondary", + "spec_code": "dds.mongodb.s2.medium.4.shard", + "availability_zone": "bbb" + } + ] + }, + { + "type": "shard", + "id": "06439baa35c146d3a8965af59d370908gr02", + "name": "shard_1", + "status": "normal", + "volume": { + "size": "10", + "used": "0.33" + }, + "nodes": [ + { + "id": "0f6744d7e29f42ff80fc1a36cc145042no02", + "name": "dds-32f4_shard_1_node_1", + "status": "normal", + "role": "Primary", + "spec_code": "dds.mongodb.s2.medium.4.shard", + "availability_zone": "bbb" + }, + { + "id": "3abcb399113b4512bd5a906da54e8753no02", + "name": "dds-32f4_shard_1_node_3", + "status": "normal", + "role": "Hidden", + "spec_code": "dds.mongodb.s2.medium.4.shard", + "availability_zone": "bbb" + }, + { + "id": "c149f70563494501b5706cad225a8ebdno02", + "name": "dds-32f4_shard_1_node_2", + "status": "normal", + "role": "Secondary", + "spec_code": "dds.mongodb.s2.medium.4.shard", + "availability_zone": "bbb" + } + ] + }, + { + "type": "config", + "id": "84e7c96b82aa4fedb3b00f98edd71ba4gr02", + "name": "config", + "status": "normal", + "volume": { + "size": "20", + "used": "0.33" + }, + "nodes": [ + { + "id": "7422f7331b714ac39aa647a1ec968d33no02", + "name": "dds-32f4_config_node_2", + "status": "normal", + "role": "Primary", + "spec_code": "dds.mongodb.s2.large.2.config", + "availability_zone": "bbb" + }, + { + "id": "9e3b343151044eda91ddb8a42ae5cbefno02", + "name": "dds-32f4_config_node_3", + "status": "normal", + "role": "Hidden", + "spec_code": "dds.mongodb.s2.large.2.config", + "availability_zone": "bbb" + }, + { + "id": "c0053ca460ac4889841ffb14a886ec54no02", + "name": "dds-32f4_config_node_1", + "status": "normal", + "role": "Secondary", + "spec_code": "dds.mongodb.s2.large.2.config", + "availability_zone": "bbb" + } + ] + } + ], + "time_zone": "", + "actions": [ + "CREATE" + ] + } + ], + "total_count": 2 + } + +**Status Code** +--------------- + +For more information, see :ref:`Status Code `. + +Error Code +---------- + +For more information, see :ref:`Error Code `. diff --git a/api-ref/source/api_description/index.rst b/api-ref/source/api_description/index.rst new file mode 100644 index 0000000..77e4cd1 --- /dev/null +++ b/api-ref/source/api_description/index.rst @@ -0,0 +1,20 @@ +:original_name: dds_api_description.html + +.. _dds_api_description: + +API Description +=============== + +- :ref:`Querying the API Version ` +- :ref:`Querying Database Version Information ` +- :ref:`Querying All DB Instance Specifications ` +- :ref:`DB Instance Management ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + querying_the_api_version/index + querying_database_version_information + querying_all_db_instance_specifications + db_instance_management/index diff --git a/api-ref/source/api_description/querying_all_db_instance_specifications.rst b/api-ref/source/api_description/querying_all_db_instance_specifications.rst new file mode 100644 index 0000000..4f06d95 --- /dev/null +++ b/api-ref/source/api_description/querying_all_db_instance_specifications.rst @@ -0,0 +1,318 @@ +:original_name: dds_instance_specification.html + +.. _dds_instance_specification: + +Querying All DB Instance Specifications +======================================= + +Function +-------- + +This API is used to query all DB instance specifications in a specified region. + +URI +--- + +- URI format + + GET /v3/{project_id}/flavors?region={region}&engine_name={engine_name} + +- Parameter description + + .. table:: **Table 1** Parameter description + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Mandatory | Description | + +=======================+=======================+============================================================================================================================================================================+ + | project_id | Yes | Specifies the project ID of a tenant in a region. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | region | Yes | Specifies the region where the DB instance exists. | + | | | | + | | | Valid value: | + | | | | + | | | The value cannot be empty. For details about how to obtain this parameter value, see `Regions and Endpoints `__. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | engine_name | No | Specifies the database type. The value is **DDS-Community**. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Requests +-------- + +- Request header + + .. note:: + + The value of **region** in the following is used as an example. + + .. code-block:: text + + GET https://DDS endpoint/v3/375d8d8fad1f43039e23d3b6c0f60a19/flavors?region=aaa&engine_name=DDS-Community + +- Request body + + N/A + +Responses +--------- + +- Parameter description + + .. table:: **Table 2** Parameter description + + +---------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=========+==================+==================================================================================================================================================+ + | flavors | Array of objects | Indicates the DB instance specifications information list. For more information, see :ref:`Table 3 `. | + +---------+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ + + .. _dds_instance_specification__table64140254: + + .. table:: **Table 3** flavors field data structure description + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=======================+=======================+=========================================================================================+ + | engine_name | String | Indicates the engine name. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------+ + | type | String | Indicates the node type. DDS contains the following types of nodes: | + | | | | + | | | - mongos | + | | | - shard | + | | | - config | + | | | - replica | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------+ + | vcpus | String | Number of vCPUs. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------+ + | ram | String | Indicates the memory size in gigabyte (GB). | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------+ + | spec_code | String | Indicates the resource specifications code. | + | | | | + | | | Example: dds.mongodb.s2.xlarge.4.shard | + | | | | + | | | .. note:: | + | | | | + | | | - **dds.mongodb**: indicates the DDS service. | + | | | - **s2.xlarge.4**: indicates the performance specification, which is high memory. | + | | | - **shard**: indicates the node type. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------+ + | az_status | Object | Indicates the status of specifications in an AZ. Its value can be any of the following: | + | | | | + | | | - normal: indicates that the specifications are on sale. | + | | | - unsupported: indicates that the DB instance specifications are not supported. | + | | | - sellout: indicates the specifications are sold out. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------+ + +.. note:: + + The value of **az_status** is used as an example. + +- Response example + + .. code-block:: text + + { + "flavors": [ + { + "engine_name": "DDS-Community", + "type": "mongos", + "vcpus": "1", + "ram": "4", + "spec_code": "dds.mongodb.s2.medium.4.mongos", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "mongos", + "vcpus": "2", + "ram": "8", + "spec_code": "dds.mongodb.s2.large.4.mongos", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "mongos", + "vcpus": "4", + "ram": "16", + "spec_code": "dds.mongodb.s2.xlarge.4.mongos", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "mongos", + "vcpus": "8", + "ram": "32", + "spec_code": "dds.mongodb.s2.2xlarge.4.mongos", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "mongos", + "vcpus": "16", + "ram": "64", + "spec_code": "dds.mongodb.s2.4xlarge.4.mongos", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "shard", + "vcpus": "1", + "ram": "4", + "spec_code": "dds.mongodb.s2.medium.4.shard", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "shard", + "vcpus": "2", + "ram": "8", + "spec_code": "dds.mongodb.s2.large.4.shard", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "shard", + "vcpus": "4", + "ram": "16", + "spec_code": "dds.mongodb.s2.xlarge.4.shard", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "shard", + "vcpus": "8", + "ram": "32", + "spec_code": "dds.mongodb.s2.2xlarge.4.shard", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "shard", + "vcpus": "16", + "ram": "64", + "spec_code": "dds.mongodb.s2.4xlarge.4.shard", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "config", + "vcpus": "2", + "ram": "4", + "spec_code": "dds.mongodb.s2.large.2.config", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "replica", + "vcpus": "1", + "ram": "4", + "spec_code": "dds.mongodb.s2.medium.4.repset", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "replica", + "vcpus": "2", + "ram": "8", + "spec_code": "dds.mongodb.s2.large.4.repset", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "replica", + "vcpus": "4", + "ram": "16", + "spec_code": "dds.mongodb.s2.xlarge.4.repset", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "replica", + "vcpus": "8", + "ram": "32", + "spec_code": "dds.mongodb.s2.2xlarge.4.repset", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + }, + { + "engine_name": "DDS-Community", + "type": "replica", + "vcpus": "16", + "ram": "64", + "spec_code": "dds.mongodb.s2.4xlarge.4.repset", + "az_status": [ + "eu-de-01": "normal", + "eu-de-02": "normal", + "eu-de-03": "normal" + ] + } + ] + } + +**Status Code** +--------------- + +For more information, see :ref:`Status Code `. + +Error Code +---------- + +For more information, see :ref:`Error Code `. diff --git a/api-ref/source/api_description/querying_database_version_information.rst b/api-ref/source/api_description/querying_database_version_information.rst new file mode 100644 index 0000000..2682c56 --- /dev/null +++ b/api-ref/source/api_description/querying_database_version_information.rst @@ -0,0 +1,77 @@ +:original_name: dds_database_version.html + +.. _dds_database_version: + +Querying Database Version Information +===================================== + +Function +-------- + +This API is used to obtain database version information about a specified type of a DB instance. + +URI +--- + +- URI format + + GET /v3/{project_id}/datastores/{datastore_name}/versions + +- Parameter description + + .. table:: **Table 1** Parameter description + + +----------------+-----------+--------------------------------------------------------------------------------------------------+ + | Name | Mandatory | Description | + +================+===========+==================================================================================================+ + | project_id | Yes | Specifies the project ID of a tenant in a region. | + +----------------+-----------+--------------------------------------------------------------------------------------------------+ + | datastore_name | Yes | Specifies the database type. DDS Community Edition is supported. The value is **DDS-Community**. | + +----------------+-----------+--------------------------------------------------------------------------------------------------+ + +Requests +-------- + +- Request header + + .. code-block:: text + + GET https://DDS endpoint/v3/{project_id}/datastores/{datastore_name}/versions + +- Request body + + N/A + +Responses +--------- + +- Parameter description + + .. table:: **Table 2** Parameter description + + +----------+------------------+--------------------------------------------------------------------------------+ + | Name | Type | Description | + +==========+==================+================================================================================+ + | versions | Array of strings | Indicates the database version. Currently, versions 3.2 and 3.4 are supported. | + +----------+------------------+--------------------------------------------------------------------------------+ + +- Response example + + .. code-block:: text + + { + "versions": [ + "3.2", + "3.4" + ] + } + +**Status Code** +--------------- + +For more information, see :ref:`Status Code `. + +Error Code +---------- + +For more information, see :ref:`Error Code `. diff --git a/api-ref/source/api_description/querying_the_api_version/index.rst b/api-ref/source/api_description/querying_the_api_version/index.rst new file mode 100644 index 0000000..96a17dd --- /dev/null +++ b/api-ref/source/api_description/querying_the_api_version/index.rst @@ -0,0 +1,16 @@ +:original_name: dds_api_version.html + +.. _dds_api_version: + +Querying the API Version +======================== + +- :ref:`Querying the API Version List ` +- :ref:`Querying API Version Information ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + querying_the_api_version_list + querying_api_version_information diff --git a/api-ref/source/api_description/querying_the_api_version/querying_api_version_information.rst b/api-ref/source/api_description/querying_the_api_version/querying_api_version_information.rst new file mode 100644 index 0000000..39da8a0 --- /dev/null +++ b/api-ref/source/api_description/querying_the_api_version/querying_api_version_information.rst @@ -0,0 +1,108 @@ +:original_name: dds_api_0019.html + +.. _dds_api_0019: + +Querying API Version Information +================================ + +Function +-------- + +This API is used to query the specified API version. + +URI +--- + +URI format + +GET /v3 + +Requests +-------- + +- Request header + + .. code-block:: text + + GET https://DDS endpoint/v3 + +- Request body + + N/A + +Responses +--------- + +- Parameter description + + .. table:: **Table 1** Parameter description + + +---------+--------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=========+========+=======================================================================================================================================+ + | version | Object | Indicates the list of detailed API version information. For more information, see :ref:`Table 2 `. | + +---------+--------+---------------------------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0019__table57914909154838: + + .. table:: **Table 2** **version** field data structure description + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=======================+=======================+=========================================================================================================================+ + | id | String | Indicates the API version. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------+ + | links | Array of objects | Indicates the API version link information. For more information, see :ref:`Table 3 `. | + | | | | + | | | .. note:: | + | | | | + | | | If the version is **v3**, the value is **[]**. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------+ + | status | String | Indicates the version status. The value **CURRENT** indicates that the version has been released. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------+ + | version | String | Indicates the subversion of the API version. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------+ + | min_version | String | Indicates the minimum API version. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------+ + | updated | String | Indicates the version update time. | + | | | | + | | | The format is yyyy-mm-ddThh:mm:ssZ. | + | | | | + | | | **T** is the separator between the calendar and the hourly notation of time. **Z** indicates the UTC. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0019__table630875915440: + + .. table:: **Table 3** links field data structure description + + ==== ====== =========================================================== + Name Type Description + ==== ====== =========================================================== + href String Indicates the API URL and the value is **""**. + rel String Its value is **self**, indicating that URL is a local link. + ==== ====== =========================================================== + +- Response example + + .. code-block:: text + + { + "version": { + "id": "v3", + "links": [], + "status": "CURRENT", + "version": "", + "min_version": "", + "updated": "2017-02-07T17:34:02Z" + } + } + +**Status Code** +--------------- + +For more information, see :ref:`Status Code `. + +Error Code +---------- + +For more information, see :ref:`Error Code `. diff --git a/api-ref/source/api_description/querying_the_api_version/querying_the_api_version_list.rst b/api-ref/source/api_description/querying_the_api_version/querying_the_api_version_list.rst new file mode 100644 index 0000000..0b4fbb3 --- /dev/null +++ b/api-ref/source/api_description/querying_the_api_version/querying_the_api_version_list.rst @@ -0,0 +1,114 @@ +:original_name: dds_api_0018.html + +.. _dds_api_0018: + +Querying the API Version List +============================= + +Function +-------- + +This API is used to query the currently supported API version list. + +URI +--- + +- URI format + + GET / + +- Parameter description + + N/A + +Requests +-------- + +- Request header + + .. code-block:: text + + GET https://DDS endpoint/ + +- Request body + + N/A + +Responses +--------- + +- Parameter description + + .. table:: **Table 1** Parameter description + + +----------+------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +==========+==================+=======================================================================================================================================+ + | versions | Array of objects | Indicates the list of detailed API version information. For more information, see :ref:`Table 2 `. | + +----------+------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0018__table37479565104653: + + .. table:: **Table 2** versions field data structure description + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +=======================+=======================+=================================================================================================================+ + | id | String | Indicates the API version. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | links | Array of objects | Indicates the API link information. For more information, see :ref:`Table 3 `. | + | | | | + | | | .. note:: | + | | | | + | | | If the version is **v3**, the value is **[]**. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | status | String | Indicates the version status. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | version | String | Indicates the subversion of the API version. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | min_version | String | Indicates the minimum API version. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + | updated | String | Indicates the version update time. | + | | | | + | | | The format is yyyy-mm-ddThh:mm:ssZ. | + | | | | + | | | **T** is the separator between the calendar and the hourly notation of time. **Z** indicates the UTC. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+ + + .. _dds_api_0018__table630875915440: + + .. table:: **Table 3** links field data structure description + + ==== ====== =========================================================== + Name Type Description + ==== ====== =========================================================== + href String Indicates the API URL and the value is **""**. + rel String Its value is **self**, indicating that URL is a local link. + ==== ====== =========================================================== + +- Response example + + .. code-block:: text + + { + "versions": [ + { + "id": "v3", + "links": [], + "status": "CURRENT", + "version": "", + "min_version": "", + "updated": "2017-02-07T17:34:02Z" + } + ] + } + +**Status Code** +--------------- + +For more information, see :ref:`Status Code `. + +Error Code +---------- + +For more information, see :ref:`Error Code `. diff --git a/api-ref/source/api_overview.rst b/api-ref/source/api_overview.rst new file mode 100644 index 0000000..1ed663f --- /dev/null +++ b/api-ref/source/api_overview.rst @@ -0,0 +1,23 @@ +:original_name: dds_api_0006.html + +.. _dds_api_0006: + +API Overview +============ + +DDS provides extension APIs, allowing you to perform specific operations using APIs. + +.. table:: **Table 1** API description + + +----------------------------------------+-------------------------------------------------------------------------------+ + | Type | Description | + +========================================+===============================================================================+ + | API Version Queries | - Query all API versions. | + | | - Query a specified API version. | + +----------------------------------------+-------------------------------------------------------------------------------+ + | Database Version Information Queries | Obtain database version information about a specified instance type. | + +----------------------------------------+-------------------------------------------------------------------------------+ + | All DB Instance Specifications Queries | Query all DB instance specifications in a specified region. | + +----------------------------------------+-------------------------------------------------------------------------------+ + | DB Instance Management | Manage DB instances, including creating, deleting, and querying DB instances. | + +----------------------------------------+-------------------------------------------------------------------------------+ diff --git a/api-ref/source/appendix/dds_metrics.rst b/api-ref/source/appendix/dds_metrics.rst new file mode 100644 index 0000000..a062b00 --- /dev/null +++ b/api-ref/source/appendix/dds_metrics.rst @@ -0,0 +1,408 @@ +:original_name: dds_metrics.html + +.. _dds_metrics: + +DDS Metrics +=========== + +Function +-------- + +This section describes metrics reported by Document Database Service (DDS) to Cloud Eye as well as their namespaces and dimensions. You can use APIs provided by Cloud Eye to query the metrics of the monitored object and alarms generated for DDS. + +Namespace +--------- + +SYS.DDS + +Monitoring Metrics +------------------ + ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| Metrics | Metrics Name | Description | Value Range | Remarks | ++=================================+============================================+==============================================================================================================================+==============+========================================+ +| mongo001_command_ps | COMMAND Statements per Second | Number of COMMAND statements executed per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - DDS DB instance | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo002_delete_ps | DELETE Statements per Second | Number of DELETE statements executed per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - DDS DB instance | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo003_insert_ps | INSERT Statements per Second | Number of INSERT statements executed per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - DDS DB instance | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo004_query_ps | QUERY Statements per Second | Number of QUERY statements executed per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - DDS DB instance | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo005_update_ps | UPDATE Statements per Second | Number of UPDATE statements executed per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - DDS DB instance | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo006_getmore_ps | GETMORE Statements per Second | Number of GETMORE statements executed per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - DDS DB instance | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num1 | Chunks of Shard 1 | Number of chunks in shard 1 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num2 | Chunks of Shard 2 | Number of chunks in shard 2 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num3 | Chunks of Shard 3 | Number of chunks in shard 3 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num4 | Chunks of Shard 4 | Number of chunks in shard 4 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num5 | Chunks of Shard 5 | Number of chunks in shard 5 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num6 | Chunks of Shard 6 | Number of chunks in shard 6 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num7 | Chunks of Shard 7 | Number of chunks in shard 7 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num8 | Chunks of Shard 8 | Number of chunks in shard 8 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num9 | Chunks of Shard 9 | Number of chunks in shard 9 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num10 | Chunks of Shard 10 | Number of chunks in shard 10 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num11 | Chunks of Shard 11 | Number of chunks in shard 11 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_chunk_num12 | Chunks of Shard 12 | Number of chunks in shard 12 | 0-64 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo008_connections | Active Instance Connections | Total number of connections attempting to connect to a DDS DB instance | 0-200 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo009_migFail_num | Chunk Migration Failures in Last 24 hrs | Number of chunk migration failures in the last 24 hours | >= 0 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: DDS DB instance | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo007_connections | Active Node Connections | Total number of connections attempting to connect to a DDS DB instance node | 0-200 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo008_mem_resident | Resident Memory | Size of resident memory in MB | >= 0 MB | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo009_mem_virtual | Virtual Memory | Size of virtual memory in MB | >= 0 MB | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo010_regular_asserts_ps | Regular Asserts per Second | Number of regular asserts per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo011_warning_asserts_ps | Warning Asserts per Second | Number of warning asserts per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo012_msg_asserts_ps | Message Asserts per Second | Number of message asserts per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo013_user_asserts_ps | User Asserts per Second | Number of user asserts per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo014_queues_total | Operations Queued Waiting for a Lock | Number of operations queued waiting for a lock | >= 0 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo015_queues_readers | Operations Queued Waiting for a Read Lock | Number of operations queued waiting for a read lock | >= 0 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo016_queues_writers | Operations Queued Waiting for a Write Lock | Number of operations queued waiting for a write lock | >= 0 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo017_page_faults | Page Faults | Number of page faults on the monitored nodes | >= 0 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo018_porfling_num | Slow Queries | Number of slow queries on the monitored nodes | >= 0 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo019_cursors_open | Current Maintained Cursors | Number of maintained cursors on the monitored nodes | >= 0 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo020_cursors_timeOut | Timeout Cursors | Number of timed out cursors on the monitored nodes | >= 0 Counts | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo021_wt_cahe_usage | Bytes in WiredTiger Cache | Size of data in the WiredTiger cache in MB | >= 0 MB | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo022_wt_cahe_dirty | Tracked Dirty Bytes in WiredTiger Cache | Size of tracked dirty data in the WiredTiger cache in MB | >= 0 MB | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo023_wInto_wtCache | Bytes Written Into Cache per Second | Bytes written into WiredTiger cache per second | >= 0 bytes/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo024_wFrom_wtCache | Bytes Written From Cache per Second | Bytes written from the WiredTiger cache to the disk per second | >= 0 bytes/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo025_repl_oplog_win | Oplog Window | Available time in hour in the monitored primary node's oplog | >= 0 Hours | Monitored object: database | +| | | | | | +| | | | | Monitored object type: primary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo026_oplog_size_ph | Oplog Growth Rate | Speed in MB/hour at which oplogs are generated on the monitored primary node | >= 0 MB/Hour | Monitored object: database | +| | | | | | +| | | | | Monitored object type: primary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo025_repl_headroom | Replication Headroom | Time difference in seconds between the primary's oplog window and the replication lag of the secondary | >= 0 Seconds | Monitored object: database | +| | | | | | +| | | | | Monitored object type: secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo026_repl_lag | Replication Lag | A delay in seconds between an operation on the primary and the application of that operation from the oplog to the secondary | >= 0 Seconds | Monitored object: database | +| | | | | | +| | | | | Monitored object type: secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo027_repl_command_ps | Replicated COMMAND Statements per Second | Number of replicated COMMAND statements executed on the secondary node per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo028_repl_update_ps | Replicated UPDATE Statements per Second | Number of replicated UPDATE statements executed on the secondary node per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo029_repl_delete_ps | Replicated DELETE Statements per Second | Number of replicated DELETE statements executed on the secondary node per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo030_repl_insert_ps | Replicated INSERT Statements per Second | Number of replicated INSERT statements executed on the secondary node per second | >= 0 Count/s | Monitored object: database | +| | | | | | +| | | | | Monitored object type: secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo031_cpu_usage | CPU Usage | CPU usage of the monitored object | 0-1 | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo032_mem_usage | Memory Usage | Memory usage of the monitored object | 0-1 | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo033_bytes_out | Network Output Throughput | Outgoing traffic in bytes per second | >= 0 bytes/s | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo034_bytes_in | Network Input Throughput | Incoming traffic in bytes per second | >= 0 bytes/s | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - mongos node | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo035_disk_usage | Disk Utilization | Disk usage of the monitored object | 0-1 | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo036_iops | IOPS | Average number of I/O requests processed by the system in a specified period | >= 0 Count/s | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo037_read_throughput | Disk Read Throughput | Number of bytes read from the disk per second | >= 0 bytes/s | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo038_write_throughput | Disk Write Throughput | Number of bytes written into the disk per second | >= 0 bytes/s | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo039_avg_disk_sec_per_read | Disk Read Time | Average time required for each disk read in a specified period | >= 0 Seconds | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo040_avg_disk_sec_per_write | Disk Write Time | Average time required for each disk write in a specified period | >= 0 Seconds | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo042_disk_total_size | Total Storage Space | Total storage space of the monitored object | 0-1000 GB | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ +| mongo043_disk_used_size | Used Storage Space | Used storage space of the monitored object | 0-1000 GB | Monitored object: ECS | +| | | | | | +| | | | | Monitored object type: | +| | | | | | +| | | | | - Primary node | +| | | | | - Secondary node | ++---------------------------------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------+ + +Dimension +--------- + ++-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| Key | Value | ++===================================+======================================================================================================================+ +| mongodb_cluster_id | DDS DB instance ID | +| | | +| | Supports cluster and replica set instances. | ++-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| mongos_instance_id | mongos node ID | ++-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| mongod_primary_instance_id | Primary node ID | +| | | +| | Includes the config and shard primary nodes of cluster instances and the primary nodes of replica set instances. | ++-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ +| mongod_secondary_instance_id | Secondary node ID | +| | | +| | Includes the config and shard secondary nodes of cluster instances and the secondary nodes of replica set instances. | ++-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/appendix/error_code.rst b/api-ref/source/appendix/error_code.rst new file mode 100644 index 0000000..ca62166 --- /dev/null +++ b/api-ref/source/appendix/error_code.rst @@ -0,0 +1,273 @@ +:original_name: dds_error_code.html + +.. _dds_error_code: + +Error Code +========== + +If an error occurs in an API, no result is returned. You can locate the error cause based on the error codes of each API. When the invocation fails, an HTTP status code is returned. The returned message body contains the specific error code and information. + +Error Response Body Format +-------------------------- + +- Parameter description + + .. table:: **Table 1** Parameter description + + +------------+--------+------------------------------------------------------------------------------------------+ + | Name | Type | Description | + +============+========+==========================================================================================+ + | error_code | String | Specifies the error returned when a task submission exception occurs. | + +------------+--------+------------------------------------------------------------------------------------------+ + | error_msg | String | Specifies the description of the error returned when a task submission exception occurs. | + +------------+--------+------------------------------------------------------------------------------------------+ + +- Response example + + .. code-block:: text + + { + "error_code": "DBS.200001", + "error_msg": "Parameter error" + } + +Error Code Description +---------------------- + +.. table:: **Table 2** Error code description + + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | HTTP Status Code | Error Code | Error Information | Handling Measure | + +==================+=================+==========================================================================================================================+=============================================================================================================================================================+ + | 400 | DBS.200001 | Parameter error. | Check whether the transferred parameters or URLs are correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 404 | DBS.200002 | The DB instance does not exist. | Check whether the DB instance and its ID are correct and whether the DB instance exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200010 | Authentication failed | Check whether the tenant and instance match. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.200011 | Operation cannot be executed in current state of the DB instance. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 404 | DBS.200013 | The node does not exist | Check whether the node ID or group ID is correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.200018 | This DB instance is not available. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.200019 | Operation cannot be executed in current state of the DB instance. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200024 | The region is unavailable. | Check whether the region name is correct and whether the region is available. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200022 | The DB instance name already exists. | Check whether the DB instance name exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200025 | Invalid AZ. | Check whether the AZ name is correct and whether the AZ is available. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.200028 | The maximum storage space has been reached. | Check whether the storage space exceeds the upper limit. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 404 | DBS.200042 | Invalid DB engine. | Check whether the DB engine is supported by DDS. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200029 | Invalid username and password. | Check whether the username and password match and whether the password meets the password strength requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200047 | Operation cannot be executed in current state of the DB instance or node. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200048 | Invalid VPC. | Check whether the VPC ID and name are correct and meet the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200049 | Invalid subnet. | Check whether the subnet ID and name are correct and meet the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200050 | Invalid security group. | Check whether the security group ID and name are correct and meet the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200052 | Invalid password. | Check whether the username and password match and whether the password meets the password strength requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200053 | The DB instance specifications do not exist. | Check whether the specifications are correct and supported in the current AZ. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200054 | Invalid DB instance specifications. | Check whether the specifications are correct and supported in the current AZ. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200057 | Invalid parameter group. | Check whether the parameter group is correct, whether the parameter group exists, and whether the parameter group matches the instance type. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200075 | Invalid node role. | Check whether the role of the node meets the requirements and whether the instance is normal. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.200076 | Operation cannot be executed in current state of the DB instance. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200095 | Parameter error. | Check whether the parameters in the request and URLs are correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200302 | The storage space must be a multiple of 10. | Check whether the storage space is a multiple of 10. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200303 | The maximum number of times that the storage space can be scaled up has been reached. | The maximum number of times that the storage space can be scaled up has been reached. To continue to scale up the storage space, contact technical support. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200304 | The storage space can be scaled up a maximum of four times. | Check whether the instance has been scaled up for multiple times. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200306 | Invalid storage space. | Check whether the storage space is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200311 | Scaling up the storage space is not allowed in current state of the node. | Check whether the node type, instance type, and node ID are correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200434 | Failed to restart the DB instance. | Check whether the DB instance status is normal and whether other operations are being performed on the DB instance. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200470 | Invalid AZ. | Check whether the AZ is correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200501 | The subnet does not exist. | Check whether the subnet ID and name exist and match the VPC. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200502 | The security group does not exist. | Check whether the security group ID and name exist and match the VPC. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200503 | The VPC does not exist. | Check whether the tenant has the VPC. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200506 | The encryption key does not exist. | Check whether the disk encryption key ID exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200507 | The encryption key is not available. | Check whether the disk encryption key is available. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.201000 | Operation cannot be executed in current state of the DB instance. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201006 | Parameter error. | Check whether the transferred parameters or URLs are correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.201014 | Operation cannot be executed in current state of the DB instance. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.201015 | This operation cannot be performed because another operation is being performed. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201020 | Invalid DB engine. | Check whether the DB engine is supported by DDS. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.201028 | The DB instance does not exist. | Check whether the DB instance belongs to the tenant and whether the DB instance exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201201 | The backup already exists. | Check whether the backup name or ID already exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201202 | Operation cannot be executed in current state of the DB instance. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201204 | The backup file does not exist. | Check whether the backup file exists and matches the instance. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201214 | The backup file does not exist. | Check whether the backup exists and matches the instance. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201319 | Deleting backup file is not allowed because a restoration task is currently in progress. Please wait. | Check whether the backup is being used to restore instances. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201501 | The DB instance does not exist. | Check whether the tenant has the DB instance, whether the DB instance name or ID is correct, and whether the DB instance exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.201502 | The DB instance does not exist. | Check whether the tenant has the DB instance, whether the DB instance name or ID is correct, and whether the DB instance exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 404 | DBS.212001 | The security group does not exist or has been deleted. | Check whether the parameter group exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212003 | This operation is not permitted. | Check whether the instance status or the ongoing operation on the instance conflicts with the request. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212006 | The node associated with this parameter group is not available. | Check whether the node that is associated with the parameter group is normal. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212008 | The database type is not supported. | Check whether the database type is supported | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212013 | This parameter group does not exist. | Check whether the parameter exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212017 | Invalid parameter. | Check whether the transferred parameters or URLs are correct and meet the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212019 | Invalid parameter. | Check whether the transferred parameters or URLs are correct and meet the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212028 | Invalid parameter group description. | Check whether the parameter group description is valid. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212030 | The parameter group name already exists. | Check whether the parameter group name is correct and whether the tenant has created the parameter group. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212031 | Invalid parameter group name. | Check whether the parameter group name meets the requirements: | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.212032 | The operation cannot be performed because this parameter group is applied to one or more DB instance nodes. | Check whether the parameter group has been applied to the instance. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280001 | Parameter error. | Check whether the transferred parameters or URLs are correct and meet the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 500 | DBS.280005 | Server error. Try again later. | Contact technical support engineers. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280015 | Permission denied. | Check whether the token expires and whether the instance matches the tenant. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280016 | Resource not found. | Check whether the transferred parameters are correct and whether the instance exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.280019 | Account suspended. | Check the account balance. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.280032 | Permission denied. | Check whether the rights of the user group to which the current user belongs allow the corresponding operation. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.280042 | Invalid request. | Check whether the request is allowed by the current instance status and the operations being performed on the instance and whether the request is valid. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 401 | DBS.280056 | Invalid token. | Check whether the instance belongs to the tenant and whether the token has been obtained again. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.280063 | Permission denied. Contact the account administrator for authorization | Check whether the user group to which the current user belongs has the corresponding operation permission. | + | | | | | + | | | .. note:: | | + | | | | | + | | | **xxx** indicates the fine-grained configuration item corresponding to an operation performed on the DDS DB instance. | | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 500 | DBS.280064 | Fine-grained authentication failed. | Contact the customer service. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.200072 | Invalid storage space. | Check whether the storage space exceeds the upper limit. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280110 | The DB instance does not exist. | Check whether the tenant has the DB instance, whether the DB instance name or ID is correct, and whether the DB instance exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280122 | Invalid DB engine. | Check whether the storage engine matches the instance engine. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280123 | Invalid node number. | Check whether the number of nodes to be added to the instance meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280124 | Invalid backup. | Check whether the backup ID is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280127 | Invalid backup description. | Check whether the backup description is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280200 | The password contains invalid characters. | Check whether the password is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280214 | Invalid retention period. | Check whether the backup retention period is correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280215 | Invalid backup period. | Check whether the backup start time, end time, and backup cycle are correct and meet the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280216 | Invalid backup start time. | Check whether the backup start time meets the requirements and whether the relationship between the backup start time and end time is correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280234 | Invalid DB instance name. | Check whether the instance name is correct and whether the instance exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280235 | Invalid DB engine. | Check whether the DB engine information is correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280236 | Invalid database version. | Check whether the database version is supported. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280239 | Invalid specifications. | Check whether the specification code is correct, whether the specification exists in the current AZ, and whether the specification is supported. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280241 | Invalid storage type. | Check whether the storage type is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280242 | The storage space is out of range. | Check whether the disk size is correct. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280244 | Invalid AZ. | Check whether the parameters of the AZ are correct, whether the AZ exists, and whether the AZ matches the specifications. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280247 | Invalid VPC. | Check whether the VPC ID is correct and whether the VPC exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280248 | Invalid subnet. | Check whether the subnet ID is correct and whether the subnet exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280249 | Invalid security group. | Check whether the security group ID is correct and whether the security group exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280266 | Invalid storage space. | Check whether the storage space is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280267 | Specifications not match. | Check whether the specification information is correct and whether the specification matches the instance. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280277 | Invalid backup name. | Check whether the backup name is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280280 | Invalid DB instance number. | Check whether the number of DB instances is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280284 | Invalid IP address. | Check whether the IP address is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280292 | Invalid username. | Check whether the username is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280311 | Invalid storage space. | Check whether the storage space is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280314 | Invalid storage type. | Check whether the storage type is correct and whether the instance supports the disk type. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280327 | Invalid node type. | Check whether the node type is correct, whether the node type matches the instance, and whether the node type matches the group ID and node ID. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280342 | Invalid DB instance mode. | Check whether the instance mode is correct and whether the instance mode matches the instance ID. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280365 | Invalid payment mode. | Check whether the payment mode is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280404 | Invalid DB instance ID. | Check whether the instance ID is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | DBS.280406 | The DB instance cannot be deleted. | Check whether the DB engine and billing mode support direct deletion of instances. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280408 | Unauthorized tenant ID | Check whether the tenant ID is correct and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280414 | Invalid group type. | Check whether the group type is correct, whether the group type matches the instance, and whether the node type matches the group ID. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280434 | Invalid resource specifications code. | Check whether the resource specifications code exists and meets the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280446 | The database information does not exist. | Check whether the **datastore** field exists. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280438 | Invalid encryption key ID. | Check whether the disk encryption key ID in the request is created and available, and whether the current DB engine supports disk encryption. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280439 | Invalid query limit. | Check whether the value of the **limit** parameter is valid. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280440 | Invalid offset. | Check whether the value of the **offset** parameter is valid. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280441 | Invalid key. | Check whether the tag key is valid. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 429 | DBS.280443 | The maximum number of connections has been reached. | APIs are frequently called by the same tenant. Reduce the frequency of API calls. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.280445 | The DB instance class is not available. | The current DB instance class is unavailable. Select another one. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | DBS.290000 | Parameter error. | Check whether the transferred parameters or URLs are correct and meet the requirements. | + +------------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/appendix/index.rst b/api-ref/source/appendix/index.rst new file mode 100644 index 0000000..e8cddff --- /dev/null +++ b/api-ref/source/appendix/index.rst @@ -0,0 +1,20 @@ +:original_name: dds_public_parameters.html + +.. _dds_public_parameters: + +Appendix +======== + +- :ref:`Status Code ` +- :ref:`Error Code ` +- :ref:`Obtaining a Project ID ` +- :ref:`DDS Metrics ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + status_code + error_code + obtaining_a_project_id + dds_metrics diff --git a/api-ref/source/appendix/obtaining_a_project_id.rst b/api-ref/source/appendix/obtaining_a_project_id.rst new file mode 100644 index 0000000..e1d44b0 --- /dev/null +++ b/api-ref/source/appendix/obtaining_a_project_id.rst @@ -0,0 +1,66 @@ +:original_name: dds_projectid.html + +.. _dds_projectid: + +Obtaining a Project ID +====================== + +Scenarios +--------- + +A project ID is required for some URLs when an API is called. Therefore, you need to obtain a project ID in advance. Two methods are available: + +- :ref:`Obtaining the Project ID by Calling an API ` +- :ref:`Obtain a Project ID from the Console ` + +.. _dds_projectid__section18520151052413: + +Obtaining the Project ID by Calling an API +------------------------------------------ + +The API used to obtain a project ID is **GET https://{Endpoint}/v3/projects**. **{Endpoint}** is the IAM endpoint and can be obtained from `Regions and Endpoints `__ For details about API authentication, see :ref:`Token Authentication `. + +The following is an example response. The value of **id** is the project ID. + +.. code-block:: + + { + "projects": [ + { + "domain_id": "65382450e8f64ac0870cd180d14e684b", + "is_domain": false, + "parent_id": "65382450e8f64ac0870cd180d14e684b", + "name": "project_name", + "description": "", + "links": { + "next": null, + "previous": null, + "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99" + }, + "id": "a4a5d4098fb4474fa22cd05f897d6b99", + "enabled": true + } + ], + "links": { + "next": null, + "previous": null, + "self": "https://www.example.com/v3/projects" + } + } + +.. _dds_projectid__section127010198244: + +Obtain a Project ID from the Console +------------------------------------ + +#. Register yourself on the management console and log in to it. + +#. Move your pointer over the username and select **My Credential** in the displayed drop-down list. + + On the **My Credential** page, view the project ID in the project list. + + + .. figure:: /_static/images/en-us_image_0208249570.jpg + :alt: **Figure 1** Viewing project IDs + + **Figure 1** Viewing project IDs diff --git a/api-ref/source/appendix/status_code.rst b/api-ref/source/appendix/status_code.rst new file mode 100644 index 0000000..c17656c --- /dev/null +++ b/api-ref/source/appendix/status_code.rst @@ -0,0 +1,57 @@ +:original_name: dds_status_code.html + +.. _dds_status_code: + +Status Code +=========== + +- Normal + + =========== ======== ============================================ + Status Code Message Description + =========== ======== ============================================ + 200 OK Request succeeded. + 202 Accepted Asynchronous request submitted successfully. + =========== ======== ============================================ + +- Abnormal + + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Status Code | Message | Description | + +=======================+==========================+=================================================================================================================================================================================================================================================================+ + | 400 | Bad Request | Invalid request. | + | | | | + | | | The client should not repeat the request without modifications. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 401 | Unauthorized | The authorization information provided by the client is incorrect or invalid. Check the username and password. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | Forbidden | The request is rejected. | + | | | | + | | | The server has received and understood the request; yet it refused to respond, because the request is set to deny access. Do not retry the request before modification. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 404 | Not Found | The requested resource cannot be found. | + | | | | + | | | The client should not repeat the request without modifications. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 405 | Method Not Allowed | The method specified in the request is not supported for the requested resource. | + | | | | + | | | The client should not repeat the request without modifications. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 409 | Conflict | The request could not be processed due to a conflict. | + | | | | + | | | This status code indicates that the resource that the client attempts to create already exits, or the request fails to be processed because of the update of the conflict request. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 413 | Request Entity Too Large | The request is larger than that a server is able to process. The server may close the connection to prevent the client from continuing the request. If the server temporarily cannot process the request, the response will contain a Retry-After header field. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 415 | Unsupported Media Type | The server is unable to process the media format in the request. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 422 | Unprocessable Entity | The request is well-formed but is unable to be processed due to semantic errors. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 500 | Internal Server Error | The server is able to receive the request but it could not understand the request. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 501 | Not Implemented | The server does not support the requested function. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 503 | Service Unavailable | The requested service is invalid. | + | | | | + | | | The client should not repeat the request without modifications. | + +-----------------------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/before_you_start.rst b/api-ref/source/before_you_start.rst new file mode 100644 index 0000000..86699ec --- /dev/null +++ b/api-ref/source/before_you_start.rst @@ -0,0 +1,26 @@ +:original_name: dds_api_reference.html + +.. _dds_api_reference: + +Before You Start +================ + +This document describes application programming interfaces (APIs), syntax, parameters, and examples of Document Database Service (DDS). You can search for information you need according to :ref:`Table 1 `. + +.. _dds_api_reference__table333417544226: + +.. table:: **Table 1** Documentation guide + + +------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Section | Description | + +================================================+========================================================================================================================================================+ + | :ref:`API Overview ` | DDS API components and API list | + +------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`Environment Preparations ` | Preparations before using the APIs, including obtaining the request authentication and project ID | + +------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`API Calling ` | Representational State Transfer (REST) message bodies, calling methods, and examples | + +------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`API Description ` | DDS APIs, including APIs used for querying information about API version, database version, and DB instance specifications, and managing DB instances. | + +------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`Appendix ` | Understand the status codes and error codes about DDS APIs. | + +------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/change_history.rst b/api-ref/source/change_history.rst new file mode 100644 index 0000000..c12a459 --- /dev/null +++ b/api-ref/source/change_history.rst @@ -0,0 +1,26 @@ +:original_name: dds_change_history.html + +.. _dds_change_history: + +Change History +============== + ++-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Date | Description | ++===================================+=========================================================================================================================================================================================================================================================================================+ +| 2020-10-15 | Modified the following content: | +| | | +| | - Modified the description of the **ram** parameter in :ref:`Querying All DB Instance Specifications `. | +| | - Modified the description of the **disk_encryption_id** parameter in :ref:`Querying DB Instances `. | ++-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 2019-11-07 | Modified the following content: | +| | | +| | - Modified the value of **versions** in the response example in :ref:`Querying Database Version Information `. | +| | - Modified the description of the **num** parameter in :ref:`Creating a DB Instance `. | ++-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 2019-09-25 | Modified the following content: | +| | | +| | - Change the value of **spec_code** in the request and response examples in :ref:`Example `, :ref:`Querying All DB Instance Specifications `, :ref:`Creating a DB Instance `, and :ref:`Querying DB Instances `. | ++-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 2019-08-19 | This issue is the first official release. | ++-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/environment_preparations/index.rst b/api-ref/source/environment_preparations/index.rst new file mode 100644 index 0000000..6f92506 --- /dev/null +++ b/api-ref/source/environment_preparations/index.rst @@ -0,0 +1,14 @@ +:original_name: dds_api_0007.html + +.. _dds_api_0007: + +Environment Preparations +======================== + +- :ref:`Token Authentication ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + token_authentication diff --git a/api-ref/source/environment_preparations/token_authentication.rst b/api-ref/source/environment_preparations/token_authentication.rst new file mode 100644 index 0000000..52c85e7 --- /dev/null +++ b/api-ref/source/environment_preparations/token_authentication.rst @@ -0,0 +1,83 @@ +:original_name: dds_api_0010.html + +.. _dds_api_0010: + +Token Authentication +==================== + +Application Scenarios +--------------------- + +If you use a token for authentication, you must obtain the user's token and add **X-Auth-Token** to the request message header of the service API when making an API call. + +This section describes how to make an API call for token authentication. + +Invoking an API +--------------- + +#. .. _dds_api_0010__en-us_topic_0110967262_li14280177102918: + + Obtain the following information: + + a. To obtain the IAM endpoint and region name in the message body, see `Regions and Endpoints `__. + b. To obtain the project ID, see :ref:`Obtaining a Project ID `. + +#. .. _dds_api_0010__en-us_topic_0110967262_li109381224173013: + + Send a POST https://*IAM\_Endpoint*/v3/auth/tokens request to obtain the user token. + + .. table:: **Table 1** Header description + + +--------------+----------------------------------------------+-----------+------------------+ + | Name | Description | Mandatory | Example | + +==============+==============================================+===========+==================+ + | Content-Type | Specifies the MIME type of the request body. | Yes | application/json | + +--------------+----------------------------------------------+-----------+------------------+ + + An example request message is as follows: + + .. code-block:: text + + { + "auth": { + "identity": { + "methods": [ + "password" + ], + "password": { + "user": { + "name": "username", + "password": "password", + "domain": { + "name": "domainname" + } + } + } + }, + "scope": { + "project": { + "id": "project_id" + } + } + } + } + + In the preceding command, replace parameter in italic with the actual values. For details, see the "Obtaining a User Token" section in the *Identity and Access Management API Reference*. + + a. **IAM\_Endpoint**: Replace it with the IAM endpoint obtained in :ref:`1 `. + b. **username** and **password**: Replace them respectively with the username and password of the IAM server. + c. **project_id**: Replace it with the project ID obtained in :ref:`1 `. + + After the request is processed, the value of **X-Subject-Token** in the header is the token value. + + .. code-block:: + + X-Subject-Token:MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX... + +#. Run the following command to set the token as an environment variable for subsequent operations: + + **export Token=\ {**\ *X-Subject-Token*\ **}** + + **X-Subject-Token**: Replace it with the token obtained in :ref:`2 `. An example command is as follows: + + **export Token=MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX...** diff --git a/api-ref/source/index.rst b/api-ref/source/index.rst index e3b6621..0afa208 100644 --- a/api-ref/source/index.rst +++ b/api-ref/source/index.rst @@ -2,3 +2,13 @@ Document Database Service - API Reference ========================================= +.. toctree:: + :maxdepth: 1 + + before_you_start + api_overview + environment_preparations/index + api_calling/index + api_description/index + appendix/index + change_history