From 3336ba8df7cfedd504879beca8c39d7c581244f0 Mon Sep 17 00:00:00 2001 From: "Dong, Qiu Jian" Date: Thu, 10 Nov 2022 12:48:59 +0000 Subject: [PATCH] CCE API for v1.23 Reviewed-by: gtema Co-authored-by: Dong, Qiu Jian Co-committed-by: Dong, Qiu Jian --- docs/cce/api-ref/ALL_META.TXT.json | 532 ++++++ docs/cce/api-ref/CLASS.TXT.json | 479 +++++ docs/cce/api-ref/PARAMETERS.txt | 3 + docs/cce/api-ref/ShowQuotas.html | 180 ++ docs/cce/api-ref/cce_02_0083.html | 31 + docs/cce/api-ref/cce_02_0084.html | 321 ++++ docs/cce/api-ref/cce_02_0085.html | 32 + docs/cce/api-ref/cce_02_0086.html | 251 +++ docs/cce/api-ref/cce_02_0087.html | 206 +++ docs/cce/api-ref/cce_02_0092.html | 57 + docs/cce/api-ref/cce_02_0100.html | 19 + docs/cce/api-ref/cce_02_0101.html | 17 + docs/cce/api-ref/cce_02_0103.html | 17 + docs/cce/api-ref/cce_02_0236.html | 1327 ++++++++++++++ docs/cce/api-ref/cce_02_0238.html | 619 +++++++ docs/cce/api-ref/cce_02_0239.html | 227 +++ docs/cce/api-ref/cce_02_0240.html | 338 ++++ docs/cce/api-ref/cce_02_0241.html | 536 ++++++ docs/cce/api-ref/cce_02_0242.html | 1573 +++++++++++++++++ docs/cce/api-ref/cce_02_0243.html | 654 +++++++ docs/cce/api-ref/cce_02_0244.html | 182 ++ docs/cce/api-ref/cce_02_0245.html | 204 +++ docs/cce/api-ref/cce_02_0246.html | 300 ++++ docs/cce/api-ref/cce_02_0247.html | 323 ++++ docs/cce/api-ref/cce_02_0248.html | 383 ++++ docs/cce/api-ref/cce_02_0250.html | 508 ++++++ docs/cce/api-ref/cce_02_0269.html | 994 +++++++++++ docs/cce/api-ref/cce_02_0271.html | 30 + docs/cce/api-ref/cce_02_0272.html | 152 ++ docs/cce/api-ref/cce_02_0273.html | 238 +++ docs/cce/api-ref/cce_02_0320.html | 25 + docs/cce/api-ref/cce_02_0321.html | 542 ++++++ docs/cce/api-ref/cce_02_0322.html | 632 +++++++ docs/cce/api-ref/cce_02_0323.html | 613 +++++++ docs/cce/api-ref/cce_02_0324.html | 103 ++ docs/cce/api-ref/cce_02_0325.html | 461 +++++ docs/cce/api-ref/cce_02_0326.html | 506 ++++++ docs/cce/api-ref/cce_02_0327.html | 208 +++ docs/cce/api-ref/cce_02_0340.html | 12 + docs/cce/api-ref/cce_02_0341.html | 50 + docs/cce/api-ref/cce_02_0342.html | 21 + docs/cce/api-ref/cce_02_0344.html | 24 + docs/cce/api-ref/cce_02_0346.html | 274 +++ docs/cce/api-ref/cce_02_0347.html | 249 +++ docs/cce/api-ref/cce_02_0348.html | 17 + docs/cce/api-ref/cce_02_0349.html | 145 ++ docs/cce/api-ref/cce_02_0350.html | 74 + docs/cce/api-ref/cce_02_0354.html | 1427 +++++++++++++++ docs/cce/api-ref/cce_02_0355.html | 982 ++++++++++ docs/cce/api-ref/cce_02_0356.html | 510 ++++++ docs/cce/api-ref/cce_02_0357.html | 1040 +++++++++++ docs/cce/api-ref/cce_02_0359_0.html | 347 ++++ docs/cce/api-ref/cce_02_0374.html | 107 ++ docs/cce/api-ref/cce_02_0375.html | 105 ++ .../api-ref/en-us_image_0000001121602072.png | Bin 0 -> 52145 bytes docs/cce/api-ref/en-us_image_0203982368.png | Bin 0 -> 32436 bytes docs/cce/api-ref/en-us_image_0203982464.png | Bin 0 -> 75682 bytes docs/cce/api-ref/en-us_image_0203982493.png | Bin 0 -> 32436 bytes docs/cce/api-ref/en-us_image_0227096557.png | Bin 0 -> 12797 bytes docs/cce/api-ref/en-us_image_0233731004.png | Bin 0 -> 60158 bytes docs/cce/api-ref/en-us_image_0233731209.png | Bin 0 -> 4713 bytes docs/cce/api-ref/en-us_image_0233732535.png | Bin 0 -> 12188 bytes docs/cce/api-ref/en-us_image_0233732613.png | Bin 0 -> 16394 bytes docs/cce/api-ref/en-us_image_0279177365.png | Bin 0 -> 8104 bytes docs/cce/api-ref/kubernetesapi.html | 52 + .../public_sys-resources/ExpandCollapse.js | 1 + .../caution_3.0-en-us.png | Bin 0 -> 2752 bytes .../public_sys-resources/commonltr.css | 1 + .../public_sys-resources/commonltr_print.css | 1 + .../public_sys-resources/commonrtl.css | 2 + .../public_sys-resources/danger_3.0-en-us.png | Bin 0 -> 2771 bytes .../api-ref/public_sys-resources/delta.gif | Bin 0 -> 836 bytes .../api-ref/public_sys-resources/deltaend.gif | Bin 0 -> 834 bytes .../public_sys-resources/icon-arrowdn.gif | Bin 0 -> 68 bytes .../public_sys-resources/icon-arrowrt.gif | Bin 0 -> 70 bytes .../public_sys-resources/icon-caution.gif | Bin 0 -> 1086 bytes .../public_sys-resources/icon-danger.gif | Bin 0 -> 1086 bytes .../public_sys-resources/icon-huawei.gif | Bin 0 -> 2767 bytes .../public_sys-resources/icon-note.gif | Bin 0 -> 983 bytes .../public_sys-resources/icon-notice.gif | Bin 0 -> 962 bytes .../api-ref/public_sys-resources/icon-tip.gif | Bin 0 -> 879 bytes .../public_sys-resources/icon-warning.gif | Bin 0 -> 1086 bytes .../public_sys-resources/imageResize.js | 18 + .../public_sys-resources/imageclose.gif | Bin 0 -> 1238 bytes .../public_sys-resources/imageclosehover.gif | Bin 0 -> 1172 bytes .../api-ref/public_sys-resources/imagemax.gif | Bin 0 -> 1267 bytes .../public_sys-resources/imagemaxhover.gif | Bin 0 -> 1199 bytes .../jquery-migrate-1.2.1.min.js | 2 + .../public_sys-resources/jquery-ui.min.js | 6 + .../public_sys-resources/jquery.min.js | 2 + .../jquery.mousewheel.min.js | 7 + .../public_sys-resources/macFFBgHack.png | Bin 0 -> 1014 bytes .../public_sys-resources/note_3.0-en-us.png | Bin 0 -> 1080 bytes .../public_sys-resources/notice_3.0-en-us.png | Bin 0 -> 1672 bytes .../cce/api-ref/public_sys-resources/popup.js | 1 + .../api-ref/public_sys-resources/thickbox.css | 1 + .../api-ref/public_sys-resources/thickbox.js | 8 + .../warning_3.0-en-us.png | Bin 0 -> 3164 bytes .../api-ref/quota_lifecycle_management.html | 16 + 99 files changed, 19325 insertions(+) create mode 100644 docs/cce/api-ref/ALL_META.TXT.json create mode 100644 docs/cce/api-ref/CLASS.TXT.json create mode 100644 docs/cce/api-ref/PARAMETERS.txt create mode 100644 docs/cce/api-ref/ShowQuotas.html create mode 100644 docs/cce/api-ref/cce_02_0083.html create mode 100644 docs/cce/api-ref/cce_02_0084.html create mode 100644 docs/cce/api-ref/cce_02_0085.html create mode 100644 docs/cce/api-ref/cce_02_0086.html create mode 100644 docs/cce/api-ref/cce_02_0087.html create mode 100644 docs/cce/api-ref/cce_02_0092.html create mode 100644 docs/cce/api-ref/cce_02_0100.html create mode 100644 docs/cce/api-ref/cce_02_0101.html create mode 100644 docs/cce/api-ref/cce_02_0103.html create mode 100644 docs/cce/api-ref/cce_02_0236.html create mode 100644 docs/cce/api-ref/cce_02_0238.html create mode 100644 docs/cce/api-ref/cce_02_0239.html create mode 100644 docs/cce/api-ref/cce_02_0240.html create mode 100644 docs/cce/api-ref/cce_02_0241.html create mode 100644 docs/cce/api-ref/cce_02_0242.html create mode 100644 docs/cce/api-ref/cce_02_0243.html create mode 100644 docs/cce/api-ref/cce_02_0244.html create mode 100644 docs/cce/api-ref/cce_02_0245.html create mode 100644 docs/cce/api-ref/cce_02_0246.html create mode 100644 docs/cce/api-ref/cce_02_0247.html create mode 100644 docs/cce/api-ref/cce_02_0248.html create mode 100644 docs/cce/api-ref/cce_02_0250.html create mode 100644 docs/cce/api-ref/cce_02_0269.html create mode 100644 docs/cce/api-ref/cce_02_0271.html create mode 100644 docs/cce/api-ref/cce_02_0272.html create mode 100644 docs/cce/api-ref/cce_02_0273.html create mode 100644 docs/cce/api-ref/cce_02_0320.html create mode 100644 docs/cce/api-ref/cce_02_0321.html create mode 100644 docs/cce/api-ref/cce_02_0322.html create mode 100644 docs/cce/api-ref/cce_02_0323.html create mode 100644 docs/cce/api-ref/cce_02_0324.html create mode 100644 docs/cce/api-ref/cce_02_0325.html create mode 100644 docs/cce/api-ref/cce_02_0326.html create mode 100644 docs/cce/api-ref/cce_02_0327.html create mode 100644 docs/cce/api-ref/cce_02_0340.html create mode 100644 docs/cce/api-ref/cce_02_0341.html create mode 100644 docs/cce/api-ref/cce_02_0342.html create mode 100644 docs/cce/api-ref/cce_02_0344.html create mode 100644 docs/cce/api-ref/cce_02_0346.html create mode 100644 docs/cce/api-ref/cce_02_0347.html create mode 100644 docs/cce/api-ref/cce_02_0348.html create mode 100644 docs/cce/api-ref/cce_02_0349.html create mode 100644 docs/cce/api-ref/cce_02_0350.html create mode 100644 docs/cce/api-ref/cce_02_0354.html create mode 100644 docs/cce/api-ref/cce_02_0355.html create mode 100644 docs/cce/api-ref/cce_02_0356.html create mode 100644 docs/cce/api-ref/cce_02_0357.html create mode 100644 docs/cce/api-ref/cce_02_0359_0.html create mode 100644 docs/cce/api-ref/cce_02_0374.html create mode 100644 docs/cce/api-ref/cce_02_0375.html create mode 100644 docs/cce/api-ref/en-us_image_0000001121602072.png create mode 100644 docs/cce/api-ref/en-us_image_0203982368.png create mode 100644 docs/cce/api-ref/en-us_image_0203982464.png create mode 100644 docs/cce/api-ref/en-us_image_0203982493.png create mode 100644 docs/cce/api-ref/en-us_image_0227096557.png create mode 100644 docs/cce/api-ref/en-us_image_0233731004.png create mode 100644 docs/cce/api-ref/en-us_image_0233731209.png create mode 100644 docs/cce/api-ref/en-us_image_0233732535.png create mode 100644 docs/cce/api-ref/en-us_image_0233732613.png create mode 100644 docs/cce/api-ref/en-us_image_0279177365.png create mode 100644 docs/cce/api-ref/kubernetesapi.html create mode 100644 docs/cce/api-ref/public_sys-resources/ExpandCollapse.js create mode 100644 docs/cce/api-ref/public_sys-resources/caution_3.0-en-us.png create mode 100644 docs/cce/api-ref/public_sys-resources/commonltr.css create mode 100644 docs/cce/api-ref/public_sys-resources/commonltr_print.css create mode 100644 docs/cce/api-ref/public_sys-resources/commonrtl.css create mode 100644 docs/cce/api-ref/public_sys-resources/danger_3.0-en-us.png create mode 100644 docs/cce/api-ref/public_sys-resources/delta.gif create mode 100644 docs/cce/api-ref/public_sys-resources/deltaend.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-arrowdn.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-arrowrt.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-caution.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-danger.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-huawei.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-note.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-notice.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-tip.gif create mode 100644 docs/cce/api-ref/public_sys-resources/icon-warning.gif create mode 100644 docs/cce/api-ref/public_sys-resources/imageResize.js create mode 100644 docs/cce/api-ref/public_sys-resources/imageclose.gif create mode 100644 docs/cce/api-ref/public_sys-resources/imageclosehover.gif create mode 100644 docs/cce/api-ref/public_sys-resources/imagemax.gif create mode 100644 docs/cce/api-ref/public_sys-resources/imagemaxhover.gif create mode 100644 docs/cce/api-ref/public_sys-resources/jquery-migrate-1.2.1.min.js create mode 100644 docs/cce/api-ref/public_sys-resources/jquery-ui.min.js create mode 100644 docs/cce/api-ref/public_sys-resources/jquery.min.js create mode 100644 docs/cce/api-ref/public_sys-resources/jquery.mousewheel.min.js create mode 100644 docs/cce/api-ref/public_sys-resources/macFFBgHack.png create mode 100644 docs/cce/api-ref/public_sys-resources/note_3.0-en-us.png create mode 100644 docs/cce/api-ref/public_sys-resources/notice_3.0-en-us.png create mode 100644 docs/cce/api-ref/public_sys-resources/popup.js create mode 100644 docs/cce/api-ref/public_sys-resources/thickbox.css create mode 100644 docs/cce/api-ref/public_sys-resources/thickbox.js create mode 100644 docs/cce/api-ref/public_sys-resources/warning_3.0-en-us.png create mode 100644 docs/cce/api-ref/quota_lifecycle_management.html diff --git a/docs/cce/api-ref/ALL_META.TXT.json b/docs/cce/api-ref/ALL_META.TXT.json new file mode 100644 index 000000000..6312292fa --- /dev/null +++ b/docs/cce/api-ref/ALL_META.TXT.json @@ -0,0 +1,532 @@ +[ + { + "uri":"cce_02_0344.html", + "product_code":"cce", + "code":"1", + "des":"Cloud APIs comply with the RESTful API design principles. REST-based web services are organized into resources. Each resource is identified by one or more Uniform Resourc", + "doc_type":"api2", + "kw":"API Usage Guidelines,API Reference", + "title":"API Usage Guidelines", + "githuburl":"" + }, + { + "uri":"cce_02_0103.html", + "product_code":"cce", + "code":"2", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"APIs", + "title":"APIs", + "githuburl":"" + }, + { + "uri":"cce_02_0348.html", + "product_code":"cce", + "code":"3", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"API Version Query", + "title":"API Version Query", + "githuburl":"" + }, + { + "uri":"cce_02_0349.html", + "product_code":"cce", + "code":"4", + "des":"This API is used to query all available API versions.GET /N/AResponse parameters:Table 1 describes the response parameters.Example response:Table 3 describes the status c", + "doc_type":"api2", + "kw":"Querying All API Versions,API Version Query,API Reference", + "title":"Querying All API Versions", + "githuburl":"" + }, + { + "uri":"cce_02_0350.html", + "product_code":"cce", + "code":"5", + "des":"This API is used to query information about API v3.GET /v3N/AResponse parameters:Table 1 describes the response parameters.Example response:Table 2 describes the status c", + "doc_type":"api2", + "kw":"Querying Information About API v3,API Version Query,API Reference", + "title":"Querying Information About API v3", + "githuburl":"" + }, + { + "uri":"cce_02_0092.html", + "product_code":"cce", + "code":"6", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"Cluster Management", + "title":"Cluster Management", + "githuburl":"" + }, + { + "uri":"cce_02_0236.html", + "product_code":"cce", + "code":"7", + "des":"This API is used to create an empty cluster, which has only master nodes but do not have worker nodes. After creating a cluster by calling this API, you can add nodes to ", + "doc_type":"api2", + "kw":"Creating a Cluster,Cluster Management,API Reference", + "title":"Creating a Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0238.html", + "product_code":"cce", + "code":"8", + "des":"This API is used to obtain details about a specified cluster.GET /api/v3/projects/{project_id}/clusters/{cluster_id}Table 1 describes the parameters of this API.Request p", + "doc_type":"api2", + "kw":"Reading a Specified Cluster,Cluster Management,API Reference", + "title":"Reading a Specified Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0239.html", + "product_code":"cce", + "code":"9", + "des":"This API is used to obtain details about all clusters in a specified project.GET /api/v3/projects/{project_id}/clustersTable 1 describes the parameters of this API.Reques", + "doc_type":"api2", + "kw":"Listing Clusters in a Specified Project,Cluster Management,API Reference", + "title":"Listing Clusters in a Specified Project", + "githuburl":"" + }, + { + "uri":"cce_02_0240.html", + "product_code":"cce", + "code":"10", + "des":"This API is used to update information about a specified cluster.PUT /api/v3/projects/{project_id}/clusters/{cluster_id}Table 1 describes the parameters of this API.Reque", + "doc_type":"api2", + "kw":"Updating a Specified Cluster,Cluster Management,API Reference", + "title":"Updating a Specified Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0241.html", + "product_code":"cce", + "code":"11", + "des":"This API is used to delete a specified cluster.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that ", + "doc_type":"api2", + "kw":"Deleting a Specified Cluster,Cluster Management,API Reference", + "title":"Deleting a Specified Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0374.html", + "product_code":"cce", + "code":"12", + "des":"This API is used to hibernate a running cluster.After a cluster is hibernated, resources such as workloads cannot be created or managed in the cluster.POST /api/v3/projec", + "doc_type":"api2", + "kw":"Hibernating a Cluster,Cluster Management,API Reference", + "title":"Hibernating a Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0375.html", + "product_code":"cce", + "code":"13", + "des":"This API is used to wake up a hibernated cluster.POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/awakeNoneNoneNoneSee Error Codes.", + "doc_type":"api2", + "kw":"Waking Up a Cluster,Cluster Management,API Reference", + "title":"Waking Up a Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0248.html", + "product_code":"cce", + "code":"14", + "des":"This API is used to obtain certificates of a specified cluster in form of kubeconfig file.POST /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercertTable 1 desc", + "doc_type":"api2", + "kw":"kubeconfig,Obtaining Cluster Certificates,Cluster Management,API Reference", + "title":"Obtaining Cluster Certificates", + "githuburl":"" + }, + { + "uri":"cce_02_0359_0.html", + "product_code":"cce", + "code":"15", + "des":"This API is used to obtain certificates of a specified cluster in form of kubeconfig file.GET /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercertTable 1 descr", + "doc_type":"api2", + "kw":"kubeconfig,Obtaining Cluster Certificates (Deprecated),Cluster Management,API Reference", + "title":"Obtaining Cluster Certificates (Deprecated)", + "githuburl":"" + }, + { + "uri":"cce_02_0242.html", + "product_code":"cce", + "code":"16", + "des":"This API is used to create a node in a specified cluster.POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodesTable 1 describes the parameters of the API.Request", + "doc_type":"api2", + "kw":"Creating a Node,Cluster Management,API Reference", + "title":"Creating a Node", + "githuburl":"" + }, + { + "uri":"cce_02_0243.html", + "product_code":"cce", + "code":"17", + "des":"This API is used to obtain details about a node with a specified node ID.GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}Table 1 describes the para", + "doc_type":"api2", + "kw":"Reading a Specified Node,Cluster Management,API Reference", + "title":"Reading a Specified Node", + "githuburl":"" + }, + { + "uri":"cce_02_0244.html", + "product_code":"cce", + "code":"18", + "des":"This API is used to obtain details about all nodes in a cluster with a specified cluster ID.GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodesTable 1 describes", + "doc_type":"api2", + "kw":"Listing All Nodes in a Cluster,Cluster Management,API Reference", + "title":"Listing All Nodes in a Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0245.html", + "product_code":"cce", + "code":"19", + "des":"This API is used to update information about a specified node.PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}Table 1 describes the parameters of t", + "doc_type":"api2", + "kw":"Updating a Specified Node,Cluster Management,API Reference", + "title":"Updating a Specified Node", + "githuburl":"" + }, + { + "uri":"cce_02_0246.html", + "product_code":"cce", + "code":"20", + "des":"This API is used to delete a specified node.DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}Table 1 describes the parameters of the API.Request ", + "doc_type":"api2", + "kw":"Deleting a Node,Cluster Management,API Reference", + "title":"Deleting a Node", + "githuburl":"" + }, + { + "uri":"cce_02_0247.html", + "product_code":"cce", + "code":"21", + "des":"This API is used to query the progress of a job with a specified job ID returned after a job request is issued.The URL for cluster management is in the format of https://", + "doc_type":"api2", + "kw":"Reading Job Progress,Cluster Management,API Reference", + "title":"Reading Job Progress", + "githuburl":"" + }, + { + "uri":"cce_02_0347.html", + "product_code":"cce", + "code":"22", + "des":"This API is used to query the access information of a specified cluster.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates", + "doc_type":"api2", + "kw":"Querying the Access Information of a Specified Cluster,Cluster Management,API Reference", + "title":"Querying the Access Information of a Specified Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0346.html", + "product_code":"cce", + "code":"23", + "des":"This API is used to modify the access information of a specified cluster.PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/mastereipTable 1 describes the parameters", + "doc_type":"api2", + "kw":"Modifying the Access Information of a Specified Cluster,Cluster Management,API Reference", + "title":"Modifying the Access Information of a Specified Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0354.html", + "product_code":"cce", + "code":"24", + "des":"This API is used to create a node pool in a specified cluster.POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepoolsTable 1 describes the parameters of the AP", + "doc_type":"api2", + "kw":"Creating a Node Pool,Cluster Management,API Reference", + "title":"Creating a Node Pool", + "githuburl":"" + }, + { + "uri":"cce_02_0355.html", + "product_code":"cce", + "code":"25", + "des":"This API is used to query a specified node pool.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that", + "doc_type":"api2", + "kw":"Querying a Specified Node Pool,Cluster Management,API Reference", + "title":"Querying a Specified Node Pool", + "githuburl":"" + }, + { + "uri":"cce_02_0356.html", + "product_code":"cce", + "code":"26", + "des":"This API is used to update a specified node pool.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, tha", + "doc_type":"api2", + "kw":"Updating a Specified Node Pool,Cluster Management,API Reference", + "title":"Updating a Specified Node Pool", + "githuburl":"" + }, + { + "uri":"cce_02_0269.html", + "product_code":"cce", + "code":"27", + "des":"This API is used to obtain information about all node pools in a specified cluster.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, ur", + "doc_type":"api2", + "kw":"Listing All Node Pools in a Specified Cluster,Cluster Management,API Reference", + "title":"Listing All Node Pools in a Specified Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0357.html", + "product_code":"cce", + "code":"28", + "des":"This API is used to delete a specified node pool.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, tha", + "doc_type":"api2", + "kw":"Deleting a Node Pool,Cluster Management,API Reference", + "title":"Deleting a Node Pool", + "githuburl":"" + }, + { + "uri":"cce_02_0320.html", + "product_code":"cce", + "code":"29", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"Add-on Management", + "title":"Add-on Management", + "githuburl":"" + }, + { + "uri":"cce_02_0322.html", + "product_code":"cce", + "code":"30", + "des":"This API is used to install an add-on instance by using the add-on template. One or more instances will be created for the installed add-on.The URL for add-on management ", + "doc_type":"api2", + "kw":"Installing an Add-on Instance,Add-on Management,API Reference", + "title":"Installing an Add-on Instance", + "githuburl":"" + }, + { + "uri":"cce_02_0321.html", + "product_code":"cce", + "code":"31", + "des":"This API is used to query add-on information.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the clu", + "doc_type":"api2", + "kw":"Reading Add-on Templates,Add-on Management,API Reference", + "title":"Reading Add-on Templates", + "githuburl":"" + }, + { + "uri":"cce_02_0323.html", + "product_code":"cce", + "code":"32", + "des":"This API is used to update an add-on instance.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cl", + "doc_type":"api2", + "kw":"Updating an Add-on Instance,Add-on Management,API Reference", + "title":"Updating an Add-on Instance", + "githuburl":"" + }, + { + "uri":"cce_02_0324.html", + "product_code":"cce", + "code":"33", + "des":"This API is used to delete an add-on instance.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cl", + "doc_type":"api2", + "kw":"Deleting an Add-on Instance,Add-on Management,API Reference", + "title":"Deleting an Add-on Instance", + "githuburl":"" + }, + { + "uri":"cce_02_0325.html", + "product_code":"cce", + "code":"34", + "des":"This API is used to obtain details about an add-on instance.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} in", + "doc_type":"api2", + "kw":"Reading an Add-on Instance,Add-on Management,API Reference", + "title":"Reading an Add-on Instance", + "githuburl":"" + }, + { + "uri":"cce_02_0326.html", + "product_code":"cce", + "code":"35", + "des":"This API is used to list all add-on instances in the cluster.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} i", + "doc_type":"api2", + "kw":"Listing Add-on Instances,Add-on Management,API Reference", + "title":"Listing Add-on Instances", + "githuburl":"" + }, + { + "uri":"quota_lifecycle_management.html", + "product_code":"cce", + "code":"36", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"Quota Management", + "title":"Quota Management", + "githuburl":"" + }, + { + "uri":"ShowQuotas.html", + "product_code":"cce", + "code":"37", + "des":"This API is used to query CCE resource quotas.GET /api/v3/projects/{project_id}/quotasStatus code: 200NoneStatus code: 200The resource quotas are obtained successfully.Se", + "doc_type":"api2", + "kw":"Querying Resource Quotas,Quota Management,API Reference", + "title":"Querying Resource Quotas", + "githuburl":"" + }, + { + "uri":"cce_02_0340.html", + "product_code":"cce", + "code":"38", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"Kubernetes APIs", + "title":"Kubernetes APIs", + "githuburl":"" + }, + { + "uri":"kubernetesapi.html", + "product_code":"cce", + "code":"39", + "des":"You can use Kubernetes native APIs to manage your Kubernetes clusters. For details, see Kubernetes API Concepts.To find detailed API definitions for different Kubernetes ", + "doc_type":"api2", + "kw":"Overview,Kubernetes APIs,API Reference", + "title":"Overview", + "githuburl":"" + }, + { + "uri":"cce_02_0327.html", + "product_code":"cce", + "code":"40", + "des":"This chapter describes fine-grained permissions management for your CCE. If your cloud account does not need individual IAM users, then you may skip over this chapter.A p", + "doc_type":"api2", + "kw":"Permissions Policies and Supported Actions,API Reference", + "title":"Permissions Policies and Supported Actions", + "githuburl":"" + }, + { + "uri":"cce_02_0083.html", + "product_code":"cce", + "code":"41", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"Appendix", + "title":"Appendix", + "githuburl":"" + }, + { + "uri":"cce_02_0085.html", + "product_code":"cce", + "code":"42", + "des":"Kubernetes APIs use the HTTP header \"Content-Type\" to distinguish between patch request method operations.Currently, three types of patch request method operations are su", + "doc_type":"api2", + "kw":"Patch Request Method Operation Description,Appendix,API Reference", + "title":"Patch Request Method Operation Description", + "githuburl":"" + }, + { + "uri":"cce_02_0086.html", + "product_code":"cce", + "code":"43", + "des":"This section provides examples of Merge Patch and Strategic Merge Patch method operations.By way of example, Merge Patch and Strategic Merge Patch method operations are p", + "doc_type":"api2", + "kw":"Patch Request Method Operation Example,Appendix,API Reference", + "title":"Patch Request Method Operation Example", + "githuburl":"" + }, + { + "uri":"cce_02_0084.html", + "product_code":"cce", + "code":"44", + "des":"Table 1 describes the status codes.", + "doc_type":"api2", + "kw":"Status Code,Appendix,API Reference", + "title":"Status Code", + "githuburl":"" + }, + { + "uri":"cce_02_0250.html", + "product_code":"cce", + "code":"45", + "des":"If an error occurs in API calling, no result is returned. Identify the cause based on the error code of each API. If an error occurs in API calling, HTTP status code 4xx ", + "doc_type":"api2", + "kw":"Error Codes,Appendix,API Reference", + "title":"Error Codes", + "githuburl":"" + }, + { + "uri":"cce_02_0341.html", + "product_code":"cce", + "code":"46", + "des":"You can obtain the project ID by calling the API used to query project information based on the specified criteria.The API used to obtain a project ID is GET https://{End", + "doc_type":"api2", + "kw":"Obtaining a Project ID,Appendix,API Reference", + "title":"Obtaining a Project ID", + "githuburl":"" + }, + { + "uri":"cce_02_0342.html", + "product_code":"cce", + "code":"47", + "des":"An account ID is required for some URLs when an API is called. To obtain an account ID, perform the following operations:On the My Credentials page, view account IDs in t", + "doc_type":"api2", + "kw":"Obtaining the Account ID,Appendix,API Reference", + "title":"Obtaining the Account ID", + "githuburl":"" + }, + { + "uri":"cce_02_0087.html", + "product_code":"cce", + "code":"48", + "des":"This section describes how to use the Elastic Load Balancer (ELB) in a cluster created by CCE.Create a Service. Before enabling sticky session, ensure that the following ", + "doc_type":"api2", + "kw":"How to Use ELB in a Cluster,Appendix,API Reference", + "title":"How to Use ELB in a Cluster", + "githuburl":"" + }, + { + "uri":"cce_02_0271.html", + "product_code":"cce", + "code":"49", + "des":"If you are using Google Chrome, press F12. On the pane displayed on the right, click the Network tab. Enter jobs in the Filter text box to filter the job list. Select a j", + "doc_type":"api2", + "kw":"How to Obtain Parameters in the API URI,Appendix,API Reference", + "title":"How to Obtain Parameters in the API URI", + "githuburl":"" + }, + { + "uri":"cce_02_0272.html", + "product_code":"cce", + "code":"50", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"API Permissions,Appendix,API Reference", + "title":"API Permissions", + "githuburl":"" + }, + { + "uri":"cce_02_0100.html", + "product_code":"cce", + "code":"51", + "des":"To provide a secure and isolated network environment for CCE, create a VPC before creating a cluster.If you have already created a VPC, you do not need to create it again", + "doc_type":"api2", + "kw":"Creating a VPC and Subnet,Appendix,API Reference", + "title":"Creating a VPC and Subnet", + "githuburl":"" + }, + { + "uri":"cce_02_0101.html", + "product_code":"cce", + "code":"52", + "des":"Create a key pair before you create a container cluster. Key pairs are used for user identity authentication upon login to a node.If you have already created a key pair, ", + "doc_type":"api2", + "kw":"Creating a Key Pair,Appendix,API Reference", + "title":"Creating a Key Pair", + "githuburl":"" + }, + { + "uri":"cce_02_0273.html", + "product_code":"cce", + "code":"53", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api2", + "kw":"Change History,API Reference", + "title":"Change History", + "githuburl":"" + } +] \ No newline at end of file diff --git a/docs/cce/api-ref/CLASS.TXT.json b/docs/cce/api-ref/CLASS.TXT.json new file mode 100644 index 000000000..47ee557d0 --- /dev/null +++ b/docs/cce/api-ref/CLASS.TXT.json @@ -0,0 +1,479 @@ +[ + { + "desc":"Cloud APIs comply with the RESTful API design principles. REST-based web services are organized into resources. Each resource is identified by one or more Uniform Resourc", + "product_code":"cce", + "title":"API Usage Guidelines", + "uri":"cce_02_0344.html", + "doc_type":"api2", + "p_code":"", + "code":"1" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"APIs", + "uri":"cce_02_0103.html", + "doc_type":"api2", + "p_code":"", + "code":"2" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"API Version Query", + "uri":"cce_02_0348.html", + "doc_type":"api2", + "p_code":"2", + "code":"3" + }, + { + "desc":"This API is used to query all available API versions.GET /N/AResponse parameters:Table 1 describes the response parameters.Example response:Table 3 describes the status c", + "product_code":"cce", + "title":"Querying All API Versions", + "uri":"cce_02_0349.html", + "doc_type":"api2", + "p_code":"3", + "code":"4" + }, + { + "desc":"This API is used to query information about API v3.GET /v3N/AResponse parameters:Table 1 describes the response parameters.Example response:Table 2 describes the status c", + "product_code":"cce", + "title":"Querying Information About API v3", + "uri":"cce_02_0350.html", + "doc_type":"api2", + "p_code":"3", + "code":"5" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"Cluster Management", + "uri":"cce_02_0092.html", + "doc_type":"api2", + "p_code":"2", + "code":"6" + }, + { + "desc":"This API is used to create an empty cluster, which has only master nodes but do not have worker nodes. After creating a cluster by calling this API, you can add nodes to ", + "product_code":"cce", + "title":"Creating a Cluster", + "uri":"cce_02_0236.html", + "doc_type":"api2", + "p_code":"6", + "code":"7" + }, + { + "desc":"This API is used to obtain details about a specified cluster.GET /api/v3/projects/{project_id}/clusters/{cluster_id}Table 1 describes the parameters of this API.Request p", + "product_code":"cce", + "title":"Reading a Specified Cluster", + "uri":"cce_02_0238.html", + "doc_type":"api2", + "p_code":"6", + "code":"8" + }, + { + "desc":"This API is used to obtain details about all clusters in a specified project.GET /api/v3/projects/{project_id}/clustersTable 1 describes the parameters of this API.Reques", + "product_code":"cce", + "title":"Listing Clusters in a Specified Project", + "uri":"cce_02_0239.html", + "doc_type":"api2", + "p_code":"6", + "code":"9" + }, + { + "desc":"This API is used to update information about a specified cluster.PUT /api/v3/projects/{project_id}/clusters/{cluster_id}Table 1 describes the parameters of this API.Reque", + "product_code":"cce", + "title":"Updating a Specified Cluster", + "uri":"cce_02_0240.html", + "doc_type":"api2", + "p_code":"6", + "code":"10" + }, + { + "desc":"This API is used to delete a specified cluster.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that ", + "product_code":"cce", + "title":"Deleting a Specified Cluster", + "uri":"cce_02_0241.html", + "doc_type":"api2", + "p_code":"6", + "code":"11" + }, + { + "desc":"This API is used to hibernate a running cluster.After a cluster is hibernated, resources such as workloads cannot be created or managed in the cluster.POST /api/v3/projec", + "product_code":"cce", + "title":"Hibernating a Cluster", + "uri":"cce_02_0374.html", + "doc_type":"api2", + "p_code":"6", + "code":"12" + }, + { + "desc":"This API is used to wake up a hibernated cluster.POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/awakeNoneNoneNoneSee Error Codes.", + "product_code":"cce", + "title":"Waking Up a Cluster", + "uri":"cce_02_0375.html", + "doc_type":"api2", + "p_code":"6", + "code":"13" + }, + { + "desc":"This API is used to obtain certificates of a specified cluster in form of kubeconfig file.POST /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercertTable 1 desc", + "product_code":"cce", + "title":"Obtaining Cluster Certificates", + "uri":"cce_02_0248.html", + "doc_type":"api2", + "p_code":"6", + "code":"14" + }, + { + "desc":"This API is used to obtain certificates of a specified cluster in form of kubeconfig file.GET /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercertTable 1 descr", + "product_code":"cce", + "title":"Obtaining Cluster Certificates (Deprecated)", + "uri":"cce_02_0359_0.html", + "doc_type":"api2", + "p_code":"6", + "code":"15" + }, + { + "desc":"This API is used to create a node in a specified cluster.POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodesTable 1 describes the parameters of the API.Request", + "product_code":"cce", + "title":"Creating a Node", + "uri":"cce_02_0242.html", + "doc_type":"api2", + "p_code":"6", + "code":"16" + }, + { + "desc":"This API is used to obtain details about a node with a specified node ID.GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}Table 1 describes the para", + "product_code":"cce", + "title":"Reading a Specified Node", + "uri":"cce_02_0243.html", + "doc_type":"api2", + "p_code":"6", + "code":"17" + }, + { + "desc":"This API is used to obtain details about all nodes in a cluster with a specified cluster ID.GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodesTable 1 describes", + "product_code":"cce", + "title":"Listing All Nodes in a Cluster", + "uri":"cce_02_0244.html", + "doc_type":"api2", + "p_code":"6", + "code":"18" + }, + { + "desc":"This API is used to update information about a specified node.PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}Table 1 describes the parameters of t", + "product_code":"cce", + "title":"Updating a Specified Node", + "uri":"cce_02_0245.html", + "doc_type":"api2", + "p_code":"6", + "code":"19" + }, + { + "desc":"This API is used to delete a specified node.DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}Table 1 describes the parameters of the API.Request ", + "product_code":"cce", + "title":"Deleting a Node", + "uri":"cce_02_0246.html", + "doc_type":"api2", + "p_code":"6", + "code":"20" + }, + { + "desc":"This API is used to query the progress of a job with a specified job ID returned after a job request is issued.The URL for cluster management is in the format of https://", + "product_code":"cce", + "title":"Reading Job Progress", + "uri":"cce_02_0247.html", + "doc_type":"api2", + "p_code":"6", + "code":"21" + }, + { + "desc":"This API is used to query the access information of a specified cluster.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates", + "product_code":"cce", + "title":"Querying the Access Information of a Specified Cluster", + "uri":"cce_02_0347.html", + "doc_type":"api2", + "p_code":"6", + "code":"22" + }, + { + "desc":"This API is used to modify the access information of a specified cluster.PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/mastereipTable 1 describes the parameters", + "product_code":"cce", + "title":"Modifying the Access Information of a Specified Cluster", + "uri":"cce_02_0346.html", + "doc_type":"api2", + "p_code":"6", + "code":"23" + }, + { + "desc":"This API is used to create a node pool in a specified cluster.POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepoolsTable 1 describes the parameters of the AP", + "product_code":"cce", + "title":"Creating a Node Pool", + "uri":"cce_02_0354.html", + "doc_type":"api2", + "p_code":"6", + "code":"24" + }, + { + "desc":"This API is used to query a specified node pool.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that", + "product_code":"cce", + "title":"Querying a Specified Node Pool", + "uri":"cce_02_0355.html", + "doc_type":"api2", + "p_code":"6", + "code":"25" + }, + { + "desc":"This API is used to update a specified node pool.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, tha", + "product_code":"cce", + "title":"Updating a Specified Node Pool", + "uri":"cce_02_0356.html", + "doc_type":"api2", + "p_code":"6", + "code":"26" + }, + { + "desc":"This API is used to obtain information about all node pools in a specified cluster.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, ur", + "product_code":"cce", + "title":"Listing All Node Pools in a Specified Cluster", + "uri":"cce_02_0269.html", + "doc_type":"api2", + "p_code":"6", + "code":"27" + }, + { + "desc":"This API is used to delete a specified node pool.The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, tha", + "product_code":"cce", + "title":"Deleting a Node Pool", + "uri":"cce_02_0357.html", + "doc_type":"api2", + "p_code":"6", + "code":"28" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"Add-on Management", + "uri":"cce_02_0320.html", + "doc_type":"api2", + "p_code":"2", + "code":"29" + }, + { + "desc":"This API is used to install an add-on instance by using the add-on template. One or more instances will be created for the installed add-on.The URL for add-on management ", + "product_code":"cce", + "title":"Installing an Add-on Instance", + "uri":"cce_02_0322.html", + "doc_type":"api2", + "p_code":"29", + "code":"30" + }, + { + "desc":"This API is used to query add-on information.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the clu", + "product_code":"cce", + "title":"Reading Add-on Templates", + "uri":"cce_02_0321.html", + "doc_type":"api2", + "p_code":"29", + "code":"31" + }, + { + "desc":"This API is used to update an add-on instance.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cl", + "product_code":"cce", + "title":"Updating an Add-on Instance", + "uri":"cce_02_0323.html", + "doc_type":"api2", + "p_code":"29", + "code":"32" + }, + { + "desc":"This API is used to delete an add-on instance.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cl", + "product_code":"cce", + "title":"Deleting an Add-on Instance", + "uri":"cce_02_0324.html", + "doc_type":"api2", + "p_code":"29", + "code":"33" + }, + { + "desc":"This API is used to obtain details about an add-on instance.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} in", + "product_code":"cce", + "title":"Reading an Add-on Instance", + "uri":"cce_02_0325.html", + "doc_type":"api2", + "p_code":"29", + "code":"34" + }, + { + "desc":"This API is used to list all add-on instances in the cluster.The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} i", + "product_code":"cce", + "title":"Listing Add-on Instances", + "uri":"cce_02_0326.html", + "doc_type":"api2", + "p_code":"29", + "code":"35" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"Quota Management", + "uri":"quota_lifecycle_management.html", + "doc_type":"api2", + "p_code":"2", + "code":"36" + }, + { + "desc":"This API is used to query CCE resource quotas.GET /api/v3/projects/{project_id}/quotasStatus code: 200NoneStatus code: 200The resource quotas are obtained successfully.Se", + "product_code":"cce", + "title":"Querying Resource Quotas", + "uri":"ShowQuotas.html", + "doc_type":"api2", + "p_code":"36", + "code":"37" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"Kubernetes APIs", + "uri":"cce_02_0340.html", + "doc_type":"api2", + "p_code":"", + "code":"38" + }, + { + "desc":"You can use Kubernetes native APIs to manage your Kubernetes clusters. For details, see Kubernetes API Concepts.To find detailed API definitions for different Kubernetes ", + "product_code":"cce", + "title":"Overview", + "uri":"kubernetesapi.html", + "doc_type":"api2", + "p_code":"38", + "code":"39" + }, + { + "desc":"This chapter describes fine-grained permissions management for your CCE. If your cloud account does not need individual IAM users, then you may skip over this chapter.A p", + "product_code":"cce", + "title":"Permissions Policies and Supported Actions", + "uri":"cce_02_0327.html", + "doc_type":"api2", + "p_code":"", + "code":"40" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"Appendix", + "uri":"cce_02_0083.html", + "doc_type":"api2", + "p_code":"", + "code":"41" + }, + { + "desc":"Kubernetes APIs use the HTTP header \"Content-Type\" to distinguish between patch request method operations.Currently, three types of patch request method operations are su", + "product_code":"cce", + "title":"Patch Request Method Operation Description", + "uri":"cce_02_0085.html", + "doc_type":"api2", + "p_code":"41", + "code":"42" + }, + { + "desc":"This section provides examples of Merge Patch and Strategic Merge Patch method operations.By way of example, Merge Patch and Strategic Merge Patch method operations are p", + "product_code":"cce", + "title":"Patch Request Method Operation Example", + "uri":"cce_02_0086.html", + "doc_type":"api2", + "p_code":"41", + "code":"43" + }, + { + "desc":"Table 1 describes the status codes.", + "product_code":"cce", + "title":"Status Code", + "uri":"cce_02_0084.html", + "doc_type":"api2", + "p_code":"41", + "code":"44" + }, + { + "desc":"If an error occurs in API calling, no result is returned. Identify the cause based on the error code of each API. If an error occurs in API calling, HTTP status code 4xx ", + "product_code":"cce", + "title":"Error Codes", + "uri":"cce_02_0250.html", + "doc_type":"api2", + "p_code":"41", + "code":"45" + }, + { + "desc":"You can obtain the project ID by calling the API used to query project information based on the specified criteria.The API used to obtain a project ID is GET https://{End", + "product_code":"cce", + "title":"Obtaining a Project ID", + "uri":"cce_02_0341.html", + "doc_type":"api2", + "p_code":"41", + "code":"46" + }, + { + "desc":"An account ID is required for some URLs when an API is called. To obtain an account ID, perform the following operations:On the My Credentials page, view account IDs in t", + "product_code":"cce", + "title":"Obtaining the Account ID", + "uri":"cce_02_0342.html", + "doc_type":"api2", + "p_code":"41", + "code":"47" + }, + { + "desc":"This section describes how to use the Elastic Load Balancer (ELB) in a cluster created by CCE.Create a Service. Before enabling sticky session, ensure that the following ", + "product_code":"cce", + "title":"How to Use ELB in a Cluster", + "uri":"cce_02_0087.html", + "doc_type":"api2", + "p_code":"41", + "code":"48" + }, + { + "desc":"If you are using Google Chrome, press F12. On the pane displayed on the right, click the Network tab. Enter jobs in the Filter text box to filter the job list. Select a j", + "product_code":"cce", + "title":"How to Obtain Parameters in the API URI", + "uri":"cce_02_0271.html", + "doc_type":"api2", + "p_code":"41", + "code":"49" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"API Permissions", + "uri":"cce_02_0272.html", + "doc_type":"api2", + "p_code":"41", + "code":"50" + }, + { + "desc":"To provide a secure and isolated network environment for CCE, create a VPC before creating a cluster.If you have already created a VPC, you do not need to create it again", + "product_code":"cce", + "title":"Creating a VPC and Subnet", + "uri":"cce_02_0100.html", + "doc_type":"api2", + "p_code":"41", + "code":"51" + }, + { + "desc":"Create a key pair before you create a container cluster. Key pairs are used for user identity authentication upon login to a node.If you have already created a key pair, ", + "product_code":"cce", + "title":"Creating a Key Pair", + "uri":"cce_02_0101.html", + "doc_type":"api2", + "p_code":"41", + "code":"52" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"cce", + "title":"Change History", + "uri":"cce_02_0273.html", + "doc_type":"api2", + "p_code":"", + "code":"53" + } +] \ No newline at end of file diff --git a/docs/cce/api-ref/PARAMETERS.txt b/docs/cce/api-ref/PARAMETERS.txt new file mode 100644 index 000000000..6da8d5f07 --- /dev/null +++ b/docs/cce/api-ref/PARAMETERS.txt @@ -0,0 +1,3 @@ +version="" +language="en-us" +type="" \ No newline at end of file diff --git a/docs/cce/api-ref/ShowQuotas.html b/docs/cce/api-ref/ShowQuotas.html new file mode 100644 index 000000000..909827e32 --- /dev/null +++ b/docs/cce/api-ref/ShowQuotas.html @@ -0,0 +1,180 @@ + + +

Querying Resource Quotas

+

Function

This API is used to query CCE resource quotas.

+
+

URI

GET /api/v3/projects/{project_id}/quotas

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this field is mandatory and must be set to a user token.

+

Maximum: 16384

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

quotas

+

Array of QuotaResource objects

+

Resources

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 QuotaResource

Parameter

+

Type

+

Description

+

quotaKey

+

String

+

Resource type

+

quotaLimit

+

Integer

+

Quota

+

used

+

Integer

+

Number of created resources

+

unit

+

String

+

Unit

+

regionId

+

String

+

Region ID. This parameter is not returned if not involved.

+

availabilityZoneId

+

String

+

AZ ID. This parameter is not returned if not involved.

+
+
+
+

Example Requests

None

+
+

Example Responses

Status code: 200

+

The resource quotas are obtained successfully.

+
{
+  "quotas" : {
+    "resources" : [ {
+      "quotaKey" : "cluster",
+      "quotaLimit" : 20,
+      "used" : 13,
+      "unit" : "count"
+    } ]
+  }
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

The resource quotas are obtained successfully.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0083.html b/docs/cce/api-ref/cce_02_0083.html new file mode 100644 index 000000000..be0c160de --- /dev/null +++ b/docs/cce/api-ref/cce_02_0083.html @@ -0,0 +1,31 @@ + + +

Appendix

+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0084.html b/docs/cce/api-ref/cce_02_0084.html new file mode 100644 index 000000000..e46871d1f --- /dev/null +++ b/docs/cce/api-ref/cce_02_0084.html @@ -0,0 +1,321 @@ + + +

Status Code

+

Table 1 describes the status codes.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Status code

Status Code

+

Code

+

Description

+

100

+

Continue

+

The server has received the initial part of the request and the client should continue to send the remaining part.

+

It is issued on a provisional basis while request processing continues. It alerts the client to wait for a final response.

+

101

+

Switching Protocols

+

The requester has asked the server to switch protocols and the server has agreed to do so. The target protocol must be more advanced than the source protocol.

+

For example, the current HTTP protocol is switched to a later version of HTTP.

+

201

+

Created

+

The request has been fulfilled, resulting in the creation of a new resource.

+

202

+

Accepted

+

The request has been accepted for processing, but the processing has not been completed.

+

203

+

Non-Authoritative Information

+

The server successfully processed the request, but is returning information that may be from another source.

+

204

+

NoContent

+

The server has successfully processed the request, but does not return any content.

+

The status code is returned in response to an HTTP OPTIONS request.

+

205

+

Reset Content

+

The server has successfully processed the request, but does not return any content. Unlike a 204 response, this response requires that the requester reset the content.

+

206

+

Partial Content

+

The server has successfully processed a part of the GET request.

+

300

+

Multiple Choices

+

There are multiple options for the requested resource. For example, this code could be used to present a list of resource characteristics and addresses from which the client such as a browser may choose.

+

301

+

Moved Permanently

+

This and all future requests should be permanently directed to the given URI indicated in this response.

+

302

+

Found

+

The requested resource was temporarily moved.

+

303

+

See Other

+

The response to the request can be found under a different URI, and should be retrieved using a GET or POST method.

+

304

+

Not Modified

+

The requested resource has not been modified. In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.

+

305

+

Use Proxy

+

The requested resource is available only through a proxy.

+

306

+

Unused

+

This HTTP status code is no longer used.

+

400

+

BadRequest

+

The request is invalid.

+

The client should modify the request instead of re-initiating it.

+

401

+

Unauthorized

+

The authorization information provided by the client is incorrect or invalid.

+

402

+

Payment Required

+

This status code is reserved for future use.

+

403

+

Forbidden

+

The server has received the request and understood it, but the server is refusing to respond to it.

+

The client should modify the request instead of re-initiating it.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should modify the request instead of re-initiating it.

+

405

+

MethodNotAllowed

+

A request method is not supported for the requested resource.

+

The client should modify the request instead of re-initiating it.

+

406

+

Not Acceptable

+

The server cannot fulfill the request based on the content characteristics of the request.

+

407

+

Proxy Authentication Required

+

This code is similar to 401, but indicates that the client must first authenticate itself with the proxy.

+

408

+

Request Time-out

+

The server timed out waiting for the request.

+

The client may re-initiate the request without modifications at any later time.

+

409

+

Conflict

+

The request cannot 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.

+

410

+

Gone

+

The requested resource cannot be found.

+

The status code indicates that the requested resource has been deleted permanently.

+

411

+

Length Required

+

The server refused to process the request because the request does not specify the length of its content.

+

412

+

Precondition Failed

+

The server does not meet one of the preconditions that the requester puts on the request.

+

413

+

Request Entity Too Large

+

The server refuses to process a request because the request entity is too large. The server may disable the connection to prevent the client from sending requests consecutively. If the server temporarily cannot process the request, the response will contain a Retry-After header field.

+

414

+

Request-URI Too Large

+

The URI provided was too long for the server to process.

+

415

+

Unsupported Media Type

+

The server does not support the media type in the request.

+

416

+

Requested range not satisfiable

+

The requested range is invalid.

+

417

+

Expectation Failed

+

The server fails to meet the requirements of the Expect request-header field.

+

422

+

UnprocessableEntity

+

The request is well-formed but is unable to be processed due to semantic errors.

+

429

+

TooManyRequests

+

The client sends excessive requests to the server within a given time (exceeding the limit on the access frequency of the client), or the server receives excessive requests within a given time (beyond its processing capability). In this case, the client should repeat requests after the time specified in the Retry-After header of the response expires.

+

500

+

InternalServerError

+

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.

+

502

+

Bad Gateway

+

The server acting as a gateway or proxy receives an invalid response from a remote server.

+

503

+

ServiceUnavailable

+

The requested service is invalid.

+

The client should modify the request instead of re-initiating it.

+

504

+

ServerTimeout

+

The server could not return a timely response. The response will reach the client only if the request carries a timeout parameter.

+

505

+

HTTP Version not supported

+

The server does not support the HTTP protocol version used in the request.

+
+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0085.html b/docs/cce/api-ref/cce_02_0085.html new file mode 100644 index 000000000..e8daeda53 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0085.html @@ -0,0 +1,32 @@ + + +

Patch Request Method Operation Description

+

Kubernetes APIs use the HTTP header "Content-Type" to distinguish between patch request method operations.

+

Operation Description

Currently, three types of patch request method operations are supported:

+
  1. JSON Patch, Content-Type: application/json-patch+json

    According to RFC 6902, JSON patch operations indicate a series of operations performed on resource objects. The following provides an example of the JSON patch operation:

    +
    { 
    +     "op": "add", 
    +     "path": "/spec/containers/0/image", 
    +     "value": "busybox:latest" 
    + }
    +

    In the preceding example:

    +
    • "op" indicates a series of operations performed on resource objects, and it contains the following operations:

      add

      +

      replace

      +

      remove (not supported)

      +

      move (not supported)

      +

      copy (not supported)

      +

      test (not supported)

      +
    • "path" indicates the path to the to-be-operated resource object.

      For example, /spec/containers/0/image indicates that the object to be operated is spec.containers[0].image.

      +
    • "value" indicates the to-be-modified value.
    +
  2. Merge Patch, Content-Type: application/merge-patch+json

    According to RFC 7386, merge patch contains some description of a resource object (namely, JSON object). The JSON object is submitted to the server end, and merges with the current object of the server end (that is, replaces the list field of the current resource object) to form a new object.

    +
  3. Strategic Merge Patch, Content-Type: application/strategic-merge-patch+json

    Strategic merge patch is used to add legal metadata to API objects, and uses new metadata to determine which list should be merged and which should not. The current metadata is used as the structure labels.

    +
+

For more information about the difference between Merge Patch and Strategic Merge Patch, see Patch Request Method Operation Example.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0086.html b/docs/cce/api-ref/cce_02_0086.html new file mode 100644 index 000000000..01ca1df4e --- /dev/null +++ b/docs/cce/api-ref/cce_02_0086.html @@ -0,0 +1,251 @@ + + +

Patch Request Method Operation Example

+

This section provides examples of Merge Patch and Strategic Merge Patch method operations.

+

Operation Example

By way of example, Merge Patch and Strategic Merge Patch method operations are performed at the time of creating a ReplicationController resource object.

+
+

Sample request

+
{
+    "apiVersion": "v1",
+    "kind": "ReplicationController",
+    "metadata": {
+        "name": "frontend-controller"
+    },
+    "spec": {
+        "replicas": 2,
+        "selector": {
+            "app": "nginx"
+        },
+        "template": {
+            "metadata": {
+                "labels": {
+                    "app": "nginx"
+                }
+            },
+            "spec": {
+                "containers": [
+                    {
+                        "name": "redis",
+                        "image": "redis:latest",
+                        "ports": [
+                            {
+                                "containerPort": 80
+                            }
+                        ]
+                    }
+                ]
+            }
+        }
+    }
+}
+

Sample response

+
{
+    "kind": "ReplicationController",
+    "apiVersion": "v1",
+    "metadata": {
+        "name": "frontend-controller",
+        "namespace": "default",
+        "selfLink": "/api/v1/namespaces/default/replicationcontrollers/nginx-controller",
+        "uid": "549b2234-5d46-11e6-aeb9-286ed488fafe",
+        "resourceVersion": "4110",
+        "generation": 1,
+        "creationTimestamp": "2016-08-08T08:58:52Z",
+        "labels": {
+            "app": "nginx"
+        }
+    },
+    "spec": {
+        "replicas": 2,
+        "selector": {
+            "app": "nginx"
+        },
+        "template": {
+            "metadata": {
+                "creationTimestamp": null,
+                "labels": {
+                    "app": "nginx"
+                }
+            },
+            "spec": {
+                "containers": [
+                    {
+                        "name": "redis",
+                        "image": "redis:latest",
+                        "ports": [
+                            {
+                                "containerPort": 80,
+                                "protocol": "TCP"
+                            }
+                        ],
+                        "resources": {},
+                        "terminationMessagePath": "/dev/termination-log",
+                        "imagePullPolicy": "Always"
+                    }
+                ],
+                "restartPolicy": "Always",
+                "terminationGracePeriodSeconds": 30,
+                "dnsPolicy": "ClusterFirst",
+                "securityContext": {}
+            }
+        }
+    },
+    "status": {
+        "replicas": 0
+    }
+}
+
  • If you use Merge Patch to add a container to the template field of a specified ReplicationController, the list of existing containers is then replaced by the newly added container.

    Merge Patch request

    +
    {
    +    "spec": {
    +        "template": {
    +            "spec": {
    +                "containers": [
    +                    {
    +                        "name": "hello-world",
    +                        "image": "busybox:latest"
    +                    }
    +                ]
    +            }
    +        }
    +    }
    +}
    +

    Merge Patch response

    +
    {
    +    "kind": "ReplicationController",
    +    "apiVersion": "v1",
    +    "metadata": {
    +        "name": "frontend-controller",
    +        "namespace": "default",
    +        "selfLink": "/api/v1/namespaces/default/replicationcontrollers/nginx-controller",
    +        "uid": "549b2234-5d46-11e6-aeb9-286ed488fafe",
    +        "resourceVersion": "4159",
    +        "generation": 2,
    +        "creationTimestamp": "2016-08-08T08:58:52Z",
    +        "labels": {
    +            "app": "nginx"
    +        }
    +    },
    +    "spec": {
    +        "replicas": 2,
    +        "selector": {
    +            "app": "nginx"
    +        },
    +        "template": {
    +            "metadata": {
    +                "creationTimestamp": null,
    +                "labels": {
    +                    "app": "nginx"
    +                }
    +            },
    +            "spec": {
    +                "containers": [
    +                    {
    +                        "name": "hello-world",
    +                        "image": "busybox:latest",
    +                        "resources": {},
    +                        "terminationMessagePath": "/dev/termination-log",
    +                        "imagePullPolicy": "Always"
    +                    }
    +                ],
    +                "restartPolicy": "Always",
    +                "terminationGracePeriodSeconds": 30,
    +                "dnsPolicy": "ClusterFirst",
    +                "securityContext": {}
    +            }
    +        }
    +    },
    +    "status": {
    +        "replicas": 2,
    +        "fullyLabeledReplicas": 2,
    +        "observedGeneration": 1
    +    }
    +}
    +

    The containers are replaced by the newly added container.

    +
+
  • If you use Strategic Merge Patch to add metadata to a resource object, the new metadata then determines which list should b merged and which should not.

    Strategic Merge Patch request

    +
    {
    +    "spec": {
    +        "template": {
    +            "spec": {
    +                "containers": [
    +                    {
    +                        "name": "hello-world",
    +                        "image": "busybox:latest"
    +                    }
    +                ]
    +            }
    +        }
    +    }
    +}'
    +

    Strategic Merge Patch response

    +
    {
    +    "kind": "ReplicationController",
    +    "apiVersion": "v1",
    +    "metadata": {
    +        "name": "frontend-controller",
    +        "namespace": "default",
    +        "selfLink": "/api/v1/namespaces/default/replicationcontrollers/nginx-controller",
    +        "uid": "f2e048bb-5d46-11e6-aeb9-286ed488fafe",
    +        "resourceVersion": "4250",
    +        "generation": 2,
    +        "creationTimestamp": "2016-08-08T09:03:18Z",
    +        "labels": {
    +            "app": "nginx"
    +        }
    +    },
    +    "spec": {
    +        "replicas": 2,
    +        "selector": {
    +            "app": "nginx"
    +        },
    +        "template": {
    +            "metadata": {
    +                "creationTimestamp": null,
    +                "labels": {
    +                    "app": "nginx"
    +                }
    +            },
    +            "spec": {
    +                "containers": [
    +                    {
    +                        "name": "redis",
    +                        "image": "redis:latest",
    +                        "ports": [
    +                            {
    +                                "containerPort": 80,
    +                                "protocol": "TCP"
    +                            }
    +                        ],
    +                        "resources": {},
    +                        "terminationMessagePath": "/dev/termination-log",
    +                        "imagePullPolicy": "Always"
    +                    },
    +                    {
    +                        "name": "hello-world",
    +                        "image": "busybox:latest",
    +                        "resources": {},
    +                        "terminationMessagePath": "/dev/termination-log",
    +                        "imagePullPolicy": "Always"
    +                    }
    +                ],
    +                "restartPolicy": "Always",
    +                "terminationGracePeriodSeconds": 30,
    +                "dnsPolicy": "ClusterFirst",
    +                "securityContext": {}
    +            }
    +        }
    +    },
    +    "status": {
    +        "replicas": 2,
    +        "fullyLabeledReplicas": 2,
    +        "observedGeneration": 1
    +    }
    +}
    +

    The containers merge with the new content according to the value of the name field.

    +
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0087.html b/docs/cce/api-ref/cce_02_0087.html new file mode 100644 index 000000000..53e8bbd3f --- /dev/null +++ b/docs/cce/api-ref/cce_02_0087.html @@ -0,0 +1,206 @@ + + +

How to Use ELB in a Cluster

+

This section describes how to use the Elastic Load Balancer (ELB) in a cluster created by CCE.

+

Procedure

Create a Service.

Before enabling sticky session, ensure that the following conditions are met:

+
  • The workload protocol is TCP.
  • Anti-affinity has been configured between pods of the workload. That is, all pods of the workload are deployed on different nodes.
+
+
+
Automatically creating an ELB:
apiVersion: v1 
+kind: Service 
+metadata: 
+  annotations:   
+    kubernetes.io/elb.class: union
+    kubernetes.io/session-affinity-mode: SOURCE_IP
+    kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0
+    kubernetes.io/elb.autocreate: "{\"type\":\"public\",\"bandwidth_name\":\"cce-bandwidth-1551163379627\",\"bandwidth_chargemode\":\"traffic\",\"bandwidth_size\":5,\"bandwidth_sharetype\":\"PER\",\"eip_type\":\"5_bgp\",\"name\":\"james\"}"
+  labels: 
+    app: nginx 
+  name: nginx 
+spec: 
+  externalTrafficPolicy: Local
+  ports: 
+  - name: service0 
+    port: 80
+    protocol: TCP 
+    targetPort: 80
+  selector: 
+    app: nginx 
+  type: LoadBalancer
+
+
Using an existing ELB:
apiVersion: v1 
+kind: Service 
+metadata: 
+  annotations:   
+    kubernetes.io/elb.class: union
+    kubernetes.io/session-affinity-mode: SOURCE_IP
+    kubernetes.io/elb.id: 3c7caa5a-a641-4bff-801a-feace27424b6
+    kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0
+  labels: 
+    app: nginx 
+  name: nginx 
+spec: 
+  loadBalancerIP: 10.78.42.242
+  externalTrafficPolicy: Local
+  ports: 
+  - name: service0 
+    port: 80
+    protocol: TCP 
+    targetPort: 80
+  selector: 
+    app: nginx 
+  type: LoadBalancer
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Key parameters

Parameter

+

Type

+

Description

+

kubernetes.io/elb.class

+

String

+

Mandatory and must be set to union if an enhanced load balancer is in use.

+

kubernetes.io/session-affinity-mode

+

String

+

Optional. If sticky session is enabled, add this parameter.

+

The value SOURCE_IP indicates that listeners ensure sticky session based on source IP addresses.

+

kubernetes.io/elb.id

+

String

+

Optional. This parameter is mandatory if an existing ELB is used.

+

It indicates the ID of an enhanced load balancer.

+

kubernetes.io/elb.subnet-id

+

String

+

Optional. This parameter is mandatory only if a load balancer will be automatically created. For clusters of v1.11.7-r0 or later, this parameter can be left unspecified.

+

kubernetes.io/elb.autocreate

+

elb.autocreate object

+

Optional. This parameter is mandatory if a public network load balancer will be automatically created. The system will create an enhanced load balancer and an EIP. This parameter is also mandatory if a private network load balancer will be automatically created. The system will create an enhanced load balancer.

+

Example:

+
  • Value for a public network load balancer that is automatically created: "{\"type\":\"public\",\"bandwidth_name\":\"cce-bandwidth-1551163379627\",\"bandwidth_chargemode\":\"traffic\",\"bandwidth_size\":5,\"bandwidth_sharetype\":\"PER\",\"eip_type\":\"5_bgp\",\"name\":\"james\"}"
  • Value for a private network load balancer that is automatically created: "{\"type\":\"inner\"}"
+

loadBalancerIP

+

String

+

Private IP address of a private network load balancer or public IP address of a public network load balancer.

+

externalTrafficPolicy

+

String

+

Optional. If sticky session is enabled, add this parameter so requests are transferred to a fixed node. If a LoadBalancer Service with this parameter set to Local is created for a workload, the workload can be accessed only when the client is installed on the same node as the server.

+

port

+

Integer

+

Access port that is registered on the load balancer and mapped to the cluster-internal IP address.

+

targetPort

+

String

+

Container port on the CCE console.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Data structure of the elb.autocreate field

Parameter

+

Type

+

Description

+

name

+

String

+

Name of the load balancer that is automatically created.

+

The value is a string of 1 to 64 characters that consist of letters, digits, underscores (_), and hyphens (-).

+

type

+

String

+

Network type of the load balancer.

+
  • public: public network load balancer.
  • inner: private network load balancer.
+

bandwidth_name

+

String

+

Bandwidth name. The default value is cce-bandwidth-******.

+

The value is a string of 1 to 64 characters that consist of letters, digits, underscores (_), hyphens (-), and periods (.).

+

bandwidth_chargemode

+

String

+

Bandwidth billing mode.

+

The value is traffic, indicating that the billing is based on traffic.

+

bandwidth_size

+

Integer

+

Bandwidth size.

+

bandwidth_sharetype

+

String

+

Bandwidth sharing mode.

+
  • PER: dedicated bandwidth.
  • WHOLE: shared bandwidth.
+

eip_type

+

String

+

EIP type.

+
+
+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0092.html b/docs/cce/api-ref/cce_02_0092.html new file mode 100644 index 000000000..71dea3102 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0092.html @@ -0,0 +1,57 @@ + + +

Cluster Management

+
+
+ + + +
+ diff --git a/docs/cce/api-ref/cce_02_0100.html b/docs/cce/api-ref/cce_02_0100.html new file mode 100644 index 000000000..eea8c8d88 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0100.html @@ -0,0 +1,19 @@ + + +

Creating a VPC and Subnet

+

Context

To provide a secure and isolated network environment for CCE, create a VPC before creating a cluster.

+

If you have already created a VPC, you do not need to create it again.

+
+

Creating a VPC

  1. On the management console, click Service List, and choose Network > Virtual Private Cloud to launch the VPC console.
  2. On the VPC console, click Create VPC.
  3. The created VPC is displayed in the list. Click its name and obtain the VPC ID, which will be required in Creating a Cluster.

    Figure 1 Obtaining the VPC ID
    +

+
+

Creating a Subnet

  1. On the management console, click Service List, and choose Network > Virtual Private Cloud to launch the VPC console.
  2. In the navigation pane, choose Subnets. On the displayed page, click Create Subnets.
  3. After the subnet is created, click its name to obtain the network ID, which will be required in Creating a Cluster.

    Figure 2 Obtaining the network ID of a subnet
    +

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0101.html b/docs/cce/api-ref/cce_02_0101.html new file mode 100644 index 000000000..6de4b5948 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0101.html @@ -0,0 +1,17 @@ + + +

Creating a Key Pair

+

Context

Create a key pair before you create a container cluster. Key pairs are used for user identity authentication upon login to a node.

+

If you have already created a key pair, you do not need to create it again.

+
+

Procedure

  1. On the management console, click Service List, and choose Computing > Elastic Cloud Server to launch the ECS console.
  2. In the navigation pane, choose Key Pair.
  3. Click Create Key Pair.
  4. Enter a key pair name and click OK.

    The key pair name must be 1 to 64 characters long. Only letters, digits, hyphens (-), and underscores (_) are allowed.

    +

  5. In the displayed dialog box, click OK.

    A key file in the .pem format is generated and automatically saved to the default directory on your local computer.

    +

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0103.html b/docs/cce/api-ref/cce_02_0103.html new file mode 100644 index 000000000..96f8f17db --- /dev/null +++ b/docs/cce/api-ref/cce_02_0103.html @@ -0,0 +1,17 @@ + + +

APIs

+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0236.html b/docs/cce/api-ref/cce_02_0236.html new file mode 100644 index 000000000..74aa4b86a --- /dev/null +++ b/docs/cce/api-ref/cce_02_0236.html @@ -0,0 +1,1327 @@ + + +

Creating a Cluster

+

Function

This API is used to create an empty cluster, which has only master nodes but do not have worker nodes. After creating a cluster by calling this API, you can add nodes to the cluster. For details, see Creating a Node.

+
  • The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access.
  • Info collect agent (ICAgent) is an O&M data collection agent used by Application Performance Management (APM) service. It runs on each server to collect data from probes in real time. When this API is called to create a cluster, ICAgent is not installed by default. To automatically install ICAgent during cluster creation, add "cluster.install.addons.external/install": "[{\"addonTemplateName\":\"icagent\"}]" to the annotations field in the request body.
  • Before creating a cluster, Creating a VPC and Subnet. If a VPC and subnet already exists, you do not need to create them again.
  • By default, an account can create a maximum of five clusters in each region.
+
+
+

URI

POST /api/v3/projects/{project_id}/clusters

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + +
Table 1 Parameters

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 and Table 3 describe the request parameters.

+ +
+ + + + + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

String

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Parameters in the request body

Parameter

+

Mandatory

+

Type

+

Description

+

kind

+

Yes

+

String

+

API type. For a cluster management API, the parameter must be set to Cluster and cannot be changed.

+

apiVersion

+

Yes

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

Yes

+

metadata object

+

Basic information about a cluster. metadata is a collection of attributes.

+

spec

+

Yes

+

spec object

+

Detailed description of the cluster to be created. CCE creates or updates objects by defining or updating its spec.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the metadata field

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Cluster name.

+

Enter 4 to 128 characters starting with a letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed.

+

uid

+

No

+

String

+

Unique resource ID, which is automatically generated after the resource is created. It cannot be specified.

+

labels

+

No

+

Object

+

Cluster labels in the format of key-value pairs.

+
NOTE:

The value of this field is automatically generated by the system and is used by the frontend to identify the features supported by the cluster during the upgrade. The value specified by the user is invalid.

+
+

annotations

+

No

+

Object

+

Cluster annotations in the format of key-value pairs.

+
"annotations": {
+   "key1" : "value1",
+   "key2" : "value2"
+}
+
NOTE:
  • Annotations are not used to identify or select objects. The metadata in annotations may be small or large, structured or unstructured, and may include characters that are not allowed in labels.
  • This field is not stored in the database and is used only to specify the add-ons to be installed in the cluster.
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the spec field

Parameter

+

Mandatory

+

Type

+

Description

+

category

+

No

+

String

+
Cluster category:
  • CCE: CCE cluster
  • Turbo: CCE Turbo cluster
+
+
NOTE:

This parameter is valid in cluster of v1.17.17 or higher.

+
+

type

+

Yes

+

String

+

Cluster type.

+

VirtualMachine: The master node architecture is x86.

+

flavor

+

Yes

+

String

+

Cluster flavor.

+
  • cce.s1.small: small-scale, single-master cluster (≤ 50 nodes)
  • cce.s1.medium: medium-scale, single-master cluster (≤ 200 nodes)
  • cce.s2.small: small-scale, high availability cluster (≤ 50 nodes)
  • cce.s2.medium: medium-scale, high availability cluster (≤ 200 nodes)
  • cce.s2.large: large-scale, high availability cluster (≤ 1,000 nodes)
  • cce.s2.xlarge: ultra-large-scale, high availability cluster (≤ 2,000 nodes)
+
NOTE:
  • s1: single-master cluster
  • s2: high availability cluster
  • For example, ≤ 50 nodes indicates that the maximum number of nodes that can be managed by the cluster is 50.
  • A single-master cluster has only one master node. If the master node is down, the cluster will become unavailable and stop serving new workloads. However, existing workloads in the cluster are not affected.
  • A high-availability cluster has multiple master nodes. Faults in a single master node will not take the cluster down.
+
+

version

+

No

+

String

+

Cluster version, which mirrors the baseline version of the Kubernetes community. The latest version is recommended.

+

You can create clusters of two latest versions on the CCE console. To learn which cluster versions are available, choose Dashboard > Create Cluster on the CCE console and check the Version parameter.

+

You can call APIs to create clusters of other versions. However, these clusters will be gradually brought offline. For details about the offline policy, see the official CCE announcement.

+
NOTE:

If this parameter is not set, the cluster of the latest version is created by default.

+
+

platformVersion

+

No

+

String

+

Version of the CCE cluster platform, which is for viewing only and cannot be specified during cluster creation. The latest platform version corresponding to the cluster version is automatically selected during cluster creation.

+
Value format: cce.X.Y
  • X indicates the quarterly or regularly feature version number, starting from 1.
  • Y indicates the patch version of the cluster, starting from 0 (feature version). Other values indicate later patch versions after the feature version is released.
+
+

description

+

No

+

String

+

Cluster description, for example, which purpose the cluster is intended to serve. By default, this parameter is left unspecified. To modify cluster description after the cluster is created, call the API that is used to update information about a specified cluster or go to the cluster details page on the CCE console.

+

customSan

+

No

+

Array of strings

+

Custom SAN field in the server certificate of the cluster API server, which must comply with the SSL and X509 format specifications.

+
  1. Duplicate names are not allowed.
  2. Must comply with the IP address and domain name formats.
+

example: SAN 1: DNS Name=example.com SAN 2: DNS Name=www.example.com SAN 3: DNS Name=example.net SAN 4: IP Address=93.184.216.34

+

ipv6enable

+

No

+

Boolean

+

Reserved. This parameter is not used in the current version.

+

hostNetwork

+

Yes

+

hostNetwork object

+

Node network parameters, including a VPC and subnet ID. hostNetwork is mandatory because nodes in a cluster communicate with each other by using a VPC.

+

containerNetwork

+

Yes

+

containerNetwork object

+

Container network parameters, including a container network model and container CIDR block.

+

eniNetwork

+

No

+

EniNetwork object

+

Configuration of Cloud Native Network 2.0. Specify this field when creating a CCE Turbo cluster.

+

authentication

+

No

+

authentication object

+

Configurations of the cluster authentication mode.

+

masters

+

No

+

MasterSpec objects

+

Advanced configurations of the master node.

+

kubernetesSvcIpRange

+

No

+

String

+

Service CIDR block or the IP address range which the kubernetes clusterIp must fall within. This parameter is available only for clusters of v1.11.7 and later.

+

kubeProxyMode

+

No

+

String

+

Service forwarding mode. Two modes are available:

+
  • iptables: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many services are deployed. In addition, non-incremental updates will cause a latency and even obvious performance issues in the case of heavy service traffic.
  • ipvs: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters.
+

extendParam

+

No

+

extendParam object

+

Extended fields in the format of key-value pairs.

+

If the cluster will span across AZs or belong to a specified enterprise project, set extended fields as described in Table 13.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 6 Data structure of the hostNetwork field

Parameter

+

Mandatory

+

Type

+

Description

+

vpc

+

Yes

+

String

+

ID of the VPC used to create a master node. The VPC ID is obtained from Creating a VPC and Subnet.

+

subnet

+

Yes

+

String

+

Network ID of the subnet. The value is obtained from Creating a VPC and Subnet.

+

SecurityGroup

+

No

+

String

+

Security group ID of the node. The value is generated when you create a security group, and any user-defined value is invalid.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 7 Data structure of the authentication field

Parameter

+

Mandatory

+

Type

+

Description

+

mode

+

No

+

String

+

Cluster authentication mode.

+
  • Clusters of Kubernetes v1.11 and earlier
    • Possible values: x509, rbac, and authenticating_proxy
    • Default value: x509
    +
  • Clusters of Kubernetes v1.13 and later
    • Possible values: rbac and authenticating_proxy
    • Default value: rbac
    +
+

authenticatingProxy

+

No

+

authenticatingProxy object

+

Configurations of the authenticating_proxy mode.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 8 Data structure of the authenticatingProxy field

Parameter

+

Mandatory

+

Type

+

Description

+

ca

+

No

+

String

+

X509 CA certificate (Base64-encoded) configured in authenticating_proxy mode. This field is mandatory when the cluster authentication mode is authenticating_proxy. The maximum size of the certificate is 1 MB.

+
NOTE:

The uploaded CA certificate is used for both the authentication proxy and the kube-apiserver aggregation layer configuration. If the certificate is invalid, the cluster cannot be created. For details about the kube-apiserver aggregation layer, see Configure the Aggregation Layer.

+
+

cert

+

No

+

String

+

Client certificate (Base64-encoded) issued by the X509 CA certificate configured in authenticating_proxy mode. This certificate is used for authentication from kube-apiserver to the extended API server. This field is mandatory when the cluster authentication mode is authenticating_proxy.

+

For details about the kube-apiserver aggregation layer, see Configure the Aggregation Layer.

+

privateKey

+

No

+

String

+

Private key (Base64-encoded) of the client certificate issued by the X509 CA certificate configured in authenticating_proxy mode. This key is used for authentication from kube-apiserver to the extended API server. The private key used by the Kubernetes cluster does not support password encryption. Use an unencrypted private key. This field is mandatory when the cluster authentication mode is authenticating_proxy.

+

For details about the kube-apiserver aggregation layer, see Configure the Aggregation Layer.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 9 Data structure of the containerNetwork field

Parameter

+

Mandatory

+

Type

+

Description

+

mode

+

Yes

+

String

+

Container network model. Select one of the following possible values:

+
  • overlay_l2: an overlay_l2 network built for containers by using OpenVSwitch (OVS).
  • vpc-router: an underlay_l2 network built for containers by using ipvlan and custom VPC routes.
  • eni: cloud native 2.0 network model. This model deeply integrates the native ENI capability of VPC, uses the VPC CIDR block to allocate container addresses, and supports passthrough between load balancers and containers to provide high performance. You can use this network model when creating a CCE Turbo cluster.
+
NOTE:
  • Tunnel network: Under this model, the container network is an overlay network on top of a VPC network based on the VXLAN technology. VXLAN encapsulates Ethernet packets as UDP packets for tunnel transmission. Though at some cost of performance, the tunnel encapsulation enables higher interoperability and compatibility with advanced features (such as network policy-based isolation), meeting the requirements of most applications.
  • VPC network: Routing is implemented within a VPC network according to custom VPC routes. Each node is assigned a CIDR block of a fixed size. vpc-router networks are free of tunnel encapsulation overheads and provide better container network performance than tunnel networks. In addition, as routes to node IP addresses and the containers have been configured on vpc-router, container instances can be directly accessed from outside the cluster.
+
+

cidr

+

No

+

String

+

Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, or 192.168.0.0/16-19. If the selected CIDR block conflicts with existing CIDR blocks, the system automatically selects another CIDR block.

+

This parameter cannot be modified after the cluster is created. Exercise caution when setting this parameter.(This parameter has been discarded. If cidrs has been configured, skip this parameter.)

+

Minimum: 0

+

Maximum: 64

+
NOTE:

This parameter is not valid for CCE Turbo cluster.

+
+

cidrs

+

No

+

Array of ContainerCIDR objects

+

List of container CIDR blocks. In clusters of v1.21 and later, the cidrs field is used. When the cluster network type is vpc-router, you can add multiple container CIDR blocks. In versions earlier than v1.21, if the cidrs field is used, the first CIDR element in the array is used as the container CIDR block.

+

The configuration cannot be changed after the cluster is created.

+
+
+ +
+ + + + + + + + + + + +
Table 10 ContainerCIDR

Parameter

+

Mandatory

+

Type

+

Description

+

cidr

+

Yes

+

String

+

Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, and 192.168.0.0/16-19

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 11 EniNetwork

Parameter

+

Mandatory

+

Type

+

Description

+

eniSubnetId

+

Yes

+

String

+

IPv4 Subnet ID of the ENI container subnet. Currently, IPv6 is not supported.

+

eniSubnetCIDR

+

Yes

+

String

+

ENI subnet CIDR block.

+
+
+ +
+ + + + + + + + + + + +
Table 12 MasterSpec

Parameter

+

Mandatory

+

Type

+

Description

+

availabilityZone

+

No

+

String

+

Availability Zone.

+

For example:

+
"masters": [
+			{
+				"availabilityZone": "eu-de-01"
+			},
+			{
+				"availabilityZone": "eu-de-01"
+			},
+			{
+				"availabilityZone": "eu-de-02"
+			}
+		],
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 13 Data structure of the extendParam field

Parameter

+

Mandatory

+

Type

+

Description

+

clusterAZ

+

No

+

String

+

If you want to enable multiple AZs for the cluster, enter {"clusterAZ": "multi_az"}.

+
NOTE:

Only HA clusters support multiple AZs. To be specific, this field can be configured only when the flavor field in Table 5 is set to cce.s2.small, cce.s2.medium, cce.s2.large, cce.t2.small, cce.t2.medium, or cce.t2.large. After multi-AZ deployment is enabled, the three master nodes of the cluster are distributed in different AZs. The cluster remains available even when one of the AZs is down.

+
+

dssMasterVolumes

+

No

+

String

+

Whether the system and data disks of a master node use dedicated distributed storage. If this parameter is omitted or left unspecified, EVS disks are used by default.

+

kubeProxyMode

+

No

+

String

+

Service forwarding mode. Two modes are available:

+
  • iptables: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many Services are deployed. In addition, non-incremental updates will cause a latency and even tangible performance issues in the case of service traffic spikes.
  • ipvs: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters.
+
NOTE:

This parameter has been deprecated. If both this parameter and kubeProxyMode under ClusterSpec are specified, the latter will be used.

+
+

clusterExternalIP

+

No

+

String

+

EIP of the master node.

+

alpha.cce/fixPoolMask

+

No

+

String

+

Number of mask bits of the fixed IP address pool of the container network model. This field is supported only for the VPC network model (vpc-router).

+

This parameter determines the number of container IP addresses that can be allocated to a node. The maximum number of pods that can be created on a node is decided by this parameter and maxPods set during node creation.

+

The value is an integer ranging from 24 to 28.

+

kubernetes.io/cpuManagerPolicy

+

No

+

String

+

Cluster CPU management policy. The value can be none or static. The default value is none.

+
  • none: CPU cores will not be exclusively allocated to workload pods. Select this value if you want a large pool of shareable CPU cores.
  • static: CPU cores can be exclusively allocated to workload pods. Select this value if your workload is sensitive to latency in CPU cache and scheduling.
+

upgradefrom

+

No

+

String

+

Reserved. This field is returned only for a query.

+
+
+

Example Request

+
CCE Cluster:
{
+    "kind": "Cluster",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "mycluster",
+        "labels": {
+            "foo": "bar"
+        },
+        "annotations": {
+            "foo2": "bar2"
+        }
+    },
+    "spec": {
+        "type": "VirtualMachine",
+        "flavor": "cce.s2.small",
+        "version": "v1.19.8-r0",
+        "description": "this is a demo cluster",
+        "hostNetwork": {
+            "vpc": "23d3725f-6ffe-400e-8fb6-b4f9a7b3e8c1",
+            "subnet": "c90b3ce5-e1f1-4c87-a006-644d78846438"
+        },
+        "containerNetwork": {
+            "mode": "overlay_l2",
+            "cidr": "172.16.0.0/16"
+        },
+        "authentication": {
+            "mode": "rbac",
+        },
+        "kubeProxyMode": "iptables",
+        "billingMode": 0,
+        "extendParam": {
+            "clusterAZ": "multi_az"
+        }
+    }
+}
+
+

CCE Turbo Cluster:

+
{
+	"kind": "Cluster",
+	"apiVersion": "v3",
+	"metadata": {
+		"name": "turbo"
+	},
+	"spec": {
+		"type": "VirtualMachine",
+		"flavor": "cce.s2.medium",
+		"version": "v1.19.10-r0",
+		"hostNetwork": {
+			"vpc": "05c33818-78df-4329-b546-5df2f1aa823e",
+			"subnet": "9f0c8ef2-c608-4238-88be-87bce5fe90da"
+		},
+		"containerNetwork": {
+			"mode": "eni"
+		},
+		"eniNetwork": {
+			"eniSubnetId": "417dcc1f-95d7-43e7-8533-ab078d266303",
+			"eniSubnetCIDR": "192.168.0.0/24"
+		},
+		"kubernetesSvcIpRange": "10.247.0.0/16",
+		"authentication": {
+			"mode": "rbac"
+		},
+		"extendParam": {
+			"kubeProxyMode": "ipvs"
+		}
+	}
+}
+
+

Response

Response parameters:

+

Table 14 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 14 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Cluster and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Cluster metadata, which is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the cluster to be created. CCE creates or updates objects by defining or updating its spec.

+

status

+

status object

+

Cluster status and jobID of the cluster creation job.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 15 Data structure of the metadata field

Parameter

+

Type

+

Description

+

name

+

String

+

Cluster name.

+

uid

+

String

+

Cluster ID.

+

creationTimestamp

+

String

+

Time when the cluster was created.

+

updateTimestamp

+

String

+

Time when the cluster was updated.

+

labels

+

Map<String,String>

+

Cluster labels in the format of key-value pairs.

+
NOTE:

The value of this field is automatically generated by the system and is used by the frontend to identify the features supported by the cluster during the upgrade. The value specified by the user is invalid.

+
+

annotations

+

Map<String,String>

+

Cluster annotations in the format of key-value pairs.

+
"annotations": { "key1" : "value1", "key2" : "value2" }
+
NOTE:
  • annotations is not used to identify or select objects. Metadata in annotations can be small or large, structured or unstructured, and can include characters that are not allowed in labels.
  • This field is not stored in the database and is used only to specify the add-ons to be installed the cluster.
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 16 Data structure of the spec field

Parameter

+

Type

+

Description

+

category

+

String

+
Cluster category:
  • CCE: CCE cluster
  • Turbo: CCE Turbo cluster
+
+
NOTE:

This parameter is valid in cluster of v1.17.17 or higher.

+
+

type

+

String

+

Cluster type.

+

VirtualMachine: The master node architecture is x86.

+

flavor

+

String

+

Cluster flavor, which cannot be changed after the cluster is created.

+
  • cce.s1.small: small-scale, single-master cluster (≤ 50 nodes)
  • cce.s1.medium: medium-scale, single-master cluster (≤ 200 nodes)
  • cce.s2.small: small-scale, high availability cluster (≤ 50 nodes)
  • cce.s2.medium: medium-scale, high availability cluster (≤ 200 nodes)
  • cce.s2.large: large-scale, high availability cluster (≤ 1,000 nodes)
  • cce.s2.xlarge: ultra-large-scale, high availability cluster (≤ 2,000 nodes)
+
NOTE:
  • s1: single-master cluster
  • s2: high availability cluster
  • For example, ≤ 50 nodes indicates that the maximum number of nodes that can be managed by the cluster is 50.
  • A single-master cluster is a cluster that has only one master node. If the master node is down, the cluster will become unavailable and stop serving new workloads. However, existing workloads in the cluster are not affected.
  • A high-availability cluster has multiple master nodes. Faults in a single master node will not take the cluster down.
+
+

version

+

String

+

Cluster's baseline Kubernetes version. The latest version is recommended.

+

platformVersion

+

String

+

Version of the CCE cluster platform, which is for viewing only and cannot be specified during cluster creation. The latest platform version corresponding to the cluster version is automatically selected during cluster creation.

+
Value format: cce.X.Y
  • X indicates the quarterly or regularly feature version number, starting from 1.
  • Y indicates the patch version of the cluster, starting from 0 (feature version). Other values indicate later patch versions after the feature version is released.
+
+

description

+

String

+

Cluster description.

+

customSan

+

Array of strings

+

Custom SAN field in the server certificate of the cluster API server, which must comply with the SSL and X509 format specifications.

+
  1. Duplicate names are not allowed.
  2. Must comply with the IP address and domain name formats.
+

example: SAN 1: DNS Name=example.com SAN 2: DNS Name=www.example.com SAN 3: DNS Name=example.net SAN 4: IP Address=93.184.216.34

+

ipv6enable

+

Boolean

+

Reserved. This parameter is not used in the current version.

+

hostNetwork

+

hostNetwork object

+

Node network parameters.

+

containerNetwork

+

containerNetwork object

+

Container network parameters.

+

eniNetwork

+

EniNetwork object

+

Configuration of Cloud Native Network 2.0. Specify this field when creating a CCE Turbo cluster.

+

authentication

+

authentication object

+

Configurations of the cluster authentication mode.

+

billingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

masters

+

Array of MasterSpec objects

+

Advanced configurations of the master node.

+

kubernetesSvcIpRange

+

String

+

Service CIDR block or the IP address range which the kubernetes clusterIp must fall within. This parameter is available only for clusters of v1.11.7 and later.

+

kubeProxyMode

+

String

+

Service forwarding mode. Two modes are available:

+
  • iptables: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many services are deployed. In addition, non-incremental updates will cause a latency and even obvious performance issues in the case of heavy service traffic.
  • ipvs: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters.
+

az

+

String

+

AZ. This field is returned only for a query.

+

extendParam

+

extendParam object

+

Extended fields in the format of key-value pairs.

+

supportIstio

+

Boolean

+

Whether Istio is supported.

+
NOTE:

This field is not supported for the current version.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 17 Data structure of the hostNetwork field

Parameter

+

Type

+

Description

+

vpc

+

String

+

ID of the VPC used to create a master node. The VPC ID is obtained from Creating a VPC and Subnet.

+

subnet

+

String

+

Network ID of the subnet. The value is obtained from Creating a VPC and Subnet.

+

SecurityGroup

+

String

+

Security group ID of the node. The value is generated when you create a security group, and any user-defined value is invalid.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 18 EniNetwork

Parameter

+

Mandatory

+

Type

+

Description

+

eniSubnetId

+

Yes

+

String

+

IPv4 Subnet ID of the ENI container subnet. Currently, IPv6 is not supported.

+

eniSubnetCIDR

+

Yes

+

String

+

ENI subnet CIDR block.

+
+
+ +
+ + + + + + + + + +
Table 19 Data structure of the authentication field

Parameter

+

Type

+

Description

+

mode

+

String

+

Cluster authentication mode.

+
  • Clusters of Kubernetes v1.11 or earlier support x509, rbac, and authenticating_proxy. The default value is x509.
  • Clusters of Kubernetes v1.13 or later support rbac and authenticating_proxy. The default value is rbac.
+
+
+ +
+ + + + + + + + + +
Table 20 MasterSpec

Parameter

+

Type

+

Description

+

availabilityZone

+

String

+

Availability Zone.

+
"masters": [
+			{
+				"availabilityZone": "eu-de-01"
+			},
+			{
+				"availabilityZone": "eu-de-01"
+			},
+			{
+				"availabilityZone": "eu-de-02"
+			}
+		],
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 21 Data structure of the extendParam field

Parameter

+

Type

+

Description

+

clusterAZ

+

String

+

If you want to enable multiple AZs for the cluster, enter {"clusterAZ": "multi_az"}.

+
NOTE:

Only HA clusters support multiple AZs. To be specific, this field can be configured only when the flavor field in Table 5 is set to cce.s2.small, cce.s2.medium, cce.s2.large, cce.t2.small, cce.t2.medium, or cce.t2.large. After multi-AZ deployment is enabled, the three master nodes of the cluster are distributed in different AZs. The cluster remains available even when one of the AZs is down.

+
+

dssMasterVolumes

+

String

+

Whether the system and data disks of a master node use dedicated distributed storage. If this parameter is omitted or left unspecified, EVS disks are used by default.

+

kubeProxyMode

+

String

+

Service forwarding mode. Two modes are available:

+
  • iptables: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many Services are deployed. In addition, non-incremental updates will cause a latency and even tangible performance issues in the case of service traffic spikes.
  • ipvs: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters.
+

clusterExternalIP

+

String

+

EIP used to access the cluster.

+

alpha.cce/fixPoolMask

+

String

+

Number of mask bits of the fixed IP address pool of the container network model. This field is supported only for the VPC network model (vpc-router).

+

This parameter determines the number of container IP addresses that can be allocated to a node. The maximum number of pods that can be created on a node is decided by this parameter and maxPods set during node creation.

+

The value is an integer ranging from 24 to 28.

+

kubernetes.io/cpuManagerPolicy

+

String

+

Cluster CPU management policy. The value can be none or static. The default value is none.

+
  • none: CPU cores will not be exclusively allocated to workload pods. Select this value if you want a large pool of shareable CPU cores.
  • static: CPU cores can be exclusively allocated to workload pods. Select this value if your workload is sensitive to latency in CPU cache and scheduling.
+

upgradefrom

+

String

+

Reserved. This field is returned only for a query.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 22 Data structure of the status field

Parameter

+

Type

+

Description

+

phase

+

String

+

Cluster status. Possible values:

+
  • Available: The cluster is running properly.
  • Unavailable: The cluster is exhibiting unexpected behavior.
  • ScalingUp: Nodes are being added to the cluster.
  • ScalingDown: The cluster is being downsized to fewer nodes.
  • Creating: The cluster is being created.
  • Deleting: The cluster is being deleted.
  • Upgrading: The cluster is being upgraded.
  • Empty: The cluster has no resources.
+

jobID

+

String

+

ID of the cluster creation job. You can query job progress by job ID to keep updated on cluster creation progress.

+

deleteOption

+

Object

+

Whether to delete configurations. This parameter is contained only in the response to the deletion request.

+

deleteStatus

+

Object

+

Whether to delete the status information. This parameter is contained only in the response to the deletion request.

+
+
+

Example response:

+
+
    "kind": "Cluster",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "test-create-cluster",
+        "uid": "d6a883a1-8529-11ea-8e34-0255ac101108",
+        "creationTimestamp": "2020-04-23 06:15:32.974281119 +0000 UTC",
+        "updateTimestamp": "2020-04-23 06:15:32.974281688 +0000 UTC",
+        "labels": {
+            "foo": "bar"
+        },
+        "annotations": {
+            "foo2": "bar2"
+        }
+    },
+    "spec": {
+        "type": "VirtualMachine",
+        "flavor": "cce.s2.small",
+        "version": "v1.17.9-r0",
+        "description": "this is a demo cluster",
+        "ipv6enable": false,
+        "hostNetwork": {
+            "vpc": "23d3725f-6ffe-400e-8fb6-b4f9a7b3e8c1",
+            "subnet": "c90b3ce5-e1f1-4c87-a006-644d78846438"
+        },
+        "containerNetwork": {
+            "mode": "overlay_l2",
+            "cidr": "172.16.0.0/16"
+        },
+        "eniNetwork": {},
+        "authentication": {
+            "mode": "rbac",
+            "authenticatingProxy": {}
+        },
+        "billingMode": 0,
+        "extendParam": {
+            "clusterAZ": "multi_az"
+        },
+        "kubernetesSvcIpRange": "10.247.0.0/16",
+        "kubeProxyMode": "iptables"
+    },
+    "status": {
+        "phase": "Creating",
+        "jobID": "d6bcbb0b-8529-11ea-8e34-0255ac101108"
+    }
+}
+

Status Code

Table 23 describes the status code of this API.

+ +
+ + + + + + + +
Table 23 Status code

Status Code

+

Description

+

201

+

The job for creating a cluster is successfully delivered.

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0238.html b/docs/cce/api-ref/cce_02_0238.html new file mode 100644 index 000000000..e7a1694b9 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0238.html @@ -0,0 +1,619 @@ + + +

Reading a Specified Cluster

+

Function

This API is used to obtain details about a specified cluster.

+
+

URI

GET /api/v3/projects/{project_id}/clusters/{cluster_id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 lists the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

Table 3 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Cluster and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Cluster metadata, which is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the cluster targeted by this API. CCE creates or updates objects by defining or updating its spec.

+

status

+

status object

+

Cluster status and jobID of the job that reads a specified cluster.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the spec field

Parameter

+

Type

+

Description

+

category

+

String

+
Cluster category:
  • CCE: CCE cluster
  • Turbo: CCE Turbo cluster
+
+
NOTE:

This parameter is valid in cluster of v1.17.17 or higher.

+
+

type

+

String

+

Cluster type.

+

VirtualMachine: The master node architecture is x86.

+

flavor

+

String

+

Cluster flavor, which cannot be changed after the cluster is created.

+
  • cce.s1.small: small-scale, single-master cluster (≤ 50 nodes)
  • cce.s1.medium: medium-scale, single-master cluster (≤ 200 nodes)
  • cce.s2.small: small-scale, high availability cluster (≤ 50 nodes)
  • cce.s2.medium: medium-scale, high availability cluster (≤ 200 nodes)
  • cce.s2.large: large-scale, high availability cluster (≤ 1,000 nodes)
  • cce.s2.xlarge: ultra-large-scale, high availability cluster (≤ 2,000 nodes)
+
NOTE:
  • s1: single-master cluster
  • s2: high availability cluster
  • For example, ≤ 50 nodes indicates that the maximum number of nodes that can be managed by the cluster is 50.
  • A single-master cluster has only one master node. If the master node is down, the cluster will become unavailable and stop serving new workloads. However, existing workloads in the cluster are not affected.
  • A high-availability cluster has multiple master nodes. Faults in a single master node will not take the cluster down.
+
+

version

+

String

+

Cluster's baseline Kubernetes version. The latest version is recommended.

+

platformVersion

+

String

+

Version of the CCE cluster platform, which is for viewing only and cannot be specified during cluster creation. The latest platform version corresponding to the cluster version is automatically selected during cluster creation.

+
Value format: cce.X.Y
  • X indicates the quarterly or regularly feature version number, starting from 1.
  • Y indicates the patch version of the cluster, starting from 0 (feature version). Other values indicate later patch versions after the feature version is released.
+
+

az

+

String

+

AZ of the cluster.

+

ipv6enable

+

Boolean

+

Reserved. This parameter is not used in the current version.

+

supportIstio

+

String

+

Reserved. This parameter is not used in the current version.

+
NOTE:

This field is not supported for the current version.

+
+

description

+

String

+

Cluster description.

+

customSan

+

Array of strings

+

Custom SAN field in the server certificate of the cluster API server, which must comply with the SSL and X509 format specifications.

+
  1. Duplicate names are not allowed.
  2. Must comply with the IP address and domain name formats.
+

example: SAN 1: DNS Name=example.com SAN 2: DNS Name=www.example.com SAN 3: DNS Name=example.net SAN 4: IP Address=93.184.216.34

+

hostNetwork

+

hostNetwork object

+

Node network parameters, including a VPC and subnet ID. hostNetwork is mandatory because nodes in a cluster communicate with each other by using a VPC.

+

containerNetwork

+

containerNetwork object

+

Container network parameters, including a container network model and container CIDR block.

+

eniNetwork

+

eniNetwork object

+

Configuration of Cloud Native Network 2.0. Specify this field when creating a CCE Turbo cluster.

+

authentication

+

authentication object

+

Configurations of the cluster authentication mode.

+

billingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

masters

+

No

+

MasterSpec objects

+

Advanced configurations of the master node.

+

extendParam

+

extendParam object

+

Extended fields in the format of key-value pairs.

+

kubernetesSvcIpRange

+

String

+

Service CIDR block or the IP address range which the kubernetes clusterIp must fall within. This parameter is available only for clusters of v1.11.7 and later.

+

kubeProxyMode

+

String

+

Service forwarding mode. Two modes are available:

+
  • iptables: Traditional kube-proxy uses iptables rules to implement service load balancing. In this mode, too many iptables rules will be generated when many services are deployed. In addition, non-incremental updates will cause a latency and even obvious performance issues in the case of heavy service traffic.
  • ipvs: Optimized kube-proxy mode with higher throughput and faster speed. This mode supports incremental updates and can keep connections uninterrupted during service updates. It is suitable for large-sized clusters.
+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 5 Data structure of the hostNetwork field

Parameter

+

Type

+

Description

+

vpc

+

String

+

ID of the VPC used to create a master node. The VPC ID is obtained from Creating a VPC and Subnet.

+

subnet

+

String

+

Network ID of the subnet. The value is obtained from Creating a VPC and Subnet.

+

SecurityGroup

+

String

+

ID of the default security group created for the node during cluster creation.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 6 Data structure of the containerNetwork field

Parameter

+

Type

+

Description

+

mode

+

String

+

Container network model. Select one of the following possible values:

+
  • overlay_l2: an overlay_l2 network built for containers by using OpenVSwitch (OVS).
  • vpc-router: an underlay_l2 network built for containers by using ipvlan and custom VPC routes.
  • eni: cloud native 2.0 network model. This model deeply integrates the native ENI capability of VPC, uses the VPC CIDR block to allocate container addresses, and supports passthrough between load balancers and containers to provide high performance. You can use this network model when creating a CCE Turbo cluster.
+
NOTE:
  • Tunnel network: Under this model, the container network is an overlay network on top of a VPC network based on the VXLAN technology. VXLAN encapsulates Ethernet packets as UDP packets for tunnel transmission. Though at some cost of performance, the tunnel encapsulation enables higher interoperability and compatibility with advanced features (such as network policy-based isolation), meeting the requirements of most applications.
  • VPC network: Routing is implemented within a VPC network according to custom VPC routes. Each node is assigned a CIDR block of a fixed size. vpc-router networks are free of tunnel encapsulation overheads and provide better container network performance than tunnel networks. In addition, as routes to node IP addresses and the containers have been configured on vpc-router, container instances can be directly accessed from outside the cluster.
+
+

cidr

+

String

+

Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, or 192.168.0.0/16-19. If the selected CIDR block conflicts with existing CIDR blocks, the system automatically selects another CIDR block.

+

This parameter cannot be modified after the cluster is created. Exercise caution when setting this parameter.(This parameter has been discarded. If cidrs has been configured, skip this parameter.)

+

Minimum: 0

+

Maximum: 64

+

cidrs

+

Array of ContainerCIDR objects

+

List of container CIDR blocks. In clusters of v1.21 and later, the cidrs field is used. When the cluster network type is vpc-router, you can add multiple container CIDR blocks. In versions earlier than v1.21, if the cidrs field is used, the first CIDR element in the array is used as the container CIDR block.

+

The configuration cannot be changed after the cluster is created.

+
+
+ +
+ + + + + + + + + + + +
Table 7 ContainerCIDR

Parameter

+

Mandatory

+

Type

+

Description

+

cidr

+

Yes

+

String

+

Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, and 192.168.0.0/16-19

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 8 EniNetwork

Parameter

+

Mandatory

+

Type

+

Description

+

eniSubnetId

+

Yes

+

String

+

IPv4 Subnet ID of the ENI container subnet. Currently, IPv6 is not supported.

+

eniSubnetCIDR

+

Yes

+

String

+

ENI subnet CIDR block.

+
+
+ +
+ + + + + + + + + + + +
Table 9 MasterSpec

Parameter

+

Mandatory

+

Type

+

Description

+

availabilityZone

+

No

+

String

+

Availability Zone.

+

For example, eu-de-01.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 10 Data structure of the extendParam field

Parameter

+

Type

+

Description

+

alpha.cce/fixPoolMask

+

String

+

Number of mask bits of the fixed IP address pool of the container network model. This field is supported only for the VPC network model (vpc-router).

+

This parameter determines the number of container IP addresses that can be allocated to a node. The maximum number of pods that can be created on a node is decided by this parameter and maxPods set during node creation.

+

The value is an integer ranging from 24 to 28.

+

kubernetes.io/cpuManagerPolicy

+

String

+

CPU management policy of the master node.

+

upgradefrom

+

String

+

Version from which this version is upgrade.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 11 Data structure of the status field

Parameter

+

Type

+

Description

+

phase

+

String

+

Cluster status. Possible values:

+
  • Available: The cluster is running properly.
  • Unavailable: The cluster is exhibiting unexpected behavior. Manually delete the cluster or contact the administrator to delete the cluster.
  • ScalingUp: Nodes are being added to the cluster.
  • ScalingDown: The cluster is being downsized to fewer nodes.
  • Creating: The cluster is being created.
  • Deleting: The cluster is being deleted.
  • Upgrading: The cluster is being upgraded.
  • Resizing: Cluster specifications are being changed.
  • Empty: The cluster has no resources.
+

reason

+

String

+

Reason of cluster state transition. This parameter is returned if the cluster is not in the Available state.

+

message

+

String

+

Detailed information about why the cluster changes to the current state. This parameter is returned if the cluster is not in the Available state.

+

endpoints

+

endpoint object

+

Access address of the kube-apiserver in the cluster.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 12 Data structure of the endpoint field

Parameter

+

Type

+

Description

+

internal

+

String

+

Internal network address.

+

external

+

String

+

External network address.

+

external_otc

+

String

+

Endpoint of the cluster to be accessed through API Gateway.

+
+
+

Response example:

+
    "kind": "Cluster",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "mycluster",
+        "uid": "365b5e05-846a-11ea-9fe6-0255ac101107",
+        "creationTimestamp": "2020-04-22 07:23:50.157883 +0000 UTC",
+        "updateTimestamp": "2020-05-08 03:10:12.174334 +0000 UTC"
+    },
+    "spec": {
+        "type": "VirtualMachine",
+        "flavor": "cce.s1.small",
+        "version": "v1.17.9-r0",
+        "description": "new description",
+        "az": "eu-de-01",
+        "ipv6enable": false,
+        "supportIstio": true,
+        "hostNetwork": {
+            "vpc": "23d3725f-6ffe-400e-8fb6-b4f9a7b3e8c1",
+            "subnet": "c90b3ce5-e1f1-4c87-a006-644d78846438",
+            "SecurityGroup": "7bf2a95b-f41d-4187-9e72-d0a9a4de8e6d"
+        },
+        "containerNetwork": {
+            "mode": "overlay_l2",
+            "cidr": "172.16.0.0/16"
+        },
+        "eniNetwork": {},
+        "authentication": {
+            "mode": "rbac",
+            "authenticatingProxy": {}
+        },
+        "billingMode": 0,
+        "extendParam": {
+            "alpha.cce/fixPoolMask": "",
+            "kubernetes.io/cpuManagerPolicy": "",
+            "upgradefrom": ""
+        },
+        "kubernetesSvcIpRange": "10.247.0.0/16",
+        "kubeProxyMode": "iptables"
+    },
+    "status": {
+        "phase": "Available",
+        "endpoints": [
+            {
+                "Internal": "https://192.168.0.61:5443",
+            },
+            {
+                "External": "https://10.185.69.54:5443",
+            },
+           {
+                "external_otc": "https://a140174a-2f3e-11e9-9f91-0255ac101405.cce.eu-de.otc.t-systems.com",
+            },
+        ]
+    }
+}
+
+

Status Code

Table 13 describes the status code of this API.

+ +
+ + + + + + + +
Table 13 Status code

Status Code

+

Description

+

200

+

Information about the specified cluster is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0239.html b/docs/cce/api-ref/cce_02_0239.html new file mode 100644 index 000000000..42cc4b846 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0239.html @@ -0,0 +1,227 @@ + + +

Listing Clusters in a Specified Project

+

Function

This API is used to obtain details about all clusters in a specified project.

+
+

URI

GET /api/v3/projects/{project_id}/clusters

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details on how to obtain the project ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 lists the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

Table 3 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + +
Table 3 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Cluster and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

items

+

items object

+

A list of details for all clusters in the current project. You can filter clusters by items.metadata.name.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the items field

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Cluster and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Cluster metadata, which is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the cluster targeted by this API. CCE creates or updates objects by defining or updating its spec.

+

status

+

status object

+

Cluster status and jobID of the job that lists clusters in a specified project.

+
+
+

Response example:

+
{
+    "kind": "Cluster",
+    "apiVersion": "v3",
+    "items": [
+        {
+            "kind": "Cluster",
+            "apiVersion": "v3",
+            "metadata": {
+                "name": "mycluster",
+                "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+                "creationTimestamp": "2020-02-02 03:48:58.968214406 +0000 UTC",
+                "updateTimestamp": "2020-02-02 04:05:29.386391813 +0000 UTC"
+            },
+            "spec": {
+                "type": "VirtualMachine",
+                "flavor": "cce.s1.small",
+                "version": "v1.17.9-r0",
+                "description": "awesome cluster",
+                "ipv6enable": false,
+                "supportIstio": true,
+                "hostNetwork": {
+                    "vpc": "f0c12911-4fdb-4284-9230-7ffb0860826a",
+                    "subnet": "ac274229-fd2e-4695-9f01-a0c1372b8006",
+                    "SecurityGroup": "5da0b181-e0a2-4981-87ac-1681545cd666"
+                },
+                "containerNetwork": {
+                    "mode": "overlay_l2",
+                    "cidr": "172.16.0.0/16"
+                },
+                "eniNetwork": {},
+                "authentication": {
+                    "mode": "rbac",
+                    "authenticatingProxy": {}
+                },
+                "billingMode": 0,
+                "extendParam": {
+                    "alpha.cce/fixPoolMask": "",
+                    "kubernetes.io/cpuManagerPolicy": "",
+                    "patchVersion": "",
+                    "upgradefrom": ""
+                },
+                "kubernetesSvcIpRange": "10.247.0.0/16",
+                "kubeProxyMode": "iptables"
+            },
+            "status": {
+                "phase": "Available",
+                "endpoints": [
+            {
+                "Internal": "https://192.168.0.61:5443",
+            },
+            {
+                "External": "https://10.185.69.54:5443",
+            },
+           {
+                "external_otc": "https://a140174a-2f3e-11e9-9f91-0255ac101405.cce.eu-de.otc.t-systems.com",
+            }
+        ]
+    }
+}
+
+

Status Code

Table 5 describes the status code of this API.

+ +
+ + + + + + + +
Table 5 Status code

Status Code

+

Description

+

200

+

Information about clusters in the specified project is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0240.html b/docs/cce/api-ref/cce_02_0240.html new file mode 100644 index 000000000..8b2cefee7 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0240.html @@ -0,0 +1,338 @@ + + +

Updating a Specified Cluster

+

Function

This API is used to update information about a specified cluster.

+
+

URI

PUT /api/v3/projects/{project_id}/clusters/{cluster_id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 and Table 3 describe the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + +
Table 3 Parameters in the request body

Parameter

+

Mandatory

+

Type

+

Description

+

spec

+

Yes

+

spec object

+

Detailed description of the cluster targeted by this API. CCE creates or updates objects by defining or updating its spec.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the spec field

Parameter

+

Mandatory

+

Type

+

Description

+

description

+

No

+

String

+

Cluster description.

+

customSan

+

No

+

Array of strings

+

Custom SAN field in the server certificate of the cluster API server, which must comply with the SSL and X509 format specifications.

+
  1. Duplicate names are not allowed.
  2. Must comply with the IP address and domain name formats.
+

example: SAN 1: DNS Name=example.com SAN 2: DNS Name=www.example.com SAN 3: DNS Name=example.net SAN 4: IP Address=93.184.216.34

+

containerNetwork

+

No

+

ContainerNetworkUpdate object

+

Container networking parameters, including information about the container CIDR block.

+
+
+ +
+ + + + + + + + + + + +
Table 5 ContainerNetworkUpdate

Parameter

+

Mandatory

+

Type

+

Description

+

cidrs

+

No

+

Array of ContainerCIDR objects

+

List of container CIDR blocks. For clusters of v1.21 and later, if the cluster uses the VPC network model, container CIDR blocks can be added incrementally.

+

The configuration cannot be changed after the cluster is updated.

+
+
+ +
+ + + + + + + + + + + +
Table 6 ContainerCIDR

Parameter

+

Mandatory

+

Type

+

Description

+

cidr

+

Yes

+

String

+

Container CIDR block. Recommended: 10.0.0.0/12-19, 172.16.0.0/16-19, and 192.168.0.0/16-19

+
+
+

Example request:

+
  • Updating the description of a cluster
    {
    +  "spec" : {
    +    "description" : "new description"
    +  }
    +}
    +
  • Updating only the custom SAN of the cluster certificate
    {
    +  "spec" : {
    +    "customSan" : [ "192.168.1.0", "example.com" ]
    +  }
    +}
    +
  • Updating both the cluster description and custom certificate SAN
    {
    +  "spec" : {
    +    "description" : "new description",
    +    "customSan" : [ "192.168.1.0", "example.com" ]
    +  }
    +}
    +
  • Adding a container CIDR block for a cluster of v1.21 or later that uses the VPC network model
    {
    +  "spec" : {
    +    "containerNetwork" : {
    +      "cidrs" : [ {
    +        "cidr" : "10.10.0.0/16"
    +      }, {
    +        "cidr" : "10.11.0.0/16"
    +      } ]
    +    }
    +  }
    +}
    +
+
+

Response

Response parameters:

+

For details about the response parameters, see Table 7.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Parameters in the response body

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. For a cluster management API, the parameter must be set to Cluster and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Basic information about a cluster. metadata is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the cluster to be created. CCE creates or updates objects by defining or updating its spec.

+

status

+

status object

+

Cluster status and jobID of the job that reads a specified cluster.

+
+
+

Example response:

+
+
{
+    "kind": "Cluster",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "mycluster",
+        "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+        "creationTimestamp": "2020-02-02 03:48:58.968214406 +0000 UTC",
+        "updateTimestamp": "2020-02-02 06:39:36.844676088 +0000 UTC"
+    },
+    "spec": {
+        "type": "VirtualMachine",
+        "flavor": "cce.s1.small",
+        "version": "v1.17.9-r0",
+        "description": "new description",
+        "az": "eu-de-01",
+        "ipv6enable": false,
+        "supportIstio": true,
+        "hostNetwork": {
+            "vpc": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+            "subnet": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+            "SecurityGroup": "5da0b181-e0a2-4981-87ac-1681545cd666"
+        },
+        "containerNetwork": {
+            "mode": "overlay_l2",
+            "cidr": "172.17.0.0/16"
+        },
+        "eniNetwork": {},
+        "authentication": {
+            "mode": "rbac",
+            "authenticatingProxy": {}
+        },
+        "billingMode": 0,
+        "extendParam": {
+            "alpha.cce/fixPoolMask": "",
+            "kubernetes.io/cpuManagerPolicy": "",
+            "patchVersion": "",
+            "upgradefrom": ""
+        },
+        "kubernetesSvcIpRange": "10.247.0.0/16",
+        "kubeProxyMode": "iptables"
+    },
+    "status": {
+        "phase": "Available",
+        "endpoints": [
+            {
+                "Internal": "https://192.168.0.61:5443",
+            },
+            {
+                "External": "https://10.185.69.54:5443",
+            },
+           {
+                "external_otc": "https://a140174a-2f3e-11e9-9f91-0255ac101405.cce.eu-de.otc.t-systems.com",
+            },
+        ]
+    }
+}
+

Status Code

Table 8 describes the status code of this API.

+ +
+ + + + + + + +
Table 8 Status code

Status Code

+

Description

+

200

+

Information about the specified cluster is successfully updated.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0241.html b/docs/cce/api-ref/cce_02_0241.html new file mode 100644 index 000000000..3227948a0 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0241.html @@ -0,0 +1,536 @@ + + +

Deleting a Specified Cluster

+

Function

This API is used to delete a specified cluster.

+

The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access.

+
+
+

URI

DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

String

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Query Parameters

Parameter

+

Mandatory

+

Type

+

Description

+

errorStatus

+

No

+

String

+

This field allows a cluster to be in the Error state if exceptions occur when the cluster is being deleted. If the value of errorStatus is null, the cluster stays in the Deleting state, but not Error.

+

Minimum: 0

+

Maximum: 10

+

delete_efs

+

No

+

String

+

Whether to delete SFS Turbo resources. Value options:

+
  • true or block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • false or skip (The object is not deleted. These are the default value options.)
+

Default: false

+

Enumeration values:

+
  • true
  • block
  • try
  • false
  • skip
+

delete_eni

+

No

+

String

+

Whether to delete ENI ports. Value options:

+
  • true or block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • false or skip (The object is not deleted. These are the default value options.)
+

Default: false

+

Enumeration values:

+
  • true
  • block
  • try
  • false
  • skip
+

delete_evs

+

No

+

String

+

Whether to delete EVS disks. Value options:

+
  • true or block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • false or skip (The object is not deleted. These are the default value options.)
+

Default: false

+

Enumeration values:

+
  • true
  • block
  • try
  • false
  • skip
+

delete_net

+

No

+

String

+

Whether to delete cluster Service/ingress-related resources, such as ELB. Value options:

+
  • true or block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • false or skip (The object is not deleted. These are the default value options.)
+

Default: false

+

Enumeration values:

+
  • true
  • block
  • try
  • false
  • skip
+

delete_obs

+

No

+

String

+

Whether to delete the OBS resources. Value options:

+
  • true or block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • false or skip (The object is not deleted. These are the default value options.)
+

Default: false

+

Enumeration values:

+
  • true
  • block
  • try
  • false
  • skip
+

delete_sfs

+

No

+

String

+

Whether to delete the SFS resources. Value options:

+
  • true or block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • false or skip (The object is not deleted. These are the default value options.)
+

Default: false

+

Enumeration values:

+
  • true
  • block
  • try
  • false
  • skip
+
+
+
+

Request

Request parameters:

+

Table 3 lists the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 3 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

Table 4 describes response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Cluster and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Cluster metadata, which is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the cluster targeted by this API. CCE creates or updates objects by defining or updating its spec.

+

status

+

ClusterStatus object

+

Cluster status and jobID of the job that deletes a specified project.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 ClusterStatus

Parameter

+

Type

+

Description

+

phase

+

String

+

Cluster status. Possible values:

+
  • Available: The cluster is running properly.
  • Unavailable: The cluster is exhibiting unexpected behavior. Manually delete the cluster or contact the administrator to delete the cluster.
  • ScalingUp: Nodes are being added to the cluster.
  • ScalingDown: The cluster is being downsized to fewer nodes.
  • Creating: The cluster is being created.
  • Deleting: The cluster is being deleted.
  • Upgrading: The cluster is being upgraded.
  • Resizing: Cluster specifications are being changed.
  • Empty: The cluster has no resources.
+

jobID

+

String

+

Job ID.

+

reason

+

String

+

Reason of cluster state change. This parameter is returned if the cluster is not in the Available state.

+

message

+

String

+

Detailed information about why the cluster changes to the current state. This parameter is returned if the cluster is not in the Available state.

+

endpoints

+

ClusterEndpoints objects

+

Access address of kube-apiserver in the cluster.

+

deleteOption

+

deleteOption Object

+

Whether to delete configurations. This parameter is contained only in the response to the deletion request.

+

deleteStatus

+

deleteStatus Object

+

Whether to delete the status information. This parameter is contained only in the response to the deletion request.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 6 ClusterEndpoints

Parameter

+

Type

+

Description

+

internal

+

String

+

Internal network address.

+

external

+

String

+

External network address.

+

external_otc

+

String

+

Endpoint of the cluster to be accessed through API Gateway.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 deleteOption

Parameter

+

Type

+

Description

+

delete_sfs

+

String

+

Whether to delete SFS Turbo resources. Value options:

+
  • delete-true or delete-block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • delete-try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • delete-false or delete-skip (The object is not deleted. These are the default value options.)
+

Default: delete-false

+

Enumeration values:

+
  • delete-true
  • delete-block
  • delete-try
  • delete-false
  • delete-skip
+

delete_eni

+

String

+

Whether to delete ENI ports. Value options:

+
  • delete-true or delete-block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • delete-try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • delete-false or delete-skip (The object is not deleted. These are the default value options.)
+

Default: delete-false

+

Enumeration values:

+
  • delete-true
  • delete-block
  • delete-try
  • delete-false
  • delete-skip
+

delete_evs

+

String

+

Whether to delete EVS disks. Value options:

+
  • delete-true or delete-block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • delete-try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • delete-false or delete-skip (The object is not deleted. These are the default value options.)
+

Default: delete-false

+

Enumeration values:

+
  • delete-true
  • delete-block
  • delete-try
  • delete-false
  • delete-skip
+

delete_net

+

String

+

Whether to delete cluster Service/ingress-related resources, such as ELB. Value options:

+
  • delete-true or delete-block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • delete-try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • delete-false or delete-skip (The object is not deleted. These are the default value options.)
+

Default: delete-false

+

Enumeration values:

+
  • delete-true
  • delete-block
  • delete-try
  • delete-false
  • delete-skip
+

delete_obs

+

String

+

Whether to delete the OBS resources. Value options:

+
  • delete-true or delete-block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • delete-try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • delete-false or delete-skip (The object is not deleted. These are the default value options.)
+

Default: delete-false

+

Enumeration values:

+
  • delete-true
  • delete-block
  • delete-try
  • delete-false
  • delete-skip
+

delete_sfs

+

String

+

Whether to delete the SFS resources. Value options:

+
  • delete-true or delete-block (The system starts to delete the object. If the deletion fails, subsequent processes are blocked.)
  • delete-try (The system starts to delete the object. If the deletion fails, no deletion retry is performed, and subsequent processes are not blocked.)
  • delete-false or delete-skip (The object is not deleted. These are the default value options.)
+

Default: delete-false

+

Enumeration values:

+
  • delete-true
  • delete-block
  • delete-try
  • delete-false
  • delete-skip
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 deleteStatus

Parameter

+

Type

+

Description

+

previous_total

+

Integer

+

Total number of existing cluster resource records when the cluster is deleted.

+

current_total

+

Integer

+

Latest number of resource records, which is generated based on the current cluster resource records.

+

updated

+

Integer

+

Total number of resource records updated when the cluster is deleted.

+

added

+

Integer

+

Total number of resource records updated when the cluster is deleted.

+

deleted

+

Integer

+

Total number of resource records deleted when the cluster is deleted.

+
+
+
Response example:
{
+    "kind": "Cluster",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "mycluster",
+        "uid": "7a661f82-90d9-11ea-9f85-0255ac10110d",
+        "creationTimestamp": "2020-05-08 03:10:32.403757 +0000 UTC",
+        "updateTimestamp": "2020-05-08 03:18:29.238331 +0000 UTC"
+    },
+    "spec": {
+        "type": "VirtualMachine",
+        "flavor": "cce.s1.small",
+        "version": "v1.17.9-r0",
+        "az": "eu-de-01",
+        "ipv6enable": false,
+        "supportIstio": true,
+        "hostNetwork": {
+            "vpc": "23d3725f-6ffe-400e-8fb6-b4f9a7b3e8c1",
+            "subnet": "c90b3ce5-e1f1-4c87-a006-644d78846438",
+            "SecurityGroup": "11fb88d1-0fc9-422d-963d-374ababa5f57"
+        },
+        "containerNetwork": {
+            "mode": "overlay_l2",
+            "cidr": "172.16.0.0/16"
+        },
+       
+        "authentication": {
+            "mode": "rbac",
+            "authenticatingProxy": {}
+        },
+        "billingMode": 0,
+        "extendParam": {
+            "alpha.cce/fixPoolMask": "",
+            "kubernetes.io/cpuManagerPolicy": "",
+            "upgradefrom": ""
+        },
+        "kubernetesSvcIpRange": "10.247.0.0/16",
+        "kubeProxyMode": "iptables"
+    },
+    "status": {
+        "phase": "Available",
+        "jobID": "f5fd8cbf-90db-11ea-9f85-0255ac10110d",
+        "endpoints": {
+           "Internal": "https://192.168.0.61:5443",
+           "External": "https://10.185.69.54:5443",
+           "external_otc": "https://a140174a-2f3e-11e9-9f91-0255ac101405.cce.eu-de.otc.t-systems.com"
+        },
+        "deleteOption": {
+           "delete_eni": "delete-skip",
+           "delete_net": "delete-block",
+           "delete_evs": "delete-skip",
+           "delete_sfs": "delete-skip",
+           "delete_obs": "delete-skip",
+           "delete_efs": "delete-skip"
+        },
+        "deleteStatus": {
+           "previous_total": 0,
+           "current_total": 15,
+           "updated": 0,
+           "added": 15,
+           "deleted": 0
+        }
+    }
+}
+
+
+

Status Code

Table 9 describes the status code of this API.

+ +
+ + + + + + + +
Table 9 Status code

Status Code

+

Description

+

200

+

The job for deleting a cluster is successfully delivered.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0242.html b/docs/cce/api-ref/cce_02_0242.html new file mode 100644 index 000000000..1594e1853 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0242.html @@ -0,0 +1,1573 @@ + + +

Creating a Node

+

Function

This API is used to create a node in a specified cluster.

+
+

URI

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 and Table 3 describe the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Parameters in the request body

Parameter

+

Mandatory

+

Type

+

Description

+

kind

+

Yes

+

String

+

API type. The value is fixed at Node and cannot be changed.

+

apiVersion

+

Yes

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

Yes

+

metadata object

+

Node's metadata, which is a collection of attributes.

+

spec

+

Yes

+

spec object

+

Detailed description of the node targeted by this API. CCE creates or updates objects by defining or updating its spec.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the metadata field

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

No

+

String

+

Node name.

+
NOTE:

Enter 0 to 56 characters starting with a letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed.

+

If no node name is specified, the system automatically generates a node name in the format of Cluster Name-*****.

+
+

labels

+

No

+

Object

+

CCE node label (not the native Kubernetes label).

+

Labels are used to select objects that meet certain criteria. A label is a key-value pair.

+

Example:

+
"labels": {
+  "key" : "value"
+}
+
NOTE:

Users can not use this field to define the native Kubernetes labels.

+
+

annotations

+

No

+

Object

+

CCE node annotation in key-value pair format (not the native Kubernetes annotations).

+

Example:

+
"annotations": {
+  "key1" : "value1",
+  "key2" : "value2"
+}
+
NOTE:
  • Users can not use this field to define the native Kubernetes labels.
  • Annotations are not used to identify or select objects. The metadata in Annotations may be small or large, structured or unstructured, and may include characters that are not allowed in labels.
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the spec field

Parameter

+

Mandatory

+

Type

+

Description

+

flavor

+

Yes

+

String

+

Node specifications. For details, see the description of the flavorRef parameter in Creating an ECS.

+
NOTE:

When adding a BMS node, check whether the flavor of the node to be added supports local disks. If local disks are not supported, add at least one 100 GB EVS disk.

+
+

az

+

Yes

+

String

+

AZ of the node. For details, see the description of the availability_zone parameter in Creating an ECS.

+

os

+

No

+

String

+

Node OS.

+
  • Nodes in clusters of Kubernetes v1.11 or earlier support EulerOS 2.2.
  • Nodes in clusters of Kubernetes v1.13 or v1.15 support EulerOS 2.5.
  • Nodes in clusters of Kubernetes v1.17 support EulerOS 2.5 and CentOS 7.7.
  • Nodes in clusters of Kubernetes v1.19, v1.21 or v1.23 support EulerOS 2.5, EulerOS 2.9 and CentOS 7.7.
  • Nodes using kata runtime in CCE Turbo cluster support EulerOS 2.9.
+
NOTE:

If the alpha.cce/NodeImageID parameter in extendParam is specified during node creation, you do not need to set this field.

+
+

dedicatedHostId

+

No

+

String

+

ID of the dedicated host to which nodes will be scheduled.

+

login

+

Yes

+

login object

+

Node login mode, which can be key pair or password.

+

rootVolume

+

Yes

+

Volume object

+

System disk parameters of the node.

+

dataVolumes

+

Yes

+

Array of Volume object

+

Data disk parameters of the node. Currently, you can add the second data disk for your node on the CCE console.

+

publicIP

+

No

+

publicIP object

+

EIP used by the node to access public networks.

+

billingMode

+

No

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

count

+

Yes

+

Integer

+

Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit.

+
NOTE:

This fielder can be set to 0 for a node pool.

+
+

nodeNicSpec

+

No

+

nodeNicSpec object

+

Description about the node NIC.

+

extendParam

+

No

+

extendParam object

+

Extended parameter. Format: Key-value pair.

+

userTags

+

No

+

Object

+

Tag of a VM.

+

The format is key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported.
  • Value: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported.
+

Example:

+
"userTags": [
+{
+	"key": "tag1",
+	"value": "aaaa"
+}, 
+{
+	"key": "tag2",
+	"value": "bbbb"
+}
+]
+

k8sTags

+

No

+

Object

+

Tag of a Kubernetes node.

+

The format is key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key
  • Value: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string.
+

Example:

+
"k8sTags": {
+	"key": "value"
+}
+

taints

+

No

+

Object

+
You can add taints to created nodes to configure anti-affinity. Each taint contains the following parameters:
  • Key: A key must contain 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain name can be used as the prefix of a key.
  • Value: A value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (_), and periods (.).
  • Effect: Available options are NoSchedule, PreferNoSchedule, and NoExecute.
+
+

Example:

+
"taints": [{
+	"key": "status",
+	"value": "unavailable",
+	"effect": "NoSchedule"
+}, {
+	"key": "looks",
+	"value": "bad",
+	"effect": "NoSchedule"
+}]
+

ecsGroupId

+

No

+

String

+

ECS group ID. If this parameter is specified, the node is created in the specified ECS group.

+
NOTE:

This parameter is not supported when you add a node to a node pool or use CCE Turbo cluster.

+
+

dedicatedHostId

+

No

+

String

+

ID of the DeH host. If this parameter is specified, the node is scheduled to its own DeH host.

+
NOTE:

This parameter is not supported when you add a node to a node pool.

+
+

offloadNode

+

No

+

Boolean

+

Whether the node belongs to a CCE Turbo cluster.

+
NOTE:

This parameter is not supported when you add a node to a node pool.

+
+

faultDomain

+

No

+

String

+

Cloud server fault domain. The node is created in the fault domain specified by this parameter.

+
NOTE:

You must specify the ECS to which the fault domain policy applies and enable the fault domain feature.

+
+

runtime

+

No

+

Runtime object

+

Container runtime. The default value is docker.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 6 Data structure of the nodeNicSpec field

Parameter

+

Mandatory

+

Type

+

Description

+

primaryNic

+

No

+

primaryNic object

+

Description about the primary NIC.

+

extNics

+

No

+

Array of extNics objects

+

Extension NIC.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 7 Data structure of the primaryNic/extNics field

Parameter

+

Mandatory

+

Type

+

Description

+

subnetId

+

No

+

String

+

Network ID of the subnet to which the NIC belongs.

+

fixedIps

+

No

+

Array of strings

+

The IP address of the primary NIC is specified by fixedIps. The number of IP addresses cannot be greater than the number of created nodes. fixedIps and ipBlock cannot be specified at the same time.

+

ipBlock

+

No

+

String

+

CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. fixedIps and ipBlock cannot be specified at the same time.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 Data structure of the extendParam field

Parameter

+

Mandatory

+

Type

+

Description

+

maxPods

+

No

+

Integer

+

Maximum number of pods on the node.

+

agency_name

+

No

+

String

+

Specifies the IAM agency name.

+

dockerBaseSize

+

No

+

Integer

+

Available disk space of a single Docker container on the node using the device mapper.

+

alpha.cce/preInstall

+

No

+

String

+

Script required before the installation.

+
NOTE:

The input value must be encoded using Base64. (Command: echo -n "Content to be encoded" | base64)

+
+

alpha.cce/postInstall

+

No

+

String

+

Script required after the installation.

+
NOTE:

The input value must be encoded using Base64. (Command: echo -n "Content to be encoded" | base64)

+
+

alpha.cce/NodeImageID

+

No

+

String

+

Mandatory if a custom image is used in creating a bare metal node.

+

DockerLVMConfigOverride

+

No

+

String

+
ConfigMap of the Docker data disk. The following is an example configuration:
"DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
+
+

In this example:

+
  • userLV: size of the user space, for example, vgpaas/20%VG.
  • userPath: mount path of the user space, for example, /home/wqt-test.
  • diskType: disk type. Currently, only the evs, hdd, and ssd are supported.
  • lvType: type of a logic volume. Currently, the value can be linear or striped.
  • dockerThinpool: Docker space size, for example, vgpaas/60%VG.
  • kubernetesLV: kubelet space size, for example, vgpaas/20%VG.
+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 9 Data structure of the login field

Parameter

+

Mandatory

+

Type

+

Description

+

sshKey

+

No

+

String

+

Name of the key pair used for node login. For details on how to create a key pair, see Creating a Key Pair.

+

userPassword

+

No

+

String

+

Password used for node login.

+
NOTE:

This field is not supported for the current version.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 10 Data structure of the Volume field

Parameter

+

Mandatory

+

Type

+

Description

+

volumetype

+

No

+

String

+

Disk type. For details, see the description of root_volume in Creating an ECS.

+
  • SATA: common I/O disk type.
  • SAS: high I/O disk type.
  • SSD: ultra-high I/O disk type.
+

size

+

No

+

Integer

+

Specifies the system disk size, in GB. The value ranges from 40 to 1024.

+

extendParam

+

No

+

Map<String,Object>

+

Disk extension parameter. For details, see the description of the extendparam parameter in Creating an ECS.

+

hw:passthrough

+

No

+

Boolean

+
  • Pay attention to this field if your ECS is SDI-compliant. If the value of this field is true, the created disk is of the SCSI type.
  • If the node pool type is ElasticBMS, this field must be set to true.
+

metadata

+

No

+

dataVolumeMetadata object

+

Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted.

+

If data disks are created using a data disk image, this parameter cannot be used.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 11 Data structure of the dataVolumeMetadata field

Parameter

+

Mandatory

+

Type

+

Description

+

__system__encrypted

+

No

+

String

+

Whether an EVS disk is encrypted.

+
  • '0': not encrypted
  • '1': encrypted
+

If this parameter is not specified, EVS disks will not be encrypted by default.

+

__system__cmkid

+

Yes

+

String

+

CMK ID used for encryption. This parameter is used with __system__encrypted.

+
NOTE:

You can obtain the ID through HTTPS requests. For details, see Querying the List of CMKs.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 12 Data structure of the publicIP field

Parameter

+

Mandatory

+

Type

+

Description

+

ids

+

No

+

Array of strings

+

List of IDs of the existing EIPs.

+
NOTICE:

If ids is set, you do not need to set count and eip.

+
+

count

+

No

+

Integer

+

Number of EIPs to be dynamically created.

+
NOTICE:

The count and eip parameters must be set simultaneously.

+
+

eip

+

No

+

eip object

+

EIP.

+
NOTICE:

The count and eip parameters must be set simultaneously.

+
+
+
+

If no EIP has been created, configure count and eip. The system will automatically create EIPs based on count and eip.

+
+ +
+ + + + + + + + + + + + + + + + +
Table 13 Data structure of the eip field

Parameter

+

Mandatory

+

Type

+

Description

+

iptype

+

Yes

+

String

+

EIP type. For details, see the description of the iptype parameter in the eip field in Data Structure for Creating ECSs.

+

bandwidth

+

Yes

+

bandwidth object

+

Bandwidth parameters of the EIP.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 14 Data structure of the bandwidth field

Parameter

+

Mandatory

+

Type

+

Description

+

chargemode

+

No

+

String

+

The value is traffic, indicating that the billing is based on traffic.

+

size

+

Yes

+

Integer

+

Bandwidth size. For details, see the description of the size parameter in the bandwidth field in Data Structure for Creating ECSs.

+

sharetype

+

Yes

+

String

+

Shared bandwidth type. For details, see the description of the sharetype parameter in the bandwidth field in Data Structure for Creating ECSs.

+
+
+ +
+ + + + + + + + + + + +
Table 15 Runtime

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

No

+

String

+

Container runtime. The default value is docker.

+

Enumeration values:

+
  • docker
  • containerd
+
+
+

Example request:

+

CCE cluster:

+
{
+    "kind": "Node",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "myhost",
+        "labels": {
+            "foo": "bar"
+        },
+        "annotations": {
+            "annotation1": "abc"
+        }
+    },
+    "spec": {
+        "flavor": "s1.medium",
+        "az": "eu-de-01",
+        "login": {
+            "sshKey": "Keypair-demo"
+        },
+        "rootVolume": {
+            "size": 40,
+            "volumetype": "SAS"
+        },
+        "dataVolumes": [
+            {
+                "size": 100,
+                "volumetype": "SAS"
+            }
+        ],
+        "userTags": [
+            {
+                "key": "tag1",
+                "value": "aaaa"
+            },
+            {
+                "key": "tag2",
+                "value": "bbbb"
+            }
+        ],
+        "k8sTags": {
+            "label-test": "test"
+        },
+        "publicIP": {
+            "count": 2,
+            "eip": {
+                "iptype": "5_bgp",
+                "bandwidth": {
+                    "chargemode": "traffic",
+                    "size": 10,
+                    "sharetype": "PER"
+                }
+            }
+        },
+        "count": 2,
+        "nodeNicSpec": {
+            "primaryNic": {
+                "subnetId": "bbfc0a20-d66c-4f36-b4c1-265d669b8c62"
+            }
+        },
+        "extendParam": {
+            "alpha.cce/postInstall": "IyEvYml******C50eHQ="
+        }
+    }
+}
+

CCE Turbo cluster:

+
{
+    "kind": "Node",
+    "apiversion": "v3",
+    "metadata": {
+        "name": "turbo-cluster-node"
+    },
+    "spec": {
+        "flavor": "cce.c4.22xlarge.4.physical.129nic",
+        "az": "eu-de-01",
+        "login": {
+            "sshKey": "id_rsa"
+        },
+        "rootVolume": {
+            "size": 40,
+            "volumetype": "SAS",
+            "hw:passthrough": true
+        },
+        "dataVolumes": [
+            {
+                "size": 100,
+                "volumetype": "SAS",
+                "hw:passthrough": true
+            }
+        ],
+        "count": 1,
+        "runtime": {
+            "name": "containerd"
+        },
+        "extendParam": {
+            "alpha.cce/NodeImageID":"0fea78c3-1b31-4653-8859-ac151ccadcd4"
+        }
+    }
+}
+
+

Response

Response parameters:

+

Table 16 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 16 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Node and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Node's metadata, which is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the node targeted by this API. CCE creates or updates objects by defining or updating its spec.

+

status

+

status object

+

Node status and jobID of the node creation job.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 17 Data structure of the metadata field

Parameter

+

Type

+

Description

+

name

+

String

+

Node name.

+

uid

+

String

+

Node ID.

+

labels

+

Object

+

CCE node label (not the native Kubernetes label).

+

Labels are used to select objects that meet certain criteria. A label is a key-value pair.

+

Example:

+
"labels": {
+  "key" : "value"
+}
+
NOTE:

Users can not use this field to define the native Kubernetes labels.

+
+

annotations

+

Object

+

CCE node annotation in key-value pair format (not the native Kubernetes annotations).

+

Example:

+
"annotations": {
+  "key1" : "value1",
+  "key2" : "value2"
+}
+
NOTE:
  • Users can not use this field to define the native Kubernetes labels.
  • Annotations are not used to identify or select objects. The metadata in Annotations may be small or large, structured or unstructured, and may include characters that are not allowed in labels.
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 18 Data structure of the spec field

Parameter

+

Type

+

Description

+

flavor

+

String

+

Node specifications. For details, see the description of the flavorRef parameter in Creating an ECS.

+

az

+

String

+

AZ of the node. For details, see the description of the availability_zone parameter in Creating an ECS.

+

os

+

String

+

Node OS.

+
  • Nodes in clusters of Kubernetes v1.11 or earlier support EulerOS 2.2.
  • Nodes in clusters of Kubernetes v1.13 or v1.15 support EulerOS 2.5.
  • Nodes in clusters of Kubernetes v1.17 support EulerOS 2.5 and CentOS 7.7.
  • Nodes in clusters of Kubernetes v1.19, v1.21 or v1.23 support EulerOS 2.5, EulerOS 2.9 and CentOS 7.7.
  • Nodes using kata runtime in CCE Turbo cluster support EulerOS 2.9.
+

login

+

login object

+

Node login mode, which can only be key pair.

+

rootVolume

+

Volume object

+

System disk parameters of the node.

+

dataVolumes

+

Array of Volume object

+

Data disk parameters of the node.

+

publicIP

+

publicIP object

+

EIP parameters of a node.

+

nodeNicSpec

+

nodeNicSpec object

+

Description about the node NIC.

+

count

+

Integer

+

Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1.

+
NOTE:

This parameter can be set to 0 for a node pool.

+
+

billingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

userTags

+

Object

+

The format is key-value pair.

+

It is recommended that you use TMS's predefined tag function to add the same tag to different cloud resources.

+
  • The tag key can consist of only uppercase letters, lowercase letters, digits, hyphens (-), underscores (_), and Unicode characters.
  • The tag value can contain only uppercase letters, lowercase letters, digits, hyphens (-), underscores (_), and at signs (@).
+

Example:

+
"userTags": [
+{
+	"key": "tag1",
+	"value": "aaaa"
+}, {
+	"key": "tag2",
+	"value": "bbbb"
+}]
+

k8sTags

+

Object

+

The format is key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key
  • Value: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string.
+
NOTE:

If a node is created using a node pool, a label whose key is cce.cloud.com/cce-nodepool is automatically added to the node, and the label value is the node name.

+
+

Example:

+
"k8sTags": {
+	"key": "value"
+}
+

taints

+

Object

+

You can add taints to created nodes to configure anti-affinity. Each taint contains the following parameters:

+
  • Key: A key must contain 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain name can be used as the prefix of a key.
  • Value: A value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (_), and periods (.).
  • Effect: Available options are NoSchedule, PreferNoSchedule, and NoExecute.
+

Example:

+
"taints": [{
+	"key": "status",
+	"value": "unavailable",
+	"effect": "NoSchedule"
+}, {
+	"key": "looks",
+	"value": "bad",
+	"effect": "NoSchedule"
+}]
+

ecsGroupId

+

String

+

ECS group ID. If this parameter is specified, the node is created in the specified ECS group.

+
NOTE:

This parameter is not supported when you add a node to a node pool or use CCE Turbo cluster.

+
+

dedicatedHostId

+

String

+

ID of the DeH host. If this parameter is specified, the node is scheduled to its own DeH host.

+
NOTE:

This parameter is not supported when you add a node to a node pool.

+
+

offloadNode

+

Boolean

+

Whether the node belongs to a CCE Turbo cluster.

+
NOTE:

This parameter is not supported when you add a node to a node pool.

+
+

faultDomain

+

String

+

Cloud server fault domain. The node is created in the fault domain specified by this parameter.

+
NOTE:

You must specify the ECS to which the fault domain policy applies and enable the fault domain feature.

+
+

extendParam

+

extendParam object

+

Extended parameter. Format: Key-value pair.

+

runtime

+

Runtime object

+

Container runtime. The default value is docker.

+
+
+ +
+ + + + + + + + + + + + + +
Table 19 Data structure of the nodeNicSpec field

Parameter

+

Type

+

Description

+

primaryNic

+

primaryNic object

+

Description about the primary NIC.

+

extNics

+

Array of extNics objects

+

Extension NIC.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 20 Data structure of the primaryNic/extNics field

Parameter

+

Type

+

Description

+

subnetId

+

String

+

Network ID of the subnet to which the NIC belongs.

+

fixedIps

+

Array of strings

+

The IP address of the primary NIC is specified by fixedIps. The number of IP addresses cannot be greater than the number of created nodes. fixedIps and ipBlock cannot be specified at the same time.

+

ipBlock

+

String

+

CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. fixedIps and ipBlock cannot be specified at the same time.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 21 Data structure of the extendParam field

Parameter

+

Type

+

Description

+

chargingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

ecs:performancetype

+

String

+

Type of the ECS specifications.

+

orderID

+

String

+

Order ID.

+
NOTE:

This field is not supported for the current version.

+
+

productID

+

String

+

Product ID.

+
NOTE:

This field is not supported for the current version.

+
+

publicKey

+

String

+

Key pair used to log in to the node. Used when creating a key pair.

+

maxPods

+

Integer

+

Maximum number of pods on the node.

+

dockerBaseSize

+

Integer

+

Available disk space of a single Docker container on the node using the device mapper.

+

agency_name

+

String

+

Specifies the IAM agency name.

+

DockerLVMConfigOverride

+

String

+

Docker data disk configurations. The following is the default configuration:

+
"DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
+

The configuration contains the following fields:

+
  • userLV: size of the user space, for example: vgpaas/20%VG.
  • userPath: mount path of the user space, for example: /home/wqt-test.
  • diskType: disk type. Currently, only the evs, hdd, and ssd are supported.
  • lvType: type of a logic volume. Currently, the value can be linear or striped.
  • dockerThinpool: Docker disk space, for example: vgpaas/60%VG.
  • kubernetesLV: kubelet size, for example: vgpaas/20%VG.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 22 Data structure of the status field

Parameter

+

Type

+

Description

+

jobID

+

String

+

ID of the node creation job. You can query job progress by job ID to keep updated on node creation progress.

+

phase

+

String

+

Node status.

+
  • Build: The VM that hosts the node is being created.
  • Active: The node is ready for use.
  • Abnormal: The node is not ready for use.
  • Deleting: The node is being deleted.
  • Installing: The node is being installed.
  • Upgrading: The node is being upgraded.
+

serverId

+

String

+

ID of the underlying ECS node.

+

publicIP

+

String

+

Node EIP. If the ECS data is not synchronized in real time, you can click Sync Node Data on the console to manually update the data.

+

privateIP

+

String

+

IP address in the private network segment of the primary NIC on the node.

+
+
+ +
+ + + + + + + + + +
Table 23 Runtime

Parameter

+

Type

+

Description

+

name

+

String

+

Container runtime. The default value is docker.

+

Enumeration values:

+
  • docker
  • containerd
+
+
+

Example response:

+
{
+    "kind": "Node",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "myhost",
+        "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+        "labels": {
+            "foo": "bar"
+        },
+        "annotations": {
+            "annotation1": "abc"
+        }
+    },
+    "spec": {
+        "flavor": "s1.medium",
+        "az": "eu-de-01",
+        "os": "EulerOS 2.5",
+        "login": {
+            "sshKey": "Keypai-demo"
+        },
+        "rootVolume": {
+            "volumetype": "SAS",
+            "size": 40
+        },
+        "dataVolumes": [
+            {
+                "volumetype": "SAS",
+                "size": 100
+            }
+        ],
+        "publicIP": {
+            "count": 2,
+            "eip": {
+                "iptype": "5_bgp",
+                "bandwidth": {
+                    "size": 10,
+                    "sharetype": "PER",
+                    "chargemode": "traffic"
+                }
+            }
+        },
+        "nodeNicSpec": {
+            "primaryNic": {
+                "subnetId": "2afc3d7f-07d1-4c25-ba2e-8ee48d253d9f"
+            }
+        },
+        "count": 2,
+        "extendParam": {
+            "chargingMode": 0,
+            "ecs:performancetype": "normal",
+            "init-node-password": "",
+            "orderID": "",
+            "productID": ""
+        }
+    },
+    "status": {
+        "jobID": "2ec9b78d-9368-46f3-8f29-d1a95622a568"
+    }
+}
+

CCE Turbo cluster:

+
{
+    "kind": "Node",
+    "apiversion": "v3",
+    "metadata": {
+        "name": "turbo-cluster-node",
+        "uid": "5ecfddfe-87db-11ec-b5e5-0255ac101514"
+    },
+    "spec": {
+        "flavor": "cce.c4.22xlarge.4.physical.129nic",
+        "az": "eu-de-01",
+        "login": {
+            "sshKey": "id_rsa"
+        },
+        "rootVolume": {
+            "size": 40,
+            "volumetype": "SAS",
+            "hw:passthrough": true
+        },
+        "dataVolumes": [
+            {
+                "size": 100,
+                "volumetype": "SAS",
+                "hw:passthrough": true
+            }
+        ],
+        "count": 1,
+        "runtime": {
+            "name": "containerd"
+        },
+        "extendParam": {
+            "alpha.cce/NodeImageID":"0fea78c3-1b31-4653-8859-ac151ccadcd4"
+        }
+    },
+    "status": {
+        "jobID": "5ec1518c-87db-11ec-b5e5-0255ac101514"
+    }
+}
+
+

Status Code

Table 24 describes the status codes of this API.

+ +
+ + + + + + + +
Table 24 Status code

Status Code

+

Description

+

201

+

The job for creating a node in a specified cluster is successfully issued.

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0243.html b/docs/cce/api-ref/cce_02_0243.html new file mode 100644 index 000000000..f86d1d448 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0243.html @@ -0,0 +1,654 @@ + + +

Reading a Specified Node

+

Function

This API is used to obtain details about a node with a specified node ID.

+
+

URI

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+

node_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+ +
+ + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

errorStatus

+

No

+

String

+

This field allows a cluster to be in the Error state if exceptions occur when the cluster is being deleted. If the value of errorStatus is null, the cluster stays in the Deleting state, but not Error.

+

Minimum: 0

+

Maximum: 10

+
+
+
+

Request

Request parameters:

+

Table 3 describes the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 3 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

Table 4 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Node and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Node's metadata, which is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the node targeted by this API. CCE creates or updates objects by defining or updating its spec.

+

status

+

status object

+

Node status and jobID of the node creation job.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the metadata field

Parameter

+

Type

+

Description

+

name

+

String

+

Node name.

+
NOTE:

Enter 1 to 56 characters, starting with a lowercase letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed.

+
+

Minimum: 1

+

Maximum: 56

+

uid

+

String

+

Node ID, which is unique and automatically generated after the resource is created. A user-defined ID will not take effect.

+

labels

+

Map<String,String>

+

CCE node label (not the native Kubernetes label).

+

Labels are used to select objects that meet certain criteria. A label is a key-value pair.

+

Example:

+
"labels": {
+ "key" : "value"
+}
+

creationTimestamp

+

String

+

Time when the object was created. The value is automatically generated after the object is created. A user-defined value will not take effect.

+

updateTimestamp

+

String

+

Time when the object was updated. The value is automatically generated after the object is created. A user-defined value will not take effect.

+

annotations

+

annotations object

+

Node annotation. Format: Key-value pair.

+
+
+ +
+ + + + + + + + + +
Table 6 Data structure of the annotations field

Parameter

+

Type

+

Description

+

kubernetes.io/node-pool.id

+

String

+
  • If a node is created from a node pool, the value is the ID of the node pool.
  • If the node is not created from a node pool, the value is in the following format: Name of the AZ where the node is located#Node flavor#Node OS name
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Data structure of the spec field

Parameter

+

Type

+

Description

+

flavor

+

String

+

Node specifications. For details, see the description of the flavorRef parameter in Creating an ECS.

+

az

+

String

+

AZ of the node. For details, see the description of the availability_zone parameter in Creating an ECS.

+

os

+

String

+

Node OS.

+
  • Nodes in clusters of Kubernetes v1.11 or earlier support EulerOS 2.2.
  • Nodes in clusters of Kubernetes v1.13 or v1.15 support EulerOS 2.5.
  • Nodes in clusters of Kubernetes v1.17 support EulerOS 2.5 and CentOS 7.7.
  • Nodes in clusters of Kubernetes v1.19, v1.21 or v1.23 support EulerOS 2.5, EulerOS 2.9 and CentOS 7.7.
  • Nodes using kata runtime in CCE Turbo cluster support EulerOS 2.9.
+

login

+

login object

+

Node login mode, which can only be key pair.

+

rootVolume

+

Volume object

+

System disk parameters of the node.

+

dataVolumes

+

Array of Volume object

+

Data disk parameters of the node.

+

publicIP

+

publicIP object

+

EIP parameters of a node.

+

nodeNicSpec

+

nodeNicSpec object

+

Description about the node NIC.

+

count

+

Integer

+

Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1.

+
NOTE:

This parameter can be set to 0 for a node pool.

+
+

billingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

ecsGroupId

+

String

+

ECS group ID. If this parameter is specified, the node is created in the specified ECS group.

+
NOTE:

This parameter is not supported when you add a node to a node pool or use CCE Turbo cluster.

+
+

dedicatedHostId

+

String

+

ID of the DeH host. If this parameter is specified, the node is scheduled to its own DeH host.

+
NOTE:

This parameter is not supported when you add a node to a node pool.

+
+

offloadNode

+

Boolean

+

Whether the node belongs to a CCE Turbo cluster.

+
NOTE:

This parameter is not supported when you add a node to a node pool.

+
+

faultDomain

+

String

+

Cloud server fault domain. The node is created in the fault domain specified by this parameter.

+
NOTE:

You must specify the ECS to which the fault domain policy applies and enable the fault domain feature.

+
+

runtime

+

Runtime object

+

Container runtime. The default value is docker.

+

extendParam

+

extendParam object

+

Extended parameter. Format: Key-value pair.

+
+
+ +
+ + + + + + + + + + + + + +
Table 8 Data structure of the nodeNicSpec field

Parameter

+

Type

+

Description

+

primaryNic

+

primaryNic object

+

Description about the primary NIC.

+

extNics

+

Array of extNics objects

+

Extension NIC.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 9 Data structure of the primaryNic/extNics field

Parameter

+

Type

+

Description

+

subnetId

+

String

+

Network ID of the subnet to which the NIC belongs.

+

fixedIps

+

Array of strings

+

The IP address of the primary NIC is specified by fixedIps. The number of IP addresses cannot be greater than the number of created nodes. fixedIps and ipBlock cannot be specified at the same time.

+

ipBlock

+

String

+

CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. fixedIps and ipBlock cannot be specified at the same time.

+
+
+ +
+ + + + + + + + + +
Table 10 Runtime

Parameter

+

Type

+

Description

+

name

+

String

+

Container runtime. The default value is docker.

+

Enumeration values:

+
  • docker
  • containerd
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 11 Data structure of the extendParam field

Parameter

+

Type

+

Description

+

chargingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

ecs:performancetype

+

String

+

Type of the ECS specifications.

+

orderID

+

String

+

Order ID.

+
NOTE:

This field is not supported for the current version.

+
+

productID

+

String

+

Product ID.

+
NOTE:

This field is not supported for the current version.

+
+

maxPods

+

Integer

+

Maximum number of pods on the node.

+

dockerBaseSize

+

Integer

+

Available disk space of a single Docker container on the node using the device mapper.

+

periodType

+

String

+

Purchase duration type.

+
NOTE:

This field is not supported for the current version.

+
+

periodNum

+

Integer

+

Purchase duration.

+
NOTE:

This field is not supported for the current version.

+
+

isAutoRenew

+

String

+

Whether auto renewal is enabled.

+
  • true: Indicates that auto renewal is enabled.
  • false: Indicates that auto renewal is disabled.
+
NOTE:

This field is not supported for the current version.

+
+

DockerLVMConfigOverride

+

String

+

Docker data disk configurations. The following is the default configuration:

+
"DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
+

The configuration contains the following fields:

+
  • userLV: size of the user space, for example: vgpaas/20%VG.
  • userPath: mount path of the user space, for example: /home/wqt-test.
  • diskType: disk type. Currently, only the evs, hdd, and ssd are supported.
  • lvType: type of a logic volume. Currently, the value can be linear or striped.
  • dockerThinpool: Docker disk space, for example: vgpaas/60%VG.
  • kubernetesLV: kubelet size, for example: vgpaas/20%VG.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 12 Data structure of the status field

Parameter

+

Type

+

Description

+

phase

+

String

+

Node status.

+
  • Build: The VM that hosts the node is being created.
  • Active: The node is ready for use.
  • Abnormal: The node is unready for use.
  • Deleting: The node is being deleted.
  • Installing: The node is being installed.
  • Upgrading: The node is being upgraded.
+

serverId

+

String

+

ID of the ECS where the node resides.

+

publicIP

+

String

+

EIP used by the node to access public networks.

+

privateIP

+

String

+

Private IP address used by the node to communicate with other nodes in the same VPC as the current cluster.

+
+
+

Example response:

+
{
+  "kind": "Node",
+  "apiVersion": "v3",
+  "metadata": {
+    "name": "myhost",
+    "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+    "creationTimestamp": "2020-02-02 08:12:40.124294439 +0000 UTC",
+    "updateTimestamp": "2020-02-02 08:18:20.221871842 +0000 UTC",
+    "annotations": {
+      "kubernetes.io/node-pool.id": "eu-de-01#s1.medium#EulerOS 2.5"
+    }
+  },
+  "spec": {
+    "flavor": "s1.medium",
+    "az": "eu-de-01",
+    "os": "EulerOS 2.5",
+    "login": {
+      "sshKey": "Keypair-demo"
+    },
+    "rootVolume": {
+      "volumetype": "SAS",
+      "size": 40
+    },
+    "dataVolumes": [
+      {
+        "volumetype": "SAS",
+        "size": 100
+      }
+    ],
+    "publicIP": {
+      "eip": {
+        "bandwidth": {}
+      }
+    }
+  },
+  "status": {
+    "phase": "Active",
+    "serverId": "456789abc-9368-46f3-8f29-d1a95622a568",
+    "publicIP": "10.34.56.78",
+    "privateIP": "192.168.1.23"
+  }
+}
+
+

Status Code

Table 13 describes the status code of this API.

+ +
+ + + + + + + +
Table 13 Status code

Status Code

+

Description

+

200

+

Information about the node in the specified cluster is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0244.html b/docs/cce/api-ref/cce_02_0244.html new file mode 100644 index 000000000..7f32664cc --- /dev/null +++ b/docs/cce/api-ref/cce_02_0244.html @@ -0,0 +1,182 @@ + + +

Listing All Nodes in a Cluster

+

Function

This API is used to obtain details about all nodes in a cluster with a specified cluster ID.

+
+

URI

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

Table 3 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + +
Table 3 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed to List.

+

apiVersion

+

String

+

API version. The value is fixed at v3.

+

items

+

Object

+

A list of details for all nodes in the current cluster. You can filter nodes by items.metadata.name. For more information, see Table 4.

+
+
+

Example response:

+
+
{
+  "kind": "List",
+  "apiVersion": "v3",
+  "items": [
+    {
+      "kind": "Node",
+      "apiversion": "v3",
+      "metadata": {
+        "name": "myhost",
+        "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+        "creationTimestamp": "2020-02-02 07:37:24.005071325 +0000 UTC",
+        "updateTimestamp": "2020-02-02 07:44:04.965500815 +0000 UTC",
+        "annotations": {
+         "kubernetes.io/node-pool.id": "eu-de-01#s1.medium#EulerOS 2.5"        
+        }
+      },
+      "spec": {
+        "flavor": "s1.medium",
+        "az": "eu-de-01",
+        "os": "EulerOS 2.5",
+        "login": {
+          "sshKey": "KeyPair-demo"
+        },
+        "rootVolume": {
+          "volumetype": "SAS",
+          "size": 40
+        },
+        "dataVolumes": [
+          {
+            "volumetype": "SAS",
+            "size": 100
+          }
+        ],
+        "publicIP": {
+          "eip": {
+            "bandwidth": {}
+          }
+        },
+      "nodeNicSpec": {
+          "primaryNic": {
+          "subnetId": "c90b3ce5-e1f1-4c87-a006-644d78846438"
+         }
+     },
+      "billingMode": 0
+      },
+      "status": {
+        "phase": "Active",
+        "serverId": "456789abc-9368-46f3-8f29-d1a95622a568",
+        "publicIP": "10.34.56.78",
+        "privateIP": "192.168.1.23"
+      }
+    }
+  ]
+}
+

Status Code

Table 4 describes the status code of this API.

+ +
+ + + + + + + +
Table 4 Status code

Status Code

+

Description

+

200

+

Information about all the nodes in the specified cluster is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0245.html b/docs/cce/api-ref/cce_02_0245.html new file mode 100644 index 000000000..98100a529 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0245.html @@ -0,0 +1,204 @@ + + +

Updating a Specified Node

+

Function

This API is used to update information about a specified node.

+
+

URI

PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+

node_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 and Table 3 describe the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + +
Table 3 Parameters in the request body

Parameter

+

Mandatory

+

Type

+

Description

+

metadata

+

No

+

metadata object

+

Node's metadata, which is a collection of attributes.

+
+
+ +
+ + + + + + + + + + + +
Table 4 Data structure of the metadata field

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Node name. After the node name is changed, the ECS name (VM name) is changed accordingly.

+
+
+

Example request:

+
{
+    "metadata": {
+        "name": "new-hostname"
+    }
+}
+
+

Response

Response parameters:

+

For the description of the response parameters, see Table 4.

+

Example response:

+
+
{
+  "kind": "Node",
+  "apiVersion": "v3",
+  "metadata": {
+    "name": "new-hostname",
+    "uid": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+    "creationTimestamp": " 2020-02-20T21:11:09Z",
+    "updateTimestamp": "2020-02-20T21:11:09Z",
+    "annotations": {
+      "kubernetes.io/node-pool.id": "eu-de-01#s1.medium#EulerOS 2.5"
+    }
+  },
+  "spec": {
+    "flavor": "s1.medium",
+    "az": "eu-de-01",
+    "os": "EulerOS 2.5",
+    "login": {
+      "sshKey": "KeyPair-demo",
+    },
+    "rootVolume": {
+      "volumeType": "SAS",
+      "diskSize": 40
+    },
+    "dataVolumes": [
+      {
+        "volumeType": "SAS",
+        "diskSize": 100
+      }
+    ],
+     "publicIP": {
+        "eip": {
+            "bandwidth": {}
+        }
+     },
+      "nodeNicSpec": {
+          "primaryNic": {
+          "subnetId": "c90b3ce5-e1f1-4c87-a006-644d78846438"
+         }
+     },
+      "billingMode": 0
+    "publicIP": {
+      "eip": {
+      }
+    }
+  },
+  "status": {
+    "phase": "Active",
+    "serverId": "456789abc-9368-46f3-8f29-d1a95622a568",
+    "publicIP": "10.34.56.78",
+    "privateIP": "192.168.1.23"
+  }
+}
+

Status Code

Table 5 describes the status code of this API.

+ +
+ + + + + + + +
Table 5 Status code

Status Code

+

Description

+

200

+

Information about the specified node is successfully updated.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0246.html b/docs/cce/api-ref/cce_02_0246.html new file mode 100644 index 000000000..a51b22325 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0246.html @@ -0,0 +1,300 @@ + + +

Deleting a Node

+

Function

This API is used to delete a specified node.

+
+

URI

DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + + + + + +
Table 1 Description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+

node_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

Table 3 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Node and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Node's metadata, which is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the node targeted by this API. CCE creates or updates objects by defining or updating its spec.

+

status

+

status object

+

Node status and jobID of the node deletion job.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the status field

Parameter

+

Type

+

Description

+

phase

+

String

+

Node status.

+
  • Build: The VM that hosts the node is being created.
  • Active: The node is ready for use.
  • Abnormal: The node is unready for use.
  • Deleting: The node is being deleted.
  • Installing: The node is being installed.
  • Upgrading: The node is being upgraded.
+

jobID

+

String

+

ID of the node deletion job. You can query job progress by job ID to keep updated on node deletion progress.

+

serverId

+

String

+

ID of the ECS where the node resides.

+

publicIP

+

String

+

EIP used by the node to access public networks.

+

privateIP

+

String

+

Private IP address used by the node to communicate with other nodes in the same VPC as the current cluster.

+

deleteStatus

+

DeleteStatus object

+

Resource status during resource deletion.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 DeleteStatus

Parameter

+

Type

+

Description

+

previous_total

+

Integer

+

Total number of existing cluster resource records when the cluster is deleted.

+

current_total

+

Integer

+

Latest number of resource records, which is generated based on the current cluster resource records.

+

updated

+

Integer

+

Total number of resource records updated when the cluster is deleted.

+

added

+

Integer

+

Total number of resource records updated when the cluster is deleted.

+

deleted

+

Integer

+

Total number of resource records deleted when the cluster is deleted.

+
+
+

Example response:

+
+
{
+    "kind": "Node",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "new-hostname",
+        "uid": "cc697ad9-9563-11e8-8ea7-0255ac106311",
+        "creationTimestamp": "2020-02-01 08:20:49.944664515 +0000 UTC",
+        "updateTimestamp": "2020-02-01 09:20:05.644032347 +0000 UTC",
+        "annotations": {
+            "kubernetes.io/node-pool.id": "eu-de-01#s1.medium#EulerOS 2.5"
+        }
+    },
+    "spec": {
+        "flavor": "s1.medium",
+        "az": "eu-de-01",
+        "os": "EulerOS 2.5",
+        "login": {
+            "sshKey": "KeyPair-demo"
+        },
+        "rootVolume": {
+            "volumetype": "SAS",
+            "size": 40
+        },
+        "dataVolumes": [
+            {
+                "volumetype": "SAS",
+                "size": 100
+            }
+        ],
+        "publicIP": {
+            "eip": {
+                "bandwidth": {}
+            }
+        },
+        "nodeNicSpec": {
+            "primaryNic": {
+                "subnetId": "c90b3ce5-e1f1-4c87-a006-644d78846438"
+            }
+        },
+        "billingMode": 0
+    },
+    "status": {
+        "phase": "Active",
+        "jobID": "661f6f7d-956c-11e8-a916-0255ac10575d",
+        "serverId": "5b504f8d-33f1-4ab7-a600-b62dac967d72",
+        "privateIP": "192.168.0.69",
+        "publicIP": "10.154.194.59"
+    }
+}
+

Status Code

Table 6 describes the status code of this API.

+ +
+ + + + + + + +
Table 6 Status code

Status Code

+

Description

+

200

+

The job for deleting the node is successfully delivered.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0247.html b/docs/cce/api-ref/cce_02_0247.html new file mode 100644 index 000000000..91024262b --- /dev/null +++ b/docs/cce/api-ref/cce_02_0247.html @@ -0,0 +1,323 @@ + + +

Reading Job Progress

+

Function

This API is used to query the progress of a job with a specified job ID returned after a job request is issued.

+
  • The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access.
  • You can call this API when:
    • Creating or deleting a cluster
    • Creating or deleting a node
    +
+
+
+

URI

GET /api/v3/projects/{project_id}/jobs/{job_id}

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

job_id

+

Yes

+

Job ID. For details about how to obtain the job ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+

Default: application/json

+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+

Maximum: 16384

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

Table 3 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Job and cannot be changed.

+

Default: Job

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

Default: v3

+

metadata

+

metadata object

+

Node metadata.

+

spec

+

spec object

+

Detailed node parameters.

+

status

+

status object

+

Node status.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Data structure of the metadata field

Parameter

+

Type

+

Description

+

uid

+

String

+

Job ID.

+

creationTimestamp

+

String

+

Job creation time.

+

updateTimestamp

+

String

+

Job update time.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the spec field

Parameter

+

Type

+

Description

+

type

+

String

+

Job type, for example, CreateCluster.

+

clusterUID

+

String

+

ID of the cluster where the job runs.

+

resourceID

+

String

+

ID of the resource on which a job is executed.

+

resourceName

+

String

+

Name of the resource on which a job is executed.

+

extendParam

+

Map<String,String>

+

Extended parameter. This field is not supported for the current version.

+

subJobs

+

Object

+

List of sub-jobs. For details, see Table 3.

+
  • The sub-job list contains details about all sub-jobs.
  • Usually, a cluster/node creation job consists of multiple sub-jobs. The job is complete only after all sub-jobs are complete.
+
+
+ +
+ + + + + + + + + + + + + +
Table 6 Data structure of the status field

Parameter

+

Type

+

Description

+

phase

+

String

+

Job status. The options are as follows:

+
  • JobPhaseInitializing JobPhase = "Initializing"
  • JobPhaseRunning JobPhase = "Running"
  • JobPhaseFailed JobPhase = "Failed"
  • JobPhaseSuccess JobPhase = "Success"
+

reason

+

String

+

Reason why the job is in the current state.

+
+
+

Example response:

+
{
+    "kind": "Job",
+    "apiVersion": "v3",
+    "metadata": {
+        "uid": "354331b2c-229a-11e8-9c75-0255ac100ceb",
+        "creationTimestamp": "2020-02-02 08:12:40.672772389 +0000 UTC",
+        "updateTimestamp": "2020-02-02 08:21:50.478108569 +0000 UTC"
+    },
+    "spec": {
+        "type": "CreateCluster",
+        "clusterUID": "4d1ecb2c-229a-11e8-9c75-0255ac100ceb",
+        "resourceID": "6f4dcb2c-229a-11e8-9c75-0255ac100ceb",
+        "resourceName": "cluster-name",
+        "extendParam": {
+            "serverID": "bc467e3a-2338-11e8-825b-0255ac100c13"
+        },
+        "subJobs": [
+            {
+                "kind": "Job",
+                "apiVersion": "v3",
+                "metadata": {
+                    "uid": "fd474fab-9606-11e8-baa9-0255ac10215d",
+                    "creationTimestamp": "2020-02-02 03:52:34.615819618 +0000 UTC",
+                    "updateTimestamp": "2020-02-02 04:05:29.196243031 +0000 UTC"
+                },
+                "spec": {
+                    "type": "InstallMaster",
+                    "clusterUID": "fcc72de0-9606-11e8-baa8-0255ac10215d",
+                    "resourceID": "fd3b4ac0-9606-11e8-baa8-0255ac10215d",
+                    "extendParam": {
+                        "serverID": "fd3b4ac0-9606-11e8-baa8-0255ac10215d"
+                    }
+                },
+                "status": {
+                    "phase": "Success"
+                }
+            },
+            {
+                "kind": "Job",
+                "apiVersion": "v3",
+                "metadata": {
+                    "uid": "fd474f82-9606-11e8-baa8-0255ac10215d",
+                    "creationTimestamp": "2020-02-02 03:52:33.859150791 +0000 UTC",
+                    "updateTimestamp": "2020-02-02 03:52:34.615655429 +0000 UTC"
+                },
+                "spec": {
+                    "type": "CreatePSMCert",
+                    "clusterUID": "fcc72de0-9606-11e8-baa8-0255ac10215d"
+                },
+                "status": {
+                    "phase": "Success"
+                }
+            }
+        ],       
+    },
+    "status": {
+        "phase": "Running",
+        "reason": ""        
+    }
+}
+
+

Status Code

Table 7 describes the status code of this API.

+ +
+ + + + + + + +
Table 7 Status code

Status Code

+

Description

+

200

+

The progress of the specified job is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0248.html b/docs/cce/api-ref/cce_02_0248.html new file mode 100644 index 000000000..9191fcc5d --- /dev/null +++ b/docs/cce/api-ref/cce_02_0248.html @@ -0,0 +1,383 @@ + + +

Obtaining Cluster Certificates

+

Function

This API is used to obtain certificates of a specified cluster in form of kubeconfig file.

+
+

URI

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert

+

Table 1 describes the parameters of this API.

+
+ +
+ + + + + + + + + + + + + +
Table 1 Description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+

Request

Request parameters:

+

Table 2 andTable 3 describes the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + +
Table 3 Parameters in the request body

Parameter

+

Mandatory

+

Type

+

Description

+

duration

+

Yes

+

Integer

+

Period during which a cluster certificate is valid, in days.

+

Validity period of the cluster certificate, in days. A cluster certificate can be valid for 1 to 1,825 days. If this parameter is set to -1, the validity period is 1,825 days (about 5 years).

+

Minimum: 1

+

Maximum: 1825

+
+
+

Example request:

+

Applying for a cluster access certificate valid for 30 days

+
{ 
+  "duration": 30
+}
+
+

Response

Response parameters:

+

Table 4 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Config and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v1 and cannot be changed.

+

preferences

+

Object

+

This field is not used currently and is left unspecified by default.

+

clusters

+

Array of clusters objects

+

Cluster list.

+

users

+

Array of users objects

+

Certificate information and client key information of a specified user.

+

contexts

+

Array of contexts objects

+

Context list.

+

current-context

+

String

+

Current context. If publicIp (VM EIP) exists, the value is external. If publicIp does not exist, the value is internal.

+
+
+
+ +
+ + + + + + + + + + + + + +
Table 5 Data structure of the clusters field

Parameter

+

Type

+

Description

+

name

+

String

+

Cluster name.

+
  • If the publicIp parameter does not exist (that is, no EIP exists), there is only one cluster in the cluster list, and the value of this parameter is internalCluster.
  • If the publicIp parameter exists (that is, the EIP exists), there is more than one cluster in the cluster list, and the value of this parameter is externalCluster.
+

cluster

+

cluster object

+

Cluster information.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 6 Data structure of the cluster field

Parameter

+

Type

+

Description

+

server

+

String

+

Node IP address.

+

certificate-authority-data

+

String

+

Certificate authorization data.

+

insecure-skip-tls-verify

+

Boolean

+

Whether to skip the server certificate verification. If the cluster type is externalCluster, the value is true.

+
+
+ +
+ + + + + + + + + + + + + +
Table 7 Data structure of the users field

Parameter

+

Type

+

Description

+

name

+

String

+

The value is fixed to user.

+

user

+

user object

+

Stores the certificate information and ClientKey information of a specified user.

+
+
+ +
+ + + + + + + + + + + + + +
Table 8 Data structure of the user field

Parameter

+

Type

+

Description

+

client-certificate-data

+

String

+

Client certificate.

+

client-key-data

+

String

+

Contains PEM encoding data from the TLS client key file.

+
+
+ +
+ + + + + + + + + + + + + +
Table 9 Data structure of the contexts field

Parameter

+

Type

+

Description

+

name

+

String

+

Context name.

+
  • If the publicIp parameter does not exist (that is, no EIP exists), there is only one cluster in the cluster list, and the value of this parameter is internal.
  • If the publicIp parameter exists (that is, the EIP exists), there is more than one cluster in the cluster list, and the value of this parameter is external.
+

context

+

context object

+

Context information.

+
+
+ +
+ + + + + + + + + + + + + +
Table 10 Data structure of the context field

Parameter

+

Type

+

Description

+

cluster

+

String

+

Cluster context.

+

user

+

String

+

User context.

+
+
+

Response example:

+
{
+    "kind": "Config",
+    "apiVersion": "v1",
+    "preferences": {},
+    "clusters": [
+        {
+            "name": "internalCluster",
+            "cluster": {
+                "server": "https://192.168.1.7:5443",
+                "certificate-authority-data": ""
+            }
+        }
+    ],
+    "users": [
+        {
+            "name": "user",
+            "user": {
+                "client-certificate-data": "",
+                "client-key-data": ""
+            }
+        }
+    ],
+    "contexts": [
+        {
+            "name": "internal",
+            "context": {
+                "cluster": "internalCluster",
+                "user": "user"
+            }
+        }
+    ],
+    "current-context": "internal"
+}
+

Status Code

Table 11 describes the status code of this API.

+ +
+ + + + + + + +
Table 11 Status code

Status Code

+

Description

+

200

+

Certificates of the specified cluster are successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0250.html b/docs/cce/api-ref/cce_02_0250.html new file mode 100644 index 000000000..631427c44 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0250.html @@ -0,0 +1,508 @@ + + +

Error Codes

+

If an error occurs in API calling, no result is returned. Identify the cause based on the error code of each API. If an error occurs in API calling, HTTP status code 4xx or 5xx is returned. The response body contains the specific error code and information.

+

Format of an Error Response Body

If an error occurs during API calling, an error code and a message will be displayed. The following shows an error response body.

+
{
+      "errorMessage": "Authorization failed.",
+      "errorCode": "CCE.01401001",
+}
+

In the preceding information, errorCode is an error code, and errorMessage describes the error.

+
+

Error Code Description

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Status Code

+

Error Code

+

Error Message

+

Description

+

Troubleshooting

+

400

+

CCE.01400001

+

Invalid request.

+

Invalid request body.

+

Modify the request body based on the returned message and the CCE API documentation, or contact technical support.

+

400

+

CCE.01400002

+

Subnet not found in the VPC.

+

No subnet is found in the VPC.

+

Check whether the subnet in the request body is in the corresponding VPC.

+

400

+

CCE.01400003

+

IPv6 not supported for the subnet.

+

The subnet does not support IPv6.

+

Use a subnet that supports IPv6.

+

400

+

CCE.01400004

+

No available flavors for master nodes.

+

There is no available flavor for the master node.

+

Change to another available cluster flavor or contact technical support.

+

400

+

CCE.01400005

+

Container network CIDR blocks conflict.

+

The container CIDR block conflicts with the existing one.

+

Check the container CIDR block based on the returned message.

+

400

+

CCE.01400006

+

Content type not supported.

+

The content type is invalid.

+

Use the supported content type by referring to the CCE API documentation.

+

400

+

CCE.01400007

+

Insufficient cluster quota.

+

Insufficient cluster quota.

+

Submit a service ticket to increase the cluster quota.

+

400

+

CCE.01400008

+

Insufficient server quota

+

Insufficient ECS quota.

+

Submit a service ticket to increase the ECS quota.

+

400

+

CCE.01400009

+

Insufficient CPU quota.

+

Insufficient ECS CPU quota.

+

Submit a service ticket to increase the ECS CPU quota.

+

400

+

CCE.01400010

+

Insufficient memory quota.

+

Insufficient ECS memory quota.

+

Submit a service ticket to increase the ECS memory quota.

+

400

+

CCE.01400011

+

Insufficient security group quota.

+

Insufficient security group quota.

+

Submit a service ticket to increase the security group quota.

+

400

+

CCE.01400012

+

Insufficient EIP quota.

+

Insufficient EIP quota.

+

Submit a service ticket to increase the EIP quota.

+

400

+

CCE.01400013

+

Insufficient volume quota.

+

Insufficient disk quota.

+

Submit a service ticket to increase the disk quota based on the returned message.

+

400

+

CCE.01400014

+

Excessive nodes in the cluster.

+

The number of nodes exceeds the cluster scale.

+

Submit a service ticket to change the cluster flavor.

+

400

+

CCE.01400015

+

Version not supported.

+

The cluster version is not supported.

+

Create a cluster of the supported version based on the returned message.

+

400

+

CCE.01400016

+

Current cluster type does not support this node flavor.

+

The current cluster type does not support this node flavor.

+

Use the correct node flavor based on the returned message.

+

400

+

CCE.01400017

+

No available container CIDR block found.

+

No available container CIDR block is found.

+

Use a correct container CIDR block based on the returned message.

+

400

+

CCE.01400018

+

This type of OS cannot be created in this CCE version.

+

The current CCE version does not support this type of OS.

+

Use a supported OS based on the returned message.

+

400

+

CCE.01400019

+

Insufficient resource tenant quota.

+

The quota of the resource tenant is insufficient.

+

Rectify the fault based on the returned message or contact technical support.

+

400

+

CCE.01400020

+

Insufficient VPC quota.

+

Insufficient VPC quota.

+

Rectify the fault based on the returned message or contact technical support.

+

400

+

CCE.01400021

+

No available flavors for nodes.

+

There is no available flavor for the node.

+

Change to another available node flavor or contact technical support.

+

400

+

CCE.01400022

+

No available node volumes for nodes.

+

There is no available EVS disk flavor for the node.

+

Change to another available EVS disk flavor or contact technical support.

+

400

+

CCE.02400001

+

Invalid request.

+

Invalid request body.

+

Modify the request body based on the returned message and the CCE API documentation, or contact technical support.

+

400

+

CCE.03400001

+

Invalid request.

+

Invalid request body.

+

Modify the request body based on the returned message and the CCE API documentation, or contact technical support.

+

400

+

CCE.03400002

+

Missing access key.

+

The access key is missing.

+

Ensure that the version of the installed or upgraded storage add-on is correct, or contact technical support.

+

401

+

CCE.01401001

+

Authorization failed.

+

Authentication failed.

+

Rectify the fault based on the returned message or contact technical support.

+

401

+

CCE.02401001

+

Authorization failed.

+

Authentication failed.

+

Rectify the fault based on the returned message or contact technical support.

+

401

+

CCE.03401001

+

Authorization failed.

+

Authentication failed.

+

Rectify the fault based on the returned message or contact technical support.

+

403

+

CCE.01403001

+

Forbidden.

+

Access denied.

+

Rectify the fault based on the returned message or contact technical support.

+

403

+

CCE.02403001

+

Forbidden.

+

Access denied.

+

Rectify the fault based on the returned message or contact technical support.

+

403

+

CCE.03403001

+

Forbidden.

+

Access denied.

+

Rectify the fault based on the returned message or contact technical support.

+

404

+

CCE.01404001

+

Resource not found.

+

Resources not found.

+

Check whether the resource to be accessed has been deleted.

+

404

+

CCE.02404001

+

Resource not found.

+

Resources not found.

+

Check whether the resource to be accessed has been deleted.

+

404

+

CCE.03404001

+

Resource not found.

+

Resources not found.

+

Check whether the resource to be accessed has been deleted.

+

409

+

CCE.01409001

+

The resource already exists.

+

The resource already exists.

+

Delete the resource and try again.

+

409

+

CCE.01409002

+

Resource updated with out-of-date version.

+

An out-of-date version is used to update the target resource.

+

Ensure that the target resource version is the latest one or contact technical support.

+

409

+

CCE.02409001

+

The resource already exists.

+

The resource already exists.

+

Delete the resource and try again.

+

409

+

CCE.03409001

+

Addon instance has installed.

+

The add-on instance has been installed.

+

Delete the add-on instance and install it again.

+

429

+

CCE.01429002

+

Resource locked by other requests.

+

The resource is locked by another request.

+

Rectify the fault based on the returned message or contact technical support.

+

429

+

CCE.02429001

+

The throttling threshold has been reached.

+

The maximum number of requests has been reached.

+

Reduce the frequency of sending requests or contact technical support.

+

500

+

CCE.01500001

+

Internal error.

+

Internal error.

+

Rectify the fault based on the returned message or contact technical support.

+

500

+

CCE.02500001

+

Internal error.

+

Internal error.

+

Rectify the fault based on the returned message or contact technical support.

+

500

+

CCE.03500001

+

Internal error.

+

Internal error.

+

Rectify the fault based on the returned message or contact technical support.

+
+
+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0269.html b/docs/cce/api-ref/cce_02_0269.html new file mode 100644 index 000000000..d1a887a07 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0269.html @@ -0,0 +1,994 @@ + + +

Listing All Node Pools in a Specified Cluster

+

Function

This API is used to obtain information about all node pools in a specified cluster.

+
  • The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access.
  • A node pool is a group of nodes within a cluster that all have the same configuration.
+
+
+

URI

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + + + +
Table 1 Description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 and Table 3 describe the request parameters.

+ +
+ + + + + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Type

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+

Maximum: 16384

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Description of the query parameter

Parameter

+

Mandatory

+

Type

+

Description

+

errorStatus

+

No

+

String

+

This field allows a cluster to be in the Error state if exceptions occur when the cluster is being deleted. If the value of errorStatus is null, the cluster stays in the Deleting state, but not Error.

+

Minimum: 0

+

Maximum: 10

+

showDefaultNodePool

+

No

+

String

+

Whether to display the default node pool. By default, the default node pool is not displayed. If this parameter is set to true, the default node pool is displayed.

+
+
+

Example request:

+
GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools?showDefaultNodePool=true
+
+

Response

Response parameters:

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed to List.

+

apiVersion

+

String

+

API version. The value is fixed to v3.

+

items

+

Array of NodePool objects

+

/

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 NodePool

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at NodePool.

+

Default: NodePool

+

apiVersion

+

String

+

API version. The value is fixed at v3.

+

Default: v3

+

metadata

+

NodePoolMetadata object

+

Metadata information of the node pool.

+

spec

+

NodePoolSpec object

+

Node pool specifications.

+

status

+

NodePoolStatus object

+

Node pool status.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 NodePoolMetadata

Parameter

+

Type

+

Description

+

name

+

String

+

Node pool name.

+
NOTE:

Naming rules:

+
  • Enter 1 to 50 characters, starting with a lowercase letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed.
  • You cannot create node pools named DefaultPool.
+
+

Minimum: 1

+

Maximum: 50

+

uid

+

String

+

UID of the node pool. The value is automatically generated after the object is updated. A user-defined value will not take effect.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 NodePoolSpec

Parameter

+

Type

+

Description

+

type

+

String

+

Node pool type. If this parameter is left blank, the value vm is used by default.

+
  • vm: ECS
  • ElasticBMS: BMS. This value is valid in CCE Turbo cluster.
+

nodeTemplate

+

V3NodeSpec object

+

Detailed parameters of the node pool template.

+

initialNodeCount

+

Integer

+

Initial number of nodes for the node pool.

+

autoscaling

+

NodePoolNodeAutoscaling object

+

Auto scaling parameters.

+

nodeManagement

+

NodeManagement object

+

Node management configuration.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 V3NodeSpec

Parameter

+

Type

+

Description

+

flavor

+

String

+

Node specifications.

+

Minimum: 1

+

Maximum: 50

+

az

+

String

+

\t\nName of the AZ where the node is located. This AZ exists at the underlying layer and is in the physical AZ group of the user.

+

Maximum: 200

+

os

+

String

+

Node OS.

+

login

+

Login object

+

Node login mode.

+

rootVolume

+

Volume object

+

System disk information of the node.

+

dataVolumes

+

Array of Volume objects

+

Data disk parameters of the node. Currently, you can add the second data disk for your node on the CCE console.

+

publicIP

+

V3NodePublicIP object

+

EIP of the node.

+

nodeNicSpec

+

NodeNicSpec object

+

NIC information of the node.

+

count

+

Integer

+

Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit. This field can be set to 0 for a node pool.

+

billingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

taints

+

Array of Taint objects

+

You can add taints to created nodes to set affinity. Each taint contains the following three parameters:

+
  • Key: The value must start with a letter or digit and can contain letters, digits, hyphens (-), underscores (), and periods (.). The maximum length is 63 characters. In addition, the DNS subdomain can be used as the prefix.
  • Value: The value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (), and periods (.).
  • Effect: Available options are NoSchedule, PreferNoSchedule, and NoExecute.
+

Example:

+
"taints": [{ 
+        "key": "status", 
+        "value": "unavailable", 
+        "effect": "NoSchedule" 
+ }, { 
+        "key": "looks", 
+        "value": "bad", 
+        "effect": "NoSchedule" 
+ }]
+

k8sTags

+

Map<String,String>

+

The format is a key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Enter 1 to 63 characters, starting with a letter or digit. Only letters, digits, hyphens (-), underscores (), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key
  • Value: The value can be left blank or contain 1 to 63 characters that start with a letter or digit. Only letters, digits, hyphens (-), underscores (), and periods (.) are allowed in the character string.
+

Example:

+
"k8sTags": { 
+        "key": "value" 
+ }
+

ecsGroupId

+

String

+

Cloud server group ID. If this field is specified, the node is created in the specified cloud server group.

+
NOTE:

This field is not supported when you use CCE Turbo cluster.

+
+

dedicatedHostId

+

String

+

ID of the DeH to which the node is scheduled.

+

This field is not supported when you add a node during node pool creation.

+

offloadNode

+

Boolean

+

Whether the node belongs to a CCE Turbo cluster.

+
NOTE:

This field is not supported when you add a node during node pool creation.

+
+

userTags

+

Array of UserTag objects

+

Cloud server labels. The key of a label must be unique. The maximum number of user-defined labels supported by CCE depends on the region. In the region that supports the least number of labels, you can still create up to 5 labels for a cloud server.

+

extendParam

+

Map<String,Object>

+

Extended parameter for creating a node. The options are as follows:

+
  • ecs:performancetype: ECS flavor. This field does not exist for a BMS node.
  • productID: product ID.
  • maxPods: maximum number of pods that can be created on a node, including the default system pods. Value range: 16 to 256 This limit prevents the node from being overloaded fpr managing too many pods.
+
  • DockerLVMConfigOverride: Docker data disk configurations. The following is an example default configuration:
    "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
    +

    The configuration contains the following fields:

    +
    • userLV: size of the user space, for example, vgpaas/20%VG.
    • userPath: mount path of the user space, for example, /home/wqt-test.
    • diskType: disk type. Currently, only evs, hdd, and ssd are supported.
    • lvType: type of a logic volume. Currently, the value can be linear or striped.
    • dockerThinpool: Docker space size, for example, vgpaas/60%VG.
    • kubernetesLV: kubelet space size, for example, vgpaas/20%VG.
    +
  • dockerBaseSize: available disk space of a single Docker container on a node in Device Mapper mode. This field is not supported in OverlayFS mode (nodes that use CentOS 7.6 or Ubuntu 18.04 in CCE Turbo clusters and nodes that use Ubuntu 18.04 in CCE clusters).
  • init-node-password: initial node password
  • offloadNode: whether the node is a CCE Turbo cluster node. This parameter is not supported when you add a node to a node pool.
  • publicKey: node public key. Used when creating a key pair.
  • alpha.cce/preInstall: pre-installation script.
+
NOTE:

The input value must be Base64-encoded. (Command: echo -n Content to be encoded | base64)

+
+
  • alpha.cce/postInstall: post-installation script
+
NOTE:

The input value must be Base64-encoded. (Command: echo -n Content to be encoded | base64)

+
+
  • alpha.cce/NodeImageID: This field is required when a custom image is used to create a BMS node.
+
+
+ +
+ + + + + + + + + + + + + +
Table 9 Login

Parameter

+

Type

+

Description

+

sshKey

+

String

+

Name of the key pair used for login. Either the key pair or password must be used for login.

+

For details on how to create a key pair, see Creating a Key Pair.

+

userPassword

+

String

+

Password used for node login.

+
NOTE:

This field is not supported for the current version.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 10 Volume

Parameter

+

Type

+

Description

+

size

+

Integer

+

Disk size in the unit of GB.

+
  • System disk: 40 to 1024
  • Data disk: 100 to 32768
+

volumetype

+

String

+

Disk type. For details about possible values, see the description of the root_volume parameter in the API used to create an ECS in the ECS API reference.

+
  • SATA: common I/O disk
  • SAS: high I/O disk
  • SSD: ultra-high I/O disk
+

extendParam

+

Map<String,Object>

+

Disk extension parameter. For details, see the description of the extendparam parameter in Creating an ECS.

+

hw:passthrough

+

Boolean

+
  • Pay attention to this field if your ECS is SDI-compliant. If the value of this field is true, the created disk is of the SCSI type.
  • If the node pool type is ElasticBMS, this field must be set to true.
+

metadata

+

dataVolumeMetadata object

+

Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted.

+

If data disks are created using a data disk image, this parameter cannot be used.

+
+
+ +
+ + + + + + + + + + + + + +
Table 11 DataVolumeMetadata

Parameter

+

Type

+

Description

+

__system__encrypted

+

String

+

Whether the EVS disk is encrypted. The value 0 indicates that the EVS disk is not encrypted, and the value 1 indicates that the EVS disk is encrypted.

+

If this field does not exist, the disk will not be encrypted by default.

+

__system__cmkid

+

String

+

CMK ID, which indicates encryption in metadata. This field is used with __system__encrypted.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 12 V3NodePublicIP

Parameter

+

Type

+

Description

+

ids

+

Array of strings

+

IDs of existing EIPs. The quantity cannot be greater than the number of nodes to be created.

+
NOTE:

If the ids parameter has been set, you do not need to set the count and eip parameters.

+
+

count

+

Integer

+

Number of EIPs to be dynamically created.

+
NOTE:

The count and eip parameters must be set together.

+
+

eip

+

V3NodeEIPSpec object

+

EIP configuration.

+
+
+ +
+ + + + + + + + + + + + + +
Table 13 V3NodeEIPSpec

Parameter

+

Type

+

Description

+

iptype

+

String

+

EIP type.

+

bandwidth

+

V3NodeBandwidth object

+

Bandwidth parameters of the EIP.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 14 V3NodeBandwidth

Parameter

+

Type

+

Description

+

chargemode

+

String

+

Bandwidth billing modes:

+
  • If this field is not specified, the billing is based on bandwidth.
  • If the field is null, the billing is based on bandwidth.
  • If the field value is traffic, the billing is based on traffic.
  • If the value is out of the preceding options, the cloud server will fail to be created.
+
NOTE:
  • Billed by bandwidth: The billing will be based on the data transfer rate (in Mbps) of public networks. If your bandwidth usage is higher than 10%, this billing mode is recommended.
  • Billed by traffic: The billing will be based on the total traffic (in GB) transferred on public networks. If your bandwidth usage is lower than 10%, this billing mode is recommended.
+
+

size

+

String

+

Bandwidth size.

+

sharetype

+

String

+

Bandwidth sharing type.

+
+
+ +
+ + + + + + + + + + + + + +
Table 15 NodeNicSpec

Parameter

+

Type

+

Description

+

primaryNic

+

primaryNic object

+

Description of the primary NIC.

+

extNics

+

Array of extNics objects

+

Extension NIC.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 16 Data structure of the primaryNic/extNics field

Parameter

+

Type

+

Description

+

subnetId

+

String

+

Network ID of the subnet to which the NIC belongs.

+

fixedIps

+

Array of strings

+

The IP address of the primary NIC is specified by fixedIps. The number of IP addresses cannot be greater than the number of created nodes. fixedIps and ipBlock cannot be specified at the same time.

+

ipBlock

+

String

+

CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. fixedIps and ipBlock cannot be specified at the same time.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 17 Taint

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+

value

+

String

+

Value.

+

Maximum: 63

+

effect

+

String

+

Effect.

+

Enumeration values:

+
  • NoSchedule
  • PreferNoSchedule
  • NoExecute
+
+
+ +
+ + + + + + + + + + + + + +
Table 18 UserTag

Parameter

+

Type

+

Description

+

key

+

String

+

Key of the cloud server label. The value cannot start with CCE- or __type_baremetal.

+

Minimum: 1

+

Maximum: 36

+

value

+

String

+

Value of the cloud server label.

+

Minimum: 0

+

Maximum: 43

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 19 NodePoolNodeAutoscaling

Parameter

+

Type

+

Description

+

enable

+

Boolean

+

Whether to enable auto scaling.

+

Default: false

+

minNodeCount

+

Integer

+

Minimum number of nodes allowed if auto scaling is enabled. The value cannot be greater than the maximum number of nodes allowed by the cluster specifications.

+

Minimum: 0

+

maxNodeCount

+

Integer

+

Maximum number of nodes allowed if auto scaling is enabled. This value must be greater than or equal to the value of minNodeCount and cannot exceed the maximum number of nodes in the cluster specifications.

+

Minimum: 0

+

scaleDownCooldownTime

+

Integer

+

Interval between two scaling operations, in minutes. During this period, nodes added after a scale-up will not be deleted.

+

Minimum: 0

+

Maximum: 2147483647

+

priority

+

Integer

+

Weight of a node pool. A node pool with a higher weight has a higher priority during scaling.

+
+
+ +
+ + + + + + + + + +
Table 20 NodeManagement

Parameter

+

Type

+

Description

+

serverGroupReference

+

String

+

Cloud server group ID. If this field is specified, all nodes in the node pool will be created in this group. The group ID can be specified only when you create the node pool and cannot be modified. When you specify a cloud server group, the number of nodes in the node pool cannot exceed the group quota.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 21 NodePoolStatus

Parameter

+

Type

+

Description

+

currentNode

+

Integer

+

Number of nodes in the node pool.

+

phase

+

String

+

Node pool status. If this field is left blank, the node pool is available.

+
  • Synchronizing: Scale-in is being performed.
  • Synchronized: The node pool fails to be updated.
  • SoldOut: Node resources are sold out.
  • Deleting: The node pool is being deleted.
  • Error: An error occurs.
+

Enumeration values:

+
  • Synchronizing
  • Synchronized
  • SoldOut
  • Deleting
  • Error
+

jobId

+

String

+

ID of the job to delete the node pool.

+
+
+

Response example:

+
{
+    "kind": "List",
+    "apiVersion": "v3",
+    "items": [
+        {
+            "kind": "NodePool",
+            "apiVersion": "v3",
+            "metadata": {
+                "name": "nodepool-name-change",
+                "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7"
+            },
+            "spec": {
+                "initialNodeCount": 0,
+                "type": "vm",
+                "nodeTemplate": {
+                    "flavor": "s6.large.2",
+                    "az": "eu-de-02",
+                    "os": "EulerOS 2.5",
+                    "login": {
+                        "sshKey": "KeyPair-nodepool",
+                        "userPassword": {}
+                    },
+                    "rootVolume": {
+                        "volumetype": "SAS",
+                        "size": 40
+                    },
+                    "dataVolumes": [
+                        {
+                            "volumetype": "SAS",
+                            "size": 100,
+                            "extendParam": {
+                                "useType": "docker"
+                            }
+                        }
+                    ],
+                    "publicIP": {
+                        "eip": {
+                            "bandwidth": {}
+                        }
+                    },
+                    "nodeNicSpec": {
+                        "primaryNic": {
+                            "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef"
+                        }
+                    },
+                    "billingMode": 0,
+                    "taints": [
+                        {
+                            "key": "change-taints",
+                            "value": "value1",
+                            "effect": "NoExecute"
+                        }
+                    ],
+                    "k8sTags": {
+                        "cce.cloud.com/cce-nodepool": "nodepool-name-change",
+                        "change-tag": "value2"
+                    },
+                    "userTags": [
+                        {
+                            "key": "change-resource-tag",
+                            "value": "value3"
+                        }
+                    ],
+                    "extendParam": {
+                        "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear",
+                        "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3",
+                        "alpha.cce/postInstall": "bHMgLWwK",
+                        "alpha.cce/preInstall": "bHMgLWw=",
+                        "maxPods": 110
+                    }
+                },
+                "autoscaling": {
+                    "enable": true,
+                    "minNodeCount": 2,
+                    "maxNodeCount": 4,
+                    "scaleDownCooldownTime": 10,
+                    "priority": 2
+                },
+                "nodeManagement": {
+                    "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3"
+                }
+            },
+            "status": {
+                "currentNode": 0,
+                "phase": ""
+            }
+        }
+    ]
+}
+
+

Status Code

Table 22 describes the status code of this API.

+ +
+ + + + + + + +
Table 22 Status code

Status Code

+

Description

+

200

+

Information about all node pools in the cluster is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+

Error Codes

See Error Codes.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0271.html b/docs/cce/api-ref/cce_02_0271.html new file mode 100644 index 000000000..e22d2f552 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0271.html @@ -0,0 +1,30 @@ + + +

How to Obtain Parameters in the API URI

+

project_id

  1. Log in to the CCE console, click the username in the upper right corner, and select My Credentials.
  2. On the Projects tab page, obtain the project ID of the corresponding region.

    Figure 1 Viewing project IDs
    +

+
+

cluster_id

  1. Log in to the CCE console, and choose Resource Management > Clusters from the navigation pane.
  2. Click the name of the created cluster. The cluster details page is displayed. Obtain the cluster ID.

    Figure 2 Obtaining the cluster ID
    +

+
+

node_id

  1. Log in to the CCE console, and choose Resource Management > Nodes from the navigation pane.
  2. Click the node name to go to the node details page and obtain the node ID.

    Figure 3 Obtaining the node ID
    +

+
+

job_id

  1. Log in to the CCE console, and choose Resource Management > Clusters or choose Resource Management > Nodes from the navigation pane.
  2. For example, on the Clusters page, click the status of the cluster that is being created. The cluster creation job details page is displayed.
  3. Obtain the job ID.

    If you are using Google Chrome, press F12. On the pane displayed on the right, click the Network tab. Enter jobs in the Filter text box to filter the job list. Select a job from the list on the left and click Preview. The UID field indicates the UID of the job.

    +
    Figure 4 Obtaining the job ID
    +

+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/cce/api-ref/cce_02_0272.html b/docs/cce/api-ref/cce_02_0272.html new file mode 100644 index 000000000..e755c6232 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0272.html @@ -0,0 +1,152 @@ + + +

API Permissions

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Module

+

API

+

Function

+

Permission

+

Cluster management

+

GET /api/v3/projects/{project_id}/clusters

+

Obtaining information about clusters in a specified project

+

cce:cluster:list

+

POST /api/v3/projects/{project_id}/clusters

+

Creating a cluster

+

cce:cluster:create

+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}

+

Obtaining information about a specified cluster

+

cce:cluster:get

+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert

+

Obtaining the certificates of a cluster

+

PUT /api/v3/projects/{project_id}/clusters/{cluster_id}

+

Updating information about a cluster

+

cce:cluster:update

+

DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}

+

Deleting a cluster

+

cce:cluster:delete

+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes

+

Obtaining information about all nodes in a cluster

+

cce:node:list

+

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes

+

Creating nodes for a cluster

+

cce:node:create

+

PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Updating information about a specified node

+

cce:node:update

+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Obtaining information about a specified node

+

cce:node:get

+

DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Deleting a node

+

cce:node:delete

+

GET /api/v3/projects/{project_id}/jobs/{job_id}

+

Obtaining information about a specified job

+

cce:job:get

+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools

+

Obtaining information about all node pools in a specified cluster

+

cce:nodepool:list

+

Storage management

+

POST /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims

+

Creating a PersistentVolumeClaim

+

cce:storage:create

+

POST /api/v1/cloudpersistentvolumes

+

Creating a PersistentVolume

+

DELETE /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims/{name}

+

Deleting a PersistentVolumeClaim

+

cce:storage:delete

+

DELETE /api/v1/cloudpersistentvolumes/{name}

+

Deleting a PersistentVolume

+

Kubernetes-native APIs

+

/api/*

+

Operating Kubernetes resources

+

cce:kubernetes:*

+

/apis/*

+
+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0273.html b/docs/cce/api-ref/cce_02_0273.html new file mode 100644 index 000000000..180ebbb16 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0273.html @@ -0,0 +1,238 @@ + + +

Change History

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Change history

Date

+

Revision

+

2022-05-24

+
  • Supported clusters of v1.23.
  • Add a note about how to automatically install ICAgent. For details, see Creating a Cluster.
  • The native APIs of Kubernetes will no longer be maintained. For details, see Overview.
+

2022-03-24

+

Supported clusters of v1.21.

+ +

2022-02-17

+
+

2020-11-06

+

Updated flavor in Creating a Cluster and Reading a Specified Cluster.

+

2020-09-17

+
+

2020-09-04

+

Updated API Usage Guidelines.

+

2020-08-31

+
+

2020-07-30

+
+

2020-05-08

+
+

2020-04-14

+
+

2020-03-25

+
+

2020-02-27

+
+

2020-02-25

+

Updated API Usage Guidelines.

+

2020-02-24

+

Updated Cluster Management.

+

2020-02-21

+

Updated Table 7.

+

2020-02-10

+

Updated Listing All Node Pools in a Specified Cluster.

+

2019-12-03

+
  • Revised descriptions according to the suggestions raised in UAT.
  • Deleted section 2.3 Storage Management.
+

2019-11-20

+

Updated API Usage Guidelines.

+

2019-11-12

+

Revised descriptions according to the suggestions raised in UAT.

+

2019-10-30

+
  • Revised descriptions to indicate support for creating Kubernetes clusters 1.13.10.
  • Updated API Usage Guidelines.
+

2019-08-21

+

Added the description of authentication Table 5.

+

2019-07-29

+

Updated the example response in Listing All Node Pools in a Specified Cluster.

+

2019-07-25

+

Allows users to configure the command lines that will be injected into a node when adding a node. For details, see Table 8.

+

2019-07-11

+

Revised descriptions according to the suggestions raised in UAT.

+

2019-06-30

+
  • Added the description of SecurityGroup in 6.2.2-Table Data structure of the hostNetwork field in 6.2.2-Obtaining Information About a Specified Cluster.
  • Added 6.2.16-Obtaining Information About All Node Pools in a Specified Cluster.
  • Allowed users to assign a cluster EIP when creating a cluster. For details, see 6.2.1-Creating a Container Cluster.
+

2019-05-30

+
  • Added multi_AZ to the sample API request and response in 6.2.1-Creating a Container Cluster.
  • Revised descriptions to indicate support for creating Kubernetes clusters 1.9.10.
  • Revised descriptions in the previous issue.
+

2019-04-29

+

Added 6.1-API Version Query.

+

2019-03-13

+

Revised descriptions to indicate support for creating Kubernetes clusters 1.11.3.

+

2019-03-05

+

Revised descriptions according to the suggestions raised in UAT.

+

2019-02-25

+

Revised descriptions according to the suggestions raised in UAT.

+

2019-02-15

+

Revised descriptions according to the suggestions raised in UAT.

+

2019-01-24

+
  • Revised the example response in 6.2.14-Querying the Access Information of a Specified Cluster and added 6.2.14-Table Data structure of the bandwidth field.
  • Deleted description about elasticIp in 6.2.15-Modifying the Access Information of a Specified Cluster.
+

2019-01-03

+
  • Added 6.2.14-Querying the Access Information of a Specified Cluster and 6.2.15-Modifying the Access Information of a Specified Cluster.
  • Revised descriptions in the previous issue.
+

2018-11-29

+

Added the underlay_ipvlan container network type in 6.2.1-Table Data structure of the containerNetwork field.

+

2018-11-07

+

Revised descriptions in the previous issue.

+

2018-10-10

+

Revised descriptions in the previous issue.

+

2018-09-15

+
  • Added the description of the dedicated_host_id in 2.7-Table Data structure of the spec field.
  • Modified the description of the type in 7.3.1-Table Data structure of the spec field.
+

2018-09-05

+
  • Modified the directory structure.
  • Added the procedure for creating BMS clusters.
  • Added the description of creating a high-speed network for a BMS cluster in 4.5-(Optional) Creating a High-Speed Network.
+

2018-07-25

+
  • Deleted the description of Kubernetes 1.7 APIs.
  • Deleted the procedure for creating BMS clusters.
+

2018-07-06

+

Added the external_otc parameter in 6.2.2-Table Data structure of the endpoint&nbsp;field, and updated related examples.

+

2018-06-26

+
  • Added the az parameter in 6.2.1-Table Data structure of the spec&nbsp;field.
  • Corrected the URIs in 7.9.4-Deleting All Deployments.
+

2018-06-21

+

Revised descriptions in the previous issue.

+

2018-05-26

+
  • Split the CCE2.0 API Reference into two manuals: CCE2.0 API Reference (Kubernetes) and CCE2.0 API Reference (CCE).

    The former manual described native Kubernetes APIs and the latter manual described CCE's proprietary APIs.

    +
  • Updated parameter description in 6.2.1-Creating a Container Cluster, 6.2.7-Creating a Node, and 6.2.13-Obtaining the Progress of a Specified Job.
  • Advised users to perform storage operations by using the PersistentVolumeClaim API instead of the APIs described in 7.7-PersistentVolumeClaim and 7.8-PersistentVolume.

    For details on how to use the PersistentVolumeClaim, see User Guide > Storage Management > Using Storage Volumes of EVS Disks > Creating an EVS Disk Using kubectl.

    +
+

2018-04-28

+

This issue is the first official release.

+
+
+
+ diff --git a/docs/cce/api-ref/cce_02_0320.html b/docs/cce/api-ref/cce_02_0320.html new file mode 100644 index 000000000..c7096d8ae --- /dev/null +++ b/docs/cce/api-ref/cce_02_0320.html @@ -0,0 +1,25 @@ + + +

Add-on Management

+
+
+ + + +
+ diff --git a/docs/cce/api-ref/cce_02_0321.html b/docs/cce/api-ref/cce_02_0321.html new file mode 100644 index 000000000..03eb99ea9 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0321.html @@ -0,0 +1,542 @@ + + +

Reading Add-on Templates

+

Function

This API is used to query add-on information.

+

The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cluster ID, and uri indicates the resource path, that is, the path for API access.

+
+
+

URI

GET /api/v3/addontemplates

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

addon_template_name

+

No

+

Name of the specified template. If this parameter is left blank, all templates are queried.

+

Minimum: 2

+

Maximum: 30

+
+
+
+

Request

Request parameters:

+

Table 2 lists the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+

Maximum: 16384

+
+
+

Example request:

+

NA

+
+

Response

For details about the response parameters, see Table 3.

+ +
+ + + + + + + + + + + + + + + + + +
Table 3 Parameters in the response body

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

items

+

items objects

+

Add-on template list.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the items field

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Basic information about an add-on. Metadata is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the add-on template.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the metadata field

Parameter

+

Type

+

Description

+

uid

+

String

+

Unique ID of the add-on template.

+

name

+

String

+

Add-on name.

+

labels

+

Object

+

Add-on labels in the format of key-value pairs.

+

annotations

+

Object

+

Add-on annotations in the format of key-value pairs.

+

updateTimestamp

+

String

+

Time when the add-on instance was updated.

+

creationTimestamp

+

String

+

Time when the add-on instance was created

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 Data structure of the spec field

Parameter

+

Type

+

Description

+

type

+

String

+

Template type (helm or static).

+

require

+

Boolean

+

Whether the add-on is installed by default.

+

labels

+

Array of strings

+

Group to which the template belongs.

+

logoURL

+

String

+

URL of the logo image.

+

readmeURL

+

String

+

URL of the readme file.

+

description

+

String

+

Template description.

+

versions

+

Array of versions objects

+

Template version details.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Data structure of the versions field

Parameter

+

Type

+

Description

+

version

+

String

+

Add-on version.

+

input

+

Object

+

Add-on installation parameters.

+

stable

+

Boolean

+

Whether the add-on version is a stable release.

+

translate

+

Object

+

Translation information used by the GUI.

+

supportVersions

+

Array of supportVersions objects

+

Cluster versions that support the add-on template.

+

creationTimestamp

+

String

+

Creation time of the add-on instance.

+

updateTimestamp

+

String

+

Time when the add-on instance was updated.

+
+
+ +
+ + + + + + + + + + + + + +
Table 8 Data structure of the supportVersions field

Parameter

+

Type

+

Description

+

clusterType

+

String

+

Cluster type that supports the add-on template.

+

clusterVersion

+

Array of strings

+

Cluster versions that support the add-on template. The parameter value is a regular expression.

+
+
+

Example response:

+
{
+    "kind": "Addon",
+    "apiVersion": "v3",
+    "items": [
+        {
+            "kind": "Addon",
+            "apiVersion": "v3",
+            "metadata": {
+                "uid": "coredns",
+                "name": "coredns",
+                "creationTimestamp": "2020-07-13T20:04:33Z",
+                "updateTimestamp": "2020-07-13T20:04:34Z"
+            },
+            "spec": {
+                "type": "helm",
+                "require": true,
+                "labels": [
+                    "ServiceDiscovery"
+                ],
+                "logoURL": "https://***/cce-addon-aw1hz2u/corednslogo.svg",
+                "description": "CoreDNS is a DNS server that chains plugins and provides Kubernetes DNS Services",
+                "versions": [
+                    {
+                        "version": "1.15.3",
+                        "input": {
+                            "basic": {
+                                "cluster_ip": "10.247.3.10",
+                                "platform": "linux-amd64",
+                                "swr_addr": "10.125.13.11:20202",
+                                "swr_user": "test"
+                            },
+                            "parameters": {
+                                "custom": {
+                                    "stub_domains": "",
+                                    "upstream_nameservers": ""
+                                },
+                                "flavor1": {
+                                    "name": 2500,
+                                    "replicas": 2,
+                                    "resources": [
+                                        {
+                                            "limitsCpu": "500m",
+                                            "limitsMem": "512Mi",
+                                            "name": "coredns",
+                                            "requestsCpu": "500m",
+                                            "requestsMem": "512Mi"
+                                        }
+                                    ]
+                                },
+                                "flavor2": {
+                                    "name": 5000,
+                                    "replicas": 2,
+                                    "resources": [
+                                        {
+                                            "limitsCpu": "1000m",
+                                            "limitsMem": "1024Mi",
+                                            "name": "coredns",
+                                            "requestsCpu": "1000m",
+                                            "requestsMem": "1024Mi"
+                                        }
+                                    ]
+                                },
+                                "flavor3": {
+                                    "name": 10000,
+                                    "replicas": 2,
+                                    "resources": [
+                                        {
+                                            "limitsCpu": "2000m",
+                                            "limitsMem": "2048Mi",
+                                            "name": "coredns",
+                                            "requestsCpu": "2000m",
+                                            "requestsMem": "2048Mi"
+                                        }
+                                    ]
+                                },
+                                "flavor4": {
+                                    "name": 20000,
+                                    "replicas": 4,
+                                    "resources": [
+                                        {
+                                            "limitsCpu": "2000m",
+                                            "limitsMem": "2048Mi",
+                                            "name": "coredns",
+                                            "requestsCpu": "2000m",
+                                            "requestsMem": "2048Mi"
+                                        }
+                                    ]
+                                }
+                            }
+                        },
+                        "stable": true,
+                        "translate": {
+                            "en_US": {
+                                "addon": {
+                                    "changeLog": "add workaround for klog/coredns crash issue",
+                                    "description": "CoreDNS is a DNS server that chains plugins and provides Kubernetes DNS Services"
+                                },
+                                "description": {
+                                    "Parameters.custom.stub_domains": "The target nameserver may itself be a Kubernetes service. For instance, you can run your own copy of dnsmasq to export custom DNS names into the ClusterDNS namespace, a JSON map using a DNS suffix key (e.g. "acme.local") and a value consisting of a JSON array of DNS IPs.",
+                                    "Parameters.custom.upstream_nameservers": "If specified, then the values specified replace the nameservers taken by default from the node's /etc/resolv.conf. Limits:a maximum of three upstream nameservers can be specified, A JSON array of DNS IPs.",
+                                    "Parameters.flavor1.description": "Concurrent domain name resolution ability  -  External domain name:2500 qps,  Internal domain name:10000 qps",
+                                    "Parameters.flavor1.name": 2500,
+                                    "Parameters.flavor2.description": "Concurrent domain name resolution ability  -  External domain name:5000 qps, Internal domain name:20000 qps",
+                                    "Parameters.flavor2.name": 5000,
+                                    "Parameters.flavor3.description": "Concurrent domain name resolution ability  -  External domain name:10000 qps, Internal domain name:40000 qps",
+                                    "Parameters.flavor3.name": 10000,
+                                    "Parameters.flavor4.description": "Concurrent domain name resolution ability  -  External domain name:20000 qps, Internal domain name:80000 qps",
+                                    "Parameters.flavor4.name": 20000
+                                },
+                                "key": {
+                                    "Parameters.custom.stub_domains": "stub domain",
+                                    "Parameters.custom.upstream_nameservers": "upstream nameservers"
+                                }
+                            },
+                            "fr_FR": {
+                                "addon": {
+                                    "changeLog": "ajouter une solution de contournement pour le problème de plantage klog / coredns",
+                                    "description": "Un serveur DNS qui enchaîne les plug-ins et fournit des services DNS Kubernetes."
+                                },
+                                "description": {
+                                    "Parameters.custom.stub_domains": "Le serveur de noms cible peut lui-même être un service Kubernetes. Par exemple, vous pouvez exécuter votre propre copie de dnsmasq pour exporter des noms DNS personnalisés dans l'espace de noms ClusterDNS, une carte JSON à l'aide d'une clé de suffixe DNS (par exemple, «acme.local») et une valeur constituée d'un tableau JSON d'adresses IP DNS.",
+                                    "Parameters.custom.upstream_nameservers": "Si spécifié, les valeurs spécifiées remplacent les serveurs de noms pris par défaut dans le fichier /etc/resolv.conf du nœud. Limites: un maximum de trois serveurs de noms en amont peuvent être spécifiés, un tableau JSON d'adresses IP DNS.",
+                                    "Parameters.flavor1.description": "Capacité de résolution de nom de domaine simultanée - Nom de domaine externe: 2500 qps, Nom de domaine interne: 10000 qp",
+                                    "Parameters.flavor1.name": 2500,
+                                    "Parameters.flavor2.description": "Capacité de résolution de nom de domaine simultanée - Nom de domaine externe: 5000 qps, Nom de domaine interne: 20000 qp",
+                                    "Parameters.flavor2.name": 5000,
+                                    "Parameters.flavor3.description": "Capacité de résolution de nom de domaine simultanée - Nom de domaine externe: 10000 qps, Nom de domaine interne: 40000 qp",
+                                    "Parameters.flavor3.name": 10000,
+                                    "Parameters.flavor4.description": "Capacité de résolution de nom de domaine simultanée - Nom de domaine externe: 20000 qps, Nom de domaine interne: 80000 qp",
+                                    "Parameters.flavor4.name": 20000
+                                },
+                                "key": {
+                                    "Parameters.custom.stub_domains": "domaine stub",
+                                    "Parameters.custom.upstream_nameservers": "serveurs de noms en amont"
+                                }
+                            },
+                            "zh_CN": {
+                                "addon": {
+                                    "changeLog": "",
+                                    "description": ""
+                                },
+                                "description": {
+                                    "Parameters.custom.stub_domains": "",
+                                    "Parameters.custom.upstream_nameservers": "",
+                                    "Parameters.flavor1.description": "",
+                                    "Parameters.flavor1.name": 2500,
+                                    "Parameters.flavor2.description": "",
+                                    "Parameters.flavor2.name": 5000,
+                                    "Parameters.flavor3.description": "",
+                                    "Parameters.flavor3.name": 10000,
+                                    "Parameters.flavor4.description": "",
+                                    "Parameters.flavor4.name": 20000
+                                },
+                                "key": {
+                                    "Parameters.custom.stub_domains": "",
+                                    "Parameters.custom.upstream_nameservers": ""
+                                }
+                            }
+                        },
+                        "supportVersions": [
+                            {
+                                "clusterType": "VirtualMachine",
+                                "clusterVersion": [
+                                    "v1.15.*"
+                                ]
+                            }
+                        ],
+                        "creationTimestamp": "2020-07-13T20:04:33Z",
+                        "updateTimestamp": "2020-07-13T20:04:33Z"
+                    }
+                ]
+            }
+        }
+    ]
+}
+
+

Status Codes

Table 9 describes the status codes of this API.

+ +
+ + + + + + + +
Table 9 Status codes

Status Code

+

Description

+

200

+

OK

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0322.html b/docs/cce/api-ref/cce_02_0322.html new file mode 100644 index 000000000..94a1c4230 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0322.html @@ -0,0 +1,632 @@ + + +

Installing an Add-on Instance

+

Function

This API is used to install an add-on instance by using the add-on template. One or more instances will be created for the installed add-on.

+

The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cluster ID, and uri indicates the resource path, that is, the path for API access.

+
+
+

URI

POST /api/v3/addons

+
+

Request

Request parameters:

+

Table 1 lists the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameters in the request body

Parameter

+

Mandatory

+

Type

+

Description

+

kind

+

Yes

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apiVersion

+

Yes

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

Yes

+

metadata object

+

Basic information about the add-on. Metadata is a collection of attributes.

+

spec

+

Yes

+

spec object

+

Detailed description of add-on installation or upgrade.

+
+
+ +
+ + + + + + + + + + + +
Table 3 Data structure of the metadata field

Parameter

+

Mandatory

+

Type

+

Description

+

annotations

+

Yes

+

Object

+

Add-on annotations in the format of key-value pairs.

+

For add-on installation, the value is fixed at {"addon.install/type":"install"}.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the spec field

Parameter

+

Mandatory

+

Type

+

Description

+

clusterID

+

Yes

+

String

+

Cluster ID.

+

version

+

Yes

+

String

+

Version number of the add-on to be installed or upgraded, for example, v1.0.0.

+

addonTemplateName

+

Yes

+

String

+

Name of the add-on template to be installed, for example, coredns.

+

values

+

Yes

+

Object

+

Add-on template installation parameters (varying depending on the add-on). During the add-on upgrade, you need to specify all the installation parameters. If the parameters are not specified, the default values in the add-on template are used. The current add-on installation parameters can be obtained through the API for querying add-on instances.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 5 Data structure of the values field

Parameter

+

Mandatory

+

Type

+

Description

+

basic

+

Yes

+

Object

+

Basic add-on information.

+

custom

+

No

+

Object

+

Custom parameters of the add-on.

+
+
+

Example request:

+
{
+    "metadata": {
+        "annotations": {
+            "addon.install/type": "install"
+        }
+    },
+    "spec": {
+        "clusterID": "9dd81b6e-e8e5-11ea-8aeb-0255ac11161d",
+        "version": "1.1.10",
+        "addonTemplateName": "gpu-beta",
+        "values": {
+            "basic": {
+                "obs_url": "obs.eu-de.otc.t-systems.com",
+                "region": "eu-de",
+                "swr_addr": "10.125.7.25:20202",
+                "swr_user": "test",
+                "rbac_enabled": true
+            },
+            "custom": {
+                "is_driver_from_nvidia": true,
+                "nvidia_driver_download_url": "https://us.download.nvidia.com/tesla/396.37/NVIDIA-Linux-x86_64-396.37.run"
+            }
+        }
+    }
+}
+
+

Response

Response parameters:

+

For the description about response parameters, see Table 6.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 Parameters in the response body

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Basic information about the add-on. Metadata is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the add-on instance.

+

status

+

status object

+

Add-on instance status.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Data structure of the metadata field

Parameter

+

Type

+

Description

+

uid

+

String

+

Unique ID of the add-on.

+

name

+

String

+

Add-on name.

+

labels

+

Object

+

Add-on labels in the format of key-value pairs.

+

annotations

+

Object

+

Add-on annotations in the format of key-value pairs.

+

updateTimestamp

+

String

+

Time when the add-on was updated.

+

creationTimestamp

+

String

+

Time when the add-on was created.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 Data structure of the spec field

Parameter

+

Type

+

Description

+

clusterID

+

String

+

Cluster ID.

+

version

+

String

+

Add-on template version, for example, v1.0.0.

+

addonTemplateName

+

String

+

Add-on template name, for example, coredns.

+

addonTemplateType

+

String

+

Add-on template type.

+

addonTemplateLabels

+

Array of strings

+

Group to which the add-on template belongs.

+

addonTemplateLogo

+

String

+

OBS address of the current add-on logo.

+

description

+

String

+

Add-on template description.

+

values

+

Object

+

Add-on template installation parameters. These parameters vary depending on the add-on.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 9 Data structure of the status field

Parameter

+

Type

+

Description

+

status

+

String

+

Add-on instance status.

+

Reason

+

String

+

Cause of unsuccessful add-on installation.

+

message

+

String

+

Installation error details.

+

targetVersions

+

Array of strings

+

Versions to which the current add-on version can be upgraded.

+

currentVersion

+

currentVersion object

+

Current version of the add-on instance.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 10 Data structure of the currentVersion field

Parameter

+

Type

+

Description

+

version

+

String

+

Add-on version.

+

input

+

Object

+

Add-on installation parameters.

+

stable

+

Boolean

+

Whether the add-on version is a stable release.

+

translate

+

Object

+

Translation information used by the GUI.

+

supportVersions

+

Array of supportVersions objects

+

Cluster versions that support the add-on.

+

creationTimestamp

+

String

+

Time when the add-on was created.

+

updateTimestamp

+

String

+

Time when the add-on was updated.

+
+
+ +
+ + + + + + + + + + + + + +
Table 11 Data structure of the supportVersions field

Parameter

+

Type

+

Description

+

clusterType

+

String

+

Cluster type that supports the add-on.

+

clusterVersion

+

Array of strings

+

Cluster versions that support the add-on. The parameter value is a regular expression.

+
+
+

Example response:

+
{
+    "kind": "Addon",
+    "apiVersion": "v3",
+    "metadata": {
+        "uid": "b6ba182c-f7c5-11ea-a975-0255ac111605",
+        "name": "gpu-beta",
+        "creationTimestamp": "2020-09-16T02:38:33Z",
+        "updateTimestamp": "2020-09-16T02:38:33Z"
+    },
+    "spec": {
+        "clusterID": "9dd81b6e-e8e5-11ea-8aeb-0255ac11161d",
+        "version": "1.1.10",
+        "addonTemplateName": "gpu-beta",
+        "addonTemplateType": "helm",
+        "addonTemplateLogo": "https://obs.eu-de.otc.t-systems.com/cce-addon-eu-de-aw1hz2u/gpu-betalogo.svg",
+        "addonTemplateLabels": [
+            "Accelerator"
+        ],
+        "description": "A device plugin for nvidia.com/gpu resource on nvidia driver",
+        "values": {
+            "basic": {
+                "obs_url": "obs.eu-de.otc.t-systems.com",
+                "platform": "linux-amd64",
+                "rbac_enabled": true,
+                "region": "eu-de",
+                "swr_addr": "10.125.7.25:20202",
+                "swr_user": "test"
+            },
+            "custom": {
+                "is_driver_from_nvidia": true,
+                "nvidia_driver_download_url": "https://us.download.nvidia.com/tesla/396.37/NVIDIA-Linux-x86_64-396.37.run"
+            }
+        }
+    },
+    "status": {
+        "status": "installing",
+        "Reason": "",
+        "message": "",
+        "targetVersions": null,
+        "currentVersion": {
+            "version": "1.1.10",
+            "input": {
+                "basic": {
+                    "obs_url": "obs.eu-de.otc.t-systems.com",
+                    "region": "eu-de",
+                    "swr_addr": "10.125.7.25:20202",
+                    "swr_user": "test"
+                },
+                "parameters": {
+                    "custom": {
+                        "is_driver_from_nvidia": true,
+                        "nvidia_driver_download_url": ""
+                    }
+                }
+            },
+            "stable": true,
+            "translate": {
+                "en_US": {
+                    "addon": {
+                        "changeLog": "1.Supports both the default driver link address and the user-definable driver address download driver 2.Support kubernetes 1.15/1.17",
+                        "description": "A device plugin for nvidia.com/gpu resource on nvidia driver"
+                    },
+                    "description": {
+                        "Parameters.custom.drivers_info.cuda": "CUDA Toolkit",
+                        "Parameters.custom.drivers_info.product": "Product",
+                        "Parameters.custom.drivers_info.product_series": "Product Series",
+                        "Parameters.custom.drivers_info.product_type": "Product Type",
+                        "Parameters.custom.nvidia_driver_download_url": "Download the nvidia driver accroding to the input link"
+                    },
+                    "key": {
+                        "Parameters.custom.nvidia_driver_download_url": "Nvidia Driver"
+                    }
+                }
+            },
+            "supportVersions": null,
+            "creationTimestamp": "2020-08-21T08:25:51Z",
+            "updateTimestamp": "2020-08-28T12:21:11Z"
+        }
+    }
+}
+
+

Status Codes

+
+ + + + + + + +
Table 12 Status codes

Status Code

+

Description

+

201

+

OK

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0323.html b/docs/cce/api-ref/cce_02_0323.html new file mode 100644 index 000000000..72fb95f7b --- /dev/null +++ b/docs/cce/api-ref/cce_02_0323.html @@ -0,0 +1,613 @@ + + +

Updating an Add-on Instance

+

Function

This API is used to update an add-on instance.

+

The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cluster ID, and uri indicates the resource path, that is, the path for API access.

+
+
+

URI

PUT /api/v3/addons/{id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

id

+

Yes

+

String

+

Add-on instance ID. For details about how to obtain the ID, see Table 7.

+
+
+
+

Request

Request parameters:

+

Table 2 and Table 3 list the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Parameters in the request body

Parameter

+

Mandatory

+

Type

+

Description

+

kind

+

Yes

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apVersion

+

Yes

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

Yes

+

metadata object

+

Basic information about the add-on. Metadata is a collection of attributes.

+

spec

+

Yes

+

spec object

+

Detailed description of add-on installation or upgrade.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 4 Data structure of the metadata field

Parameter

+

Mandatory

+

Type

+

Description

+

labels

+

No

+

Object

+

Add-on labels in the format of key-value pairs.

+

annotations

+

Yes

+

Object

+

Add-on annotations in the format of key-value pairs.

+

For add-on upgrade, the value is fixed at {"addon.upgrade/type":"upgrade"}.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the spec field

Parameter

+

Mandatory

+

Type

+

Description

+

clusterID

+

Yes

+

String

+

Cluster ID.

+

version

+

Yes

+

String

+

Version number of the add-on to be installed or upgraded, for example, v1.0.0.

+

addonTemplateName

+

Yes

+

String

+

Name of the add-on template to be installed, for example, storage-driver.

+

values

+

Yes

+

Object

+

Add-on template installation parameters (varying depending on the add-on). During the add-on upgrade, you need to specify all the installation parameters. If the parameters are not specified, the default values in the add-on template are used. The current add-on installation parameters can be obtained through the API for querying add-on instances.

+
+
+

Example request:

+
+
{
+    "kind": "Addon",
+    "apiVersion": "v3",
+    "metadata": {
+        "annotations": {
+            "addon.upgrade/type": "upgrade"
+        }
+    },
+    "spec": {
+        "clusterID": "0ffc68e4-5538-11ea-9b4d-0255ac10167e",
+        "version": "1.0.19",
+        "addonTemplateName": "storage-driver",
+        "values": {
+            "flavor": {
+                "description": "Has only one instance",
+                "name": "Single",
+                "replicas": 1,
+                "resources": [
+                    {
+                        "limitsCpu": "100m",
+                        "limitsMem": "300Mi",
+                        "name": "metrics-server",
+                        "requestsCpu": "100m",
+                        "requestsMem": "300Mi"
+                    }
+                ]
+            }
+        }
+    }
+}
+

Response

Response parameters:

+

For details about the response parameters, see Table 6.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 Parameters in the response body

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Basic information about the add-on. Metadata is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the add-on instance.

+

status

+

status object

+

Add-on instance status.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Data structure of the metadata field

Parameter

+

Type

+

Description

+

uid

+

String

+

Unique ID of the add-on instance.

+

name

+

String

+

Add-on name.

+

labels

+

Object

+

Add-on labels in the format of key-value pairs.

+

annotations

+

Object

+

Add-on annotations in the format of key-value pairs.

+

updateTimestamp

+

String

+

Time when the add-on instance was updated.

+

creationTimestamp

+

String

+

Time when the add-on instance was created.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 Data structure of the spce field

Parameter

+

Type

+

Description

+

clusterID

+

String

+

Cluster ID.

+

version

+

String

+

Add-on template version, for example, v1.0.0.

+

addonTemplateName

+

String

+

Add-on template name, for example, coredns.

+

addonTemplateType

+

String

+

Add-on template type.

+

addonTemplateLabels

+

Array of strings

+

Group to which the add-on template belongs.

+

description

+

String

+

Add-on template description.

+

values

+

Object

+

Add-on template installation parameters. These parameters vary with add-on.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 9 Data structure of the status field

Parameter

+

Type

+

Description

+

status

+

String

+

Add-on instance status.

+

Reason

+

String

+

Cause of unsuccessful add-on updating.

+

message

+

String

+

Details about the error that occurred when updating the add-on instance.

+

targetVersions

+

Array of strings

+

Versions to which the current add-on version can be upgraded.

+

currentVersion

+

versions object

+

Current add-on version.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 10 Data structure of the versions field

Parameter

+

Type

+

Description

+

version

+

String

+

Add-on version.

+

input

+

Object

+

Add-on installation parameters.

+

stable

+

Boolean

+

Indicates whether the add-on version is a stable release.

+

translate

+

Object

+

Translation information used by the GUI.

+

supportVersions

+

Array of supportVersions objects

+

Cluster versions that support the add-on.

+

creationTimestamp

+

String

+

Time when the add-on instance was created.

+

updateTimestamp

+

String

+

Time when the add-on instance was updated.

+
+
+ +
+ + + + + + + + + + + + + +
Table 11 Data structure of the supportVersions field

Parameter

+

Type

+

Description

+

clusterType

+

String

+

Cluster type that supports the add-on.

+

clusterVersion

+

Array of strings

+

Cluster versions that support the add-on. The parameter value is a regular expression.

+
+
+
Example response:
{
+    "kind": "Addon",
+    "apiVersion": "v3",
+    "metadata": {
+        "uid": "24b23108-55c0-11e9-926f-0255ac101a31",
+        "name": "gpu-beta",
+        "creationTimestamp": "2019-04-03T03:25:34Z",
+        "updateTimestamp": "2019-04-03T03:25:34Z"
+    },
+    "apiVersion": "v3",
+    "kind": "Addon",
+    "spec": {
+        "addonTemplateName": "gpu-beta",
+        "addonTemplateLogo": "",
+        "addonTemplateType": "helm",
+        "values": {
+            "basic": {
+                "rbac_enabled": true,
+                "swr_user": "swr_test",
+                "swr_addr": "10.125.6.246:20202"
+            }
+        },
+        "description": "A device plugin for nvidia.com/gpu resource on nvidia driver",
+        "addonTemplateLabels": [
+            "Accelerator"
+        ],
+        "clusterID": "0c0e4a63-5539-11e9-95f7-0255ac10177e",
+        "version": "1.0.0"
+    },
+    "status": {
+        "message": "",
+        "Reason": "",
+        "currentVersion": {
+            "input": {
+                "basic": {
+                    "swr_user": "swr_test",
+                    "swr_addr": "10.125.6.246:20202"
+                },
+                "parameters": {}
+            },
+            "stable": true,
+            "creationTimestamp": "2018-10-23T13:14:55Z",
+            "version": "1.0.0",
+            "translate": {
+                "en_US": {
+                    "addon": {
+                        "changeLog": "A device plugin for nvidia.com/gpu resource on nvidia driver",
+                        "description": "A device plugin for nvidia.com/gpu resource on nvidia driver"
+                    }
+                },
+                "zh_CN": {
+                    "addon": {
+                        "changeLog": "",
+                        "description": ""
+                    }
+}
+            },
+            "updateTimestamp": "2018-12-07T09:40:24Z"
+        },
+        "status": "installing"
+    }
+}
+
+
+

Status Codes

+
+ + + + + + + +
Table 12 Status codes

Status Code

+

Description

+

200

+

OK

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0324.html b/docs/cce/api-ref/cce_02_0324.html new file mode 100644 index 000000000..11b9a332f --- /dev/null +++ b/docs/cce/api-ref/cce_02_0324.html @@ -0,0 +1,103 @@ + + +

Deleting an Add-on Instance

+

Function

This API is used to delete an add-on instance.

+

The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cluster ID, and uri indicates the resource path, that is, the path for API access.

+
+
+

URI

DELETE /api/v3/addons/{id}?cluster_id={cluster_id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

cluster_id

+

Yes

+

String

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+

id

+

Yes

+

String

+

Add-on instance ID. For details about how to obtain the ID, see Table 4.

+
+
+
+

Request

Request parameters:

+

Table 2 list the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

N/A

+

Example response:

+
success
+
+

Status Codes

+
+ + + + + + + +
Table 3 Status codes

Status Code

+

Description

+

200

+

OK

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0325.html b/docs/cce/api-ref/cce_02_0325.html new file mode 100644 index 000000000..fa3301ee3 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0325.html @@ -0,0 +1,461 @@ + + +

Reading an Add-on Instance

+

Function

This API is used to obtain details about an add-on instance.

+

The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cluster ID, and uri indicates the resource path, that is, the path for API access.

+
+
+

URI

GET /api/v3/addons/{id}?cluster_id={cluster_id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

cluster_id

+

Yes

+

String

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+

id

+

Yes

+

String

+

Add-on instance ID. For details about how to obtain the ID, see Table 4.

+
+
+
+

Request

Request parameters:

+

Table 2 lists the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

For details about the response parameters, see Table 3.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Parameters in the response body

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Basic information about the add-on. Metadata is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the add-on instance.

+

status

+

status object

+

Add-on instance status.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the metadata field

Parameter

+

Type

+

Description

+

uid

+

String

+

Unique ID of the add-on instance.

+

name

+

String

+

Add-on name.

+

labels

+

Object

+

Add-on labels in the format of key-value pairs.

+

annotations

+

Object

+

Add-on annotations in the format of key-value pairs.

+

updateTimestamp

+

String

+

Time when the add-on instance was updated.

+

creationTimestamp

+

String

+

Time when the add-on instance was created.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the spec field

Parameter

+

Type

+

Description

+

clusterID

+

String

+

Cluster ID.

+

version

+

String

+

Add-on template version, for example, v1.0.0.

+

addonTemplateName

+

String

+

Add-on template name, for example, coredns.

+

addonTemplateType

+

String

+

Add-on template type.

+

addonTemplateLabels

+

Array of strings

+

Group to which the add-on template belongs.

+

description

+

String

+

Add-on template description.

+

values

+

Object

+

Add-on template installation parameters. These parameters vary depending on the add-on.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 Data structure of the status field

Parameter

+

Type

+

Description

+

status

+

String

+

Add-on instance status.

+

Reason

+

String

+

Cause why the system failed to read add-on instance details.

+

message

+

String

+

Installation error details.

+

targetVersions

+

Array of strings

+

Versions to which the current add-on version can be upgraded.

+

currentVersion

+

versions object

+

Current add-on version.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Data structure of the versions field

Parameter

+

Type

+

Description

+

version

+

String

+

Add-on version.

+

input

+

Object

+

Add-on installation parameters.

+

stable

+

Boolean

+

Whether the add-on version is a stable release.

+

translate

+

Object

+

Translation information used by the GUI.

+

supportVersions

+

Array of supportVersions objects

+

Cluster versions that support the add-on.

+
NOTE:

This field is not supported for the current version.

+
+

creationTimestamp

+

String

+

Time when the add-on instance was created.

+

updateTimestamp

+

String

+

Time when the add-on instance was updated.

+
+
+ +
+ + + + + + + + + + + + + +
Table 8 Data structure of the supportVersions field

Parameter

+

Type

+

Description

+

clusterType

+

String

+

Cluster type that supports the add-on.

+

clusterVersion

+

Array of string

+

Cluster versions that support the add-on. The parameter value is a regular expression.

+
+
+
Example response:
{
+    "kind": "Addon",
+    "apiVersion": "v3",
+    "metadata": {
+        "uid": "24b23108-55c0-11e9-926f-0255ac101a31",
+        "name": "gpu-beta",
+        "creationTimestamp": "2019-04-03T03:25:34Z",
+        "updateTimestamp": "2019-04-03T03:25:34Z"
+    },
+    "apiVersion": "v3",
+    "kind": "Addon",
+    "spec": {
+        "addonTemplateName": "gpu-beta",
+        "addonTemplateLogo": "",
+        "addonTemplateType": "helm",
+        "values": {
+            "basic": {
+                "rbac_enabled": true,
+                "swr_user": "swr_test",
+                "swr_addr": "10.125.6.246:20202"
+            }
+        },
+        "description": "A device plugin for nvidia.com/gpu resource on nvidia driver",
+        "addonTemplateLabels": [
+            "Accelerator"
+        ],
+        "clusterID": "0c0e4a63-5539-11e9-95f7-0255ac10177e",
+        "version": "1.0.0"
+    },
+    "status": {
+        "message": "",
+        "Reason": "",
+        "currentVersion": {
+            "input": {
+                "basic": {
+                    "swr_user": "swr_test",
+                    "swr_addr": "10.125.6.246:20202"
+                },
+                "parameters": {}
+            },
+            "stable": true,
+            "creationTimestamp": "2018-10-23T13:14:55Z",
+            "version": "1.0.0",
+            "translate": {
+                "en_US": {
+                    "addon": {
+                        "changeLog": "A device plugin for nvidia.com/gpu resource on nvidia driver",
+                        "description": "A device plugin for nvidia.com/gpu resource on nvidia driver"
+                    }
+                }
+            },
+            "updateTimestamp": "2018-12-07T09:40:24Z"
+        },
+        "status": "installing"
+    }
+}
+
+
+

Status Codes

+
+ + + + + + + + + + +
Table 9 Status codes

Status Code

+

Description

+

200

+

OK

+

500

+

Internal Server Error

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0326.html b/docs/cce/api-ref/cce_02_0326.html new file mode 100644 index 000000000..89f0ab6ff --- /dev/null +++ b/docs/cce/api-ref/cce_02_0326.html @@ -0,0 +1,506 @@ + + +

Listing Add-on Instances

+

Function

This API is used to list all add-on instances in the cluster.

+

The URL for add-on management is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cluster ID, and uri indicates the resource path, that is, the path for API access.

+
+
+

URI

GET /api/v3/addons?cluster_id={cluster_id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

cluster_id

+

Yes

+

String

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request Parameters

Request parameters:

+

Table 2 lists the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

For details about the response parameters, see Table 3.

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 3 Parameters in the response body

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

String

+

Basic information about the add-on. Metadata is a collection of attributes.

+

items

+

Array of items objects

+

Add-on instance list.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Data structure of the items field

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Addon and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v3 and cannot be changed.

+

metadata

+

metadata object

+

Basic information about the add-on. Metadata is a collection of attributes.

+

spec

+

spec object

+

Detailed description of the add-on instance.

+

status

+

status object

+

Add-on instance status.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the metadata field

Parameter

+

Type

+

Description

+

uid

+

String

+

Unique ID of the add-on instance.

+

name

+

String

+

Add-on name.

+

labels

+

Object

+

Add-on labels in the format of key-value pairs.

+

annotations

+

Object

+

Add-on annotations in the format of key-value pairs.

+

updateTimestamp

+

String

+

Time when the add-on instance was updated.

+

creationTimestamp

+

String

+

Time when the add-on instance was created.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 Data structure of the spec field

Parameter

+

Type

+

Description

+

clusterID

+

String

+

Cluster ID.

+

version

+

String

+

Add-on template version, for example, v1.0.0.

+

addonTemplateName

+

String

+

Add-on template name, for example, coredns.

+

addonTemplateType

+

String

+

Add-on template type.

+

addonTemplateLabels

+

Array of strings

+

Group to which the add-on template belongs.

+

description

+

String

+

Add-on template description.

+

values

+

Object

+

Add-on template installation parameters. These parameters vary with add-on.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Data structure of the status field

Parameter

+

Type

+

Description

+

status

+

String

+

Add-on instance status.

+

Reason

+

String

+

Cause why the system failed to list add-on instances.

+

message

+

String

+

Details about the error that occurred when listing add-on instances.

+

targetVersions

+

Array of strings

+

Versions to which the current add-on version can be upgraded.

+

currentVersion

+

versions object

+

Current add-on version.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 Data structure of the versions field

Parameter

+

Type

+

Description

+

version

+

String

+

Add-on version.

+

input

+

Object

+

Add-on installation parameters.

+

stable

+

Boolean

+

Indicates whether the add-on version is a stable release.

+

translate

+

Object

+

Translation information used by the GUI.

+

supportVersions

+

Array of supportVersions objects

+

Cluster versions that support the add-on.

+
NOTE:

This field is not supported for the current version.

+
+

creationTimestamp

+

String

+

Time when the add-on instance was created.

+

updateTimestamp

+

String

+

Time when the add-on instance was updated.

+
+
+ +
+ + + + + + + + + + + + + +
Table 9 Data structure of the supportVersions field

Parameter

+

Type

+

Description

+

clusterType

+

String

+

Cluster type that supports the add-on.

+

clusterVersion

+

Array of strings

+

Cluster versions that support the add-on. The parameter value is a regular expression.

+
+
+
Example response:
{
+    "apiVersion": "v3",
+    "kind": "Addon",
+    "items": [
+        {
+            "metadata": {
+                "uid": "8ca259cc-553b-11e9-926f-0255ac101a31",
+                "name": "storage-driver",
+                "creationTimestamp": "2019-04-02T11:36:26Z",
+                "updateTimestamp": "2019-04-02T11:36:26Z"
+            },
+            "apiVersion": "v3",
+            "kind": "Addon",
+            "spec": {
+                "addonTemplateName": "storage-driver",
+                "addonTemplateLogo": "https://192.168.48.66/cce-addon-aw1hz2u/storage-driverlogo.svg",
+                "addonTemplateType": "helm",
+                "values": {
+                    "flavor": {
+                        "replicas": 1
+                    },
+                    "basic": {
+                        "obs_url": "",
+                        "swr_user": "swr_test",
+                        "euleros_version": "2.2.5",
+                        "addon_version": "1.0.10",
+                        "platform": "linux-amd64",
+                        "swr_addr": "10.125.6.246:20202"
+                    },
+                    "parameters": {}
+                },
+                "description": "A kubernetes FlexVolume Driver used to support cloud storage",
+                "addonTemplateLabels": [
+                    "Storage"
+                ],
+                "clusterID": "0c0e4a63-5539-11e9-95f7-0255ac10177e",
+                "version": "1.0.10"
+            },
+            "status": {
+                "message": "",
+                "Reason": "Install complete",
+                "currentVersion": {
+                    "input": {
+                        "basic": {
+                            "obs_url": "",
+                            "swr_user": "swr_test",
+                            "euleros_version": "2.2.5",
+                            "swr_addr": "10.125.6.246:20202"
+                        },
+                        "parameters": {}
+                    },
+                    "stable": true,
+                    "creationTimestamp": "2019-03-29T13:45:37Z",
+                    "version": "1.0.10",
+                    "translate": {
+                        "en_US": {
+                            "addon": {
+                                "changeLog": "The plug-in is upgraded to enhance the storage plug-in function.",
+                                "description": "A kubernetes FlexVolume Driver used to support cloud storage"
+                            }
+                        },
+                        "zh_CN": {
+                            "addon": {
+                                "changeLog": "",
+                                "description": ""
+                            }
+                        }
+                    },
+                    "updateTimestamp": "2019-03-29T13:45:37Z"
+                },
+                "status": "running"
+            }
+        }
+    ]
+}
+
+
+

Status Codes

+
+ + + + + + + +
Table 10 Status codes

Status Code

+

Description

+

200

+

OK

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0327.html b/docs/cce/api-ref/cce_02_0327.html new file mode 100644 index 000000000..8c459321c --- /dev/null +++ b/docs/cce/api-ref/cce_02_0327.html @@ -0,0 +1,208 @@ + + +

Permissions Policies and Supported Actions

+

This chapter describes fine-grained permissions management for your CCE. If your cloud account does not need individual IAM users, then you may skip over this chapter.

+

A policy is a set of permissions defined in JSON format. By default, new IAM users do not have any permissions assigned. You need to add a user to one or more groups, and assign permissions policies to these groups. The user then inherits permissions from the groups it is a member of. This process is called authorization. After authorization, the user can perform specified operations on specified cloud services based on the permissions.

+

There are fine-grained policies and role-based access control (RBAC) policies. An RBAC policy consists of permissions for an entire service. Users in a group with such a policy assigned are granted all of the permissions required for that service. A fine-grained policy consists of API-based permissions for operations on specific resource types. Fine-grained policies, as the name suggests, allow for more fine-grained control than RBAC policies.

+
  • Fine-grained policies are currently available for open beta testing. You can apply to the fine-grained access control function free of charge.
  • If you want to allow or deny the access to an API, fine-grained authorization is a good choice.
+
+

An account has all of the permissions required to call all APIs, but IAM users must have the required permissions specifically assigned. The permissions required for calling an API are determined by the actions supported by the API. Only users who have been granted permissions can call the API successfully. For example, if an IAM user queries CCE clusters using an API, the user must have been granted permissions that allow the cce:cluster:list action.

+

Supported Actions

Operations supported by a fine-grained policy are specific to APIs. The following describes the headers of the action tables provided in this chapter:

+
  • Permissions: Defined by actions in a custom policy.
  • Actions: Added to a custom policy to control permissions for specific operations.
  • Authorization Scope: A custom policy can be applied to IAM projects or enterprise projects or both. Policies that contain actions supporting both IAM and enterprise projects can be assigned to user groups and take effect in both IAM and Enterprise Management. Policies that only contain actions supporting IAM projects can be assigned to user groups and only take effect for IAM. Such policies will not take effect if they are assigned to user groups in Enterprise Management.
  • APIs: REST APIs that can be called in a custom policy.
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 CCE actions

Permissions

+

Actions

+

Authorization Scope

+

APIs

+

Listing clusters in a specified project

+

cce:cluster:list

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

GET /api/v3/projects/{project_id}/clusters

+

Obtaining information about a specified cluster

+

cce:cluster:get

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}

+

Creating a cluster

+

cce:cluster:create

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

POST /api/v3/projects/{project_id}/clusters

+

Updating information about a specified cluster

+

cce:cluster:update

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

PUT /api/v3/projects/{project_id}/clusters/{cluster_id}

+

Deleting a cluster

+

cce:cluster:delete

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}

+

Obtaining a cluster certificate

+

cce:cluster:get

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert

+

Listing all nodes in a cluster

+

cce:node:list

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes

+

Obtaining information about a specified node

+

cce:node:get

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Creating a node

+

cce:node:create

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes

+

Updating information about a specified node

+

cce:node:update

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Deleting a node

+

cce:node:delete

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}

+

Obtaining job progress

+

cce:job:get

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

GET /api/v3/projects/{project_id}/jobs/{job_id}

+

Listing all node pools in a specified cluster

+

cce:nodepool:list

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools

+

Creating a PersistentVolumeClaim

+

cce:storage:create

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

POST /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims

+

Deleting a PersistentVolumeClaim

+

cce:storage:delete

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

DELETE /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims/{name}

+

Creating a PersistentVolume

+

cce:storage:create

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

POST /api/v1/cloudpersistentvolumes

+

Deleting a PersistentVolume

+

cce:storage:delete

+

Supported:

+
  • IAM projects
  • Enterprise projects
+

DELETE /api/v1/cloudpersistentvolumes/{name}

+

Operating on Kubernetes resources

+

cce:kubernetes:*

+

Supported:

+
  • IAM projects
  • Enterprise projects
+
  • /api/*
  • /apis/*
+
+
+
+
+ diff --git a/docs/cce/api-ref/cce_02_0340.html b/docs/cce/api-ref/cce_02_0340.html new file mode 100644 index 000000000..b187f6e19 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0340.html @@ -0,0 +1,12 @@ + + +

Kubernetes APIs

+

+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0341.html b/docs/cce/api-ref/cce_02_0341.html new file mode 100644 index 000000000..efc5a9a9e --- /dev/null +++ b/docs/cce/api-ref/cce_02_0341.html @@ -0,0 +1,50 @@ + + +

Obtaining a Project ID

+

Obtaining the Project ID by Calling an API

You can obtain the project ID by calling the API used to query project information based on the specified criteria.

+

The API used to obtain a project ID is GET https://{Endpoint}/v3/projects, where {Endpoint} indicates the IAM endpoint. You can obtain the IAM endpoint from Regions and Endpoints.

+

The following is an example response. The value of id in the projects field is the project ID.

+
{
+    "projects": [
+        {
+            "domain_id": "65382450e8f64ac0870cd180d14e684b",
+            "is_domain": false,
+            "parent_id": "65382450e8f64ac0870cd180d14e684b",
+            "name": "xxxxxxxx",
+            "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"
+    }
+}
+
+

Obtaining a Project ID from the Console

A project ID is required for some URLs when an API is called. To obtain a project ID, perform the following operations:

+
  1. Log in to the management console.
  2. Click the username and choose My Credentials from the drop-down list.

    On the My Credentials page, view project IDs in the project list.

    +
    Figure 1 Obtaining the Project ID
    +
    +

+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/cce/api-ref/cce_02_0342.html b/docs/cce/api-ref/cce_02_0342.html new file mode 100644 index 000000000..338db4376 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0342.html @@ -0,0 +1,21 @@ + + +

Obtaining the Account ID

+

An account ID is required for some URLs when an API is called. To obtain an account ID, perform the following operations:

+
  1. Sign up and log in to the management console.
  2. Click the username in the upper right corner and choose My Credentials from the drop-down list.

    On the My Credentials page, view account IDs in the project list.

    +
    Figure 1 Obtaining the Account ID
    +

+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/cce/api-ref/cce_02_0344.html b/docs/cce/api-ref/cce_02_0344.html new file mode 100644 index 000000000..88436c5b3 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0344.html @@ -0,0 +1,24 @@ + + +

API Usage Guidelines

+

Cloud APIs comply with the RESTful API design principles. REST-based web services are organized into resources. Each resource is identified by one or more Uniform Resource Identifiers (URIs). An application accesses a resource based on the resource's Unified Resource Locator (URL). A URL is usually in the following format: https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the API access path.

+

Cloud APIs use HTTPS as the transmission protocol. Requests/Responses are transmitted by using JSON messages, with media type represented by Application/json.

+
  • The URL of APIs described in Cluster Management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the API access path. Use X-Auth-Token as a header.
  • The URL of Kubernetes-native APIs described in Add-on Management and Kubernetes APIs is in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates a cluster ID, and uri indicates the resource path, that is, the API access path. Use X-Auth-Token as a header.
  • The URL of Kubernetes-native APIs is in the format of https://{publicip}:5443/uri. In the URL, {publicip} indicates EIP of the cluster, and uri indicates the resource path, that is, the API access path. Use X-Remote-User or Authorization as a header.
    Before using X-Remote-User as a header, obtain the required certificate in advance. Two types of certificates are supported: +
    +
+

For details about how to use APIs, see API Usage Guidelines.

+

CCE provides two methods to authenticate requests for calling an API: token and AK/SK. Select an authentication method based on actual requirements. If token-based authentication is used, you can call service APIs by using either of the following methods after obtaining a token:

+
  • Method 1: Add X-Auth-Token to the request header and set X-Auth-Token: ${token} with the obtained IAM token.
  • Method 2: Add Authorization to the request header and set Authorization: Bearer ${token} with the obtained IAM token or token from Kubernetes service account.
  • Method 3: Add X-Remote-User to the request header and set X-Remote-User: user with a valid certificate.
+

Method 3 requires that the CA root certificate must has been uploaded before you create a cluster on the CCE console. For details, see Cluster Management Permission Control.

+
+
+ + + \ No newline at end of file diff --git a/docs/cce/api-ref/cce_02_0346.html b/docs/cce/api-ref/cce_02_0346.html new file mode 100644 index 000000000..5fb853dfa --- /dev/null +++ b/docs/cce/api-ref/cce_02_0346.html @@ -0,0 +1,274 @@ + + +

Modifying the Access Information of a Specified Cluster

+

Function

This API is used to modify the access information of a specified cluster.

+
+

URI

PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/mastereip

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID.

+

cluster_id

+

Yes

+

Cluster ID.

+
+
+
+

Request

Request parameters:

+

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

spec

+

Yes

+

Table 3

+

-

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Data structure of the spec field

Parameter

+

Mandatory

+

Type

+

Description

+

action

+

Yes

+

String

+

Whether to bind an elastic IP address to the cluster or unbind an elastic IP address from the cluster. The value is bind or unbind (case insensitive).

+
NOTE:

id needs to be configured only when action is set to bind.

+
+

spec

+

No

+

Table 4

+

Information about the elastic IP address.

+
+
+ +
+ + + + + + + + + + + +
Table 4 Data structure of the spec-spec field

Parameter

+

Mandatory

+

Type

+

Description

+

id

+

Yes

+

String

+

ID of the elastic IP address.

+
+
+

Example request:

+
  • Binding an elastic IP address to the cluster
    {
    +    "spec": {
    +        "action": "bind",
    +        "spec": {
    +            "id": "0ef26920-3527-405d-a7b4-27106618c2d7"
    +        }
    +    }
    +}
    +
  • Unbinding an elastic IP address from the cluster
    {
    +    "spec": {
    +        "action": "unbind"
    +    }
    +}
    +
+
+

Response

Response parameters:

+

Table 5 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + +
Table 5 Response parameters

Parameter

+

Type

+

Description

+

metadata

+

json

+

Metadata.

+

spec

+

Table 6

+

-

+

status

+

Table 7

+

Cluster endpoint.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 6 Data structure of the spec field

Parameter

+

Type

+

Description

+

action

+

String

+

Whether an EIP is bound to or unbound from the cluster. The value is bind or unbind (case insensitive).

+

spec

+

Table 4

+

Information about the elastic IP address.

+

elasticIp

+

String

+

Elastic IP address.

+
+
+ +
+ + + + + + + + + + + + + +
Table 7 Data structure of the status field

Parameter

+

Type

+

Description

+

privateEndpoint

+

String

+

Address for access within the VPC.

+

publicEndpoint

+

String

+

Address for access outside the VPC.

+
+
+

Example response:

+
{
+    "metadata": {},
+    "spec": {
+        "action": "bind",
+        "spec": {
+            "id": "0ef26920-3527-405d-a7b4-27106618c2d7",
+            "eip": {
+                "bandwidth": {
+                    "size": 5,
+                    "sharetype": "PER"
+                }
+            },
+            "IsDynamic": false
+        },
+        "elasticIp": "10.154.50.11"
+    },
+    "status": {
+        "privateEndpoint": "https://172.16.0.86:5443",
+        "publicEndpoint": "https://10.154.50.11:5443"
+    }
+}
+
+

Status Code

Table 8 describes the status code of the API.

+ +
+ + + + + + + +
Table 8 Status code

Status Code

+

Description

+

200

+

The progress of the specified job is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0347.html b/docs/cce/api-ref/cce_02_0347.html new file mode 100644 index 000000000..995e75590 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0347.html @@ -0,0 +1,249 @@ + + +

Querying the Access Information of a Specified Cluster

+

Function

This API is used to query the access information of a specified cluster.

+

The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access.

+
+
+

URI

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/openapi

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

Cluster ID.

+
+
+
+

Request

N/A

+
+

Response

Response parameters:

+

Table 2 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + +
Table 2 Response parameters

Parameter

+

Type

+

Description

+

metadata

+

json

+

Metadata.

+

spec

+

Table 3

+

-

+

status

+

Table 7

+

Cluster endpoint.

+
+
+ +
+ + + + + + + + + +
Table 3 Data structure of the spec field

Parameter

+

Type

+

Description

+

spec

+

Table 4

+

Information about the elastic IP address.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Data structure of the spec-spec field

Parameter

+

Type

+

Description

+

id

+

String

+

ID of the elastic IP address.

+

eip

+

Table 5

+

Information about the elastic IP address.

+

IsDynamic

+

Boolean

+

Whether the elastic IP address is dynamic.

+
+
+ +
+ + + + + + + + + +
Table 5 Data structure of the eip field

Parameter

+

Type

+

Description

+

bandwidth

+

Table 6

+

Specifies the bandwidth of the elastic IP address.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 Data structure of the bandwidth field

Parameter

+

Type

+

Description

+

size

+

Integer

+

Specifies the bandwidth (Mbit/s).

+

sharetype

+

String

+

Specifies the bandwidth sharing type.

+

Enumerated values: PER (indicates exclusive bandwidth) and WHOLE (indicates sharing).

+
+
+ +
+ + + + + + + + + + + + + +
Table 7 Data structure of the status field

Parameter

+

Type

+

Description

+

privateEndpoint

+

String

+

Address for access within the VPC.

+

publicEndpoint

+

String

+

Address for access outside the VPC.

+
+
+

Example response:

+
{
+    "metadata": {},
+    "spec": {
+        "spec": {
+            "id": "0ead681e-9f94-4599-8a21-e2a1950da121",
+            "eip": {
+                "bandwidth": {
+                    "size": 5,
+                    "sharetype": "PER"
+                }
+            },
+            "IsDynamic": false
+        }
+    },
+    "status": {
+        "privateEndpoint": "https://192.168.0.189:5443",
+        "publicEndpoint": "https://10.154.50.197:5443"
+    }
+}
+
+

Status Code

Table 8 describes the status code of the API.

+ +
+ + + + + + + +
Table 8 Status code

Status Code

+

Description

+

200

+

The progress of the specified job is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0348.html b/docs/cce/api-ref/cce_02_0348.html new file mode 100644 index 000000000..18595082b --- /dev/null +++ b/docs/cce/api-ref/cce_02_0348.html @@ -0,0 +1,17 @@ + + +

API Version Query

+
+
+ + + +
+ diff --git a/docs/cce/api-ref/cce_02_0349.html b/docs/cce/api-ref/cce_02_0349.html new file mode 100644 index 000000000..2eecee669 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0349.html @@ -0,0 +1,145 @@ + + +

Querying All API Versions

+

Function

This API is used to query all available API versions.

+
+

URI

GET /

+
+

Request

N/A

+
+

Response

Response parameters:

+

Table 1 describes the response parameters.

+ +
+ + + + + + + + + +
Table 1 Response parameters

Parameter

+

Type

+

Description

+

versions

+

Array

+

API version list.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Data structure of the versions field

Parameter

+

Mandatory

+

Type

+

Description

+

id

+

Yes

+

String

+

API version ID, for example, v3.

+

links

+

Yes

+

String

+

API URL.

+

min_version

+

No

+

String

+

API microversion.

+
  • If the API has microversions, the parameter value is the earliest version number supported.
  • If the API does not have microversions, the parameter is left blank.
+

status

+

Yes

+

String

+

API version status.

+
  • CURRENT: The version is a mainstream version.
  • SUPPORTED: The version is not the latest one but it is still in use.
  • DEPRECATED: The version is deprecated and will probably be deleted.
+

updated

+

Yes

+

String

+

Version release time in UTC. For example, the parameter value for v1 is 2014-06-28T12:20:21Z.

+

version

+

Yes

+

String

+

API version number.

+
  • If the API version has microversions, the parameter value is the highest version number supported.
  • If the API version does not have API mini versions, the parameter is left blank.
+
+
+

Example response:

+
{
+    "versions": [
+        {
+            "id": "v3",
+            "links": [
+                {
+                    "href": "https://container.eu-de.***.t-systems.com/v3",
+                    "rel": "self"
+                }
+            ],
+            "min_version": "",
+            "status": "CURRENT",
+            "updated": "2018-09-15T00:00:00Z",
+            "version": ""
+        }
+    ]
+}
+
+

Status Code

Table 3 describes the status code of the API.

+ +
+ + + + + + + +
Table 3 Status code

Status Code

+

Description

+

200

+

The query operation is successful.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0350.html b/docs/cce/api-ref/cce_02_0350.html new file mode 100644 index 000000000..60ea6d8d8 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0350.html @@ -0,0 +1,74 @@ + + +

Querying Information About API v3

+

Function

This API is used to query information about API v3.

+
+

URI

GET /v3

+
+

Request

N/A

+
+

Response

Response parameters:

+

Table 1 describes the response parameters.

+ +
+ + + + + + + + + +
Table 1 Response parameters

Parameter

+

Type

+

Description

+

versions

+

Array

+

API version list.

+
+
+

Example response:

+
{
+    "versions": [
+        {
+            "id": "v3",
+            "links": [
+                {
+                    "href": "https://container.eu-de.***.t-systems.com/v3",
+                    "rel": "self"
+                }
+            ],
+            "min_version": "",
+            "status": "CURRENT",
+            "updated": "2018-09-15T00:00:00Z",
+            "version": ""
+        }
+    ]
+}
+
+

Status Code

Table 2 describes the status code of the API.

+ +
+ + + + + + + +
Table 2 Status code

Status Code

+

Description

+

200

+

The query operation is successful.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0354.html b/docs/cce/api-ref/cce_02_0354.html new file mode 100644 index 000000000..258ff3fbd --- /dev/null +++ b/docs/cce/api-ref/cce_02_0354.html @@ -0,0 +1,1427 @@ + + +

Creating a Node Pool

+

Function

This API is used to create a node pool in a specified cluster.

+
+

URI

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools

+

Table 1 describes the parameters of the API.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request

Request parameters:

+

Table 2 and Table 3 describe the request parameters.

+ +
+ + + + + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

String

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 NodePool structure

Parameter

+

Mandatory

+

Type

+

Description

+

kind

+

Yes

+

String

+

API type, which is fixed at NodePool.

+

apiVersion

+

Yes

+

String

+

API version, which is fixed at v3.

+

metadata

+

Yes

+

metadata object

+

Metadata of the node pool.

+

spec

+

Yes

+

spec object

+

Parameters of the node pool.

+
+
+ +
+ + + + + + + + + + + +
Table 4 Data structure of the metadata field

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Node pool name.

+

Naming rule: Enter 1 to 50 characters that starts with a lowercase letter and cannot end with a hyphen (-). Lowercase letters, digits, and hyphens (-) are allowed. The value cannot be DefaultPool.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the spec field

Parameter

+

Mandatory

+

Type

+

Description

+

type

+

No

+

String

+

Node pool type. If this parameter is left blank, the value vm is used by default.

+
  • vm: ECS
  • ElasticBMS: BMS. This value is valid in CCE Turbo cluster.
+

nodeTemplate

+

Yes

+

nodeTemplate object

+

Parameters of the node pool template.

+

If az is set to random, when you create a node pool or update the number of nodes in a node pool, a scaling task is triggered. The system selects an AZ from all AZs where scaling is allowed to add nodes based on priorities.

+
AZs with a smaller number of existing nodes have a higher priority. If AZs have the same number of nodes, the system selects the AZ based on the AZ sequence. Example:
  • Creating nodes in a node pool for the first time: Assume that AZ 1, AZ 2, and AZ 3 have available resources. These AZs have the same priority because they have no existing nodes. In this case, AZ 1 is selected by sequence to create all nodes to be added.
  • Adding nodes to a node pool that already has nodes:
    • Assume that the node pool has 1 node in AZ 1, 3 in AZ 2, and 2 in AZ 3, and that resources in AZ 1 have been sold out. Only AZ 2 and AZ 3 are available for scaling. In this case, AZ 3 has a higher priority than AZ 2 because AZ 3 has less nodes. Therefore, all nodes to be added will be created in AZ 3.
    • Assume that the node pool has 1 node in AZ 1, 2 in AZ 2, and 2 in AZ 3, and that resources in AZ 1 have been sold out. Only AZ 2 and AZ 3 are available for scaling. In this case, AZ 2 and AZ 3 have the same priority because they have the same number of nodes. Therefore, all nodes to be added will be created in AZ 2.
    +
+
+

initialNodeCount

+

Yes

+

Integer

+

Expected number of nodes in this node pool. The value cannot be greater than the maximum number of nodes allowed for the cluster.

+

autoscaling

+

No

+

autoscaling object

+

Auto scaling parameters.

+

nodeManagement

+

No

+

nodeManagement object

+

Node management parameters.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 Data structure of the nodeTemplate field

Parameter

+

Mandatory

+

Type

+

Description

+

flavor

+

Yes

+

String

+

Node specifications. For details, see the description of the flavorRef parameter in Creating an ECS.

+
NOTE:

When adding a BMS node, check whether the flavor of the node to be added supports local disks. If local disks are not supported, add at least one 100 GB EVS disk.

+
+

az

+

Yes

+

String

+

AZ of the node. For details, see the description of the availability_zone parameter in Creating an ECS.

+

os

+

No

+

String

+
  • Nodes in clusters of Kubernetes v1.11 or earlier support EulerOS 2.2.
  • Nodes in clusters of Kubernetes v1.13 or v1.15 support EulerOS 2.5.
  • Nodes in clusters of Kubernetes v1.17 support EulerOS 2.5 and CentOS 7.7.
  • Nodes in clusters of Kubernetes v1.19, v1.21 or v1.23 support EulerOS 2.5, EulerOS 2.9 and CentOS 7.7.
  • Nodes using kata runtime in CCE Turbo cluster support EulerOS 2.9.
+
NOTE:

If the alpha.cce/NodeImageID parameter in extendParam is specified during node creation, you do not need to set this field.

+
+

login

+

Yes

+

login object

+

Node login mode, which can be key pair or password.

+

rootVolume

+

Yes

+

Volume object

+

System disk parameters of the node.

+

dataVolumes

+

Yes

+

Array of Volume object

+

Data disk parameters of the node.

+

publicIP

+

No

+

publicIP object

+

EIP used by the node to access public networks.

+

billingMode

+

No

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

count

+

Yes

+

Integer

+

Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit. This field can be set to 0 for a node pool.

+

extendParam

+

No

+

extendParam object

+

Extended parameter. Format: Key-value pair.

+

userTags

+

No

+

Object

+

Tag of a VM.

+

The format is key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported.
  • Value: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported.
+

Example:

+
"userTags": [
+{
+	"key": "tag1",
+	"value": "aaaa"
+}, 
+{
+	"key": "tag2",
+	"value": "bbbb"
+}
+]
+

k8sTags

+

No

+

Object

+

Tag of a Kubernetes node.

+

The format is key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key
  • Value: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string.
+

Example:

+
"k8sTags": {
+	"key": "value"
+}
+

taints

+

No

+

Object

+
You can add taints to created nodes to configure anti-affinity. Each taint contains the following parameters:
  • Key: A key must contain 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain name can be used as the prefix of a key.
  • Value: A value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (_), and periods (.).
  • Effect: Available options are NoSchedule, PreferNoSchedule, and NoExecute.
+
+

Example:

+
"taints": [{
+	"key": "status",
+	"value": "unavailable",
+	"effect": "NoSchedule"
+}, {
+	"key": "looks",
+	"value": "bad",
+	"effect": "NoSchedule"
+}]
+

nodeNicSpec

+

No

+

nodeNicSpec object

+

Description about the node NIC.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 7 Data structure of the login field

Parameter

+

Mandatory

+

Type

+

Description

+

sshKey

+

No

+

String

+

Name of the key pair used for node login. For details on how to create a key pair, see Creating a Key Pair.

+

userPassword

+

No

+

String

+

Password used for node login.

+
NOTE:

This field is not supported for the current version.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 Data structure of the Volume field

Parameter

+

Mandatory

+

Type

+

Description

+

volumetype

+

No

+

String

+

Disk type. For details, see the description of root_volume in Creating an ECS.

+
  • SATA: common I/O disk type.
  • SAS: high I/O disk type.
  • SSD: ultra-high I/O disk type.
+

size

+

No

+

Integer

+

Specifies the system disk size, in GB. The value ranges from 40 to 1024.

+

extendParam

+

No

+

Map<String,Object>

+

Disk extension parameter. For details, see the description of the extendparam parameter in Creating an ECS.

+

hw:passthrough

+

No

+

Boolean

+
  • Pay attention to this field if your ECS is SDI-compliant. If the value of this field is true, the created disk is of the SCSI type.
  • If the node pool type is ElasticBMS, this field must be set to true.
+

metadata

+

No

+

dataVolumeMetadata object

+

Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted.

+

If data disks are created using a data disk image, this parameter cannot be used.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 9 Data structure of the dataVolumeMetadata field

Parameter

+

Mandatory

+

Type

+

Description

+

__system__encrypted

+

No

+

String

+

Whether an EVS disk is encrypted.

+
  • '0': not encrypted
  • '1': encrypted
+

If this parameter is not specified, EVS disks will not be encrypted by default.

+

__system__cmkid

+

Yes

+

String

+

CMK ID used for encryption. This parameter is used with __system__encrypted.

+
NOTE:

You can obtain the ID through HTTPS requests. For details, see Querying the List of CMKs.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 10 Data structure of the publicIP field

Parameter

+

Mandatory

+

Type

+

Description

+

ids

+

No

+

Array of strings

+

List of IDs of the existing EIPs.

+
NOTICE:

If ids is set, you do not need to set count and eip.

+
+

count

+

No

+

Integer

+

Number of EIPs to be dynamically created.

+
NOTICE:

The count and eip parameters must be set simultaneously.

+
+

eip

+

No

+

eip object

+

EIP.

+
NOTICE:

The count and eip parameters must be set simultaneously.

+
+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 11 Data structure of the eip field

Parameter

+

Mandatory

+

Type

+

Description

+

iptype

+

Yes

+

String

+

Type of the EIP.

+

bandwidth

+

Yes

+

bandwidth object

+

Bandwidth parameters of the EIP.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 12 Data structure of the bandwidth field

Parameter

+

Mandatory

+

Type

+

Description

+

chargemode

+

No

+

String

+

Bandwidth billing mode.

+
  • If this parameter is not carried, the node is billed by bandwidth.
  • If this parameter is carried but is left blank, the node is billed by bandwidth.
  • If this parameter is set to traffic, the node is billed by traffic.
  • If this parameter is set to another value, node creation will fail.
    NOTE:
    • Billed by bandwidth: The billing will be based on the data transfer rate (in Mbps) of public networks. If your bandwidth usage is higher than 10%, this billing mode is recommended.
    • Billed by traffic: The billing will be based on the total traffic (in GB) transferred on public networks. If your bandwidth usage is lower than 10%, this billing mode is recommended.
    +
    +
+

size

+

Yes

+

Integer

+

Bandwidth size.

+

sharetype

+

Yes

+

String

+

Bandwidth sharing type.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 13 Data structure of the spec/extendParam field

Parameter

+

Mandatory

+

Type

+

Description

+

maxPods

+

No

+

Integer

+

Maximum number of pods on the node.

+

agency_name

+

No

+

String

+

Specifies the IAM agency name.

+

alpha.cce/preInstall

+

No

+

String

+

Script required before the installation.

+
NOTE:

The input value must be encoded using Base64. (Command: echo -n "Content to be encoded" | base64)

+
+

alpha.cce/postInstall

+

No

+

String

+

Script required after the installation.

+
NOTE:

The input value must be encoded using Base64. (Command: echo -n "Content to be encoded" | base64)

+
+

alpha.cce/NodeImageID

+

No

+

String

+

Mandatory if a custom image is used in creating a bare metal node.

+

DockerLVMConfigOverride

+

No

+

String

+

ConfigMap of the Docker data disk. The following is an example configuration:

+
"DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
+

In this example:

+
  • userLV: size of the user space, for example, vgpaas/20%VG.
  • userPath: mount path of the user space, for example, /home/wqt-test.
  • diskType: disk type. Currently, only the evs, hdd, and ssd are supported.
  • lvType: type of a logic volume. Currently, the value can be linear or striped.
  • dockerThinpool: Docker space size, for example, vgpaas/60%VG.
  • kubernetesLV: kubelet space size, for example, vgpaas/20%VG.
+

publicKey

+

No

+

String

+

Public key of the node. Used when creating a key pair.

+

nicMultiqueue

+

No

+

String

+

ENI queue settings, the default setting is:

+
"[{\"queue\":4}]"
+
  • queue indicates the number of ENI queues.
  • Supported proportions are {"1":128, "2":92, "4":92, "8":32, "16":16, "28":9}. That is, there is one queue, a maximum of 128 ENIs can be bound. If there are two queues, a maximum of 92 ENIs can be bound.
  • A larger number of ENI queues indicates higher performance but fewer ENIs can be bound. The queue settings cannot be changed after the node pool is created.
+

nicThreshold

+

No

+

String

+

ENI pre-binding thresholds, the default setting is:

+
"0.3:0.6"
+
  • The first decimal place indicates the low threshold. Formula: Minimum number of pre-bound ENIs = Min (128 x Low threshold, Maximum number of ENIs that can be bound to the queue)
  • The second decimal place indicates the high threshold. Formula: Maximum number of pre-bound ENIs = Min (128 x High threshold, Maximum number of ENIs that can be bound to the queue)
  • The high and low thresholds of the number of pre-bound ENIs are restricted by the maximum number of ENIs that can be bound to a queue.
  • ENIs bound to a BMS node = Number of ENIs currently used by pods + Number of pre-bound ENIs
  • CCE keeps binding ENIs to a BMS node to ensure that the minimum number of ENIs is always reached. (Min. pre-bound ENIs ≤ Number of pre-bound ENIs + Number of ENIs currently used by pods)
  • At every 2 minutes, CCE releases ENIs pre-bound to a BMS node to ensure that the maximum number of ENIs will not be exceeded. (Max. pre-bound ENIs ≥ Number of pre-bound ENIs + Number of ENIs currently used by pods)
  • Both the thresholds are one-decimal-place values ranging from 0.0 to 1.0. The low threshold must be smaller than or equal to the high one.
  • This field can be configured only for BMS nodes in a CCE Turbo cluster.
  • Pre-binding ENIs can speed up workload creation but occupies IP addresses.
+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 14 Data structure of the nodeNicSpec field

Parameter

+

Mandatory

+

Type

+

Description

+

primaryNic

+

No

+

primaryNic object

+

Description about the primary NIC.

+

extNics

+

No

+

Array of extNics objects

+

Extension NIC.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 15 Data structure of the primaryNic/extNics field

Parameter

+

Mandatory

+

Type

+

Description

+

subnetId

+

No

+

String

+

Network ID of the subnet to which the NIC belongs.

+

fixedIps

+

No

+

Array of strings

+

The IP address of the primary NIC is specified by fixedIps. The number of IP addresses cannot be greater than the number of created nodes. fixedIps and ipBlock cannot be specified at the same time.

+

ipBlock

+

No

+

String

+

CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. fixedIps and ipBlock cannot be specified at the same time.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 16 Data structure of the autoscaling field

Parameter

+

Mandatory

+

Type

+

Description

+

enable

+

No

+

Boolean

+

Whether to enable auto scaling.

+

minNodeCount

+

No

+

Integer

+

Minimum number of nodes after a scale-down if auto scaling is enabled.

+

maxNodeCount

+

No

+

Integer

+

Maximum number of nodes after a scale-up if auto scaling is enabled. The value of this parameter must be greater than or equal to that of minNodeCount and does not exceed the maximum number of nodes for the cluster.

+

scaleDownCooldownTime

+

No

+

Integer

+

Interval during which nodes added after a scale-up will not be deleted, in minutes.

+

priority

+

No

+

Integer

+

Node pool weight. A higher weight indicates a higher priority in scale-up.

+
+
+ +
+ + + + + + + + + + + +
Table 17 Data structure of the nodeManagement field

Parameter

+

Mandatory

+

Type

+

Description

+

serverGroupReference

+

No

+

String

+

ECS group ID. If this parameter is specified, all nodes in the node pool will be created in this ECS group.

+
+
+

Example Request

+

CCE cluster:

+
{
+    "kind": "NodePool",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "wyr-17-nodepool-53042"
+    },
+    "spec": {
+        "initialNodeCount": 0,
+        "type": "vm",
+        "autoscaling": {
+            "enable": true,
+            "minNodeCount": 1,
+            "maxNodeCount": 3,
+            "scaleDownCooldownTime": 10,
+            "priority": 1
+        },
+        "nodeManagement": {
+            "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3"
+        },
+        "nodeTemplate": {
+            "flavor": "s6.large.2",
+            "az": "eu-de-01",
+            "os": "EulerOS 2.5",
+            "login": {
+                "sshKey": "KeyPair-nodepool"
+            },
+            "rootVolume": {
+                "volumetype": "SATA",
+                "size": 40
+            },
+            "dataVolumes": [
+                {
+                    "volumetype": "SATA",
+                    "size": 100,
+                    "extendParam": {
+                        "useType": "docker"
+                    }
+                }
+            ],
+            "billingMode": 0,
+            "extendParam": {
+                "alpha.cce/preInstall": "bHMgLWw=",
+                "alpha.cce/postInstall": "bHMgLWwK",
+                "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3",
+                "maxPods": 110,
+                "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
+            },
+            "k8sTags": {
+                "tag1": "value1",
+                "tag2": "value2"
+            },
+            "taints": [
+                {
+                    "key": "aaa",
+                    "value": "bbb",
+                    "effect": "NoSchedule"
+                },
+                {
+                    "key": "ccc",
+                    "value": "ddd",
+                    "effect": "NoSchedule"
+                }
+            ],
+            "userTags": [
+                {
+                    "key": "resource-tag1",
+                    "value": "value1"
+                },
+                {
+                    "key": "resource-tag2",
+                    "value": "value2"
+                }
+            ],
+            "nodeNicSpec": {
+                "primaryNic": {
+                    "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef"
+                }
+            }
+        }
+    }
+}
+

CCE Turbo cluster:

+
{
+    "kind": "NodePool",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "turbo-cluster-nodepool1"
+    },
+    "spec": {
+        "initialNodeCount": 0,
+        "type": "ElasticBMS",
+        "nodeTemplate": {
+            "flavor": "cce.c4.22xlarge.4.physical.129nic",
+            "az": "eu-de-01",
+            "login": {
+                "sshKey":"id_rsa"
+            },
+            "rootVolume": {
+                "volumetype": "SAS",
+                "size": 40,
+                "hw:passthrough": true},
+            "dataVolumes": [
+                {
+                    "volumetype": "SAS",
+                    "size": 100,
+                    "hw:passthrough": true
+                }
+            ],
+            "runtime": {
+                "name":"containerd"
+            },
+            "extendParam": {
+                "alpha.cce/NodeImageID":"0fea78c3-1b31-4653-8859-ac151ccadcd4"
+            }
+        }
+    }
+} 
+
+

Response

Response parameters:

+

Table 18 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 18 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed to NodePool.

+

apiVersion

+

String

+

API version. The value is fixed to v3.

+

metadata

+

metadata object

+

Node pool metadata.

+

spec

+

spec object

+

Detailed node pool parameters.

+

status

+

status object

+

Node pool status.

+
+
+ +
+ + + + + + + + + + + + + +
Table 19 Data structure of the metadata field

Parameter

+

Type

+

Description

+

name

+

String

+

Name of the node pool.

+

uid

+

String

+

ID of the node pool.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 20 Data structure of the spec field

Parameter

+

Type

+

Description

+

type

+

String

+

Node type. Currently, only VM nodes are supported.

+

initialNodeCount

+

Integer

+

Initial number of nodes for the node pool.

+

nodeTemplate

+

nodeTemplate object

+

Detailed parameters of the node pool template.

+

autoscaling

+

autoscaling object

+

Auto scaling parameters.

+

nodeManagement

+

nodeManagement object

+

Node management parameters.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 21 Data structure of the autoscaling field

Parameter

+

Type

+

Description

+

enable

+

Boolean

+

Whether to enable auto scaling.

+

minNodeCount

+

Integer

+

Minimum number of nodes allowed if auto scaling is enabled. The value cannot be greater than the maximum number of nodes allowed by the cluster specifications.

+

Minimum: 0

+

maxNodeCount

+

Integer

+

Maximum number of nodes allowed if auto scaling is enabled. This value must be greater than or equal to the value of minNodeCount and cannot exceed the maximum number of nodes in the cluster specifications.

+

Minimum: 0

+

scaleDownCooldownTime

+

Integer

+

Interval between two scaling operations, in minutes. During this period, nodes added after a scale-up will not be deleted.

+

Minimum: 0

+

Maximum: 2147483647

+

priority

+

Integer

+

Weight of a node pool. A node pool with a higher weight has a higher priority during scaling.

+
+
+ +
+ + + + + + + + + +
Table 22 Data structure of the nodeManagement field

Parameter

+

Type

+

Description

+

serverGroupReference

+

String

+

ECS group ID. If this parameter is specified, all nodes in the node pool will be created in this ECS group.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 23 Data structure of the status field

Parameter

+

Type

+

Description

+

currentNode

+

Integer

+

Number of nodes in the node pool.

+

deletingNode

+

Integer

+

Number of nodes being deleted in the node pool.

+

creatingNode

+

Integer

+

Number of nodes being created in the node pool.

+

phase

+

String

+

Node pool status.

+
  • Synchronizing: The node is being synchronized.
  • Synchronized: The node has been synchronized.
  • SoldOut: Nodes have been sold out.
  • Deleting: The node is being deleted.
  • Error: An error occurred when the node is being added.
+
Enumeration values:
  • Synchronizing
  • Synchronized
  • SoldOut
  • Deleting
  • Error
+
+
NOTE:

If the status is blank, the status is normal.

+
+

jobId

+

String

+

ID of the job to delete the node pool.

+
+
+

Example response:

+

CCE cluster:

+
{
+    "kind": "NodePool",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "wyr-17-nodepool-53042",
+        "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7"
+    },
+    "spec": {
+        "initialNodeCount": 0,
+        "type": "vm",
+        "nodeTemplate": {
+            "flavor": "s6.large.2",
+            "az": "eu-de-01",
+            "os": "EulerOS 2.5",
+            "login": {
+                "sshKey": "KeyPair-nodepool",
+                "userPassword": {}
+            },
+            "rootVolume": {
+                "volumetype": "SATA",
+                "size": 40
+            },
+            "dataVolumes": [
+                {
+                    "volumetype": "SATA",
+                    "size": 100,
+                    "extendParam": {
+                        "useType": "docker"
+                    }
+                }
+            ],
+            "publicIP": {
+                "eip": {
+                    "bandwidth": {}
+                }
+            },
+            "nodeNicSpec": {
+                "primaryNic": {
+                    "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef"
+                }
+            },
+            "billingMode": 0,
+            "taints": [
+                {
+                    "key": "aaa",
+                    "value": "bbb",
+                    "effect": "NoSchedule"
+                },
+                {
+                    "key": "ccc",
+                    "value": "ddd",
+                    "effect": "NoSchedule"
+                }
+            ],
+            "k8sTags": {
+                "cce.cloud.com/cce-nodepool": "wyr-17-nodepool-53042",
+                "tag1": "value1",
+                "tag2": "value2"
+            },
+            "userTags": [
+                {
+                    "key": "resource-tag1",
+                    "value": "value1"
+                },
+                {
+                    "key": "resource-tag2",
+                    "value": "value2"
+                }
+            ],
+            "extendParam": {
+                "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear",
+                "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3",
+                "alpha.cce/postInstall": "bHMgLWwK",
+                "alpha.cce/preInstall": "bHMgLWw=",
+                "maxPods": 110,
+                "publicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQA***d-by-Nova\n"
+            }
+        },
+        "autoscaling": {
+            "enable": true,
+            "minNodeCount": 1,
+            "maxNodeCount": 3,
+            "scaleDownCooldownTime": 10,
+            "priority": 1
+        },
+        "nodeManagement": {
+            "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3"
+        }
+    },
+    "status": {
+        "currentNode": 0,
+        "deletingNode": 0,
+        "creatingNode": 0,
+        "phase": ""
+    }
+}
+

CCE Turbo cluster:

+
{
+    "kind": "NodePool",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "turbo-cluster-nodepool1",
+        "uid": "99addaa2-69eb-11ea-a592-0255ac1001bb"
+    },
+    "spec": {
+        "initialNodeCount": 0,
+        "type": "ElasticBMS",
+        "nodeTemplate": {
+            "flavor": "cce.c4.22xlarge.4.physical.129nic",
+            "az": "eu-de-01",
+            "os": "EulerOS 2.9",
+            "login": {
+                "sshKey":"id_rsa"
+            },
+            "rootVolume": {
+                "volumetype": "SAS",
+                "size": 40,
+                "hw:passthrough": true},
+            "dataVolumes": [
+                {
+                    "volumetype": "SAS",
+                    "size": 100,
+                    "hw:passthrough": true
+                }
+            ],
+            "runtime": {
+                "name":"containerd"
+            },
+            "extendParam": {
+                "alpha.cce/NodeImageID":"0fea78c3-1b31-4653-8859-ac151ccadcd4"
+            }
+        }
+    },
+    "status": {
+        "phase": ""
+    }
+} 
+
+

Status Code

Table 24 describes the status code of this API.

+ +
+ + + + + + + +
Table 24 Status code

Status Code

+

Description

+

201

+

The job for creating a node in a specified cluster is successfully delivered.

+
+
+

For the description about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0355.html b/docs/cce/api-ref/cce_02_0355.html new file mode 100644 index 000000000..f0a8845db --- /dev/null +++ b/docs/cce/api-ref/cce_02_0355.html @@ -0,0 +1,982 @@ + + +

Querying a Specified Node Pool

+

Function

This API is used to query a specified node pool.

+
  • The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access.
  • A node pool is a group of nodes within a cluster that all have the same configuration.
+
+
+

URI

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

String

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+

nodepool_id

+

Yes

+

String

+

Node pool ID. For details about how to obtain the node pool ID, see Listing All Nodes in a Cluster.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

errorStatus

+

No

+

String

+

String

+

This field allows a cluster to be in the Error state if exceptions occur when the cluster is being deleted. If the value of errorStatus is null, the cluster stays in the Deleting state, but not Error.

+

Minimum: 0

+

Maximum: 10

+

showDefaultNodePool

+

No

+

String

+

String

+

Whether to display the default node pool. By default, the default node pool is not displayed. If this parameter is set to true, the default node pool is displayed.

+
+
+
+

Request

Request parameters:

+

Table 1 lists the request parameters.

+ +
+ + + + + + + + + + + + + + + + +
Table 3 Parameters in the request header

Parameter

+

Mandatory

+

String

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

NA

+
+

Response

Response parameters:

+

Table 4 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed to NodePool.

+

apiVersion

+

String

+

API version. The value is fixed to v3.

+

items

+

NodePool object

+

/

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 NodePool

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed to NodePool.

+

apiVersion

+

String

+

API version. The value is fixed to v3.

+

metadata

+

metadata object

+

Node pool metadata.

+

spec

+

spec object

+

Detailed node pool parameters.

+

status

+

status object

+

Node pool status.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 Data structure of the metadata field

Parameter

+

Type

+

Description

+

name

+

String

+

Name of the node pool.

+

uid

+

String

+

ID of the node pool.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Data structure of the spec field

Parameter

+

Type

+

Description

+

type

+

String

+

Node type.

+
  • vm: ECS
  • ElasticBMS: BMS. This value is valid in CCE Turbo cluster.
+

initialNodeCount

+

Integer

+

Initial number of nodes for the node pool.

+

nodeTemplate

+

nodeTemplate object

+

Detailed parameters of the node pool template.

+

autoscaling

+

autoscaling object

+

Auto scaling parameters.

+

nodeManagement

+

nodeManagement object

+

Node management parameters.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 Data structure of the nodeTemplate field

Parameter

+

Type

+

Description

+

flavor

+

String

+

Node specifications. For details, see the description of the flavorRef parameter in Creating an ECS.

+
NOTE:

When adding a BMS node, check whether the flavor of the node to be added supports local disks. If local disks are not supported, add at least one 100 GB EVS disk.

+
+

az

+

String

+

AZ of the node. For details, see the description of the availability_zone parameter in Creating an ECS.

+

os

+

String

+

Node OS.

+

login

+

login object

+

Node login mode, which can be key pair or password.

+

rootVolume

+

Volume object

+

System disk parameters of the node.

+

dataVolumes

+

Array of Volume object

+

Data disk parameters of the node.

+

publicIP

+

publicIP object

+

EIP used by the node to access public networks.

+

nodeNicSpec

+

nodeNicSpec object

+

Node NIC description.

+

count

+

Integer

+

Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit.

+
NOTE:

This fielder can be set to 0 for a node pool.

+
+

billingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

extendParam

+

extendParam object

+

Extended parameter. Format: Key-value pair.

+

userTags

+

Object

+

Tag of a VM.

+

The format is key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported.
  • Value: Only letters, digits, hyphens (-), underscores (_), and at signs (@) are supported.
+

Example:

+
"userTags": [
+{
+	"key": "tag1",
+	"value": "aaaa"
+}, 
+{
+	"key": "tag2",
+	"value": "bbbb"
+}
+]
+

k8sTags

+

Object

+

Tag of a Kubernetes node.

+

The format is key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key
  • Value: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string.
+

Example:

+
"k8sTags": {
+	"key": "value"
+}
+

taints

+

Object

+
You can add taints to created nodes to configure anti-affinity. Each taint contains the following parameters:
  • Key: A key must contain 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain name can be used as the prefix of a key.
  • Value: A value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (_), and periods (.).
  • Effect: Available options are NoSchedule, PreferNoSchedule, and NoExecute.
+
+

Example:

+
"taints": [{
+	"key": "status",
+	"value": "unavailable",
+	"effect": "NoSchedule"
+}, {
+	"key": "looks",
+	"value": "bad",
+	"effect": "NoSchedule"
+}]
+
+
+ +
+ + + + + + + + + + + + + +
Table 9 Data structure of the login field

Parameter

+

Type

+

Description

+

sshKey

+

String

+

Name of the key pair used for node login. For details on how to create a key pair, see Creating a Key Pair.

+

userPassword

+

String

+

Password used for node login.

+
NOTE:

This field is not supported for the current version.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 10 Data structure of the Volume field

Parameter

+

Type

+

Description

+

volumetype

+

String

+

Disk type. For details, see the description of root_volume in Creating an ECS.

+
  • SATA: common I/O disk type.
  • SAS: high I/O disk type.
  • SSD: ultra-high I/O disk type.
+

size

+

Integer

+

Specifies the system disk size, in GB. The value ranges from 40 to 1024.

+

extendParam

+

Map<String,Object>

+

Disk extension parameter. For details, see the description of the extendparam parameter in Creating an ECS.

+

hw:passthrough

+

Boolean

+
  • Pay attention to this field if your ECS is SDI-compliant. If the value of this field is true, the created disk is of the SCSI type.
  • If the node pool type is ElasticBMS, this field must be set to true.
+

metadata

+

dataVolumeMetadata object

+

Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted.

+

If data disks are created using a data disk image, this parameter cannot be used.

+
+
+ +
+ + + + + + + + + + + + + +
Table 11 Data structure of the dataVolumeMetadata field

Parameter

+

Type

+

Description

+

__system__encrypted

+

String

+

Whether an EVS disk is encrypted.

+
  • '0': not encrypted
  • '1': encrypted
+

If this parameter is not specified, EVS disks will not be encrypted by default.

+

__system__cmkid

+

String

+

CMK ID used for encryption. This parameter is used with __system__encrypted.

+
NOTE:

You can obtain the ID through HTTPS requests. For details, see Querying the List of CMKs.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 12 Data structure of the publicIP field

Parameter

+

Type

+

Description

+

ids

+

Array of strings

+

List of IDs of the existing EIPs.

+
NOTICE:

If ids is set, you do not need to set count and eip.

+
+

count

+

Integer

+

Number of EIPs to be dynamically created.

+
NOTICE:

The count and eip parameters must be set simultaneously.

+
+

eip

+

eip object

+

EIP.

+
NOTICE:

The count and eip parameters must be set simultaneously.

+
+
+
+ +
+ + + + + + + + + + + + + +
Table 13 Data structure of the eip field

Parameter

+

Type

+

Description

+

iptype

+

String

+

Type of the EIP.

+

bandwidth

+

bandwidth object

+

Bandwidth parameters of the EIP.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 14 Data structure of the bandwidth field

Parameter

+

Type

+

Description

+

chargemode

+

String

+

Bandwidth billing mode.

+
  • If this parameter is not carried, the node is billed by bandwidth.
  • If this parameter is carried but is left blank, the node is billed by bandwidth.
  • If this parameter is set to traffic, the node is billed by traffic.
  • If this parameter is set to another value, node creation will fail.
    NOTE:
    • Billed by bandwidth: The billing will be based on the data transfer rate (in Mbps) of public networks. If your bandwidth usage is higher than 10%, this billing mode is recommended.
    • Billed by traffic: The billing will be based on the total traffic (in GB) transferred on public networks. If your bandwidth usage is lower than 10%, this billing mode is recommended.
    +
    +
+

size

+

Integer

+

Bandwidth size.

+

sharetype

+

String

+

Bandwidth sharing type.

+
+
+ +
+ + + + + + + + + + + + + +
Table 15 Data structure of the nodeNicSpec field

Parameter

+

Type

+

Description

+

primaryNic

+

primaryNic object

+

Primary NIC description.

+

extNics

+

Array of extNics objects

+

Extension NIC.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 16 Data structure of the primaryNic/extNics field

Parameter

+

Type

+

Description

+

subnetId

+

String

+

Network ID of the subnet to which the NIC belongs.

+

fixedIps

+

Array of strings

+

The IP address of the primary NIC is specified by fixedIps. The number of IP addresses cannot be greater than the number of created nodes. fixedIps and ipBlock cannot be specified at the same time.

+

ipBlock

+

String

+

CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. fixedIps and ipBlock cannot be specified at the same time.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 17 Data structure of the spec/extendParam field

Parameter

+

Type

+

Description

+

maxPods

+

Integer

+

Maximum number of pods on the node.

+

alpha.cce/preInstall

+

String

+

Script required before the installation.

+
NOTE:

The input value must be encoded using Base64. (Command: echo -n "Content to be encoded" | base64)

+
+

alpha.cce/postInstall

+

String

+

Script required after the installation.

+
NOTE:

The input value must be encoded using Base64. (Command: echo -n "Content to be encoded" | base64)

+
+

alpha.cce/NodeImageID

+

String

+

Mandatory if a custom image is used in creating a bare metal node.

+

DockerLVMConfigOverride

+

String

+

ConfigMap of the Docker data disk. The following is an example configuration:

+
"DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
+

In this example:

+
  • userLV: size of the user space, for example, vgpaas/20%VG.
  • userPath: mount path of the user space, for example, /home/wqt-test.
  • diskType: disk type. Currently, only the evs, hdd, and ssd are supported.
  • lvType: type of a logic volume. Currently, the value can be linear or striped.
  • dockerThinpool: Docker space size, for example, vgpaas/60%VG.
  • kubernetesLV: kubelet space size, for example, vgpaas/20%VG.
+

publicKey

+

String

+

Public key of the node. Used when creating a key pair.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 18 Data structure of the autoscaling field

Parameter

+

Type

+

Description

+

enable

+

Boolean

+

Whether to enable auto scaling.

+

Default: false

+

minNodeCount

+

Integer

+

Minimum number of nodes allowed if auto scaling is enabled. The value cannot be greater than the maximum number of nodes allowed by the cluster specifications.

+

Minimum: 0

+

maxNodeCount

+

Integer

+

Maximum number of nodes allowed if auto scaling is enabled.

+

scaleDownCooldownTime

+

Integer

+

Interval between two scaling operations, in minutes. During this period, nodes added after a scale-up will not be deleted.

+

priority

+

Integer

+

Weight of a node pool. A node pool with a higher weight has a higher priority during scaling.

+
+
+ +
+ + + + + + + + + +
Table 19 Data structure of the nodeManagement field

Parameter

+

Type

+

Description

+

serverGroupReference

+

String

+

ECS group ID. If this parameter is specified, all nodes in the node pool will be created in this ECS group.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 20 Data structure of the status field

Parameter

+

Type

+

Description

+

currentNode

+

Integer

+

Number of nodes in the node pool.

+

phase

+

String

+

Node pool status.

+
  • Synchronizing: The node is being synchronized.
  • Synchronized: The node has been synchronized.
  • SoldOut: Nodes have been sold out.
  • Deleting: The node is being deleted.
  • Error: An error occurred when the node is being added.
+
NOTE:

If the status is blank, the status is normal.

+
+

jobId

+

String

+

ID of the job to delete the node pool.

+
+
+

Response example:

+
{
+    "kind": "NodePool",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "test-nodepool",
+        "uid": "65787e3e-cd82-11ea-8ec6-0255ac1001be"
+    },
+    "spec": {
+        "initialNodeCount": 0,
+        "type": "vm",
+        "nodeTemplate": {
+            "flavor": "s6.large.2",
+            "az": "eu-de-01",
+            "os": "EulerOS 2.5",
+            "login": {
+                "sshKey": "KeyPair-nodepool",
+                "userPassword": {}
+            },
+            "rootVolume": {
+                "volumetype": "SATA",
+                "size": 40
+            },
+            "dataVolumes": [
+                {
+                    "volumetype": "SATA",
+                    "size": 100,
+                    "extendParam": {
+                        "useType": "docker"
+                    },
+                    "metadata": {
+                        "__system__cmkid": "1ed68cb7-b09b-423c-8d66-fdd2e063769d",
+                        "__system__encrypted": "1"
+                    }
+                }
+            ],
+            "publicIP": {
+                "eip": {
+                    "bandwidth": {}
+                }
+            },
+            "nodeNicSpec": {
+                "primaryNic": {
+                    "subnetId": "3d6f5dc2-caf7-4a06-b4ac-11a3a5a49cdd"
+                }
+            },
+            "billingMode": 0,
+            "taints": [
+                {
+                    "key": "test-taints",
+                    "value": "test",
+                    "effect": "NoSchedule"
+                }
+            ],
+            "k8sTags": {
+                "cce.cloud.com/cce-nodepool": "test-nodepool",
+                "test-k8stag": "test"
+            },
+            "userTags": [
+                {
+                    "key": "test-resourcetag",
+                    "value": "test"
+                }
+            ],
+            "extendParam": {
+                "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear",
+                "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3",
+                "alpha.cce/postInstall": "bHMgLWwK",
+                "alpha.cce/preInstall": "bHMgLWw=",
+                "maxPods": 100
+            }
+        },
+        "autoscaling": {
+            "enable": true,
+            "minNodeCount": 0,
+            "maxNodeCount": 4,
+            "scaleDownCooldownTime": 5,
+            "priority": 1
+        },
+        "nodeManagement": {
+            "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3"
+        }
+    },
+    "status": {
+        "currentNode": 0,
+        "phase": ""
+    }
+}
+
+

Status Code

Table 21 describes the status code of this API.

+ +
+ + + + + + + +
Table 21 Status code

Status Code

+

Description

+

200

+

The specified node pool is queried successfully.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0356.html b/docs/cce/api-ref/cce_02_0356.html new file mode 100644 index 000000000..a50cec66b --- /dev/null +++ b/docs/cce/api-ref/cce_02_0356.html @@ -0,0 +1,510 @@ + + +

Updating a Specified Node Pool

+

Function

This API is used to update a specified node pool.

+
  • The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access.
  • Currently, only the node pool name and scaling parameters in spec can be updated, such as initialNodeCount, autoscaling, name, k8sTags, taints, login, and userTags.
+
+
+

URI

PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+

nodepool_id

+

Yes

+

Node pool ID. For details about how to obtain the node pool ID, see Listing All Node Pools in a Specified Cluster.

+
+
+
+

Request

Request parameters:

+

Table 2 and Table 3 lists the request parameters.

+ +
+ + + + + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

String

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 NodePool structure

Parameter

+

Mandatory

+

Type

+

Description

+

kind

+

Yes

+

String

+

API type, which is fixed at NodePool.

+

apiVersion

+

Yes

+

String

+

API version, which is fixed at v3.

+

metadata

+

Yes

+

metadata object

+

Metadata of the node pool.

+

spec

+

Yes

+

spec object

+

Parameters of the node pool.

+
+
+ +
+ + + + + + + + + + + +
Table 4 Data structure of the metadata field

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Node pool name.

+

Naming rule: Enter 1 to 50 characters that starts with a lowercase letter and cannot end with a hyphen (-). Lowercase letters, digits, and hyphens (-) are allowed. The value cannot be DefaultPool.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Data structure of the spec field

Parameter

+

Mandatory

+

Type

+

Description

+

initialNodeCount

+

Yes

+

Integer

+

Expected number of nodes in this node pool. The value cannot be greater than the maximum number of nodes allowed for the cluster.

+

type

+

No

+

String

+

Node pool type. If this parameter is left blank, the value vm is used by default.

+
  • vm: ECS
  • ElasticBMS: BMS. This value is valid in CCE Turbo cluster.
+

autoscaling

+

No

+

autoscaling object

+

Auto scaling parameters.

+

nodeTemplate

+

Yes

+

nodeTemplate object

+

Parameters of the node pool template.

+

If az is set to random, when you create a node pool or update the number of nodes in a node pool, a scaling task is triggered. The system selects an AZ from all AZs where scaling is allowed to add nodes based on priorities.

+
AZs with a smaller number of existing nodes have a higher priority. If AZs have the same number of nodes, the system selects the AZ based on the AZ sequence. Example:
  • Creating nodes in a node pool for the first time: Assume that AZ 1, AZ 2, and AZ 3 have available resources. These AZs have the same priority because they have no existing nodes. In this case, AZ 1 is selected by sequence to create all nodes to be added.
  • Adding nodes to a node pool that already has nodes:
    • Assume that the node pool has 1 node in AZ 1, 3 in AZ 2, and 2 in AZ 3, and that resources in AZ 1 have been sold out. Only AZ 2 and AZ 3 are available for scaling. In this case, AZ 3 has a higher priority than AZ 2 because AZ 3 has less nodes. Therefore, all nodes to be added will be created in AZ 3.
    • Assume that the node pool has 1 node in AZ 1, 2 in AZ 2, and 2 in AZ 3, and that resources in AZ 1 have been sold out. Only AZ 2 and AZ 3 are available for scaling. In this case, AZ 2 and AZ 3 have the same priority because they have the same number of nodes. Therefore, all nodes to be added will be created in AZ 2.
    +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 Data structure of the autoscaling field

Parameter

+

Mandatory

+

Type

+

Description

+

enable

+

No

+

Boolean

+

Whether to enable auto scaling.

+

minNodeCount

+

No

+

Integer

+

Minimum number of nodes after a scale-down if auto scaling is enabled.

+

maxNodeCount

+

No

+

Integer

+

Maximum number of nodes after a scale-up if auto scaling is enabled. The value of this parameter must be greater than or equal to that of minNodeCount and does not exceed the maximum number of nodes for the cluster.

+

scaleDownCooldownTime

+

No

+

Integer

+

Interval during which nodes added after a scale-up will not be deleted, in minutes.

+

priority

+

No

+

Integer

+

Node pool weight. A higher weight indicates a higher priority in scale-up.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 7 Data structure of the nodeTemplate field

Parameter

+

Mandatory

+

Type

+

Description

+

k8sTags

+

No

+

Object

+

Kubernetes label, in the format of key-value pair. A maximum of 20 key-value pairs are allowed.

+
  • Key: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key.
  • Value: The value can be left blank or a string of 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed in the character string.
+

Example:

+
"k8sTags": {
+	"key": "value"
+}
+

taints

+

No

+

Object

+
Taints added to the created node to set anti-affinity. The following three parameters are contained in every taint:
  • Key: Enter 1 to 63 characters starting with a letter or digit. Only letters, digits, hyphens (-), underscores (_), and periods (.) are allowed. A DNS subdomain can be prefixed to a key.
  • Value: The value can be a string of 1 to 63 characters starting with a letter or digit. Letters, digits, hyphens (-), underscores (_), and periods (.) are allowed.
  • Effect: Set it to NoSchedule, PreferNoSchedule, or NoExecute.
+
+

Example:

+
"taints": [
+{
+	"key": "status",
+	"value": "unavailable",
+	"effect": "NoSchedule"
+}, 
+{
+	"key": "looks",
+	"value": "bad",
+	"effect": "NoSchedule"
+}]
+
+
+

Example request:

+
{
+    "kind": "NodePool",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "nodepool-name-change",
+        "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7"
+    },
+    "spec": {
+        "initialNodeCount": 0,
+        "type": "vm",
+        "nodeTemplate": {
+            "flavor": "s6.large.2",
+            "az": "eu-de-01",
+            "os": "EulerOS 2.5",
+            "login": {
+                "sshKey": "KeyPair-nodepool",
+                "userPassword": {}
+            },
+            "rootVolume": {
+                "volumetype": "SATA",
+                "size": 40
+            },
+            "dataVolumes": [
+                {
+                    "volumetype": "SATA",
+                    "size": 100,
+                    "extendParam": {
+                        "useType": "docker"
+                    }
+                }
+            ],
+            "publicIP": {
+                "eip": {
+                    "bandwidth": {}
+                }
+            },
+            "nodeNicSpec": {
+                "primaryNic": {
+                    "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef"
+                }
+            },
+            "billingMode": 0,
+            "taints": [
+                {
+                    "key": "change-taints",
+                    "value": "value1",
+                    "effect": "NoExecute"
+                }
+            ],
+            "k8sTags": {
+                "change-tag": "value2"
+            },
+            "userTags": [
+                {
+                    "key": "change-resource-tag",
+                    "value": "value3"
+                }
+            ],
+            "extendParam": {
+                "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear",
+                "alpha.cce/postInstall": "bHMgLWwK",
+                "alpha.cce/preInstall": "bHMgLWw=",
+                "maxPods": 110
+            }
+        },
+        "autoscaling": {
+            "enable": true,
+            "minNodeCount": 2,
+            "maxNodeCount": 4,
+            "scaleDownCooldownTime": 10,
+            "priority": 2
+        },
+        "nodeManagement": {
+            "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3"
+        }
+    },
+    "status": {
+        "currentNode": 0,
+        "phase": ""
+    }
+}
+
+

Response

Response parameters:

+

Table 18 describes the response parameters.

+

Response example:

+
{
+    "kind": "NodePool",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "nodepool-name-change",
+        "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7"
+    },
+    "spec": {
+        "initialNodeCount": 0,
+        "type": "vm",
+        "nodeTemplate": {
+            "flavor": "s6.large.2",
+            "az": "eu-de-01",
+            "os": "EulerOS 2.5",
+            "login": {
+                "sshKey": "KeyPair-nodepool",
+                "userPassword": {}
+            },
+            "rootVolume": {
+                "volumetype": "SATA",
+                "size": 40
+            },
+            "dataVolumes": [
+                {
+                    "volumetype": "SATA",
+                    "size": 100,
+                    "extendParam": {
+                        "useType": "docker"
+                    }
+                }
+            ],
+            "publicIP": {
+                "eip": {
+                    "bandwidth": {}
+                }
+            },
+            "nodeNicSpec": {
+                "primaryNic": {
+                    "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef"
+                }
+            },
+            "billingMode": 0,
+            "taints": [
+                {
+                    "key": "change-taints",
+                    "value": "value1",
+                    "effect": "NoExecute"
+                }
+            ],
+            "k8sTags": {
+                "cce.cloud.com/cce-nodepool": "nodepool-name-change",
+                "change-tag": "value2"
+            },
+            "userTags": [
+                {
+                    "key": "change-resource-tag",
+                    "value": "value3"
+                }
+            ],
+            "extendParam": {
+                "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear",
+                "alpha.cce/postInstall": "bHMgLWwK",
+                "alpha.cce/preInstall": "bHMgLWw=",
+                "maxPods": 110
+            }
+        },
+        "autoscaling": {
+            "enable": true,
+            "minNodeCount": 2,
+            "maxNodeCount": 4,
+            "scaleDownCooldownTime": 10,
+            "priority": 2
+        },
+        "nodeManagement": {
+            "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3"
+        }
+    },
+    "status": {
+        "currentNode": 0,
+        "phase": ""
+    }
+}
+
+

Status Code

Table 8 describes the status code of this API.

+ +
+ + + + + + + +
Table 8 Status code

Status Code

+

Description

+

200

+

The specified node pool is updated successfully.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0357.html b/docs/cce/api-ref/cce_02_0357.html new file mode 100644 index 000000000..58b3c5f94 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0357.html @@ -0,0 +1,1040 @@ + + +

Deleting a Node Pool

+

Function

This API is used to delete a specified node pool.

+

The URL for cluster management is in the format of https://Endpoint/uri. In the URL, uri indicates the resource path, that is, the path for API access.

+
+
+

URI

DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id}

+

Table 1 describes the parameters of this API.

+ +
+ + + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+

nodepool_id

+

Yes

+

Node pool ID. For details about how to obtain the node pool ID, see Listing All Node Pools in a Specified Cluster.

+
+
+
+

Request

Request parameters:

+

Table 1 describe the request parameters.

+ +
+ + + + + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

String

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

NA

+
+

Response

Response parameters:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at NodePool.

+

Default: NodePool

+

apiVersion

+

String

+

API version. The value is fixed at v3.

+

Default: v3

+

metadata

+

NodePoolMetadata object

+

Metadata information of the node pool.

+

spec

+

NodePoolSpec object

+

Node pool specifications.

+

status

+

NodePoolStatus object

+

Node pool status.

+
+
+ +
+ + + + + + + + + + + + + +
Table 4 NodePoolMetadata

Parameter

+

Type

+

Description

+

name

+

String

+

Node pool name.

+
NOTE:

Naming rules:

+
  • Enter 1 to 50 characters, starting with a lowercase letter and not ending with a hyphen (-). Only lowercase letters, digits, and hyphens (-) are allowed.
  • You cannot create node pools named DefaultPool.
+
+

Minimum: 1

+

Maximum: 50

+

uid

+

String

+

UID of the node pool. The value is automatically generated after the object is updated. A user-defined value will not take effect.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 NodePoolSpec

Parameter

+

Type

+

Description

+

type

+

String

+

Node pool type. If this parameter is left blank, the value vm is used by default.

+
  • vm: ECS
  • ElasticBMS: BMS. This value is valid in CCE Turbo cluster.
+

nodeTemplate

+

V3NodeSpec object

+

Detailed parameters of the node pool template.

+

initialNodeCount

+

Integer

+

Initial number of nodes for the node pool.

+

autoscaling

+

NodePoolNodeAutoscaling object

+

Auto scaling parameters.

+

nodeManagement

+

NodeManagement object

+

Node management configuration.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 V3NodeSpec

Parameter

+

Type

+

Description

+

flavor

+

String

+

Node specifications.

+

Minimum: 1

+

Maximum: 50

+

az

+

String

+

\t\nName of the AZ where the node is located. This AZ exists at the underlying layer and is in the physical AZ group of the user.

+

Maximum: 200

+

os

+

String

+

Node OS.

+

login

+

Login object

+

Node login mode.

+

rootVolume

+

Volume object

+

System disk information of the node.

+

dataVolumes

+

Array of Volume objects

+

Data disk parameters of the node. Currently, you can add the second data disk for your node on the CCE console.

+

publicIP

+

V3NodePublicIP object

+

EIP of the node.

+

nodeNicSpec

+

NodeNicSpec object

+

NIC information of the node.

+

count

+

Integer

+

Number of nodes to be created in a batch. The value must be a positive integer greater than or equal to 1 and less than or equal to the defined limit. This field can be set to 0 for a node pool.

+

billingMode

+

Integer

+

Billing mode of a node.

+
NOTE:

This field is not supported for the current version.

+
+

taints

+

Array of Taint objects

+

You can add taints to created nodes to set affinity. Each taint contains the following three parameters:

+
  • Key: The value must start with a letter or digit and can contain letters, digits, hyphens (-), underscores (), and periods (.). The maximum length is 63 characters. In addition, the DNS subdomain can be used as the prefix.
  • Value: The value must start with a letter or digit and can contain a maximum of 63 characters, including letters, digits, hyphens (-), underscores (), and periods (.).
  • Effect: Available options are NoSchedule, PreferNoSchedule, and NoExecute.
+

Example:

+
"taints": [{ 
+        "key": "status", 
+        "value": "unavailable", 
+        "effect": "NoSchedule" 
+ }, { 
+        "key": "looks", 
+        "value": "bad", 
+        "effect": "NoSchedule" 
+ }]
+

k8sTags

+

Map<String,String>

+

The format is a key-value pair. The number of key-value pairs cannot exceed 20.

+
  • Key: Enter 1 to 63 characters, starting with a letter or digit. Only letters, digits, hyphens (-), underscores (), and periods (.) are allowed. A DNS subdomain can be prefixed to a key and contain a maximum of 253 characters. Example DNS subdomain: example.com/my-key
  • Value: The value can be left blank or contain 1 to 63 characters that start with a letter or digit. Only letters, digits, hyphens (-), underscores (), and periods (.) are allowed in the character string.
+

Example:

+
"k8sTags": { 
+        "key": "value" 
+ }
+

ecsGroupId

+

String

+

Cloud server group ID. If this field is specified, the node is created in the specified cloud server group.

+
NOTE:

This field is not supported when you use CCE Turbo cluster.

+
+

dedicatedHostId

+

String

+

ID of the DeH to which the node is scheduled.

+

This field is not supported when you add a node during node pool creation.

+

offloadNode

+

Boolean

+

Whether the node belongs to a CCE Turbo cluster.

+
NOTE:

This field is not supported when you add a node during node pool creation.

+
+

userTags

+

Array of UserTag objects

+

Cloud server labels. The key of a label must be unique. The maximum number of user-defined labels supported by CCE depends on the region. In the region that supports the least number of labels, you can still create up to 5 labels for a cloud server.

+

extendParam

+

Map<String,Object>

+

Extended parameter for creating a node. The options are as follows:

+
  • ecs:performancetype: ECS flavor. This field does not exist for a BMS node.
  • productID: product ID.
  • maxPods: maximum number of pods that can be created on a node, including the default system pods. Value range: 16 to 256 This limit prevents the node from being overloaded fpr managing too many pods.
+
  • DockerLVMConfigOverride: Docker data disk configurations. The following is an example default configuration:
    "DockerLVMConfigOverride":"dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear"
    +

    The configuration contains the following fields:

    +
    • userLV: size of the user space, for example, vgpaas/20%VG.
    • userPath: mount path of the user space, for example, /home/wqt-test.
    • diskType: disk type. Currently, only evs, hdd, and ssd are supported.
    • lvType: type of a logic volume. Currently, the value can be linear or striped.
    • dockerThinpool: Docker space size, for example, vgpaas/60%VG.
    • kubernetesLV: kubelet space size, for example, vgpaas/20%VG.
    +
  • dockerBaseSize: available disk space of a single Docker container on a node in Device Mapper mode. This field is not supported in OverlayFS mode (nodes that use CentOS 7.6 or Ubuntu 18.04 in CCE Turbo clusters and nodes that use Ubuntu 18.04 in CCE clusters).
  • init-node-password: initial node password
  • offloadNode: whether the node is a CCE Turbo cluster node.
  • publicKey: node public key. Used when creating a key pair.
  • alpha.cce/preInstall: pre-installation script.
+
NOTE:

The input value must be Base64-encoded. (Command: echo -n Content to be encoded | base64)

+
+
  • alpha.cce/postInstall: post-installation script
+
NOTE:

The input value must be Base64-encoded. (Command: echo -n Content to be encoded | base64)

+
+
  • alpha.cce/NodeImageID: This field is required when a custom image is used to create a BMS node.
+
+
+ +
+ + + + + + + + + + + + + +
Table 7 Login

Parameter

+

Type

+

Description

+

sshKey

+

String

+

Name of the key pair used for login. Either the key pair or password must be used for login.

+

For details on how to create a key pair, see Creating a Key Pair.

+

userPassword

+

String

+

Password used for node login.

+
NOTE:

This field is not supported for the current version.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 Volume

Parameter

+

Type

+

Description

+

size

+

Integer

+

Disk size in the unit of GB.

+
  • System disk: 40 to 1024
  • Data disk: 100 to 32768
+

volumetype

+

String

+

Disk type. For details about possible values, see the description of the root_volume parameter in the API used to create an ECS in the ECS API reference.

+
  • SATA: common I/O disk
  • SAS: high I/O disk
  • SSD: ultra-high I/O disk
+

extendParam

+

Map<String,Object>

+

Disk extension parameter. For details, see the description of the extendparam parameter in Creating an ECS.

+

hw:passthrough

+

Boolean

+
  • Pay attention to this field if your ECS is SDI-compliant. If the value of this field is true, the created disk is of the SCSI type.
  • If the node pool type is ElasticBMS, this field must be set to true.
+

metadata

+

dataVolumeMetadata object

+

Data disk encryption information. This parameter is mandatory only when the data disk of the node to be created needs to be encrypted.

+

If data disks are created using a data disk image, this parameter cannot be used.

+
+
+ +
+ + + + + + + + + + + + + +
Table 9 DataVolumeMetadata

Parameter

+

Type

+

Description

+

__system__encrypted

+

String

+

Whether the EVS disk is encrypted. The value 0 indicates that the EVS disk is not encrypted, and the value 1 indicates that the EVS disk is encrypted.

+

If this field does not exist, the disk will not be encrypted by default.

+

__system__cmkid

+

String

+

CMK ID, which indicates encryption in metadata. This field is used with __system__encrypted.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 10 V3NodePublicIP

Parameter

+

Type

+

Description

+

ids

+

Array of strings

+

IDs of existing EIPs. The quantity cannot be greater than the number of nodes to be created.

+
NOTE:

If the ids parameter has been set, you do not need to set the count and eip parameters.

+
+

count

+

Integer

+

Number of EIPs to be dynamically created.

+
NOTE:

The count and eip parameters must be set together.

+
+

eip

+

V3NodeEIPSpec object

+

EIP configuration.

+
+
+ +
+ + + + + + + + + + + + + +
Table 11 V3NodeEIPSpec

Parameter

+

Type

+

Description

+

iptype

+

String

+

EIP type.

+

bandwidth

+

V3NodeBandwidth object

+

Bandwidth parameters of the EIP.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 12 V3NodeBandwidth

Parameter

+

Type

+

Description

+

chargemode

+

String

+

Bandwidth billing modes:

+
  • If this field is not specified, the billing is based on bandwidth.
  • If the field is null, the billing is based on bandwidth.
  • If the field value is traffic, the billing is based on traffic.
  • If the value is out of the preceding options, the cloud server will fail to be created.
+
NOTE:
  • Billed by bandwidth: The billing will be based on the data transfer rate (in Mbps) of public networks. If your bandwidth usage is higher than 10%, this billing mode is recommended.
  • Billed by traffic: The billing will be based on the total traffic (in GB) transferred on public networks. If your bandwidth usage is lower than 10%, this billing mode is recommended.
+
+

size

+

String

+

Bandwidth size.

+

sharetype

+

String

+

Bandwidth sharing type.

+
+
+ +
+ + + + + + + + + + + + + +
Table 13 NodeNicSpec

Parameter

+

Type

+

Description

+

primaryNic

+

primaryNic object

+

Description of the primary NIC.

+

extNics

+

Array of extNics objects

+

Extension NIC.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 14 Data structure of the primaryNic/extNics field

Parameter

+

Type

+

Description

+

subnetId

+

String

+

Network ID of the subnet to which the NIC belongs.

+

fixedIps

+

Array of strings

+

The IP address of the primary NIC is specified by fixedIps. The number of IP addresses cannot be greater than the number of created nodes. fixedIps and ipBlock cannot be specified at the same time.

+

ipBlock

+

String

+

CIDR format of the IP address segment. The IP address of the created node falls in this IP address segment. fixedIps and ipBlock cannot be specified at the same time.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 15 Taint

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+

value

+

String

+

Value.

+

Maximum: 63

+

effect

+

String

+

Effect.

+

Enumeration values:

+
  • NoSchedule
  • PreferNoSchedule
  • NoExecute
+
+
+ +
+ + + + + + + + + + + + + +
Table 16 UserTag

Parameter

+

Type

+

Description

+

key

+

String

+

Key of the cloud server label. The value cannot start with CCE- or __type_baremetal.

+

Minimum: 1

+

Maximum: 36

+

value

+

String

+

Value of the cloud server label.

+

Minimum: 0

+

Maximum: 43

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 17 NodePoolNodeAutoscaling

Parameter

+

Type

+

Description

+

enable

+

Boolean

+

Whether to enable auto scaling.

+

Default: false

+

minNodeCount

+

Integer

+

Minimum number of nodes allowed if auto scaling is enabled. The value cannot be greater than the maximum number of nodes allowed by the cluster specifications.

+

Minimum: 0

+

maxNodeCount

+

Integer

+

Maximum number of nodes allowed if auto scaling is enabled. This value must be greater than or equal to the value of minNodeCount and cannot exceed the maximum number of nodes in the cluster specifications.

+

Minimum: 0

+

scaleDownCooldownTime

+

Integer

+

Interval between two scaling operations, in minutes. During this period, nodes added after a scale-up will not be deleted.

+

Minimum: 0

+

Maximum: 2147483647

+

priority

+

Integer

+

Weight of a node pool. A node pool with a higher weight has a higher priority during scaling.

+
+
+ +
+ + + + + + + + + +
Table 18 NodeManagement

Parameter

+

Type

+

Description

+

serverGroupReference

+

String

+

Cloud server group ID. If this field is specified, all nodes in the node pool will be created in this group. The group ID can be specified only when you create the node pool and cannot be modified. When you specify a cloud server group, the number of nodes in the node pool cannot exceed the group quota.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 19 NodePoolStatus

Parameter

+

Type

+

Description

+

currentNode

+

Integer

+

Number of nodes in the node pool.

+

phase

+

String

+

Node pool status. If this field is left blank, the node pool is available.

+
  • Synchronizing: Scale-in is being performed.
  • Synchronized: The node pool fails to be updated.
  • SoldOut: Node resources are sold out.
  • Deleting: The node pool is being deleted.
  • Error: An error occurs.
+

Enumeration values:

+
  • Synchronizing
  • Synchronized
  • SoldOut
  • Deleting
  • Error
+

jobId

+

String

+

ID of the job to delete the node pool.

+
+
+

Response example:

+
{
+    "kind": "List",
+    "apiVersion": "v3",
+    "items": [
+        {
+            "kind": "NodePool",
+            "apiVersion": "v3",
+            "metadata": {
+                "name": "nodepool-name-change",
+                "uid": "feec6013-cd7e-11ea-8c7a-0255ac100be7"
+            },
+            "spec": {
+                "initialNodeCount": 0,
+                "type": "vm",
+                "nodeTemplate": {
+                    "flavor": "s6.large.2",
+                    "az": "eu-de-02",
+                    "os": "EulerOS 2.5",
+                    "login": {
+                        "sshKey": "KeyPair-nodepool",
+                        "userPassword": {}
+                    },
+                    "rootVolume": {
+                        "volumetype": "SAS",
+                        "size": 40
+                    },
+                    "dataVolumes": [
+                        {
+                            "volumetype": "SAS",
+                            "size": 100,
+                            "extendParam": {
+                                "useType": "docker"
+                            }
+                        }
+                    ],
+                    "publicIP": {
+                        "eip": {
+                            "bandwidth": {}
+                        }
+                    },
+                    "nodeNicSpec": {
+                        "primaryNic": {
+                            "subnetId": "31be174a-0c7f-4b71-bb0d-d325fecb90ef"
+                        }
+                    },
+                    "billingMode": 0,
+                    "taints": [
+                        {
+                            "key": "change-taints",
+                            "value": "value1",
+                            "effect": "NoExecute"
+                        }
+                    ],
+                    "k8sTags": {
+                        "cce.cloud.com/cce-nodepool": "nodepool-name-change",
+                        "change-tag": "value2"
+                    },
+                    "userTags": [
+                        {
+                            "key": "change-resource-tag",
+                            "value": "value3"
+                        }
+                    ],
+                    "extendParam": {
+                        "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear",
+                        "alpha.cce/NodeImageID": "85bd7ec5-bca4-4f5f-947b-6c1bf02599d3",
+                        "alpha.cce/postInstall": "bHMgLWwK",
+                        "alpha.cce/preInstall": "bHMgLWw=",
+                        "maxPods": 110
+                    }
+                },
+                "autoscaling": {
+                    "enable": true,
+                    "minNodeCount": 2,
+                    "maxNodeCount": 4,
+                    "scaleDownCooldownTime": 10,
+                    "priority": 2
+                },
+                "nodeManagement": {
+                    "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3"
+                }
+            },
+            "status": {
+                "currentNode": 0,
+                "phase": ""
+            }
+        }
+    ]
+}
+

Status Code

+

Table 20 describes the status code of this API.

+ +
+ + + + + + + +
Table 20 Status code

Status Code

+

Description

+

200

+

Information about all node pools in the cluster is successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+

Error Codes

+

See Error Codes.

+

For details about the response parameters, see Table 18.

+

Example response:

+
{
+    "kind": "NodePool",
+    "apiVersion": "v3",
+    "metadata": {
+        "name": "test-nodepool",
+        "uid": "65787e3e-cd82-11ea-8ec6-0255ac1001be"
+    },
+    "spec": {
+        "initialNodeCount": 0,
+        "type": "vm",
+        "nodeTemplate": {
+            "flavor": "s6.large.2",
+            "az": "eu-de-01",
+            "os": "EulerOS 2.5",
+            "login": {
+                "sshKey": "KeyPair-nodepool",
+                "userPassword": {}
+            },
+            "rootVolume": {
+                "volumetype": "SATA",
+                "size": 40
+            },
+            "dataVolumes": [
+                {
+                    "volumetype": "SATA",
+                    "size": 100,
+                    "extendParam": {
+                        "useType": "docker"
+                    },
+                    "metadata": {
+                        "__system__cmkid": "1ed68cb7-b09b-423c-8d66-fdd2e063769d",
+                        "__system__encrypted": "1"
+                    }
+                }
+            ],
+            "publicIP": {
+                "eip": {
+                    "bandwidth": {}
+                }
+            },
+            "nodeNicSpec": {
+                "primaryNic": {
+                    "subnetId": "3d6f5dc2-caf7-4a06-b4ac-11a3a5a49cdd"
+                }
+            },
+            "billingMode": 0,
+            "taints": [
+                {
+                    "key": "test-taints",
+                    "value": "test",
+                    "effect": "NoSchedule"
+                }
+            ],
+            "k8sTags": {
+                "cce.cloud.com/cce-nodepool": "test-nodepool",
+                "test-k8stag": "test"
+            },
+            "userTags": [
+                {
+                    "key": "test-resourcetag",
+                    "value": "test"
+                }
+            ],
+            "extendParam": {
+                "DockerLVMConfigOverride": "dockerThinpool=vgpaas/90%VG;kubernetesLV=vgpaas/10%VG;diskType=evs;lvType=linear",
+                "alpha.cce/postInstall": "bHMgLWwK",
+                "alpha.cce/preInstall": "bHMgLWw=",
+                "maxPods": 100
+            }
+        },
+        "autoscaling": {
+            "enable": true,
+            "minNodeCount": 0,
+            "maxNodeCount": 4,
+            "scaleDownCooldownTime": 5,
+            "priority": 1
+        },
+        "nodeManagement": {
+            "serverGroupReference": "2129f95a-f233-4cd8-a1b2-9c0acdf918d3"
+        }
+    },
+    "status": {
+        "currentNode": 0,
+        "phase": "Deleting",
+        "jobId": "d11c13c4-cd82-11ea-8ec6-0255ac1001be"
+    }
+}
+
+

Status Code

Table 21 describes the status code of this API.

+ +
+ + + + + + + +
Table 21 Status code

Status Code

+

Description

+

200

+

The job for deleting a node pool is successfully delivered.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0359_0.html b/docs/cce/api-ref/cce_02_0359_0.html new file mode 100644 index 000000000..2304c5646 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0359_0.html @@ -0,0 +1,347 @@ + + +

Obtaining Cluster Certificates (Deprecated)

+

Function

This API is used to obtain certificates of a specified cluster in form of kubeconfig file.

+
+

URI

GET /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert

+

Table 1 describes the parameters of this API.

+
+ +
+ + + + + + + + + + + + + +
Table 1 Description

Parameter

+

Mandatory

+

Description

+

project_id

+

Yes

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+

Request

Request parameters:

+

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + + + +
Table 2 Parameters in the request header

Parameter

+

Mandatory

+

Description

+

Content-Type

+

Yes

+

Message body type (format). Possible values:

+
  • application/json;charset=utf-8
  • application/json
+

X-Auth-Token

+

Yes

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this parameter is mandatory and must be set to a user token. For details on how to obtain a user token, see API Usage Guidelines.

+
+
+

Example request:

+

N/A

+
+

Response

Response parameters:

+

Table 3 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Response parameters

Parameter

+

Type

+

Description

+

kind

+

String

+

API type. The value is fixed at Config and cannot be changed.

+

apiVersion

+

String

+

API version. The value is fixed at v1 and cannot be changed.

+

preferences

+

-

+

This field is not used currently and is left unspecified by default.

+

clusters

+

clusters object

+

Cluster list.

+

users

+

users object

+

-

+

contexts

+

contexts object

+

Context list.

+

current-context

+

String

+

Current context.

+
+
+
+ +
+ + + + + + + + + + + + + +
Table 4 Data structure of the clusters field

Parameter

+

Type

+

Description

+

name

+

String

+

Cluster name.

+
  • If the publicIp parameter does not exist (that is, no EIP exists), there is only one cluster in the cluster list, and the value of this parameter is internalCluster.
  • If the publicIp parameter exists (that is, the EIP exists), there is more than one cluster in the cluster list, and the value of this parameter is externalCluster.
+

cluster

+

cluster object

+

Cluster information.

+
+
+ +
+ + + + + + + + + + + + + +
Table 5 Data structure of the cluster field

Parameter

+

Type

+

Description

+

server

+

String

+

Node IP address.

+

certificate-authority-data

+

String

+

Certificate authorization data.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 Data structure of the users field

Parameter

+

Type

+

Description

+

name

+

String

+

The value is fixed to user.

+

user

+

user object

+

Stores the certificate information and ClientKey information of a specified user.

+
+
+ +
+ + + + + + + + + + + + + +
Table 7 Data structure of the user field

Parameter

+

Type

+

Description

+

client-certificate-data

+

String

+

Client certificate.

+

client-key-data

+

String

+

Contains PEM encoding data from the TLS client key file.

+
+
+ +
+ + + + + + + + + + + + + +
Table 8 Data structure of the contexts field

Parameter

+

Type

+

Description

+

name

+

String

+

Context name.

+
  • If the publicIp parameter does not exist (that is, no EIP exists), there is only one cluster in the cluster list, and the value of this parameter is internal.
  • If the publicIp parameter exists (that is, the EIP exists), there is more than one cluster in the cluster list, and the value of this parameter is external.
+

context

+

context object

+

Context information.

+
+
+ +
+ + + + + + + + + + + + + +
Table 9 Data structure of the context field

Parameter

+

Type

+

Description

+

cluster

+

String

+

Cluster context.

+

user

+

String

+

User context.

+
+
+

Response example:

+
{
+    "kind": "Config",
+    "apiVersion": "v1",
+    "preferences": {},
+    "clusters": [
+        {
+            "name": "internalCluster",
+            "cluster": {
+                "server": "https://192.168.1.7:5443",
+                "certificate-authority-data": ""
+            }
+        }
+    ],
+    "users": [
+        {
+            "name": "user",
+            "user": {
+                "client-certificate-data": "",
+                "client-key-data": ""
+            }
+        }
+    ],
+    "contexts": [
+        {
+            "name": "internal",
+            "context": {
+                "cluster": "internalCluster",
+                "user": "user"
+            }
+        }
+    ],
+    "current-context": "internal"
+}
+

Status Code

Table 10 describes the status code of this API.

+ +
+ + + + + + + +
Table 10 Status code

Status Code

+

Description

+

200

+

Certificates of the specified cluster are successfully obtained.

+
+
+

For details about error status codes, see Status Code.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0374.html b/docs/cce/api-ref/cce_02_0374.html new file mode 100644 index 000000000..2e732e2bf --- /dev/null +++ b/docs/cce/api-ref/cce_02_0374.html @@ -0,0 +1,107 @@ + + +

Hibernating a Cluster

+

Function

This API is used to hibernate a running cluster.

+
+

Constraints

  1. After a cluster is hibernated, resources such as workloads cannot be created or managed in the cluster.
+
+

URI

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/hibernate

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

String

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this field is mandatory and must be set to a user token. For details about how to obtain a token, see API Usage Guidelines.

+

Maximum: 16384

+
+
+
+

Response Parameters

None

+
+

Example Requests

None

+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

The cluster hibernation job is successfully delivered. Keep querying the cluster status. When the cluster status changes to Hibernation, the cluster is hibernated.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/cce_02_0375.html b/docs/cce/api-ref/cce_02_0375.html new file mode 100644 index 000000000..7d92d34b8 --- /dev/null +++ b/docs/cce/api-ref/cce_02_0375.html @@ -0,0 +1,105 @@ + + +

Waking Up a Cluster

+

Function

This API is used to wake up a hibernated cluster.

+
+

URI

POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/awake

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID. For details about how to obtain the project ID, see How to Obtain Parameters in the API URI.

+

cluster_id

+

Yes

+

String

+

Cluster ID. For details about how to obtain the cluster ID, see How to Obtain Parameters in the API URI.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

Content-Type

+

Yes

+

String

+

Message body type (format).

+

Default: application/json

+

X-Auth-Token

+

Yes

+

String

+

Requests for calling an API can be authenticated using either a token or AK/SK. If token-based authentication is used, this field is mandatory and must be set to a user token. For details about how to obtain a token, see API Usage Guidelines.

+

Maximum: 16384

+
+
+
+

Response Parameters

None

+
+

Example Requests

None

+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

The cluster wakeup job is successfully delivered. Keep querying the cluster status. When the cluster status changes to Available, the cluster is woken up successfully.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/en-us_image_0000001121602072.png b/docs/cce/api-ref/en-us_image_0000001121602072.png new file mode 100644 index 0000000000000000000000000000000000000000..a5aa2e92f4c2b913da61421970bcf3a10c03167d GIT binary patch literal 52145 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 literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/en-us_image_0203982368.png b/docs/cce/api-ref/en-us_image_0203982368.png new file mode 100644 index 0000000000000000000000000000000000000000..a33337f18c593868f186f2c6832f56b51e8032bb GIT binary patch literal 32436 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%0AarhGRq!Z(@PRs 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 b?wHM8Gi!;vD9!aZ@JC)o>28j+!OQ;zxy@pq literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/en-us_image_0203982493.png b/docs/cce/api-ref/en-us_image_0203982493.png new file mode 100644 index 0000000000000000000000000000000000000000..a33337f18c593868f186f2c6832f56b51e8032bb GIT binary patch literal 32436 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 n2%Z3h&4Iuaug;dNW(7pt7*wx$hO*yk2CiRF9@Z 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 literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/en-us_image_0233732535.png b/docs/cce/api-ref/en-us_image_0233732535.png new file mode 100644 index 0000000000000000000000000000000000000000..461ef49d800acf4ed1f07d2393b2d89270b24d23 GIT binary patch literal 12188 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 F`5#hBevJSC literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/en-us_image_0279177365.png b/docs/cce/api-ref/en-us_image_0279177365.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1761fcb72c8fd31559cbf603a749a80f3a87a5 GIT binary patch literal 8104 zcmbVxcUV)~({9wG9z;}7KtVteun?L-K$-LJutz4NXAEmvhhg-Fu(stM~q~llAUo)}A$M&AcK!_U>FRJ#lqnbJQ*KFVG?(lR00|ihMlSmfy1$A7#a-=W-^%+mKfx(Suzla z+1X~6JPVlj_mj~uNK{n($?8IGl3dN-p8i%~2MqN14eZwLf}_0-^C zJeE!&W+F1NL^K*rU0my%S;EhgS<4CuDQ7b2gg8VfsQ?}oMQ1V*nPe=H1`Ec&AQtqj zGf5K*FGl9casmO?Sa76oGlbGB4RbB!S7GuC<}Jrm(PJbVyug{N!rs z2$M`kcWpCw7pW@58U!L_lw}Ua7I}Ogfq0kuhGji8ex8}s#$eL1%qY*du(@jjFF>GEEq`5ylEqK)gFqMWX{p~c^ch*nV9$7N z0(^3l&xJfM!Yt>st=!7!BF#K6cs8XFBwa|G=Cq-Es|4z zx8F?1z`4Xwy|1{^=nDw7dsnaeq*SX3m!5h6jJtVFXr}F36MiQFtGgdtD;XGA>gr&oxA|I;f3oD<)?qxj2*6wCJGDt_|)ZA ztObV)jhk|^$y2?0{mi=r<_dDdV^5aQ90)rGCRRHrH|C|se@qf@cD61hx1IJ{-xRHU z!~f`Xq%~ew)4HF@Gbpg|aNF?XM)v5F15&cv4!tmNf)Kd0!o06=B$w6}v^Irn2WJk4 zDcA6!T{4HQyzL$LcsQ#x3%9A}x8r_Ydilvd=E(7K%~Fp`l22%HjbxYG9~QRgH}ij% zoH`{erRrBVA+&Zt4LZ1CUbo%p$~@_O+uTt@&#+yNp(nSU8ss+~BcL?Cjc`Z=#76nk zS+g6f@o;u>@2gn8^vEoFrg_LpCL|x`()68^PW$u;DXHkSfB|Dr=`n)sStHYk=7SxZ zU*=Ettbtd|mF$AfOi^3(f;OZg!w@&Nr=fJwn$x<{c#d&ouhfE479%0rxtmm)9RVHo zZDTYV*{ej_6&c5rbK<~{G|o~FR&2N0y~_dy4Gpg^JQ#*7xqJbi7UHhDsO;momZR2O zQ5fTXY$*LQ_g4*%p8f5K7u|P%+l;!tT&DVe7m#XDn~-_g-BirOW`->^W@e^@BBh!b z&rOv!z(Z2wQ}^t>08=m7ClmV%@JlPpUHR%9U|<0e3 zDS1Jm`fchU`&Kb>?DMLgf04MO<E#oaK3%IukZ{dBocN!Ss?dlO>x;ypt=6BH zzGtJMPC74li%Xwa+%US{Uv#UnvLc~WVtBH+(jYjmd?BoL3e`@%^M!;pBeME zd1ZUi%i%a*;NGV(wt{YO?xcqmSjcxRM!EZHzA;72&8euUF!$CdfOgq5{2cjo^ z{JDlqtzXqUV0Br(^Rrs`?=LD}oo~yY!v##T5p22%yT^rs!j<<|tidd!6{stRK*<`H=ZoZa-+r$tckyEDz0S>_?h9n{BXUmj z)SwmXkY%-|(==jt#T(L(;xa@zJ0(Wq@>^@C9|)$ma!K2a@YdL(1mp>eO=3I_JOb+r z?u9^Kly<*y29Q7-0%HY}x}M_RmR)PdRVOIxz%c1lNq$A#1)O73Croz?{4hq<3R0&U zUq2Ym-7eC-?-BX(v8+E``ZV=L_p@csl2}to9fzEKjLx*!S@q*C(q4A%vLf;H*e0U! z1&&P7YWVb*fN4HF+8!&RGqU?I-oY1jjW(BU^|WdXekHx&*wx3R!p5p=Y3)~KIyqhe zwmdsh^ahje(vf9(s_ndoG$!t=-}pAZnjCE^I)~+#4rSGPFpT&KLQz-8Yr*1&XE8`f|4? zv;0@z5Tjj=-$Zm+a!&Ln49(n~$b519ltp|TH9@A${&>0hj4O4>ETt7Oj33>@ITYZ! zJOg+9_|M7EPv*`5-Rrk4c(IO}7&YOZwrW`%^o(+#^4bHnpA6)Y;pzFXuJ@nGP6t%- z*VTc&4Z)F()q}R|24Kvxel_(gK}g$`Ns!#P{4`10U)8K1k76O$|>Jy5kVE=#$9F9Ps_M{cgBnFX(l{p3U2_y@fR< z)B1P(%ESlVwF!qRg1`H(A9~Cb{hL8xnm0>2a5M6ChRn0{eM-CE>FBDBjkLN z;yTpz3&9FZ+Wc@}A20*&Sz=x2;r}3#r7tXNelV*n=`UGatCXPj#e-HlpRVqB7!CPa3?zJ8OExyOHuIZ$aMi zM>Vy-VkqSyb&t&(l8q%}TMwE%wcI`&gD|bMtuxl{q;7!*t&ag0yW7@MyrYuwmr_@u z9f5?N#DsN6XcwHcO+J<0yPgs2Cx$=XarXjw39@_rB@D=GOl`}QpNgEAVUX*$% zxg2K1M4Qan-Rt8Or$?C6+fz>f|k0hn(xBu_lN%ngtj zdAnWu?bvl^+~B~(1f-M}-b|ezfFL(nDzUz{A}wr@&cYY0SNEb32IbW#w%%<=F_WEy zEKC+YBTnFz3U0Yk%~|iGUaT-soSX}50Si0v=7~Uy8agC5P828j$re?JtGoGo<{Q7d zw$x6?WHl=m|7wf=9<731kX=x%tf*Nco~6Brl!0r|Oo@g*bv`Tn7MrESrhsi{zFj-p z3$M@0A?18r=F2$>T}I`nhrs1RaIOe8ZLQM-l`VdoSq?Ct@*cHuTQ8??l-WQxa-1?^ zTv90I&Vv)8+M1G|M~+woMIh680!-I}HZvO2A6y)X81qPPg^Nr}(U$(CD|)2P#M(Hd z2c90ZX?i~k`F_2aSvpY$Lv1JdOHR@kH47`1tz-T8YR)|pjQ}h@dP^=yE@vZ@q`GUx z>e&sr`7gCYJ?bw$+;Wd?6XZYx%U8t2OhSx<#;4V9?>qu0;P&?(s@ZUr&PHyW8!83( zJo~G?C0&BB0<|kNUtkHMqr%^wah`IytljMGr4_5J{bXzHTYhNZ<9X_IstELY7#?ke z_#b*$&NCe7dkE^^#Hf@kK7 zh?ot6S9agl-z_Oq^>6}?#AclfW#6kGRz{Ze`&}ueQoLD9fc?_{u<%;bNTlM0TET!v zUDM(NH5*-00$&SJ_!img$|n&}Uo7~|%xj?7YN~%xQstqa2hQ?}ZR?the3(`PLI`s|Qb-no;NX~)B z<(JYZ$~viea;4n!|g{(XpS1iRjVq&3{OB{7{T+j+IA_t0?w! z5(7NDj)5=WOsk@cf-%iM?irbs&ptmJWU-B+%tUGt6E^q}J_q(a0DJ|e( zxa~LaVxtouu1*bhT>C6o)iiP)>_qTzn1A5N{|#LJi3X%ef`-Uol)$zx$~eKn>9JQh z(RKh8&3Mv=d71672$Xels^7|FuV4MC@IdWm23@D1?nw^!nOOcZ3gxq|H4$@b=~#)^ z*`YK59@$3&0!C2<JUA3ed9v zm%zq6kT*2`C0&$tfNLo;<8cKpfxi81GQRwm>c*<>gxwjn!Tr*pd$nr>Ucs53l0);G zy~-zX;Qf{%$ZXphu$$N5D^m6o3mS2HF2w6;-+FADJl~CBb^kN7knH=Iv)OcGT>We! zyK$Q8$E2}t+eG>y`RY#tMB5R~xv+py?~t4x*4@X{<40U2HJ`i7zsaSGrt@R{B@_5{ zsu#0s#VZeKN^c!b=hr@VfIgUx{5aUy^JJsZPuC#n;1v&Ij0m%2Ig}rtFI`9Sqf?u^ zgA$xaNRT$YM_PV27Q$YM0-hytM*y!+9r|}X!lIzRIp=>yJ~bNQuQ}iRE%O?}@xMzv z7A5@$O!s$*_rHq2|AaUdZb27`4|>$)txBZ2Pp>poRwymib|3xhC2w)@bZ}L^yS=W- zhM_lY2Rhk@lkVqtUDq=Cv2thhmNQK=74Ej;l1}-xr`Sp?R!OM|1r%|~(r{7d+qa-a zJoyKaHaHQ_>k?KCOLPU^XFLiV=gM7A^19mbE5s*WQ$A0lV`pSh#m})u7e<-hBJP zA%tt`G;#6~rt=kx^gOoo*HDS9R_L`Hh^1^Qrkz%5FtOY_4IRJaGSQ(XRIEvERus5!Wf4&N4J5CpNV8|ed?uH6eyiadV4Ie6;|v%(XacI$3@sA!ISb8>HFSorev&&>AE=!Bz_4s zh_SadPkVx|unEaffZ|C~Iz(ZneV{{wRC~fV@bD_O21ww1aw0&X_e}eo`IT8+*~0s0ZmzMQ zb4QGEu3JUN+{FD+uXeMF>fO3q@-uTQogd#15rXPGwE}EwMEqMCG^IMs5kJ~AV^Hf# z3!@A7JdLe5BK^qlwRqPLg)(06EJkkC+M;&z7T#BeDc*zvI;U{@V@pg`-A~}1WoH6V zyj$g|pT{(rgLgx-5GS4y{jXPBC>{IJ0V3 z14o(R=LKQ3h5}4vsI-3jrpaT8?pll^R^oK>E+d*&B7rS>*wYWq3GEy$PRa5sG-6}N z8ui^7HfC;r2@N#SNbE*iO7TRJFnl~^-|uX~tZu9$3x#A~zPoE7+IBcbJRj$u+ziTX z(aL{Xlq?kKSH2%Mut6W0rQPEXxa>EYC~oe@Pye1@x1s}c<(cWsmr4mH8V$@s*42e@ zb)rF*{Q_T?p7-%-T#eN~FI4tos+I?`uMzoT-f}2;n%99yiRYqgW8!ku@~+}Vao}Yf zMCu){SUrY4KJHafLn*^Y&O7ln;ym^4MT__4$#4+F)5f z?vRv-YH0Kwi`*?56eVKjo|zXUo9FZgLCs+sXCE%R8WD>UZ*7bEnm*P``_XUvf(-V% z>-%%^^3AKaPvENgc$T?um=)^t91kyR0dos1JAM(>t$#<v%MX(*gB0T8_A86jh~;+R2@KST zt`KrG;w<3?y+ECIX%rzs2+33Ffb%b^sV>KHI} z>?TO=6kD)E%>J;&83(>_NZl^{P}upr#F#M3>zR@MN-1d1&$~{v-~8Sc<-E9)0=DWh zI%3`WdN6;tg+%APem9gXv`GFplGU@wUpbuz^^m-M2q#MdOZsCIPKwfcR0H9uP-8Kp zFg58VWt|fJ7cOIx)#Zx~K^_)3Zrm@0(L!kpm|zEP!%`2quiBp4nw8FjXdEjDkF@cW zmESjbv<`-%T4C9CPMIGW;Q5n+wuZhaJ6Fy1tE%0?A=+-NGL-;Ol##0r6)VJgx633} zw{bIO5d7liM$|eOYnzPf;uwDYp-(8^uKCn!y~(*SFGddU?iM}0xf5qP?t%10StJ$Lg2}7^QTaNW z|Hh8YR4{ z`9F4|y;<#LfthD(gnd$wGdqDnIiB@7h5f3!ID@0fI0h3@o^;NxX}*@{n9`w(g@9y` zW(JFaX|UA%!epw_b*R%ZXOzVyXpt_0)zEZp1q=NmJJ_AufH1f3UEtntF|h8eWxs02 zGf@n)m(jHB(~k=dEy@y4q?zIGOJvpoTb82z1Ae3~Z&MS45^Y7L(JJ7}eT^H#kE~+F z)=aZ1{L9>;$A+#Tr>1@Mo}&sRlS?-m=2`h=>(79p;U+Ty|9jH=YA>b*&6kS9?d(02 z`6As_f4|%L0aW-*K0h5`miDDvCB=vnXB=muqaf&yy_&V%2w!({TQS>9j z(tz{Z@OSXGME9VpZ&%k=@LLJ}c2;~Uv*N;iS97Sr@bE?;Ke?SH%FFPaSI zsqn!$ZX~2?d^tDV=o!(WktJBYudUkH&iE*`Ly`Wy&?EiZQ-Ce7H}@d5f>&3en_}=> zB;vI~EyiAgqxY6im85h}G)bQgBK5`w=f&P+takivS_xLqUW$bK_4=t?EfLIBuYN_V zrt|_X2@Abo9!U~rsde|-(!imE*_kzRp+A$c#Y`%^vm5R;AJ`x6umT6{zOBa*Gw%5?ER6lL0Un z&ahC(OB610I$$&D^zPf4AZd1$_Mmf!zg<| z1|aLDToEL@5q$S*){C3x&BUQqCtc6K+IZK%i2EG+coraD(zDxs$qoLT>grN=(r#fc zOcB@f{H3hdOTS+Blj-(KKWvc3p0uE~mP|C2W4{}oSIRpI}6Ggry2dR(FC>|KX|Q`cE<7(rSZ Ly6WZkp9TLL{|6+M literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/kubernetesapi.html b/docs/cce/api-ref/kubernetesapi.html new file mode 100644 index 000000000..222060233 --- /dev/null +++ b/docs/cce/api-ref/kubernetesapi.html @@ -0,0 +1,52 @@ + + +

Overview

+

Description

You can use Kubernetes native APIs to manage your Kubernetes clusters. For details, see Kubernetes API Concepts.

+

To find detailed API definitions for different Kubernetes versions, visit the following links:

+ +

Based on the open source Kubernetes APIs, CCE enhances and adapts following functions.

+ +
+

Calling Kubernetes APIs Through API Gateway

You can call Kubernetes native APIs through API Gateway using the URL in the format of https://{clusterid}.Endpoint/uri. In the URL, {clusterid} indicates the cluster ID, and uri indicates the resource path, that is, the path for API access.

+ +
+ + + + + + + + + + + + + +
Table 1 URL parameters

Parameter

+

Description

+

{clusterid}

+

Cluster ID. After a cluster is created, call the API for obtaining a cluster in a specified project to obtain the cluster ID.

+

Endpoint

+

Web service entry URL. It can be obtained from Regions and Endpoints.

+

uri

+

Path in which the resource requested by the API is located. You can obtain the path from the URI of the API.

+
+
+
+

Calling Kubernetes APIs Through the API Server

You can use the API server of a Kubernetes cluster to call Kubernetes native APIs.

+
  1. Call the API for obtaining the cluster certificate to obtain the cluster certificates.

    There are three certificates:

    +
    • ca.crt
    • client.crt
    • client.key
    +

  2. Go to the cluster details page and obtain the API server address (private or public network address).

    With the certificates and API server address, you can call Kubernetes native APIs.

    +

    For example, if you run the curl command to call the API to view the pod information, you only need to carry the certificate in the command as follows:

    +

    curl --cert ./client.crt --key ./client.key https://192.168.0.198:5443/api/v1/namespaces/default/pods/

    +

+
+
+
+ +
+ diff --git a/docs/cce/api-ref/public_sys-resources/ExpandCollapse.js b/docs/cce/api-ref/public_sys-resources/ExpandCollapse.js new file mode 100644 index 000000000..116ddaabf --- /dev/null +++ b/docs/cce/api-ref/public_sys-resources/ExpandCollapse.js @@ -0,0 +1 @@ +var expandClassName="dropdownexpand";var collapseClassName="dropdowncollapse";var collapseTableClassName="dropdowncollapsetable";function ExpandorCollapseNode(a){a=a.parentNode;if(a.className==expandClassName){a.className=collapseClassName}else{a.className=expandClassName}}function ExpandorCollapseTableNode(a){a=a.parentNode;if(a.className==expandClassName){a.className=collapseTableClassName}else{a.className=expandClassName}}function ExpandorCollapseAllNodes(g,h,c){var a=g.getAttribute("title");var b=g.parentNode;if(a=="collapse"){g.setAttribute("title","expand");g.className="dropdownAllButtonexpand";g.innerHTML=h}else{g.setAttribute("title","collapse");g.className="dropdownAllButtoncollapse";g.innerHTML=c}var f=b.getElementsByTagName("*");for(var d=0;d-1){ExpandForHref(a.substring(a.lastIndexOf("#")+1))}}catch(c){}}; \ No newline at end of file diff --git a/docs/cce/api-ref/public_sys-resources/caution_3.0-en-us.png b/docs/cce/api-ref/public_sys-resources/caution_3.0-en-us.png new file mode 100644 index 0000000000000000000000000000000000000000..60f60762138fe7d98fa081415cf26a4943897779 GIT binary patch literal 2752 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:0}*[compact="no"]>li{margin-top:.53em}.liexpand{margin-top:1em;margin-bottom:1em}.sliexpand{margin-top:1em;margin-bottom:1em}.dlexpand{margin-top:1em;margin-bottom:1em}.ddexpand{margin-top:1em;margin-bottom:1em}.stepexpand{margin-top:.3em;margin-bottom:.3em}.substepexpand{margin-top:.3em;margin-bottom:.3em}div.imageleft{text-align:left}div.imagecenter{text-align:center}div.imageright{text-align:right}div.imagejustify{text-align:justify}div.noblankline{text-align:center}div.noblankline img{margin-top:0}pre.screen{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;background-color:#ddd;white-space:pre}pre.codeblock{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;background-color:#ddd;white-space:pre}.hrcopyright{color:#3f4e5d;margin-top:18pt}.hwcopyright{text-align:center}.comment{margin:2px 2px 2px 2px;font-family:Arial;font-size:10pt;background-color:#bfb;color:#000}.dropdownAllButtonexpand{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdownAllButtoncollapse{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;text-decoration:underline;color:#007af4}.dropdowntitle{background-repeat:no-repeat;background-position:0 4px;padding-left:15px;cursor:pointer;text-decoration:underline;color:#007af4}.dropdownexpand .dropdowntitle{background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapse .dropdowncontext{display:none}.dropdowncollapse .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdowncollapsetable{border:0}.dropdowncollapsetable .dropdowncontext{display:none}.dropdowncollapsetable .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}pre{font-size:10pt;font-weight:normal;margin-left:9;margin-top:2;margin-bottom:2}.termcolor{color:blue;cursor:pointer}#dhtmlgoodies_tooltip{background-color:#f0f0d2;border:1px solid #000;position:absolute;display:none;z-index:20000;padding:2px;font-size:.9em;-moz-border-radius:6px;font-family:"Trebuchet MS","Lucida Sans Unicode",Arial,sans-serif}#dhtmlgoodies_tooltipShadow{position:absolute;background-color:#555;display:none;z-index:10000;opacity:.7;filter:alpha(opacity=70);-khtml-opacity:.7;-moz-opacity:.7;-moz-border-radius:6px}.freeze{position:fixed;_position:absolute;_top:expression(eval(document.documentElement.scrollTop));left:10;top:0} \ No newline at end of file diff --git a/docs/cce/api-ref/public_sys-resources/commonltr_print.css b/docs/cce/api-ref/public_sys-resources/commonltr_print.css new file mode 100644 index 000000000..a59823141 --- /dev/null +++ b/docs/cce/api-ref/public_sys-resources/commonltr_print.css @@ -0,0 +1 @@ +body{font-size:12.0pt;margin:1.5em;margin-left:1.6cm}.msgph{font-family:Courier New}.rowlinecopyright{color:red;margin-top:10pt}.unresolved{background-color:skyblue}.noTemplate{background-color:yellow}.base{background-color:#fff}.nested0{margin-top:1em}.p{margin-top:1em}p{margin-top:.5em;margin-bottom:.5em}.note p{margin-top:.5em;margin-bottom:.5em}.tip p{margin-top:.5em;margin-bottom:.5em}.danger p{margin-top:.5em;margin-bottom:.5em}.warning p{margin-top:.5em;margin-bottom:.5em}.notice p{margin-top:.5em;margin-bottom:.5em}.caution p{margin-top:.5em;margin-bottom:.5em}.attention p{margin-top:.5em;margin-bottom:.5em}table p{margin-top:.2em;margin-bottom:.2em}table .p{margin-top:.4em;margin-bottom:.2em}.covertable{border:0;width:100% cellpadding:8pt;cellspacing:8pt}.cover_productname{font-size:15.0pt;font-family:"Arial"}.cover_manualtitle{font-size:24.0pt;font-weight:bold;font-family:"Arial"}.cover_manualsubtitle{font-size:18.0pt;font-weight:bold;font-family:"Arial"}.cover_heading{font-size:12.0pt;font-weight:bold;font-family:"Arial"}.cover_text{font-size:9.0pt;font-family:"Arial"}.tocheading,.heading1,.topictitle1{margin-top:40.0pt;margin-right:0;margin-bottom:20.0pt;margin-left:-1cm;text-align:left;border:0;border-bottom:solid windowtext .5pt;font-size:22.0pt;font-family:"Arial";font-weight:bold}.topictitlenumber1{font-size:72.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle2{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:-1cm;text-indent:0;font-size:18.0pt;font-family:"Arial";font-weight:bold}.topictitle3{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:16.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle4{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:14.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle5{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.blocklabel,.topictitle6{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.sectiontitle{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:-1cm;text-indent:0;font-size:13.0pt;font-family:"Arial";font-weight:bold}.tocentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:12.0pt;font-family:"Book Antiqua";font-weight:bold}.tocentry2{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry3{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry4{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry5{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tofentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman";font-weight:normal}.totentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman";font-weight:normal}.indexheading{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.indexentry1{margin-top:4pt;margin-right:0;margin-bottom:0;margin-left:0;line-height:12.0pt;font-size:12.0pt;font-family:"Times New Roman"}.indexentry2{margin-top:0;margin-right:0;margin-bottom:0;margin-left:24.0pt;line-height:12.0pt;font-size:12.0pt}.indexentry3{margin-top:0;margin-right:0;margin-bottom:0;margin-left:48pt;line-height:12.0pt;font-size:12.0pt}.figurenumber{font-weight:bold}.tablenumber{font-weight:bold}.familylinks{margin-top:1.5em;margin-bottom:1em}.figcap{font-size:11.0pt}.tablecap{font-size:11.0pt}.figdesc{font-style:normal}.fignone{margin-top:8.0pt}.figborder{border-style:solid;padding-left:3px;border-width:2px;padding-right:3px;margin-top:1em;border-color:Silver}.figsides{border-left:2px solid;padding-left:3px;border-right:2px solid;padding-right:3px;margin-top:1em;border-color:Silver}.figtop{border-top:2px solid;margin-top:1em;border-color:Silver}.figbottom{border-bottom:2px solid;border-color:Silver}.figtopbot{border-top:2px solid;border-bottom:2px solid;margin-top:1em;border-color:Silver}.ullinks{margin-left:0;list-style-type:none}.ulchildlink{margin-top:1em;margin-bottom:1em}.olchildlink{margin-top:1em;margin-bottom:1em;margin-left:1em}.linklist{margin-bottom:1em}.linklistwithchild{margin-left:1.5em;margin-bottom:1em}.sublinklist{margin-left:1.5em;margin-bottom:1em}.relconcepts{margin-left:1cm;margin-top:1em;margin-bottom:1em}.reltasks{margin-left:1cm;margin-top:1em;margin-bottom:1em}.relref{margin-left:1cm;margin-top:1em;margin-bottom:1em}.relinfo{margin-top:1em;margin-bottom:1em}.breadcrumb{font-size:smaller;margin-bottom:1em}.prereq{margin-left:0}.parentlink{margin-top:.6em;margin-bottom:.6em}.nextlink{margin-top:.6em;margin-bottom:.6em}.previouslink{margin-top:.6em;margin-bottom:.6em}.section{margin-top:1em;margin-bottom:1em}.example{margin-top:1em;margin-bottom:1em}table .note{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.note{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.notetitle{font-weight:bold;font-size:11.0pt}.notelisttitle{font-weight:bold}table .tip{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.tip{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.tiptitle{font-weight:bold;font-size:11.0pt}table .fastpath{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.fastpath{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.fastpathtitle{font-weight:bold;font-size:11.0pt}table .important{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.important{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.importanttitle{font-weight:bold;font-size:11.0pt}table .remember{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.remember{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.remembertitle{font-weight:bold;font-size:11.0pt}table .restriction{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.restriction{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.restrictiontitle{font-weight:bold;font-size:11.0pt}table .attention{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.attention{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}.attentiontitle{font-weight:bold}table .danger{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.dangertitle{font-weight:bold}.danger{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .notice{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.noticetitle{font-weight:bold}.notice{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .warning{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.warningtitle{font-weight:bold}.warning{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .caution{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}table caption{margin-top:8pt;text-align:left;font-weight:bold}.tablenoborder{margin-top:8pt}.cautiontitle{font-weight:bold}.caution{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}ul.simple{list-style-type:none}li ul{margin-top:.6em}li{margin-top:.6em;margin-bottom:.6em}.note li{margin-top:.2em;margin-bottom:.2em}.tip li{margin-top:.2em;margin-bottom:.2em}.danger li{margin-top:.2em;margin-bottom:.2em}.warning li{margin-top:.2em;margin-bottom:.2em}.notice li{margin-top:.2em;margin-bottom:.2em}.caution li{margin-top:.2em;margin-bottom:.2em}.attention li{margin-top:.2em;margin-bottom:.2em}table li{margin-top:.2em;margin-bottom:.2em}.firstcol{font-weight:bold}th{background-color:#cfcfcf}.bold{font-weight:bold}.boldItalic{font-weight:bold;font-style:italic}.italic{font-style:italic}.underlined{text-decoration:underline}.var{font-style:italic}.shortcut{text-decoration:underline}.dlterm{font-weight:bold}dd{margin-top:.5em;margin-bottom:.5em}.dltermexpand{font-weight:bold;margin-top:1em}*[compact="yes"]>li{margin-top:0}*[compact="no"]>li{margin-top:.53em}.liexpand{margin-top:1em;margin-bottom:1em}.sliexpand{margin-top:1em;margin-bottom:1em}.dlexpand{margin-top:1em;margin-bottom:1em}.ddexpand{margin-top:1em;margin-bottom:1em}.stepexpand{margin-top:1em;margin-bottom:1em}.substepexpand{margin-top:1em;margin-bottom:1em}table{margin-top:8pt;margin-bottom:10.0pt;width:100%}thead{font-size:10.0pt;font-family:"Book Antiqua";font-weight:bold}tbody{font-size:11.0pt}ol{margin-top:1em;margin-bottom:1em;margin-left:1.7em;-webkit-padding-start:0}ul{margin-top:1em;margin-bottom:1em;margin-left:1.2em;-webkit-padding-start:0}ol ul{list-style:disc}ul ul{list-style:square}ol ol{list-style-type:lower-alpha}table ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}table ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ul{margin-top:.4em;margin-bottom:.4em;list-style:square}table ol ol{margin-top:.4em;margin-bottom:.4em;list-style:lower-alpha}table ol ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}.substepthirdol{list-style-type:lower-roman}div.imageleft{text-align:left}div.imagecenter{text-align:center}div.imageright{text-align:right}div.imagejustify{text-align:justify}div.noblankline{text-align:center}div.noblankline img{margin-top:0}pre{font-size:10.0pt;border-width:2px;padding:2px;margin-top:5px;margin-bottom:5px;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}pre.screen{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;white-space:pre}pre.codeblock{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;white-space:pre}.dropdownAllButtonexpand{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdownAllButtoncollapse{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;text-decoration:underline;color:#007af4}.dropdowntitle{background-repeat:no-repeat;background-position:0 4px;padding-left:15px;cursor:pointer;text-decoration:underline;color:#007af4}.dropdownexpand .dropdowntitle{background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapse .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapsetable .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.prefacesectiontitle1{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:-1cm;text-indent:0;font-size:18.0pt;font-family:"Book Antiqua";font-weight:bold;overflow:auto}.termcolor{color:blue;cursor:pointer}#dhtmlgoodies_tooltip{background-color:#f0f0d2;border:1px solid #000;position:absolute;display:none;z-index:20000;padding:2px;font-size:.9em;-moz-border-radius:6px;font-family:"Trebuchet MS","Lucida Sans Unicode",Arial,sans-serif}#dhtmlgoodies_tooltipShadow{position:absolute;background-color:#555;display:none;z-index:10000;opacity:.7;filter:alpha(opacity=70);-khtml-opacity:.7;-moz-opacity:.7;-moz-border-radius:6px}.freeze{position:fixed;_position:absolute;_top:expression(eval(document.documentElement.scrollTop));left:10;top:0}.hrcopyright{color:#3f4e5d;margin-top:18pt;margin-left:-1cm}.hwcopyright{text-align:center;font-family:Arial;margin-left:-1cm} \ No newline at end of file diff --git a/docs/cce/api-ref/public_sys-resources/commonrtl.css b/docs/cce/api-ref/public_sys-resources/commonrtl.css new file mode 100644 index 000000000..f261da752 --- /dev/null +++ b/docs/cce/api-ref/public_sys-resources/commonrtl.css @@ -0,0 +1,2 @@ +/*! Copyright (c) Huawei Technologies Co., Ltd. 2020-2022. All rights reserved. */.msgph{font-family:Courier New}.unresolved{background-color:#87ceeb}.noTemplate{background-color:#ff0}.base{background-color:#fff}/*! Add space for top level topics */.nested0,.p{margin-top:1em}/*! div with class=p is used for paragraphs that contain blocks, to keep the XHTML valid *//*! Default of italics to set apart figure captions */.figcap,.italic,.var{font-style:italic}.figdesc{font-style:normal}/*! Use @frame to create frames on figures */.figborder{padding-left:3px;padding-right:3px;margin-top:1em;border:2px solid Silver}.figsides{margin-top:1em;padding-left:3px;padding-right:3px;border-left:2px solid Silver;border-right:2px solid Silver}.figtop{border-top:2px solid Silver;margin-top:1em}.figbottom{border-bottom:2px solid Silver}.figtopbot{border-top:2px solid Silver;border-bottom:2px solid Silver;margin-top:1em}/*! Most link groups are created with
. Ensure they have space before and after. */.ullinks,ul.simple{list-style-type:none}.attention,.danger,.ddexpand,.dlexpand,.example,.fastpath,.important,.liexpand,.linklist,.note,.notice,.olchildlink,.relconcepts,.relinfo,.relref,.reltasks,.remember,.restriction,.section,.sliexpand,.stepexpand,.substepexpand,.tip,.ulchildlink,.warning{margin-top:1em;margin-bottom:1em}.linklistwithchild,.sublinklist{margin-top:1em;margin-right:1.5em;margin-bottom:1em}.breadcrumb{font-size:smaller;margin-bottom:1em}.prereq{margin-right:20px}/*! Set heading sizes, getting smaller for deeper nesting */.topictitle1{font-size:1.34em;margin-top:0;margin-bottom:.1em}.topictitle2,.topictitle3,.topictitle4,.topictitle5,.topictitle6,.sectiontitle{font-size:1.17em}.topictitle2{margin-top:1pc;margin-bottom:.45em}.topictitle3{margin-top:1pc;margin-bottom:.17em;font-weight:700}.topictitle4{margin-top:.83em;font-weight:700}.topictitle5{font-weight:700}.topictitle6{font-style:italic}.sectiontitle{margin-top:1em;margin-bottom:0;color:#000;font-weight:700}/*! All note formats have the same default presentation */.attentiontitle,.bold,.cautiontitle,.dangertitle,.dlterm,.fastpathtitle,.firstcol,.importanttitle,.notelisttitle,.notetitle,.noticetitle,.parmname,.remembertitle,.restrictiontitle,.tiptitle,.uicontrol,.warningtitle{font-weight:700}.caution{font-weight:700;margin-bottom:1em}/*! Simple lists do not get a bullet *//*! Used on the first column of a table, when rowheader="firstcol" is used *//*! Various basic phrase styles */.boldItalic{font-weight:700;font-style:italic}.shortcut,.underlined{text-decoration:underline}/*! 2008-10-27 keyword采用跟随上下文的样式 +*//*! Default of bold for definition list terms *//*! Use CSS to expand lists with @compact="no" */.dltermexpand{font-weight:700;margin-top:1em}[compact="yes"]>li{margin-top:0}[compact="no"]>li{margin-top:.53em}/*! Align images based on @align on topic/image */div.imageleft,.text-align-left{text-align:left}div.imagecenter,.text-align-center{text-align:center}div.imageright,.text-align-right{text-align:right}div.imagejustify,.text-align-justify{text-align:justify}.cellrowborder{border-right:0;border-top:0;border-left:1px solid;border-bottom:1px solid}.row-nocellborder{border-left:hidden;border-right:0;border-top:0;border-bottom:1px solid}.cell-norowborder{border-top:0;border-bottom:hidden;border-right:0;border-left:1px solid}.nocellnorowborder{border:0;border-left:hidden;border-bottom:hidden}pre.codeblock,pre.screen{padding:5px;border:outset;background-color:#ccc;margin-top:2px;margin-bottom:2px;white-space:pre} \ No newline at end of file diff --git a/docs/cce/api-ref/public_sys-resources/danger_3.0-en-us.png b/docs/cce/api-ref/public_sys-resources/danger_3.0-en-us.png new file mode 100644 index 0000000000000000000000000000000000000000..47a9c723532a0ac410285e5152684262127922bf GIT binary patch literal 2771 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 literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/public_sys-resources/icon-arrowdn.gif b/docs/cce/api-ref/public_sys-resources/icon-arrowdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..84eec9be2f2ce458e888f8a9b803f9387247726a GIT binary patch literal 68 zcmZ?wbhEHbzkByxQ$u Mo$o?7J5~m305MV#!~g&Q literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/public_sys-resources/icon-arrowrt.gif b/docs/cce/api-ref/public_sys-resources/icon-arrowrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..39583d168d6db303b366b5b8c1780698a6bb6017 GIT binary patch literal 70 zcmZ?wbhEHbEMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/public_sys-resources/icon-danger.gif b/docs/cce/api-ref/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..079c79b263f4b48089f3b3256154c73e7699593f GIT binary patch literal 1086 zcmW+#YfRQ<6hA3LZMyP?V}KhnEtF{Q4vGxS52AozEVM85nq$#%tv8gRF!3GhgM?_) zd5Luv3SKrXFTGCpn$y>EMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/public_sys-resources/icon-huawei.gif b/docs/cce/api-ref/public_sys-resources/icon-huawei.gif new file mode 100644 index 0000000000000000000000000000000000000000..a31d60f895af919d33855217ca02daf4093136d7 GIT binary patch literal 2767 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 GE&l)<3Z_>8 literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/public_sys-resources/icon-notice.gif b/docs/cce/api-ref/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..409070650a49518feb1624c624d814c3bfa63d2e GIT binary patch literal 962 zcmb7D&r8&C5S<{wSd_qn6)U)w5LOaRh!N}_*49lD)S!dZp@M<3gPIX|@UR9-fz+X3 zAaT9)OY{xZtO-;RC85Vab;JEUNIMS5f^r$7-e%-XK`j{0+N$CsgpRd6B1wp z8dw-cH^rU^H4`&7qgabf)l^K`l!66{q9$U(CKRO5%W5pfY)s&YQ6n`HBR0ZTum%`N zgC%I8hQ+`JG_WvCAt-W$sIn@BKCDG1qQWW^a=`*c7G+i@s0S(ZDv1&+K_2`7O-#cM z=m!ZX1Z#kSG+3e)Jg^wpfCd(Yb5TZ)U=a!DwsG z)Z`|1ejMK4ap%CHj;%+>T6=D++5I=uBbQ$fZ48cf{hV1}9&Njl-I}i7e0#6Hdug@s zsr-57_=gLr&9Ros$k}}M>tJ77=hEJ}iPaZ%8|P+gUbS|Oj}5I{|5nZZc)C1$e*Rj` d`09hYXJ4M@PhCx)dHK8WZo1*|*q+^V@*ncduk8Q; literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/public_sys-resources/icon-tip.gif b/docs/cce/api-ref/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..c47bae05c9fd17c02a851d96cfac67bf194498d8 GIT binary patch literal 879 zcmchWKWmj?48@OdDOZPr)a61!OE4yGD)salg#|^Ix$qIEF#uk)V>D{95e^!2r`i+9t# zTMu5YtUcd+@#gp0tDE;9ug>oLIzL$6dOx4-t#2PKExu1KulwoYeD?Os#mVO%AMWih HO|EMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/public_sys-resources/imageResize.js b/docs/cce/api-ref/public_sys-resources/imageResize.js new file mode 100644 index 000000000..37309ce3b --- /dev/null +++ b/docs/cce/api-ref/public_sys-resources/imageResize.js @@ -0,0 +1,18 @@ +/** IDP renames $ to $$$,jQueryHW2 */ +var $$$, jQueryHW2; +jQueryHW2 = $$$ = $; + +function image_size(a) { + $$$(window).on('load', function () { + $$$(a).each(function () { + var e = $$$(this); + var f = e.width(); + var d = e.height(); + var b = f; + var c = d; + e.click(function () { + tb_show("", this.src, false) + }) + }) + }) +}; \ No newline at end of file diff --git a/docs/cce/api-ref/public_sys-resources/imageclose.gif b/docs/cce/api-ref/public_sys-resources/imageclose.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a3344af4afdeedcbd8d49c6739d1e100142841b GIT binary patch literal 1238 zcmZ?wbhEHb6krfwSj57xcJ11&Tet4ryZ7kPqyPW^XMh34|J)J20SYdOC5b@V#=fE; zF*!T6L?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBX zRu#Dgxv3?I3Kh9IdBs*0wn~X9`AMl(KsHENUr7P1q$Jx`$q^)>0J76LzbI9~RL@v9 z*}%|H!OTq0(8Sct%uq+c$iUD@-vEfrbPY|cOwFu}%oU(O320kUN}5%WiyPD~AkS7Q zqokz3N?*Ucyj-u`STDaQUEk2s(h_8bk&!M?g>G?WUP)qwZeFo6%mkOz;^d;tf|AVq zJOz-6iAnjTCALaHmqNUdTj1*pH#o0Y59}emIIA zz^b}9q_QAYKPa_0zqBYh6{uVprWqJ^_$>k{1iHq`zbF$JDTz5Q`N^fZsd*)yF1AWQ z8NHOu6f0*7Co?Al3m0=|Hz!wTLqkUsXG>=zLt`g5XA?&!BSV-O*z_71I9eK+yO_E; zSy&hvx;k5$nmSv$xwx4dyBfNhxVXUddgc|EB<3Zj!tBii+6&cdf>*DVb5UwyNq$jC zetr%t1q5W|m*f{`1N{AbeZ0LqJ>1<~U7Vd99qjFFZLF;!Y#3Q(W~w5=#5%__*n4QdyV zXRDM^Qc_^0uU}qXu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bM zNoIbY0?5R~r2NtnTP2`NAzsKWfE$}vtOxdvUUGh}ennz|zM-B0$V)JVzP|XC=H|jx z7ncO3BHWAB;NpiyW)Z+ZoqU2Pda%GTJ1y;^Qsfi`|MIrh5Ij~R+$jC3rFV4s> zP;d@5Q_u*{%uC5HFV+OB_w}{%%quQQ%u7!7bg@+enxL1NnPO#X>1=9lW@_r@WZ`IN z=<4ibV(4aRVPt0NVq{?MV&MeS>yn>bnwy$e0@Is<&})WMFDNPG765H_NiE7OOHFYr z%Fk5*d)X=zw_A*Hng`XJg4-=7IQ8lS9itD5Sfq%C2?0|NhzU=&Kn^_Nr{)1udl4{M zGyebg_s{QNKYx7x_Vvr>Pai+LfA{vy>sK#dJb(7|$>T>4AKbrp_s;EGH*Z|OcJ<2T zOBXMkKX>-b=~E|996xsS$l*f=5A5H!chBx!J9li~wsp(qO&d3?U$=J6>QyUOEMK;C z$>K!|7tEhGch2ltGiOYnHg(G6NfRgZ_x1L4cXf8Ox3#u3H#IiY*VWckS5;P&mz9V~xOjJZzNKk;EkC%s= zi<5($jg^I&iIIUp@h1zAWM$9+l@y?Ign`*MLgebdMh%7=#f^GV`6oq~%OupNBpS~X u5MOie_{@!7oGG@??#=tAc88xep;u>9v^MK*8TL~W837UsORumnSOWmkrlE=e literal 0 HcmV?d00001 diff --git a/docs/cce/api-ref/public_sys-resources/imagemax.gif b/docs/cce/api-ref/public_sys-resources/imagemax.gif new file mode 100644 index 0000000000000000000000000000000000000000..99c07dc2570d75fa74b38e02474edaa068eac3cd GIT binary patch literal 1267 zcmZ?wbhEHb6krfw*v!GOcJ12l-@k9&x^?f~y+@B8egFRbvuDrl-Mjby|9=K-K=D6! zgl~X?OJYePkhZa}C`e4sPAySLN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6N zUr2IQcCuxPlD(aRO@&oOZb5EpNuokUZcbjYRfVlmVoH8esuhq864qBz04piUwpDTj zNhpBqbj~kIRWQ{v)=f4rG*mD%(=#+NH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI& ztPC^3CAB!YD6^m>Ge1uOWMX1cerbuV640d(FXR^Z`oay)E7k*hNG~}*SHB{$K;KZ$ zKtDGZMv>iKmOL5>Q4jB{Rj!(%9U^(#_1k!qLsi)!ER{(Zt!(*~rk?$<5is(aFdV zW(GFBW=_V&CN6HqZcY|XhK8=r7Urf-7UpI~1}+w6&MsyKFuk66#U+V($*C}VGlBL( z^%~*TYvo*&npl!w6q28x14{t`8Tlpo#Toep3eLf13L4>=c`5nj#hRe#f%w)XwJ5VJ zHN~wcKUV=9zE+u7>?iDRh~5-(!b~6N7=2LUKuRnyAz%swG2uxc$bn~`)I4C0DFS8< z#{d8R{`vju=a28-zJB@q>Enm@@7}(7{p#h5=g*!#dHm?%gZuaH-no72=8fyuu3ou( z>Eea+=gyuved^?i(;JWy=vu(<;#{X zS-fcBg8B32&Y3-H=8WmnrcRkWY2t+bzTTehuFj73w$_&BrpAW)y4srRs>+J;veJ^` zqQZjwyxg4Ztjvt`wA7U3q{M{yxY(HJsK|)$u+Wg;puhlsKVKhjFHaA5H&+*DCr1Z+ zJ6juTD@$N%Ff}nYGBnWF)78<|($r8_Q&mw`QdE$ala-N{l9Uh^6BQ8_5)|O)XVTX7EuW7CC;Uoy5{=yToaG3U&3L8;cDnPJJLQNKKPZ{%RG1_1H#8IXksPAt^OIGtXA({qFrr3YjUkO5vuy2EGN( zsTr9bRYj@6RemAKRoTgwDN6Qs3N{s16}bhusU?XD6}dTi#a0!zN{K1?NvT#qHb_`s zNdc^+B->WW5hS4iveP-gC{@8!&saCvz|c^^%uLVF#MI2pP)EVYz|ctF0Eof6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M(T(8_%FTW^V-_X+15@d#vkuFe$ zZgFK^Nn(X=Ua>OF1ees}+TSP$$Sz2y8{ z{ffi_eM3D1ke6TzeSPsO&CP|YE-nd5MYtEM!Nnn!1*!T$sm1xFMaii^<;ozd3ap%q zQWHz^i$e1Ab6}wukda@KU!0L&px_*Arl1j?nU|7ZUaSdL@9S&jnO9trn3tUD>0+w{ zG(j&jGsVi;)!4|{)Y-tz$->Fd(AC+}+1b$1!r0u+z{1eL#Lx_;*Cju>G&eP`1g19y zq1O}YRmZE0?5Y^blRt*Nf6tSB!lEh#Q4EXdEx&B@Nn%t%j5O-W8lOo)$*jfswmj0g`4 z4G9hk4Dk2!_3`%d^l*1`b#Zobbg;LxwXwFcv@ka_H8D0aG|<=6)zQ|{)KFJbRZ&(_ zRFIdGm64W`ln@sa6%iH^6yWFM<>BVy6BSI4CSAxB&DwTho$F4IIcJuq UNiKC-d_mhd`j^M",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQueryHW2.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQueryHW2.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQueryHW2.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQueryHW2.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQueryHW2.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQueryHW2.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQueryHW2.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQueryHW2.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQueryHW2.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQueryHW2.fn.andSelf() replaced by jQueryHW2.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQueryHW2.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQueryHW2.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQueryHW2.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQueryHW2.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQueryHW2.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQueryHW2.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQueryHW2,window); \ No newline at end of file diff --git a/docs/cce/api-ref/public_sys-resources/jquery-ui.min.js b/docs/cce/api-ref/public_sys-resources/jquery-ui.min.js new file mode 100644 index 000000000..50b036f4d --- /dev/null +++ b/docs/cce/api-ref/public_sys-resources/jquery-ui.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.13.2 - 2022-07-14 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict";V.ui=V.ui||{};V.ui.version="1.13.2";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,"events"))&&e.remove&&V(i).triggerHandler("remove");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(".")[0],l=r+"-"+(t=t.split(".")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return V("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(k(s),k(n))?o.important="horizontal":o.important="vertical",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})},V.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,a=s-o,r=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0")[0],w=d.each;function P(t){return null==t?t+"":"object"==typeof t?p[e.call(t)]||"object":typeof t}function M(t,e,i){var s=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function S(s){var n=m(),o=n._rgba=[];return s=s.toLowerCase(),w(g,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||"rgba";if(i)return i=n[e](i),n[_[e].cache]=i[_[e].cache],o=n._rgba=i._rgba,!1}),o.length?("0,0,0,0"===o.join()&&d.extend(o,B.transparent),n):B[s]}function H(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}y.style.cssText="background-color:rgba(1,1,1,.5)",b.rgba=-1o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=M((n-s)*a+s,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),s=m(t)._rgba;return m(d.map(e,function(t,e){return(1-i)*s[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=d.map(this._rgba,function(t,e){return null!=t?t:2").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(V.extend(s,{position:i.css("position"),zIndex:i.css("z-index")}),V.each(["top","left","bottom","right"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger("focus")),t}}),V.extend(V.effects,{version:"1.13.2",define:function(t,e,i){return i||(i=e,e="effect"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,e="vertical"!==i?(e||100)/100:1;return{height:t.height()*e,width:t.width()*s,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(j+"placeholder",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=j+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0");l.appendTo("body").addClass(t.className).css({top:s.top-a,left:s.left-r,height:i.innerHeight(),width:i.innerWidth(),position:n?"fixed":"absolute"}).animate(o,t.duration,t.easing,function(){l.remove(),"function"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),"string"==typeof t.end&&(t.end=G(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},Y={},V.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){Y[t]=function(t){return Math.pow(t,e+2)}}),V.extend(Y,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(Y,function(t,e){V.easing["easeIn"+t]=e,V.easing["easeOut"+t]=function(t){return 1-e(1-t)},V.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});y=V.effects,V.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=V(this),n=t.direction||"up",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],"show"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("bounce",function(t,e){var i,s,n=V(this),o=t.mode,a="hide"===o,r="show"===o,l=t.direction||"up",h=t.distance,c=t.times||5,o=2*c+(r||a?1:0),u=t.duration/o,d=t.easing,p="up"===l||"down"===l?"top":"left",f="up"===l||"left"===l,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),l=n.css(p),h=h||n["top"==p?"outerHeight":"outerWidth"]()/3,r&&((s={opacity:1})[p]=l,n.css("opacity",0).css(p,f?2*-h:2*h).animate(s,u,d)),a&&(h/=Math.pow(2,c-1)),(s={})[p]=l;g").css({position:"absolute",visibility:"visible",left:-s*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;V(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("fold","hide",function(e,t){var i=V(this),s=e.mode,n="show"===s,o="hide"===s,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=V.effects.createPlaceholder(i),u=i.cssClip(),d={clip:V.extend({},u)},p={clip:V.extend({},u)},f=[u[l[0]],u[l[1]]],s=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(i.cssClip(p.clip),c&&c.css(V.effects.clipToBox(p)),p.clip=u),i.queue(function(t){c&&c.animate(V.effects.clipToBox(d),h,e.easing).animate(V.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),V.effects.unshift(i,s,4)}),V.effects.define("highlight","show",function(t,e){var i=V(this),s={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("size",function(s,e){var n,i=V(this),t=["fontSize"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],a=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],r=s.mode,l="effect"!==r,h=s.scale||"both",c=s.origin||["middle","center"],u=i.css("position"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),"show"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},"box"!==h&&"both"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),"content"!==h&&"both"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(c=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*c.y+d.top,f.left=(p.outerWidth-f.outerWidth)*c.x+d.left,g.top=(p.outerHeight-g.outerHeight)*c.y+d.top,g.left=(p.outerWidth-g.outerWidth)*c.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),"content"!==h&&"both"!==h||(o=o.concat(["marginTop","marginBottom"]).concat(t),a=a.concat(["marginLeft","marginRight"]),i.find("*[width]").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css("opacity",f.opacity),l||(i.css("position","static"===u?"relative":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define("scale",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==s?0:100),s=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(s.from.opacity=1,s.to.opacity=0),V.effects.effect.size.call(this,s,e)}),V.effects.define("puff","hide",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define("pulsate","show",function(t,e){var i=V(this),s=t.mode,n="show"===s,o=2*(t.times||5)+(n||"hide"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(":visible")||(i.css("opacity",0).show(),r=1);l li > :first-child").add(t.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V(""),this._addClass(t,"ui-accordion-header-icon","ui-icon "+e.header),t.prependTo(this.headers),t=this.active.children(".ui-accordion-header-icon"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr("tabIndex",-1),V(n).attr("tabIndex",0),V(n).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=V(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(":visible");t||V(this).show(),i=Math.max(i,V(this).css("height","").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),a={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,a)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(a),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),e.icons&&(i=i.children(".ui-accordion-header-icon"),this._removeClass(i,null,e.icons.activeHeader)._addClass(i,null,e.icons.header)),n||(this._removeClass(s,"ui-accordion-header-collapsed")._addClass(s,"ui-accordion-header-active","ui-state-active"),e.icons&&(n=s.children(".ui-accordion-header-icon"),this._removeClass(n,null,e.icons.header)._addClass(n,null,e.icons.activeHeader)),this._addClass(s.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!i.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(".ui-menu-item"),i=V(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move("first","first",t);break;case V.ui.keyCode.END:this._move("last","last",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=V(this),e=t.prev(),i=V("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(V.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(V.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V("