
# 获取集群升级或切换AZ的详情信息 - UpgradeDetail
#### 功能介绍
为防止数据丢失，并确保在服务中断情况下能降低集群的停机时间，从而增强集群的高可用性，CSS服务支持跨可用区（即多可用区）部署。用户可以在同一个区域内选择两个或三个不同的可用区进行集群部署。由于升级过程时间较长，该接口可以展示当前Elasticsearch/OpenSearch集群升级或者切换可用区时，节点的各个阶段信息。
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-css/css_03_0077.html)。
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限。
- 如果使用角色与策略授权，具体权限要求请参见[权限和授权项](https://support.huaweicloud.com/api-css/css_03_0096.html)。
- 如果使用身份策略授权，需具备如下身份策略权限。
  
  | 授权项                            | 访问级别 | 资源类型（\*为必须） | 条件键                                                                                                                                                                                                                                                                                                                               | 别名 | 依赖的授权项 |
  |:---|:---|:---|:---|:---|:---|
  | css:cluster:listUpgradeCluster | List | cluster \*  | - g:EnterpriseProjectId   - g:ResourceTag/\<tag-key\>    | -  | -      |
     
  
 
#### URI
GET /v1.0/{project_id}/clusters/{cluster_id}/upgrade/detail
表1路径参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| project_id | 是    | String | **参数解释**： 项目ID。获取方法请参见[获取项目ID和名称](https://support.huaweicloud.com/api-css/css_03_0071.html)。 **约束限制**： 不涉及 **取值范围**： 账户的项目ID，长度为32个字符，由小写字母和数字组成。 **默认取值**： 不涉及 |
| cluster_id | 是    | String | **参数解释**： 指定升级的集群的ID。获取方法请参见[获取集群ID](https://support.huaweicloud.com/api-css/css_03_0101.html)。 **约束限制**： 不涉及 **取值范围**： UUID格式，36个字符。 **默认取值**： 不涉及             |
   
表2Query参数 
| 参数          | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|
| offset      | 否    | Integer | **参数解释**： 指定查询集群可用区详情的起始值，默认值为1，即从第1个任务开始查询。 **约束限制**： 不涉及 **取值范围**： 大于或等于1 **默认取值**： 1                                                                                                                                                                                                                                                                                   |
| limit       | 否    | Integer | **参数解释**： 指定查询集群可用区详情的个数，默认值为10，即一次查询10个任务信息。 **约束限制**： 不涉及 **取值范围**： 1-1000 **默认取值**： 10                                                                                                                                                                                                                                                                                 |
| action_mode | 否    | String  | **参数解释**： 查询集群升级详情或者切换可用区详情。 **约束限制**： 不涉及 **取值范围**： - UPGRADING：查询集群升级详情。   - AZ_MIGRATION：查询集群切换可用区详情。    **默认取值**： UPGRADING |
   
#### 请求参数
无
#### 响应参数
**状态码：200**
表3响应Body参数 
| 参数         | 参数类型                                                                                   | 描述                                                                                                                                            |
|:---|:---|:---|
| totalSize  | Integer                                                                                | **参数解释**： 集群升级或者切换可用区的任务总数。 **取值范围**： 不涉及  |
| detailList | Array of [GetUpgradeDetailInfo] objects | **参数解释**： 集群升级或者切换可用区任务详情信息。 **取值范围**： 不涉及 |
   
 表4GetUpgradeDetailInfo 
| 参数                | 参数类型                                                                             | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|
| id                | String                                                                           | **参数解释**： 升级或者切换可用区任务ID。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| startTime         | String                                                                           | **参数解释**： 升级或者切换可用区任务开始时间，格式：yyyy-MM-dd'T'HH:mm:ss。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| endTime           | String                                                                           | **参数解释**： 升级或者切换可用区任务结束时间，格式：yyyy-MM-dd'T'HH:mm:ss。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| status            | String                                                                           | **参数解释**： 升级或者切换可用区任务状态。 **取值范围**： - RUNNING：任务执行中。   - SUCCESS：任务成功。   - FAILED：任务失败。   - PARTIAL_FAILED：部分任务失败。    |
| agencyName        | String                                                                           | **参数解释**： 委托名称，用于授权CSS服务访问和使用ELB资源的IAM委托名称。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| imageInfo         | [GetTargetImageIdDetail] object | **参数解释**： 镜像详情信息。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| totalNodes        | String                                                                           | **参数解释**： 所有需要升级或者切换可用区的节点名称集合。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| completedNodes    | String                                                                           | **参数解释**： 已经完成所有升级操作或切换可用区操作的节点名称集合。 **取值范围**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| currentNodeName   | String                                                                           | **参数解释**： 当前正在升级或者切换可用区的节点名称。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| executeTimes      | String                                                                           | **参数解释**： 集群可用区升级或切换的重试次数。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| migrateParam      | String                                                                           | **参数解释**： 当action_mode为AZ_MIGRATION才有该参数，表示集群切换可用区任务的请求参数。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| finalAzInfoMap    | String                                                                           | **参数解释**： 当action_mode为AZ_MIGRATION才有该参数，表示集群切换可用区后，各节点对应的可用区详情。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| currentNodeDetail | Array of [CurrentNodeDetail] objects | **参数解释**： 当前正在升级或切换可用区的节点任务详情。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| batchSize         | Integer                                                                          | **参数解释**： 同时有多少个节点在迁移数据。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| currentBatchNodes | String                                                                           | **参数解释**： 当前正在迁移数据的节点。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
 表5GetTargetImageIdDetail 
| 参数               | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|
| id               | String  | **参数解释**： 可以升级的目标镜像ID。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| displayName      | String  | **参数解释**： 可以升级的目标镜像名称。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| imageDesc        | String  | **参数解释**： 镜像描述信息。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| datastoreType    | String  | **参数解释**： 集群引擎类型。 **取值范围**： - elasticsearch：基于开源Elasticsearch提供在线分布式搜索、日志统计报表、语义搜索等功能。   - logstash：基于开源Logstash提供数据收集、转换、清洗、解析等功能。   - opensearch：基于开源OpenSearch提供分布式搜索、日志统计报表、语义搜索等功能，是CSS服务Elasticsearch集群的下一代版本。    |
| datastoreVersion | String  | **参数解释**： 镜像引擎版本。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| priority         | Integer | **参数解释**： 目标镜像优先级，数值越大，优先级越高。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   
 表6CurrentNodeDetail 
| 参数        | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|
| order     | Integer | **参数解释**： 升级或切换可用区任务序号。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| name      | String  | **参数解释**： 升级或切换可用区任务名称。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| status    | String  | **参数解释**： 当前集群升级或切换可用区的任务状态。 **取值范围**： - RUNNING：运行中。   - SUCCESS：成功。   - FAILED：失败。   - WAITING：等待。    |
| desc      | String  | **参数解释**： 当前集群升级或切换可用区的任务描述。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| beginTime | String  | **参数解释**： 当前集群升级或切换可用区的任务开始时间，格式yyyy-MM-dd'T'HH:mm:ss。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| endTime   | String  | **参数解释**： 当前集群升级或切换可用区的任务结束时间，格式yyyy-MM-dd'T'HH:mm:ss。 **取值范围**： 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
#### 请求示例
- 查询集群升级详情。
  ```
  GET https://{Endpoint}/v1.0/{project_id}/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/upgrade/detail
  ```
  
- 查询集群切换可用区详情。
  ```
  GET https://{Endpoint}/v1.0/{project_id}/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/upgrade/detail?action_mode=AZ_MIGRATION
  ```
  
 
#### 响应示例
**状态码：200**
请求成功。
- 查询集群升级详情响应示例。
  ```
  {
    "totalSize" : 1,
    "detailList" : [ {
      "id" : "b7ac4c5b-3bda-4feb-a303-eb80f4bce986",
      "startTime" : "2023-01-05T02:23:39",
      "endTime" : "",
      "status" : "RUNNING",
      "agencyName" : "css_test_agency",
      "imageInfo" : {
        "id" : "439b5d30-5968-45df-b088-d030a858522d",
        "displayName" : "7.10.2_22.5.1_1230",
        "imageDesc" : "The latest image of version 7.10.2 will be officially released on December 30, 2022. the stability of the cluster has been optimized. It is recommended that you upgrade to this version.",
        "datastoreType" : "elasticsearch",
        "datastoreVersion" : "7.10.2",
        "priority" : 16
      },
      "totalNodes" : "css-test-ess-esn-1-1,css-test-ess-esn-2-1,css-test-ess-esn-3-1",
      "completedNodes" : "",
      "currentNodeName" : "css-test-ess-esn-1-1",
      "executeTimes" : "1",
      "currentNodeDetail" : [ {
        "order" : 0,
        "name" : "Data migration",
        "status" : "SUCCESS",
        "desc" : "Data is migrated from a node to other nodes in the cluster by running the exclude command.",
        "beginTime" : "2023-01-05T02:23:42",
        "endTime" : "2023-01-05T02:29:51"
      }, {
        "order" : 12,
        "name" : "Task status update",
        "status" : "WAITING",
        "desc" : "The cluster task status is refreshed. If there are no nodes to be replaced, the task is marked as completed. Otherwise, another node starts to be replaced.",
        "beginTime" : "",
        "endTime" : ""
      } ]
    } ]
  }
  ```
  
- 查询集群切换可用区详情响应示例。
  ```
  {
    "totalSize" : 1,
    "detailList" : [ {
      "id" : "8ebe958b-b8c6-4939-b5a7-85aee9468888",
      "startTime" : "2022-12-29T08:32:29",
      "endTime" : "",
      "status" : "RUNNING",
      "agencyName" : "css_test_agency",
      "totalNodes" : "css-test-ess-esn-2-1,css-test-ess-esn-1-1,css-test-ess-esn-3-1",
      "completedNodes" : "css-test-ess-esn-2-1",
      "currentNodeName" : "css-test-ess-esn-1-1",
      "executeTimes" : "1",
      "migrateParam" : "{\"instType\":\"ess\",\"migrateType\":\"az_migrate\",\"sourceAz\":\"cn-north-4a\",\"targetAz\":\"cn-north-4c\"}",
      "finalAzInfoMap" : "{\"cn-north-4c\":\"css-test-ess-esn-2-1,css-test-ess-esn-1-1,css-test-ess-esn-3-1\"}",
      "currentNodeDetail" : [ {
        "order" : 0,
        "name" : "Data migration",
        "status" : "SUCCESS",
        "desc" : "Data is migrated from a node to other nodes in the cluster by running the exclude command.",
        "beginTime" : "2022-12-29T08:41:05",
        "endTime" : "2022-12-29T08:41:23"
      }, {
        "order" : 12,
        "name" : "Task status update",
        "status" : "RUNNING",
        "desc" : "The cluster task status is refreshed. If there are no nodes to be replaced, the task is marked as completed. Otherwise, another node starts to be replaced.",
        "beginTime" : "2023-01-04T06:53:42",
        "endTime" : ""
      } ]
    } ]
  }
  ```
  
 
#### SDK代码示例
SDK代码示例如下。
- [Java]
  ```
  package com.huaweicloud.sdk.test;
  import com.huaweicloud.sdk.core.auth.ICredential;
  import com.huaweicloud.sdk.core.auth.BasicCredentials;
  import com.huaweicloud.sdk.core.exception.ConnectionException;
  import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
  import com.huaweicloud.sdk.core.exception.ServiceResponseException;
  import com.huaweicloud.sdk.css.v1.region.CssRegion;
  import com.huaweicloud.sdk.css.v1.*;
  import com.huaweicloud.sdk.css.v1.model.*;
  public class UpgradeDetailSolution {
      public static void main(String[] args) {
          // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
          // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
          String ak = System.getenv("CLOUD_SDK_AK");
          String sk = System.getenv("CLOUD_SDK_SK");
          String projectId = "{project_id}";
          ICredential auth = new BasicCredentials()
                  .withProjectId(projectId)
                  .withAk(ak)
                  .withSk(sk);
          CssClient client = CssClient.newBuilder()
                  .withCredential(auth)
                  .withRegion(CssRegion.valueOf("<YOUR REGION>"))
                  .build();
          UpgradeDetailRequest request = new UpgradeDetailRequest();
          request.withClusterId("{cluster_id}");
          try {
              UpgradeDetailResponse response = client.upgradeDetail(request);
              System.out.println(response.toString());
          } catch (ConnectionException e) {
              e.printStackTrace();
          } catch (RequestTimeoutException e) {
              e.printStackTrace();
          } catch (ServiceResponseException e) {
              e.printStackTrace();
              System.out.println(e.getHttpStatusCode());
              System.out.println(e.getRequestId());
              System.out.println(e.getErrorCode());
              System.out.println(e.getErrorMsg());
          }
      }
  }
  ```
- [Python]
  ```
  # coding: utf-8
  import os
  from huaweicloudsdkcore.auth.credentials import BasicCredentials
  from huaweicloudsdkcss.v1.region.css_region import CssRegion
  from huaweicloudsdkcore.exceptions import exceptions
  from huaweicloudsdkcss.v1 import *
  if __name__ == "__main__":
      # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
      # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
      ak = os.environ["CLOUD_SDK_AK"]
      sk = os.environ["CLOUD_SDK_SK"]
      projectId = "{project_id}"
      credentials = BasicCredentials(ak, sk, projectId)
      client = CssClient.new_builder() \
          .with_credentials(credentials) \
          .with_region(CssRegion.value_of("<YOUR REGION>")) \
          .build()
      try:
          request = UpgradeDetailRequest()
          request.cluster_id = "{cluster_id}"
          response = client.upgrade_detail(request)
          print(response)
      except exceptions.ClientRequestException as e:
          print(e.status_code)
          print(e.request_id)
          print(e.error_code)
          print(e.error_msg)
  ```
- [Go]
  ```
  package main
  import (
  "fmt"
  "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
      css "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/css/v1"
  "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/css/v1/model"
      region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/css/v1/region"
  )
  func main() {
      // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
      // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
      ak := os.Getenv("CLOUD_SDK_AK")
      sk := os.Getenv("CLOUD_SDK_SK")
      projectId := "{project_id}"
      auth, err := basic.NewCredentialsBuilder().
          WithAk(ak).
          WithSk(sk).
          WithProjectId(projectId).
          SafeBuild()
      if err != nil {
          fmt.Println(err)
          return
      }
      hcClient, err := css.CssClientBuilder().
           WithRegion(region.ValueOf("<YOUR REGION>")).
           WithCredential(auth).
           SafeBuild()
      if err != nil {
          fmt.Println(err)
          return
      }
      client := css.NewCssClient(hcClient)
      request := &model.UpgradeDetailRequest{}
  request.ClusterId = "{cluster_id}"
  response, err := client.UpgradeDetail(request)
  if err == nil {
          fmt.Printf("%+v\n", response)
      } else {
          fmt.Println(err)
      }
  }
  ```
- [更多]
  更多编程语言的SDK代码示例，请参见[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/CSS/sdk?api=UpgradeDetail&version=v1)的代码示例页签，可生成自动对应的SDK代码示例。
#### 状态码
| 状态码 | 描述                                                                                                                    |
|:---|:---|
| 200 | 请求成功。                                                                                                                 |
| 400 | 非法请求。 建议直接修改该请求，不要重试该请求。                                                             |
| 403 | 请求被拒绝访问。 返回该状态码，表明请求能够到达服务端，且服务端能够理解用户请求，但是拒绝做更多的事情，因为该请求被设置为拒绝访问，建议直接修改该请求，不要重试该请求。 |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-css/css_03_0076.html)。
