From bcdc7fca798a6089a7c03c7a5dc8b4e507ab3b65 Mon Sep 17 00:00:00 2001 From: OpenTelekomCloud Proposal Bot Date: Fri, 18 Oct 2024 13:12:38 +0000 Subject: [PATCH] Update content --- .../images/en-us_image_0000001893402017.png | Bin 0 -> 51740 bytes .../images/en-us_image_0000001893402049.png | Bin 0 -> 32432 bytes api-ref/source/appendix/error_codes.rst | 178 ++++++ api-ref/source/appendix/index.rst | 16 + api-ref/source/appendix/status_code.rst | 122 ++++ api-ref/source/before_you_start/concepts.rst | 38 ++ api-ref/source/before_you_start/index.rst | 16 + api-ref/source/before_you_start/overview.rst | 14 + api-ref/source/change_history.rst | 12 + api-ref/source/conf.py | 3 +- api-ref/source/docutils.conf | 2 + api-ref/source/index.rst | 14 +- .../applying_an_execution_plan.rst | 303 ++++++++++ .../creating_an_execution_plan.rst | 410 ++++++++++++++ .../deleting_an_execution_plan.rst | 227 ++++++++ .../execution_plans/index.rst | 24 + .../listing_execution_plans.rst | 335 +++++++++++ .../obtaining_execution_plan_metadata.rst | 442 +++++++++++++++ .../obtaining_execution_plans.rst | 489 ++++++++++++++++ .../resource_formation_service/index.rst | 76 +++ .../stacks/continuing_to_deploy_a_stack.rst | 269 +++++++++ .../continuing_to_roll_back_a_stack.rst | 271 +++++++++ .../stacks/creating_a_stack.rst | 442 +++++++++++++++ .../stacks/deleting_a_stack.rst | 237 ++++++++ .../deleting_a_stack_with_conditions.rst | 245 ++++++++ .../stacks/deploying_a_stack.rst | 400 +++++++++++++ .../stacks/index.rst | 38 ++ .../stacks/listing_events_of_a_stack.rst | 459 +++++++++++++++ .../stacks/listing_stack_outputs.rst | 300 ++++++++++ .../stacks/listing_stack_resources.rst | 429 ++++++++++++++ .../stacks/listing_stacks.rst | 258 +++++++++ .../stacks/obtaining_a_stack_template.rst | 246 ++++++++ .../stacks/obtaining_stack_metadata.rst | 429 ++++++++++++++ .../stacks/updating_a_stack.rst | 327 +++++++++++ .../template_analysis/index.rst | 14 + .../parsing_template_variables.rst | 534 ++++++++++++++++++ .../deleting_a_template.rst | 169 ++++++ .../deleting_a_template_version.rst | 178 ++++++ .../template_management/index.rst | 28 + .../listing_template_versions.rst | 241 ++++++++ .../template_management/listing_templates.rst | 216 +++++++ .../obtaining_template_metadata.rst | 213 +++++++ .../obtaining_template_version_content.rst | 196 +++++++ .../obtaining_template_version_metadata.rst | 216 +++++++ .../updating_template_metadata.rst | 174 ++++++ 45 files changed, 9245 insertions(+), 5 deletions(-) create mode 100644 api-ref/source/_static/images/en-us_image_0000001893402017.png create mode 100644 api-ref/source/_static/images/en-us_image_0000001893402049.png create mode 100644 api-ref/source/appendix/error_codes.rst create mode 100644 api-ref/source/appendix/index.rst create mode 100644 api-ref/source/appendix/status_code.rst create mode 100644 api-ref/source/before_you_start/concepts.rst create mode 100644 api-ref/source/before_you_start/index.rst create mode 100644 api-ref/source/before_you_start/overview.rst create mode 100644 api-ref/source/change_history.rst mode change 100755 => 100644 api-ref/source/conf.py create mode 100644 api-ref/source/docutils.conf create mode 100644 api-ref/source/resource_formation_service/execution_plans/applying_an_execution_plan.rst create mode 100644 api-ref/source/resource_formation_service/execution_plans/creating_an_execution_plan.rst create mode 100644 api-ref/source/resource_formation_service/execution_plans/deleting_an_execution_plan.rst create mode 100644 api-ref/source/resource_formation_service/execution_plans/index.rst create mode 100644 api-ref/source/resource_formation_service/execution_plans/listing_execution_plans.rst create mode 100644 api-ref/source/resource_formation_service/execution_plans/obtaining_execution_plan_metadata.rst create mode 100644 api-ref/source/resource_formation_service/execution_plans/obtaining_execution_plans.rst create mode 100644 api-ref/source/resource_formation_service/index.rst create mode 100644 api-ref/source/resource_formation_service/stacks/continuing_to_deploy_a_stack.rst create mode 100644 api-ref/source/resource_formation_service/stacks/continuing_to_roll_back_a_stack.rst create mode 100644 api-ref/source/resource_formation_service/stacks/creating_a_stack.rst create mode 100644 api-ref/source/resource_formation_service/stacks/deleting_a_stack.rst create mode 100644 api-ref/source/resource_formation_service/stacks/deleting_a_stack_with_conditions.rst create mode 100644 api-ref/source/resource_formation_service/stacks/deploying_a_stack.rst create mode 100644 api-ref/source/resource_formation_service/stacks/index.rst create mode 100644 api-ref/source/resource_formation_service/stacks/listing_events_of_a_stack.rst create mode 100644 api-ref/source/resource_formation_service/stacks/listing_stack_outputs.rst create mode 100644 api-ref/source/resource_formation_service/stacks/listing_stack_resources.rst create mode 100644 api-ref/source/resource_formation_service/stacks/listing_stacks.rst create mode 100644 api-ref/source/resource_formation_service/stacks/obtaining_a_stack_template.rst create mode 100644 api-ref/source/resource_formation_service/stacks/obtaining_stack_metadata.rst create mode 100644 api-ref/source/resource_formation_service/stacks/updating_a_stack.rst create mode 100644 api-ref/source/resource_formation_service/template_analysis/index.rst create mode 100644 api-ref/source/resource_formation_service/template_analysis/parsing_template_variables.rst create mode 100644 api-ref/source/resource_formation_service/template_management/deleting_a_template.rst create mode 100644 api-ref/source/resource_formation_service/template_management/deleting_a_template_version.rst create mode 100644 api-ref/source/resource_formation_service/template_management/index.rst create mode 100644 api-ref/source/resource_formation_service/template_management/listing_template_versions.rst create mode 100644 api-ref/source/resource_formation_service/template_management/listing_templates.rst create mode 100644 api-ref/source/resource_formation_service/template_management/obtaining_template_metadata.rst create mode 100644 api-ref/source/resource_formation_service/template_management/obtaining_template_version_content.rst create mode 100644 api-ref/source/resource_formation_service/template_management/obtaining_template_version_metadata.rst create mode 100644 api-ref/source/resource_formation_service/template_management/updating_template_metadata.rst diff --git a/api-ref/source/_static/images/en-us_image_0000001893402017.png b/api-ref/source/_static/images/en-us_image_0000001893402017.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a37a976d4576d256107faeb20bd06794b51b43 GIT binary patch literal 51740 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%0AZD@BjI{u{Gzp=uHI(1CKApP%TB6 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μMKUP;j3tZz2lr=fW<}VJLdca4MNKQ^pP%GM| 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

bES#Nu3=`N|2tZ)5>TfFvX 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 literal 0 HcmV?d00001 diff --git a/api-ref/source/appendix/error_codes.rst b/api-ref/source/appendix/error_codes.rst new file mode 100644 index 0000000..8d5cb83 --- /dev/null +++ b/api-ref/source/appendix/error_codes.rst @@ -0,0 +1,178 @@ +:original_name: ErrorCode.html + +.. _ErrorCode: + +Error Codes +=========== + ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| Status Code | Error Codes | Error Message | Description | Solution | ++=============+=============+=============================================================================================================================================================================+=============================================================================================================================================================================+============================+ +| 400 | RF.10011001 | Missing required parameter(s). | Missing required parameter(s). | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011002 | Unrecognized parameter(s). | Unrecognized parameter(s). | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011003 | Both template_uri and template_body are given, you should only give exactly one parameter from template_uri and template_body. | Both template_uri and template_body are given, you should only give exactly one parameter from template_uri and template_body. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011005 | The length of parameter is longer than upper limit. | The length of parameter is longer than upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011006 | The length of parameter is shorter than lower limit. | The length of parameter is shorter than lower limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011008 | Parameter contains invalid letter. Should only contains English characters, number or hyphen. | Parameter contains invalid letter. Should only contains English characters, number or hyphen. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011009 | Parameter contains invalid letter. It should start with lower case English characters or number, and only contain lower case English characters, number or hyphen. | Parameter contains invalid letter. It should start with lower case English characters or number, and only contain lower case English characters, number or hyphen. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011010 | Parameter contains invalid letter. Should start with Chinese or English characters, and only contains Chinese characters, English characters, number, underscore or hyphen. | Parameter contains invalid letter. Should start with Chinese or English characters, and only contains Chinese characters, English characters, number, underscore or hyphen. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011013 | The size of the file obtained from template_uri exceeds the upper limit. | The size of the file obtained from template_uri exceeds the upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011014 | The size of the file obtained from vars_uri exceeds the upper limit. | The size of the file obtained from vars_uri exceeds the upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011015 | Stack ID is not matched with current stack with stack name. | Stack ID is not matched with current stack with stack name. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011016 | Project ID contains invalid letter. Project ID should only contains English characters, number, hyphen. | Project ID contains invalid letter. Project ID should only contains English characters, number, hyphen. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011018 | Execution plan ID is not matched with current execution plan with execution plan name. | Execution plan ID is not matched with current execution plan with execution plan name. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011022 | Invalid file extension. Template file should end with .tf, .tf.json, or .zip | Invalid file extension. Template file should end with .tf, .tf.json, or .zip | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011025 | Invalid file(s) found in zip. A zip file should not contain tfvars files. | Invalid file(s) found in zip. A zip file should not contain tfvars files. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011026 | The size of unzipped files in zip file is bigger than upper limit. | The size of unzipped files in zip file is bigger than upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011027 | Invalid enum value. | Invalid enum value. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011028 | Composite Validation Error. | Composite Validation Error. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011029 | Parameter contains invalid letter. Should only contains English characters or number. | Parameter contains invalid letter. Should only contains English characters or number. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011031 | Parameter contains invalid letter. Should only contains English characters, number, hyphen or underscore. | Parameter contains invalid letter. Should only contains English characters, number, hyphen or underscore. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011032 | Can not find request body. | Can not find request body. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011033 | Request body format is invalid json. | Request body format is invalid json. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011034 | Invalid vars URI. Vars URI should start with [http|https] and end with [.tfvars]. | Invalid vars URI. Vars URI should start with [http|https] and end with [.tfvars]. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011035 | Invalid template URI. Template URI should start with [http|https] and end with [.tf|.tf.json|.zip]. | Invalid template URI. Template URI should start with [http|https] and end with [.tf|.tf.json|.zip]. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011036 | The value of parameter is not a valid instance of integer. | The value of parameter is not a valid instance of integer. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011037 | The field value cannot be empty. | The field value cannot be empty. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011038 | Invalid parameter value type. | Invalid parameter value type. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011039 | VarKey contains invalid letter. VarKey should Starts with an English letter and only contains English characters, number, hyphen or underscore. | VarKey contains invalid letter. VarKey should Starts with an English letter and only contains English characters, number, hyphen or underscore. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011041 | The count of unzipped files in zip file is bigger than upper limit. | The count of unzipped files in zip file is bigger than upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011042 | The size of template zip is bigger than upper limit. | The size of template zip is bigger than upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011046 | Account parameter should not contain octothorpe (#). | Account parameter should not contain octothorpe (#). | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011049 | Invalid vars uri. | Invalid vars uri. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011050 | Invalid vars uri content. | Invalid vars uri content. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011051 | Invalid vars body. | Invalid vars body. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011052 | Var value is empty. | Var value is empty. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011055 | Invalid json array. | Invalid json array. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011056 | Both template_uri and template_body are absence, you should give exactly one parameter from template_uri and template_body. | Both template_uri and template_body are absence, you should give exactly one parameter from template_uri and template_body. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011057 | Project ID should only contains lower case hexadecimal characters. | Project ID should only contains lower case hexadecimal characters. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011065 | Found duplicate values in attribute provider_name. | Found duplicate values in attribute provider_name. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011073 | Invalid template body. | Invalid template body. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011074 | Invalid template. | Invalid template. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011075 | File type is not matched with file content. | File type is not matched with file content. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011083 | Invalid zip from template uri: zip contains malformed file(s) that points to a path outside the root directory of the zip file | Invalid zip from template uri: zip contains malformed file(s) that points to a path outside the root directory of the zip file | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011084 | No parameters in the request need to be modified. | No parameters in the request need to be modified. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011085 | The encoding format of template content is unsupported, it should be utf-8 encoded. | The encoding format of template content is unsupported, it should be utf-8 encoded. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011087 | Unrecognized search option parameter. | Unrecognized search option parameter. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011088 | No valid filter method found. | No valid filter method found. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011089 | The filter value is invalid. | The filter value is invalid. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011093 | Duplicate fields found. | Duplicate fields found. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011095 | Missing required template parameter for price inquiry. | Missing required template parameter for price inquiry. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011096 | Template parameter is invalid for price inquiry. | Template parameter is invalid for price inquiry. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011102 | Malformed template zip file found. Failed to read zip file. | Malformed template zip file found. Failed to read zip file. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011120 | The encoding format of json template content [utf-8 with BOM] is unsupported, it should be utf-8 encoded. | The encoding format of json template content [utf-8 with BOM] is unsupported, it should be utf-8 encoded. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011122 | Agency is not supported in iam v5 scene, if you want to use agency, please use iam v3. | Agency is not supported in iam v5 scene, if you want to use agency, please use iam v3. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011123 | Parameter contains invalid letter. Should start with English characters or number, and only contains English characters, number or hyphen. | Parameter contains invalid letter. Should start with English characters or number, and only contains English characters, number or hyphen. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011141 | The length of vars_body exceeds the upper limit. | The length of vars_body exceeds the upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011151 | The length of file path in template zip file exceeds the upper limit. | The length of file path in template zip file exceeds the upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011152 | The length of file name in template zip file exceeds the upper limit. | The length of file name in template zip file exceeds the upper limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011155 | The path of file in zip can not start with path separator(/) | The path of file in zip can not start with path separator(/) | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011156 | The value between path separator in zip can not be empty, single dot (.) or double dot (..). | The value between path separator in zip can not be empty, single dot (.) or double dot (..). | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011157 | No template file (file name ends with .tf or .tf.json) exists at root dir in zip. There should be at least one template file in root dir in zip. | No template file (file name ends with .tf or .tf.json) exists at root dir in zip. There should be at least one template file in root dir in zip. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011166 | Parameter should only contain lower English characters, numbers or hyphens, start and end with lower English characters or numbers. | Parameter should only contain lower English characters, numbers or hyphens, start and end with lower English characters or numbers. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 400 | RF.10011167 | Invalid function_graph_urn format. | Invalid function_graph_urn format. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 401 | RF.10012001 | Authentication failed. | Authentication failed. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012507 | Policy doesn't allow action to be performed. | Policy doesn't allow action to be performed. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012538 | The total count of stacks has exceeded the maximum limit. | The total count of stacks has exceeded the maximum limit. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012540 | Too many stacks are being created in parallel, please take a rest and try again later. | Too many stacks are being created in parallel, please take a rest and try again later. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012541 | Too many execution plans are being created in parallel, please take a rest and try again later. | Too many execution plans are being created in parallel, please take a rest and try again later. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012542 | Execution plan cannot be applied due to invalid stack status. | Execution plan cannot be applied due to invalid stack status. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012543 | Execution plan cannot be applied due to invalid execution plan status. | Execution plan cannot be applied due to invalid execution plan status. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012544 | Stack cannot be deleted due to invalid stack status. | Stack cannot be deleted due to invalid stack status. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012545 | Execution plan cannot be applied because stack has been deployed since execution plan generated. Please regenerate the execution plan based on the latest stack. | Execution plan cannot be applied because stack has been deployed since execution plan generated. Please regenerate the execution plan based on the latest stack. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012546 | Auto rollback of stack cannot be enabled due to invalid stack status. | Auto rollback of stack cannot be enabled due to invalid stack status. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012547 | Invalid stack status. The stack cannot be continue-deployed. | Invalid stack status. The stack cannot be continue-deployed. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 403 | RF.10012549 | Invalid stack status. The execution plan cannot be deleted. | Invalid stack status. The execution plan cannot be deleted. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 404 | RF.10013001 | Stack is not exist. | Stack is not exist. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 404 | RF.10013002 | Execution plan is not exist. | Execution plan is not exist. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 404 | RF.10013023 | The stack template does not exist. | The stack template does not exist. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 404 | RF.10013029 | Product does not exist for price inquiry. | Product does not exist for price inquiry. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 409 | RF.10013501 | Conflict execution plan name. Execution plan with name already exist. | Conflict execution plan name. Execution plan with name already exist. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 409 | RF.10013502 | Conflict stack name. Stack with name already exist. | Conflict stack name. Stack with name already exist. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 409 | RF.10013503 | Stack operation requests conflicted. Another request is being processed. Please retry later. | Stack operation requests conflicted. Another request is being processed. Please retry later. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 429 | RF.10014001 | Too many requests. Please try again in a few minutes. | Too many requests. Please try again in a few minutes. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ +| 500 | RF.10010001 | Internal Server Error. | Internal Server Error. | Contact technical support. | ++-------------+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+ diff --git a/api-ref/source/appendix/index.rst b/api-ref/source/appendix/index.rst new file mode 100644 index 0000000..a05fb77 --- /dev/null +++ b/api-ref/source/appendix/index.rst @@ -0,0 +1,16 @@ +:original_name: aos_02_0040.html + +.. _aos_02_0040: + +Appendix +======== + +- :ref:`Status Code ` +- :ref:`Error Codes ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + status_code + error_codes diff --git a/api-ref/source/appendix/status_code.rst b/api-ref/source/appendix/status_code.rst new file mode 100644 index 0000000..543c74b --- /dev/null +++ b/api-ref/source/appendix/status_code.rst @@ -0,0 +1,122 @@ +:original_name: aos_02_0041.html + +.. _aos_02_0041: + +Status Code +=========== + +:ref:`Table 1 ` describes status codes. + +.. _aos_02_0041__t93fd21ed6afd4362800cf584fc83504e: + +.. table:: **Table 1** Status codes + + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Status Code | Code | Description | + +=======================+=================================+==================================================================================================================================================================================================================================================================================================================================================================+ + | 100 | Continue | The client should continue with its request. | + | | | | + | | | This interim response is used to inform the client that some requests have been received and have not been rejected by the server. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 101 | Switching Protocols | The protocol should be switched. The protocol can only be switched to a newer protocol. | + | | | | + | | | For example, the current HTTP protocol is switched to a later version. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 201 | Created | The request for creating resources has been fulfilled. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 202 | Accepted | The request has been accepted, but the processing has not been completed. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 203 | Non-Authoritative Information | Non-authoritative information. The request is successful. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 204 | NoContent | The request has been fulfilled, but the HTTP response does not contain a response body. | + | | | | + | | | The status code is returned in response to an HTTP OPTIONS request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 205 | Reset Content | The server has fulfilled the request, but the requester is required to reset the content. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 206 | Partial Content | The server has successfully processed the partial GET request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 300 | Multiple Choices | There are multiple options for the location of the requested resource. The response contains a list of resource characteristics and addresses from which a user terminal (such as a browser) can choose the most appropriate one. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 301 | Moved Permanently | The requested resource has been assigned with a new permanent URI. This new URI is contained in the response. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 302 | Found | The requested resource resides temporarily under a different URI. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 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. When the server returns this status code, it does not return any resources. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 305 | Use Proxy | The requested resource must be accessed through a proxy. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 306 | Unused | This HTTP status code is no longer used. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 400 | BadRequest | The request is invalid. | + | | | | + | | | The client should not repeat the request without modifications. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 401 | Unauthorized | This status code is returned after the client provides the authentication information, indicating that the authentication information is incorrect or invalid. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 402 | Payment Required | This status code is reserved for future use. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 403 | Forbidden | Access denied. | + | | | | + | | | The server understands the request, but refuses to fulfill it. The client should not repeat the request without modifications. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 404 | NotFound | The requested resource cannot be found. | + | | | | + | | | The client should not repeat the request without modifications. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 405 | MethodNotAllowed | The method specified in the request is not supported by the requested resource. | + | | | | + | | | The client should not repeat the request without modifications. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 406 | Not Acceptable | The server cannot fulfill the request based on the content characteristics of the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 407 | Proxy Authentication Required | This status code is similar to 401, but indicates that the client must authenticate itself with the proxy first. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 408 | Request Time-out | The client does not send a request within the time that the server was prepared to wait. | + | | | | + | | | The client may repeat the request without modifications later. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 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 refuses to process the request without a defined Content-Length. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 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 cannot process the request temporarily, the response will contain a Retry-After field. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 414 | Request-URI Too Large | The Request-URI is too long for the server to process. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 415 | Unsupported Media Type | The server cannot process the media format 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 unable to understand the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 501 | Not Implemented | The server does not support the function required to fulfill the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 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 not repeat the request without modifications. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 504 | ServerTimeout | The request cannot be fulfilled within a given time. This status code is returned to the client only when the **Timeout** parameter is specified in the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | 505 | HTTP Version not supported | The server does not support the HTTP protocol version used in the request. | + +-----------------------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/before_you_start/concepts.rst b/api-ref/source/before_you_start/concepts.rst new file mode 100644 index 0000000..671ad2c --- /dev/null +++ b/api-ref/source/before_you_start/concepts.rst @@ -0,0 +1,38 @@ +:original_name: aos_02_0055.html + +.. _aos_02_0055: + +Concepts +======== + +- Account + + An account is created upon successful registration. The account has full access permissions for all of its cloud services and resources. It can be used to reset user passwords and grant user permissions. The account is a payment entity, which should not be used directly to perform routine management. For security purposes, create Identity and Access Management (IAM) users and grant them permissions for routine management. + +- Domain + + A domain is created upon successful registration. The domain has full access permissions for all of its cloud services and resources. It can be used to reset user passwords and grant user permissions. The domain is a payment entity, which should not be used directly to perform routine management. For security purposes, create Identity and Access Management (IAM) users and grant them permissions for routine management. + +- User + + An IAM user is created by an account in IAM to use cloud services. Each IAM user has its own identity credentials (password and access keys). + + API authentication requires information such as the domain name, username, and password. + +- Region + + A region is a geographic area in which cloud resources are deployed. Availability zones (AZs) in the same region can communicate with each other over an intranet, while AZs in different regions are isolated from each other. Deploying cloud resources in different regions can better suit certain user requirements or comply with local laws or regulations. + +- AZ + + An AZ comprises of one or more physical data centers equipped with independent ventilation, fire, water, and electricity facilities. Computing, network, storage, and other resources in an AZ are logically divided into multiple clusters. AZs within a region are interconnected using high-speed optical fibers to allow you to build cross-AZ high-availability systems. + +- Project + + A project corresponds to a region. Default projects are defined to group and physically isolate resources (including computing, storage, and network resources) across regions. Users can be granted permissions in a default project to access all resources under their domains in the region associated with the project. If you need more refined access control, create subprojects under a default project and create resources in subprojects. Then you can assign users the permissions required to access only the resources in the specific subprojects. + + + .. figure:: /_static/images/en-us_image_0000001893402049.png + :alt: **Figure 1** Project isolation model + + **Figure 1** Project isolation model diff --git a/api-ref/source/before_you_start/index.rst b/api-ref/source/before_you_start/index.rst new file mode 100644 index 0000000..7924224 --- /dev/null +++ b/api-ref/source/before_you_start/index.rst @@ -0,0 +1,16 @@ +:original_name: aos_02_0000.html + +.. _aos_02_0000: + +Before You Start +================ + +- :ref:`Overview ` +- :ref:`Concepts ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + overview + concepts diff --git a/api-ref/source/before_you_start/overview.rst b/api-ref/source/before_you_start/overview.rst new file mode 100644 index 0000000..84bd05d --- /dev/null +++ b/api-ref/source/before_you_start/overview.rst @@ -0,0 +1,14 @@ +:original_name: aos_02_0001.html + +.. _aos_02_0001: + +Overview +======== + +Resource Formation Service (RFS) provides the latest :ref:`resource formation APIs `. + +RFS is a new final-state resource formation engine for cloud services and fully supports Terraform (HCL and Provider), which is a de facto standard. It is an upgrade of the Application Orchestration Service (AOS) in terms of the ecosystem, experience, and features. Based on HCL syntax template, RFS automatically builds cloud service resources in batches to help you create, manage, and upgrade cloud service resources in an efficient, secure, and consistent manner, improving resource management efficiency and reducing security risks caused by resource management changes. + +This document describes how to use APIs to perform operations on RFS, such as template creation, deletion, and query. + +Before calling RFS APIs, ensure that you are familiar with RFS concepts. For details, see Service Overview. diff --git a/api-ref/source/change_history.rst b/api-ref/source/change_history.rst new file mode 100644 index 0000000..80ffe38 --- /dev/null +++ b/api-ref/source/change_history.rst @@ -0,0 +1,12 @@ +:original_name: aos_02_0070.html + +.. _aos_02_0070: + +Change History +============== + +========== ============== +Date Change History +========== ============== +2024-07-30 First release +========== ============== diff --git a/api-ref/source/conf.py b/api-ref/source/conf.py old mode 100755 new mode 100644 index a618be7..088f47d --- a/api-ref/source/conf.py +++ b/api-ref/source/conf.py @@ -106,7 +106,6 @@ html_title = "Resource Formation Service - API Reference" # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] -templates_path = ['_templates'] # Do not include sources into the rendered results html_copy_source = False @@ -136,4 +135,4 @@ latex_elements = { \newcommand{{\servicetitle}}{{{otcdocs_service_title}}} ''', 'sphinxsetup': 'hmargin={15mm,15mm}, vmargin={20mm,30mm}, marginpar=10mm' -} \ No newline at end of file +} diff --git a/api-ref/source/docutils.conf b/api-ref/source/docutils.conf new file mode 100644 index 0000000..7cbe4c1 --- /dev/null +++ b/api-ref/source/docutils.conf @@ -0,0 +1,2 @@ +[html writers] +table-style: table, caption-top \ No newline at end of file diff --git a/api-ref/source/index.rst b/api-ref/source/index.rst index a90356d..d364ad5 100644 --- a/api-ref/source/index.rst +++ b/api-ref/source/index.rst @@ -1,3 +1,11 @@ -========================================================== -Welcome to the documentation of resource-formation-service -========================================================== +========================================== +Resource Formation Service - API Reference +========================================== + +.. toctree:: + :maxdepth: 1 + + before_you_start/index + resource_formation_service/index + appendix/index + change_history diff --git a/api-ref/source/resource_formation_service/execution_plans/applying_an_execution_plan.rst b/api-ref/source/resource_formation_service/execution_plans/applying_an_execution_plan.rst new file mode 100644 index 0000000..f67a147 --- /dev/null +++ b/api-ref/source/resource_formation_service/execution_plans/applying_an_execution_plan.rst @@ -0,0 +1,303 @@ +:original_name: ApplyExecutionPlan.html + +.. _ApplyExecutionPlan: + +Applying an Execution Plan +========================== + +Function +-------- + +ApplyExecutionPlan + +This API applies an execution plan. + +- Once the execution request is received, the state of the execution plan changes to APPLY_IN_PROGRESS, and the request is processed asynchronously in the background. +- Once the execution is completed, the state of the execution plan changes to APPLIED. +- You can call GetStackMetadata to query the stack status to trace the stack deployment status and check whether the execution is successful. + +If you do not want to deploy a stack using an execution plan, you can call DeployStack for direct deployment. + +Expiration of execution plans: + +#. If a stack has multiple execution plans, all the remaining plans will expire once any of them is applied (regardless of whether the execution is successful). +#. If the specified execution plan has expired when you call ApplyExecutionPlan, 403 is returned. If a stack is in a non-final state (ending with IN_PROGRESS), its execution plans cannot be applied and 403 is returned. The non-final states may include: + +- DEPLOYMENT_IN_PROGRESS +- DELETION_IN_PROGRESS +- ROLLBACK_IN_PROGRESS + +URI +--- + +POST /v1/{project_id}/stacks/{stack_name}/execution-plans/{execution_plan_name} + +.. table:: **Table 1** Path Parameters + + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=====================+=================+=================+========================================================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_name | Yes | String | An execution plan name is unique within its domain (domain_id), region, project (project_id), and stack (stack_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+============================================================================================================================================================================================================================+ + | execution_plan_id | No | String | Unique execution plan ID. | + | | | | | + | | | | A UUID is generated by RFS when an execution plan is created. | + | | | | | + | | | | Execution plan names are unique at one specific time, so you can create an execution plan named HelloWorld and another execution plan with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the execution plan they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each execution plan has a unique ID that does not change with updates. If the execution_plan_id value differs from the current execution plan ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 202** + +.. table:: **Table 4** Response body parameters + + +---------------+--------+-----------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===============+========+===============================================================================================+ + | deployment_id | String | Unique deployment ID. It is a UUID generated by RFS when deployment or rollback is triggered. | + +---------------+--------+-----------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 409** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Apply an execution plan of a specified stack. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan + +- Apply an execution plan of a specified stack, with a stack ID provided to check whether the stack ID matches the current stack. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan + + { + "stack_id" : "f689e9fd-97e7-4185-bd8a-7d5f708d45d7" + } + +Example Responses +----------------- + +**Status code: 202** + +The request is accepted and processed asynchronously. + +.. code-block:: + + { + "deployment_id" : "07e21c3e-d33c-4513-9d0f-e9e673817772" + } + +Status Codes +------------ + ++-----------------------------------+----------------------------------------------------------------------------------------+ +| Status Code | Description | ++===================================+========================================================================================+ +| 202 | The request is accepted and processed asynchronously. | ++-----------------------------------+----------------------------------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+----------------------------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+----------------------------------------------------------------------------------------+ +| 403 | #. The user does not have the permission to call this API. | +| | #. Invalid stack status. | +| | #. The execution plan has expired. | ++-----------------------------------+----------------------------------------------------------------------------------------+ +| 404 | #. The stack does not exist. | +| | #. The execution plan does not exist. | ++-----------------------------------+----------------------------------------------------------------------------------------+ +| 409 | Execution requests conflict. Another request is being processed on the execution plan. | ++-----------------------------------+----------------------------------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+----------------------------------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+----------------------------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/execution_plans/creating_an_execution_plan.rst b/api-ref/source/resource_formation_service/execution_plans/creating_an_execution_plan.rst new file mode 100644 index 0000000..4637238 --- /dev/null +++ b/api-ref/source/resource_formation_service/execution_plans/creating_an_execution_plan.rst @@ -0,0 +1,410 @@ +:original_name: CreateExecutionPlan.html + +.. _CreateExecutionPlan: + +Creating an Execution Plan +========================== + +Function +-------- + +CreateExecutionPlan + +This API creates an execution plan in a specified stack. An execution plan describes the differences between the resource status recorded in the current stack and the target resource status described in the template. For example, resource A will be generated according to the following configuration file, and resource B will change the following parameters from XXX to YYY. + +After an execution plan is created by calling this API, you can query the execution plan status by calling GetExecutionPlanMetadata. Once the execution plan is in an AVAILABLE state, you can call GetExecutionPlan to obtain the execution result. + +An execution plan does not support in-depth checks and verification, such as whether the user has the permission to generate or modify resources. + +**Note:** + +- When creating an execution plan, the specified resource stack must exist. If the specified resource stack does not exist, 404 is returned, and the user can create a resource stack by calling the CreateStack API. +- If the request does not contain template_body or template_uri, 400 is returned. +- Once a stack is deployed, all execution plans created before this deployment becomes invalid. +- An execution plan indicates only the resource configurations at the creation time. Once created, it will not automatically update upon your manual changes to the resource status. +- If the stack is in a DEPLOYMENT_IN_PROGRESS, ROLLBACK_IN_PROGRESS, or DELETION_IN_PROGRESS state, execution plans cannot be created and 403 is returned. + +URI +--- + +POST /v1/{project_id}/stacks/{stack_name}/execution-plans + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=====================+=================+=================================================================================================================+=======================================================================================================================================================================================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | template_body | No | String | HCL template. It describes the target status of a resource. RFS compares the differences between the statuses of this template and the current remote resources. | + | | | | | + | | | | Either template_body or template_uri must be specified but they both cannot be specified together. | + | | | | | + | | | | *In the CreateStack API, template_body and template_uri are optional.* | + | | | | | + | | | | **Note:** | + | | | | | + | | | | - template_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding template_body in plaintext. If the information is sensitive, you are advised to use vars_structure to change the information to a variable and set the encryption field to enable encrypted transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **51200** | + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | template_uri | No | String | OBS address of an HCL template. The template describes the target status of a resource. RFS compares the differences between the statuses of this template and the current remote resources. | + | | | | | + | | | | The OBS address allows mutual access to regions of the same type. Regions are classified into universal regions and dedicated regions. A universal region provides universal cloud services for common tenants. A dedicated region provides specific services for specific tenants. | + | | | | | + | | | | The corresponding file must be a tf file or a zip package. | + | | | | | + | | | | A pure .tf file must end with .tf or .tf.json and comply with the HCL syntax. | + | | | | | + | | | | Currently, only the .zip package is supported. The file name extension must be .zip. The decompressed file cannot contain the .tfvars file and must be encoded in UTF8 format (the .tf.json file cannot contain the BOM header). The .zip package supports a maximum of 100 subfiles. | + | | | | | + | | | | Either template_body or template_uri must be specified. | + | | | | | + | | | | *In the CreateStack API, template_body and template_uri are optional.* | + | | | | | + | | | | **Note**: | + | | | | | + | | | | - The template file corresponds to template_uri cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the content of the template file in plaintext. If the information is sensitive, you are advised to use vars_structure to change the information to a variable and set the encryption field to enable encrypted transmission. | + | | | | - If the template file corresponding to template_uri is of zip type, the length of the internal file or folder name must not exceed 255 bytes, the length of the deepest path must not exceed 2048 bytes, and the size of the zip package must not exceed 1MB. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_name | Yes | String | An execution plan name is unique within its domain (domain_id), region, project (project_id), and stack (stack_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | No | String | Execution plan description. It is used to identify your own execution plans. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **1024** | + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_structure | No | Array of :ref:`VarsStructure ` objects | HCL variable structure. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | - var_structure allows string variables. | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - vars_structure only supports string variables. To use variables of other types, you need to convert them in HCL reference. Alternatively, you can use vars_uri and vars_body, which support various types and complex structures supported by HCL. | + | | | | - If vars_structure is too large, you can use vars_uri. | + | | | | - Note: vars_structure cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to set the encryption field. | + | | | | | + | | | | Array Length: **0 - 100** | + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_body | No | String | Content of the HCL variable file. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | - The vars_body uses the tfvars format of HCL. You can submit the content in the .tfvars file to the vars_body. | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - If vars_body is too large, you can use vars_uri. | + | | | | - If the content in vars is simple strings, you can use var_structure. | + | | | | - vars_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to use vars_structure and set the encryption field for transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **51200** | + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_uri | No | String | OBS address of the HCL variable file. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | The OBS address allows mutual access to regions of the same type. Regions are classified into universal regions and dedicated regions. A universal region provides universal cloud services for common tenants. A dedicated region provides specific services for specific tenants. | + | | | | | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - The content in vars_uri uses the tfvars format of HCL. You can save the content in .tfvars to a file, upload the file to OBS, and transfer the pre-signed URL of OBS to vars_uri. | + | | | | - vars_uri cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to use vars_structure and set the encryption field for transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +---------------------+-----------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _createexecutionplan__en-us_topic_0000001709318814_request_varsstructure: + +.. table:: **Table 4** VarsStructure + + +-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+===================================================================================================================+====================================================================================================================================================================================================+ + | var_key | Yes | String | Variable name. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **32** | + +-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | var_value | Yes | String | Variable value. | + | | | | | + | | | | Variables must be in the form of a string. If a parameter is a number, it must also be in the form of a string, for example, '10'. | + | | | | | + | | | | For different types or complex structures, you can use vars_uri or vars_body. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | encryption | No | :ref:`EncryptionStructure ` object | If a transferred var_value has been encrypted, you can declare this variable to require RFS to decrypt the var_value before using it. Currently, only KMS encryption and decryption are supported. | + +-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _createexecutionplan__en-us_topic_0000001709318814_request_encryptionstructure: + +.. table:: **Table 5** EncryptionStructure + + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=====================================================================================================+===================================================================================================================================================================================================================================================================================================================================================+ + | kms | Yes | :ref:`KmsStructure ` object | If an assigned var_value is encrypted by KMS, related encryption information can be transferred. RFS will help you decrypt the var_value by KMS. | + | | | | | + | | | | **Note:** | + | | | | | + | | | | - The agency you specify for RFS should have the operation permissions on the specified key ID. | + | | | | - KMS provides a quota for free trial every month. If the quota is exceeded, you will be billed for KMS. The fee is not billed by RFS. | + | | | | - KMS encryption only indicates that RFS uses ciphertext for storage and transmission. However, RFS still uses plaintext in stack-events. If you want RFS to use ciphertext in logs, you can declare sensitive in templates. For more information about sensitive, refer to https://learn.hashicorp.com/tutorials/terraform/sensitive-variables. | + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _createexecutionplan__en-us_topic_0000001709318814_request_kmsstructure: + +.. table:: **Table 6** KmsStructure + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================+ + | id | Yes | String | KMS key ID is used by RFS during decryption. Generally, the key ID is that used for encryption. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + | cipher_text | Yes | String | Ciphertext of data encryption key. | + | | | | | + | | | | Minimum: **2** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 202** + +.. table:: **Table 7** Response body parameters + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+============================================================================================================================================================================================================================+ + | execution_plan_id | String | Unique execution plan ID. | + | | | | + | | | A UUID is generated by RFS when an execution plan is created. | + | | | | + | | | Execution plan names are unique at one specific time, so you can create an execution plan named HelloWorld and another execution plan with the same name after deleting the first one. | + | | | | + | | | For parallel development, team members may want to ensure that they are operating the execution plan they created, not one with the same name created by other members after deleting the previous one. | + | | | | + | | | To avoid this mismatch, check the ID, since RFS ensures each execution plan has a unique ID that does not change with updates. If the execution_plan_id value differs from the current execution plan ID, 400 is returned. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 409** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 12** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 13** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Create an execution plan in a specified stack based on the template. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans + + { + "execution_plan_name" : "my_second_execution_plan", + "template_body" : "terraform {\n required_providers {\n opentelekomcloud = {\n source = \"opentelekomcloud/provider/opentelekomcloud\"\n version = \"1.35.13\"\n }\n }\n}\nprovider \"opentelekomcloud\"{\n insecure = true\n cloud = \"{cloud_name}\"\n region = \"{region}\"\n endpoints = {\n iam = \"{iam_endpoint}\",\n }\n}\n\nresource \"opentelekomcloud_vpc_v1\" \"vpc\" {\n cidr = \"172.16.0.0/16\"\n name = \"my_vpc\"\n}" + } + +Example Responses +----------------- + +**Status code: 202** + +The request is accepted and processed asynchronously. + +.. code-block:: + + { + "execution_plan_id" : "fb5e781e-a27d-46e2-9954-242753857a9f" + } + +Status Codes +------------ + ++-----------------------------------+----------------------------------------------------------------------------------+ +| Status Code | Description | ++===================================+==================================================================================+ +| 202 | The request is accepted and processed asynchronously. | ++-----------------------------------+----------------------------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+----------------------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+----------------------------------------------------------------------------------+ +| 403 | #. The user does not have the permission to call this API. | +| | #. The maximum number of execution plans has been reached. | ++-----------------------------------+----------------------------------------------------------------------------------+ +| 409 | Creation requests conflict. An execution plan with the same name already exists. | ++-----------------------------------+----------------------------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+----------------------------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+----------------------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/execution_plans/deleting_an_execution_plan.rst b/api-ref/source/resource_formation_service/execution_plans/deleting_an_execution_plan.rst new file mode 100644 index 0000000..e15c6da --- /dev/null +++ b/api-ref/source/resource_formation_service/execution_plans/deleting_an_execution_plan.rst @@ -0,0 +1,227 @@ +:original_name: DeleteExecutionPlan.html + +.. _DeleteExecutionPlan: + +Deleting an Execution Plan +========================== + +Function +-------- + +DeleteExecutionPlan + +This API deletes an execution plan. + +If an execution plan is in a CREATION_IN_PROGRESS or APPLY_IN_PROGRESS state, the execution plan cannot be deleted and 403 is returned. + +URI +--- + +DELETE /v1/{project_id}/stacks/{stack_name}/execution-plans/{execution_plan_name} + +.. table:: **Table 1** Path Parameters + + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=====================+=================+=================+========================================================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_name | Yes | String | An execution plan name is unique within its domain (domain_id), region, project (project_id), and stack (stack_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+============================================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_id | No | String | Unique execution plan ID. | + | | | | | + | | | | A UUID is generated by RFS when an execution plan is created. | + | | | | | + | | | | Execution plan names are unique at one specific time, so you can create an execution plan named HelloWorld and another execution plan with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the execution plan they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each execution plan has a unique ID that does not change with updates. If the execution_plan_id value differs from the current execution plan ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Delete an execution plan of a specified stack. + + .. code-block:: text + + DELETE https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan + +- Delete an execution plan of a specified stack, with a stack ID and an execution plan ID provided to check whether they match the current stack and execution plan. + + .. code-block:: text + + DELETE https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2&execution_plan_id=fb5e781e-a27d-46e2-9954-242753857a9f + +Example Responses +----------------- + +None + +Status Codes +------------ + ++-----------------------------------+--------------------------------------------------------------------+ +| Status Code | Description | ++===================================+====================================================================+ +| 204 | Execution plan deleted. | ++-----------------------------------+--------------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+--------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+--------------------------------------------------------------------+ +| 403 | #. The user does not have the permission to call this API. | +| | #. The execution plan cannot be deleted due to its invalid status. | ++-----------------------------------+--------------------------------------------------------------------+ +| 404 | #. The stack does not exist. | +| | #. The execution plan does not exist. | ++-----------------------------------+--------------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+--------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/execution_plans/index.rst b/api-ref/source/resource_formation_service/execution_plans/index.rst new file mode 100644 index 0000000..66307c7 --- /dev/null +++ b/api-ref/source/resource_formation_service/execution_plans/index.rst @@ -0,0 +1,24 @@ +:original_name: topic_300000001.html + +.. _topic_300000001: + +Execution Plans +=============== + +- :ref:`Listing Execution Plans ` +- :ref:`Creating an Execution Plan ` +- :ref:`Obtaining Execution Plans ` +- :ref:`Applying an Execution Plan ` +- :ref:`Deleting an Execution Plan ` +- :ref:`Obtaining Execution Plan Metadata ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + listing_execution_plans + creating_an_execution_plan + obtaining_execution_plans + applying_an_execution_plan + deleting_an_execution_plan + obtaining_execution_plan_metadata diff --git a/api-ref/source/resource_formation_service/execution_plans/listing_execution_plans.rst b/api-ref/source/resource_formation_service/execution_plans/listing_execution_plans.rst new file mode 100644 index 0000000..2fc43a7 --- /dev/null +++ b/api-ref/source/resource_formation_service/execution_plans/listing_execution_plans.rst @@ -0,0 +1,335 @@ +:original_name: ListExecutionPlans.html + +.. _ListExecutionPlans: + +Listing Execution Plans +======================= + +Function +-------- + +ListExecutionPlans + +This API lists all execution plans of a specified stack in the current region. + +- By default, the execution plans are sorted by creation time in descending order. The one created latest is displayed on the top. +- Currently, all of the existing execution plans are returned. Pagination is not supported. +- If the specified stack does not have any execution plan, an empty list is returned. +- If the specified stack does not exist, 404 is returned. ListExecutionPlans returns only the summary information. You can obtain details about the summary information by referring to ListExecutionPlansResponseBody. For detailed execution plan metadata, call GetExecutionPlanMetadata. + +URI +--- + +GET /v1/{project_id}/stacks/{stack_name}/execution-plans + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------------+-----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=================+=================================================================================================================+===================================================================================================================+ + | execution_plans | Array of :ref:`ExecutionPlan ` objects | Execution plan list, sorted by creation time in descending order. The one created latest is displayed on the top. | + +-----------------+-----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ + +.. _listexecutionplans__en-us_topic_0000001757038293_response_executionplan: + +.. table:: **Table 5** ExecutionPlan + + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | stack_name | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_id | String | Unique stack ID. | + | | | | + | | | It is a UUID generated by RFS when a stack is created. | + | | | | + | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | + | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | + | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_id | String | Unique execution plan ID. | + | | | | + | | | A UUID is generated by RFS when an execution plan is created. | + | | | | + | | | Execution plan names are unique at one specific time, so you can create an execution plan named HelloWorld and another execution plan with the same name after deleting the first one. | + | | | | + | | | For parallel development, team members may want to ensure that they are operating the execution plan they created, not one with the same name created by other members after deleting the previous one. | + | | | | + | | | To avoid this mismatch, check the ID, since RFS ensures each execution plan has a unique ID that does not change with updates. If the execution_plan_id value differs from the current execution plan ID, 400 is returned. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_name | String | An execution plan name is unique within its domain (domain_id), region, project (project_id), and stack (stack_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | String | Execution plan description. It is used to identify your own execution plans. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status | String | Status of an execution plan. \* CREATION_IN_PROGRESS indicates that creation is in progress. \* CREATION_FAILED indicates the creation failed. You can obtain the error information summary from status_message. \* AVAILABLE indicates the creation completed. You can call ApplyExecutionPlan to apply the plan. \* APPLY_IN_PROGRESS indicates the execution is in progress. You can call GetStackMetadata to query the stack status, or call ListStackEvents to obtain the stack events generated during the execution. \* APPLIED indicates the plan has been applied. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **CREATION_IN_PROGRESS** | + | | | - **CREATION_FAILED** | + | | | - **AVAILABLE** | + | | | - **APPLY_IN_PROGRESS** | + | | | - **APPLIED** | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status_message | String | If an execution plan is in a CREATION_FAILED status, a brief error information summary is displayed for debugging. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | create_time | String | Creation time of an execution plan. The format complies with the RFC 3339 format (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | apply_time | String | Time when an execution plan was applied. The format complies with the RFC 3339 format (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- List all execution plans of a specified stack. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans + +- List all execution plans of a specified stack with a stack ID to check whether the stack ID matches the current stack. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans?stack_id=f689e9fd-97e7-4185-bd8a-7d5f708d45d7 + +Example Responses +----------------- + +**Status code: 200** + +Execution plans listed. + +.. code-block:: + + { + "execution_plans" : [ { + "stack_name" : "my_hello_world_stack", + "stack_id" : "f689e9fd-97e7-4185-bd8a-7d5f708d45d7", + "execution_plan_id" : "b3e7e15f-f96b-4190-94f4-bb8120f8c4dc", + "execution_plan_name" : "my_third_execution_plan", + "description" : "my third execution plan", + "status" : "AVAILABLE", + "create_time" : "2023-05-15T15:39:25Z" + }, { + "stack_name" : "my_hello_world_stack", + "stack_id" : "f689e9fd-97e7-4185-bd8a-7d5f708d45d7", + "execution_plan_id" : "3ca87537-8d5c-4c9d-9292-d19068aaacbb", + "execution_plan_name" : "my_second_execution_plan", + "description" : "my second execution plan", + "status" : "APPLIED", + "create_time" : "2023-05-15T15:32:45Z" + }, { + "stack_name" : "my_hello_world_stack", + "stack_id" : "f689e9fd-97e7-4185-bd8a-7d5f708d45d7", + "execution_plan_id" : "8c1fb31d-9eec-4ce3-a4e6-fd07059cec83", + "execution_plan_name" : "my_first_execution_plan", + "description" : "my first execution plan", + "status" : "CREATION_FAILED", + "status_message" : "Failed to init workflow due to bad template. Error: Invalid variable name A name must start with a letter or underscore and may contain only letters, digits, underscores, and dashes.", + "create_time" : "2023-05-15T12:23:38Z" + } ] + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Execution plans listed. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The stack does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/execution_plans/obtaining_execution_plan_metadata.rst b/api-ref/source/resource_formation_service/execution_plans/obtaining_execution_plan_metadata.rst new file mode 100644 index 0000000..a7cdda3 --- /dev/null +++ b/api-ref/source/resource_formation_service/execution_plans/obtaining_execution_plan_metadata.rst @@ -0,0 +1,442 @@ +:original_name: GetExecutionPlanMetadata.html + +.. _GetExecutionPlanMetadata: + +Obtaining Execution Plan Metadata +================================= + +Function +-------- + +GetExecutionPlanMetadata + +This API obtains the metadata of a specified execution plan, including the ID and name of the stack and the ID, name, description, creation time, execution time, and status of the execution plan. + +You can obtain details by referring to GetExecutionPlanMetadataResponseBody. + +To obtain the details of an execution plan, call GetExecutionPlan. + +URI +--- + +GET /v1/{project_id}/stacks/{stack_name}/execution-plans/{execution_plan_name}/metadata + +.. table:: **Table 1** Path Parameters + + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=====================+=================+=================+========================================================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_name | Yes | String | An execution plan name is unique within its domain (domain_id), region, project (project_id), and stack (stack_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+============================================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_id | No | String | Unique execution plan ID. | + | | | | | + | | | | A UUID is generated by RFS when an execution plan is created. | + | | | | | + | | | | Execution plan names are unique at one specific time, so you can create an execution plan named HelloWorld and another execution plan with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the execution plan they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each execution plan has a unique ID that does not change with updates. If the execution_plan_id value differs from the current execution plan ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===========================================================================================================================+=============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | stack_id | String | Unique stack ID. | + | | | | + | | | It is a UUID generated by RFS when a stack is created. | + | | | | + | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | + | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | + | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_id | String | Unique execution plan ID. | + | | | | + | | | A UUID is generated by RFS when an execution plan is created. | + | | | | + | | | Execution plan names are unique at one specific time, so you can create an execution plan named HelloWorld and another execution plan with the same name after deleting the first one. | + | | | | + | | | For parallel development, team members may want to ensure that they are operating the execution plan they created, not one with the same name created by other members after deleting the previous one. | + | | | | + | | | To avoid this mismatch, check the ID, since RFS ensures each execution plan has a unique ID that does not change with updates. If the execution_plan_id value differs from the current execution plan ID, 400 is returned. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_name | String | An execution plan name is unique within its domain (domain_id), region, project (project_id), and stack (stack_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | String | Execution plan description. It is used to identify your own execution plans. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_structure | Array of :ref:`VarsStructure ` objects | HCL variable structure. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | + | | | - var_structure allows string variables. | + | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | - vars_structure only supports string variables. To use variables of other types, you need to convert them in HCL reference. Alternatively, you can use vars_uri and vars_body, which support various types and complex structures supported by HCL. | + | | | - If vars_structure is too large, you can use vars_uri. | + | | | - Note: vars_structure cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to set the encryption field. | + | | | | + | | | Array Length: **0 - 100** | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_uri_content | String | File content corresponding to vars_uri. | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_body | String | Content of the HCL variable file. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | + | | | - The vars_body uses the tfvars format of HCL. You can submit the content in the .tfvars file to the vars_body. | + | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | - If vars_body is too large, you can use vars_uri. | + | | | - If the content in vars is simple strings, you can use var_structure. | + | | | - vars_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to use vars_structure and set the encryption field for transmission. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **51200** | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status | String | Status of an execution plan. \* CREATION_IN_PROGRESS indicates that creation is in progress. \* CREATION_FAILED indicates the creation failed. You can obtain the error information summary from status_message. \* AVAILABLE indicates the creation completed. You can call ApplyExecutionPlan to apply the plan. \* APPLY_IN_PROGRESS indicates the execution is in progress. You can call GetStackMetadata to query the stack status, or call ListStackEvents to obtain the stack events generated during the execution. \* APPLIED indicates the plan has been applied. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **CREATION_IN_PROGRESS** | + | | | - **CREATION_FAILED** | + | | | - **AVAILABLE** | + | | | - **APPLY_IN_PROGRESS** | + | | | - **APPLIED** | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status_message | String | If an execution plan is in a CREATION_FAILED status, a brief error information summary is displayed for debugging. | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | create_time | String | Creation time of an execution plan. The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | apply_time | String | Time of applying an execution plan. The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | summary | :ref:`ExecutionPlanSummary ` object | Summary of the execution plan result may include: | + | | | | + | | | - Number of resources to be added. | + | | | - Number of resources to be updated. | + | | | - Number of resources to be deleted. \*\* Note:``**`\` | + | | | - The summary is returned only when the execution plan is in the following states: *AVAILABLE*, *APPLY_IN_PROGRESS* or *APPLIED*. | + | | | - The summary also includes resource changes brought by a drift. The resource status drift is caused by inconsistency between the resource status recorded in the stack and the remote resource status. | + +-----------------------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _getexecutionplanmetadata__en-us_topic_0000001709318818_response_varsstructure: + +.. table:: **Table 5** VarsStructure + + +-----------------------+-------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=========================================================================================================================+====================================================================================================================================================================================================+ + | var_key | String | Variable name. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **32** | + +-----------------------+-------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | var_value | String | Variable value. | + | | | | + | | | Variables must be in the form of a string. If a parameter is a number, it must also be in the form of a string, for example, '10'. | + | | | | + | | | For different types or complex structures, you can use vars_uri or vars_body. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **2048** | + +-----------------------+-------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | encryption | :ref:`EncryptionStructure ` object | If a transferred var_value has been encrypted, you can declare this variable to require RFS to decrypt the var_value before using it. Currently, only KMS encryption and decryption are supported. | + +-----------------------+-------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _getexecutionplanmetadata__en-us_topic_0000001709318818_response_encryptionstructure: + +.. table:: **Table 6** EncryptionStructure + + +-----------------------+-----------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===========================================================================================================+===================================================================================================================================================================================================================================================================================================================================================+ + | kms | :ref:`KmsStructure ` object | If an assigned var_value is encrypted by KMS, related encryption information can be transferred. RFS will help you decrypt the var_value by KMS. | + | | | | + | | | **Note:** | + | | | | + | | | - The agency you specify for RFS should have the operation permissions on the specified key ID. | + | | | - KMS provides a quota for free trial every month. If the quota is exceeded, you will be billed for KMS. The fee is not billed by RFS. | + | | | - KMS encryption only indicates that RFS uses ciphertext for storage and transmission. However, RFS still uses plaintext in stack-events. If you want RFS to use ciphertext in logs, you can declare sensitive in templates. For more information about sensitive, refer to https://learn.hashicorp.com/tutorials/terraform/sensitive-variables. | + +-----------------------+-----------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _getexecutionplanmetadata__en-us_topic_0000001709318818_response_kmsstructure: + +.. table:: **Table 7** KmsStructure + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=================================================================================================+ + | id | String | KMS key ID is used by RFS during decryption. Generally, the key ID is that used for encryption. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------+ + | cipher_text | String | Ciphertext of data encryption key. | + | | | | + | | | Minimum: **2** | + | | | | + | | | Maximum: **2048** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------+ + +.. _getexecutionplanmetadata__en-us_topic_0000001709318818_response_executionplansummary: + +.. table:: **Table 8** ExecutionPlanSummary + + =============== ======= ============================= + Parameter Type Description + =============== ======= ============================= + resource_add Integer Number of new resources. + resource_update Integer Number of updated resources. + resource_delete Integer Number of deleted resources. + resource_import Integer Number of imported resources. + =============== ======= ============================= + +**Status code: 400** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 12** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 13** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 14** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Obtain the metadata of a specified execution plan. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan/metadata + +- Obtain the metadata of a specified execution plan, with a stack ID and an execution plan ID provided to check whether they match the current stack and execution plan. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan/metadata?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2&execution_plan_id=fb5e781e-a27d-46e2-9954-242753857a9f + +Example Responses +----------------- + +**Status code: 200** + +Execution plan metadata obtained. + +.. code-block:: + + { + "stack_id" : "f689e9fd-97e7-4185-bd8a-7d5f708d45d7", + "stack_name" : "my_hello_world_stack", + "execution_plan_id" : "ebc0979a-c617-4382-9147-57fc83a634aa", + "execution_plan_name" : "my_first_execution_plan", + "status" : "APPLIED", + "apply_time" : "2023-05-17T11:56:40Z", + "create_time" : "2023-05-16T03:37:24Z", + "summary" : { + "resource_add" : 2 + } + } + +Status Codes +------------ + ++-----------------------------------+---------------------------------------------------------+ +| Status Code | Description | ++===================================+=========================================================+ +| 200 | Execution plan metadata obtained. | ++-----------------------------------+---------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+---------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+---------------------------------------------------------+ +| 403 | The user does not have the permission to call this API. | ++-----------------------------------+---------------------------------------------------------+ +| 404 | #. The execution plan does not exist. | +| | #. The stack does not exist. | ++-----------------------------------+---------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+---------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+---------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/execution_plans/obtaining_execution_plans.rst b/api-ref/source/resource_formation_service/execution_plans/obtaining_execution_plans.rst new file mode 100644 index 0000000..7e1813e --- /dev/null +++ b/api-ref/source/resource_formation_service/execution_plans/obtaining_execution_plans.rst @@ -0,0 +1,489 @@ +:original_name: GetExecutionPlan.html + +.. _GetExecutionPlan: + +Obtaining Execution Plans +========================= + +Function +-------- + +GetExecutionPlan + +This API obtains the details (items) of a specified execution plan. By calling this API, you can check the changes of resources in a stack once the specified execution plan is applied. + +If the execution plan is in a CREATION_IN_PROGRESS or CREATION_FAILED state, the list of execution plan items will not be returned. + +URI +--- + +GET /v1/{project_id}/stacks/{stack_name}/execution-plans/{execution_plan_name} + +.. table:: **Table 1** Path Parameters + + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=====================+=================+=================+========================================================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_name | Yes | String | An execution plan name is unique within its domain (domain_id), region, project (project_id), and stack (stack_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +---------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+============================================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | execution_plan_id | No | String | Unique execution plan ID. | + | | | | | + | | | | A UUID is generated by RFS when an execution plan is created. | + | | | | | + | | | | Execution plan names are unique at one specific time, so you can create an execution plan named HelloWorld and another execution plan with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the execution plan they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each execution plan has a unique ID that does not change with updates. If the execution_plan_id value differs from the current execution plan ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +----------------------+-----------------------------------------------------------------------------------------------------------------------+---------------------------------+ + | Parameter | Type | Description | + +======================+=======================================================================================================================+=================================+ + | execution_plan_items | Array of :ref:`ExecutionPlanItem ` objects | Item list of an execution plan. | + +----------------------+-----------------------------------------------------------------------------------------------------------------------+---------------------------------+ + +.. _getexecutionplan__en-us_topic_0000001757158485_response_executionplanitem: + +.. table:: **Table 5** ExecutionPlanItem + + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=========================================================================================================================================+====================================================================================================================================================================================================================================================================================================+ + | resource_type | String | Resource type. | + | | | | + | | | For example, in the following HCL template, the value of resource_type is opentelekomcloud_vpc_v1. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, the value of resource_type is opentelekomcloud_vpc_v1. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc" | + | | | } | + | | | } | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource_name | String | Resource name. The default value is the logical name of a resource. | + | | | | + | | | For example, in the following HCL template, the value of resource_name is my_hello_world_vpc. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, the value of resource_name is my_hello_world_vpc. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc" | + | | | } | + | | | } | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | index | String | Resource index. If count or for_each is used in a template, index is returned. If index appears, resource_name and index can be used to identify a resource. If count is used in a template, index is a number starting from 0. | + | | | | + | | | For example, in the following HCL template, opentelekomcloud_vpc_v1.my_hello_world_vpc[0] and opentelekomcloud_vpc_v1.my_hello_world_vpc[1] identify two resources. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | count = 2 | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, opentelekomcloud_vpc_v1.my_hello_world_vpc[0] and opentelekomcloud_vpc_v1.my_hello_world_vpc[1] identify two resources. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc", | + | | | "count": 2 | + | | | } | + | | | } | + | | | } | + | | | } | + | | | | + | | | If for_each is used in a template, index is a user-defined string. For example, in the following HCL template, opentelekomcloud_vpc_v1.my_hello_world_vpc["vpc1"] and opentelekomcloud_vpc_v1.my_hello_world_vpc["vpc2"] identify two resources. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | for_each = { | + | | | "vpc1" = "test_vpc" | + | | | "vpc2" = "test_vpc" | + | | | } | + | | | name = each.value | + | | | } | + | | | | + | | | In a JSON template, opentelekomcloud_vpc_v1.my_hello_world_vpc["vpc1"] and opentelekomcloud_vpc_v1.my_hello_world_vpc["vpc2"] identify two resources. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "for_each": { | + | | | "vpc1": "test_vpc", | + | | | "vpc2": "test_vpc" | + | | | } | + | | | "name": "${each.value}" | + | | | } | + | | | } | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | action | String | Resource change types may include: | + | | | | + | | | - ADD: adds a resource. | + | | | - ADD_THEN_DELETE: creates a resource and then deletes the old one. It is returned by resources those cannot be updated. | + | | | - DELETE: deletes a resource. | + | | | - DELETE_THEN_ADD: deletes the old resource and then creates a new one. It is returned by resources those cannot be updated. | + | | | - UPDATE: updates a resource. | + | | | | + | | | - NO_OPERATION: only changes the dependencies of a resource. The resource itself is not changed. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **ADD** | + | | | - **ADD_THEN_DELETE** | + | | | - **DELETE** | + | | | - **DELETE_THEN_ADD** | + | | | - **UPDATE** | + | | | - **NO_OPERATION** | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | action_reason | String | Reason for triggering project changes, for example, a user updates a template or a resource is deleted remotely. | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | provider_name | String | Name of the provider to which the project belongs. | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | mode | String | Resource modes may include: | + | | | | + | | | - DATA: a type of resource that can run and obtain server data during template parsing. Operations on infrastructure components are not involved. | + | | | - RESOURCE: important infrastructure objects defined by services and managed by templates. It can be physical resources or logical resources. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **DATA** | + | | | - **RESOURCE** | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | drifted | Boolean | Whether the change of the current resource is caused by deviation. | + | | | | + | | | Deviation, also called drift. After a resource is created by RFS but not modified by RFS, for example, modified manually or by SDK, the resource configuration will be inconsistent with that recorded by RFS. This inconsistency is called deviation. | + | | | | + | | | After a resource deviation occurs: | + | | | | + | | | - If you attempt to create an execution plan, a message is displayed, indicating that a deviation occurs. | + | | | - If you directly deploy an execution plan, the deviation may be overwritten. RFS only ensures that the resources are configured as written in the template. | + | | | | + | | | The resource deviation types may include: | + | | | | + | | | - Modification of resource location attribute: mostly happens after a resource is deleted and then a new one is created. The new resource is not the same one before modification. In this case, RFS considers that the original resource has been deleted and attempts to create a new resource. | + | | | - Modification of resource common attribute: RFS can still find the resource, but it will attempt to rectify the deviation during the next deployment to make the resource configuration be consistent with that written in the template. | + | | | | + | | | **Note: It is advised to use RFS to maintain and update resources created on RFS to ensure that resource configurations are consistent with those written in your templates. Avoid modifying resources manually except for emergencies.** | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | imported | Boolean | Whether changes to the current resource are imported. | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource_id | String | Unique resource physical ID. It is generated by the resource provider, cloud service provider, or other service providers during resource deployment. | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | attributes | Array of :ref:`ExecutionPlanDiffAttribute ` objects | Execution plan item attributes that are changed. If no attribute is changed, this value is an empty list. | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _getexecutionplan__en-us_topic_0000001757158485_response_executionplandiffattribute: + +.. table:: **Table 6** ExecutionPlanDiffAttribute + + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===========================================================================================================================================================================+ + | name | String | Name of the to-be-modified parameter of the current resource. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | previous_value | String | Original value of the modified parameter of the current resource. | + | | | | + | | | During resource creation, previous_value is empty. | + | | | | + | | | If a deviation occurs in a remote resource, the resource returns two ExecutionPlanItems, the drifted values of which are true and false, respectively. | + | | | | + | | | - The previous_value whose drifted is true indicates the original resource attribute and status in the stack. | + | | | - The previous_value whose drifted is false indicates the resource attribute and status returned by the remote resource after the provider requests the remote resource. | + | | | | + | | | If no deviation occurs in a remote resource, only one ExecutionPlanItem whose drifted is false is returned. | + | | | | + | | | - The previous_value whose drifted is false indicates the original resource attribute and status in the stack. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | target_value | String | Target value of the modified parameter of the current resource. | + | | | | + | | | During resource deletion, target_value is empty. | + | | | | + | | | If a deviation occurs in a remote resource, the resource returns two ExecutionPlanItems, the drifted values of which are true and false, respectively. | + | | | | + | | | - The target_value whose drifted is true indicates the resource attribute and status returned by the remote resource after the provider requests the remote resource. | + | | | - The target_value whose drifted is false indicates the resource attribute and status updated based on your template. | + | | | | + | | | If no deviation occurs in a remote resource, only one ExecutionPlanItem whose drifted is false is returned. | + | | | | + | | | - The target_value whose drifted is false indicates the resource attribute and status updated based on your template. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 12** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Obtain the details (items) of a specified execution plan. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan + +- Obtain the details (items) of a specified execution plan, with a stack ID and an execution plan ID provided to check whether they match the current stack and execution plan. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2&execution_plan_id=fb5e781e-a27d-46e2-9954-242753857a9f + +Example Responses +----------------- + +**Status code: 200** + +Execution plan details obtained. + +.. code-block:: + + { + "execution_plan_items" : [{ + "resource_type" : "opentelekomcloud_vpc_v1", + "resource_name" : "vpc", + "action" : "ADD", + "attributes" : [ { + "name" : "cidr", + "target_value" : "172.16.0.0/16" + }, { + "name" : "description" + }, { + "name" : "id", + "target_value" : "(will be generated after apply)" + }, { + "name" : "name", + "target_value" : "test_name" + }, { + "name" : "secondary_cidr" + }, { + "name" : "tags" + }], + "mode" : "RESOURCE", + "provider_name" : "opentelekomcloud/provider/opentelekomcloud" + } ] + } + +Status Codes +------------ + ++-----------------------------------+---------------------------------------------------------+ +| Status Code | Description | ++===================================+=========================================================+ +| 200 | Execution plan details obtained. | ++-----------------------------------+---------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+---------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+---------------------------------------------------------+ +| 403 | The user does not have the permission to call this API. | ++-----------------------------------+---------------------------------------------------------+ +| 404 | #. The stack does not exist. | +| | #. The execution plan does not exist. | ++-----------------------------------+---------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+---------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+---------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/index.rst b/api-ref/source/resource_formation_service/index.rst new file mode 100644 index 0000000..406afdf --- /dev/null +++ b/api-ref/source/resource_formation_service/index.rst @@ -0,0 +1,76 @@ +:original_name: rfs_02_0000.html + +.. _rfs_02_0000: + +Resource Formation Service +========================== + +Status Code +----------- + +After sending a request, you will receive a response, including a status code, response header, and response body. + +A status code is a group of digits, ranging from 1xx to 5xx. It indicates the status of a request. For more information, see :ref:`Status Code `. + +For example, if status code **201** is returned for calling the API used to obtain a user token, the request is successful. + +Response Header +--------------- + +Similar to a request, a response also has a header, for example, **Content-Type**. + +:ref:`Figure 1 ` shows the response header fields for the API used to obtain a user token. The **x-subject-token** header field is the desired user token. This token can then be used to authenticate the calling of other APIs. + +.. _rfs_02_0000__en-us_topic_0000001515721149_en-us_topic_0170155703_fig4865141011511: + +.. figure:: /_static/images/en-us_image_0000001893402017.png + :alt: **Figure 1** Header fields of the response to the request for obtaining a user token + + **Figure 1** Header fields of the response to the request for obtaining a user token + +(Optional) Response Body +------------------------ + +The body of a response is often returned in structured format as specified in the **Content-Type** header field. The response body transfers content except the response header. + +The following is part of the response body for the API used to obtain a user token. + +:: + + { + "token": { + "expires_at": "2019-02-13T06:52:13.855000Z", + "methods": [ + "password" + ], + "catalog": [ + { + "endpoints": [ + { + "region_id": "az-01", + ...... + +If an error occurs during API calling, an error code and a message will be displayed. The following shows an error response body. + +:: + + { + "error_msg": "The format of message is error", + "error_code": "AS.0001" + } + +In the response body, **error_code** is an error code, and **error_msg** provides information about the error. + +- :ref:`Stacks ` +- :ref:`Execution Plans ` +- :ref:`Template Analysis ` +- :ref:`Template Management ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + stacks/index + execution_plans/index + template_analysis/index + template_management/index diff --git a/api-ref/source/resource_formation_service/stacks/continuing_to_deploy_a_stack.rst b/api-ref/source/resource_formation_service/stacks/continuing_to_deploy_a_stack.rst new file mode 100644 index 0000000..77cf8f6 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/continuing_to_deploy_a_stack.rst @@ -0,0 +1,269 @@ +:original_name: ContinueDeployStack.html + +.. _ContinueDeployStack: + +Continuing to Deploy a Stack +============================ + +Function +-------- + +ContinueDeployStack + +This API continues to deploy an existing stack. + +- If a stack is in the DEPLOYMENT_FAILED status, it can continue to be deployed, then 202 and the deploymentId will return. If it is in other statuses, deployment is not allowed and the corresponding error code is returned. +- If the deployment still fails, you can obtain the logs by calling the ListStackEvents API. Fix the problems and call this API again to continue to deploy. + +URI +--- + +POST /v1/{project_id}/stacks/{stack_name}/continuations + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 202** + +.. table:: **Table 4** Response body parameters + + ============= ====== ============== + Parameter Type Description + ============= ====== ============== + deployment_id String Deployment ID. + ============= ====== ============== + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 409** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Continue to deploy a stack. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/continuations + +- Continue to deploy a stack and check whether the stack ID matches the current stack. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/continuations + + { + "stack_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3" + } + +Example Responses +----------------- + +**Status code: 202** + +The request is accepted and processed asynchronously. + +.. code-block:: + + { + "deployment_id" : "3fef5d3e-27b6-44e8-9769-1d7262bd9430" + } + +Status Codes +------------ + ++-----------------------------------+----------------------------------------------------------------------------+ +| Status Code | Description | ++===================================+============================================================================+ +| 202 | The request is accepted and processed asynchronously. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 403 | #. Invalid stack status, cannot continue to be deployed. | +| | #. The user does not have the permission to call this API. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 404 | The stack does not exist. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 409 | Request conflict. Another request is being processed on the current stack. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+----------------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/stacks/continuing_to_roll_back_a_stack.rst b/api-ref/source/resource_formation_service/stacks/continuing_to_roll_back_a_stack.rst new file mode 100644 index 0000000..1800c2a --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/continuing_to_roll_back_a_stack.rst @@ -0,0 +1,271 @@ +:original_name: ContinueRollbackStack.html + +.. _ContinueRollbackStack: + +Continuing to Roll Back a Stack +=============================== + +Function +-------- + +ContinueRollbackStack + +This API continues to roll back an existing stack. + +If auto-rollback is enabled for a stack, the stack automatically rolls back when its deployment fails. However, the auto-rollback may fail. You can troubleshoot the issues based on the error message and then call ContinueRollbackStack to trigger the continuation of the rollback, which means retrying rollback. + +- If the stack is in the *ROLLBACK_FAILED* state, indicating that it can be rolled back, 202 and deploymentId are returned. Otherwise, the stack cannot be rolled back and a response error code is returned. +- The continuation of rollback may also fail. If it fails, you can obtain the corresponding logs by calling ListStackEvents and troubleshoot the issues. Once the issues are resolved, you can call ContinueRollbackStack again to trigger the rollback. + +URI +--- + +POST /v1/{project_id}/stacks/{stack_name}/rollbacks + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 202** + +.. table:: **Table 4** Response body parameters + + +---------------+--------+-----------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===============+========+=================================================================================================================+ + | deployment_id | String | Unique ID of the deployment triggered by continuing rollback. The ID is generated by RFS and is usually a UUID. | + +---------------+--------+-----------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 409** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Continue to roll back a stack. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/rollbacks + +- Continue to roll back a stack and check whether the provided stack ID matches the current stack. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/rollbacks + + { + "stack_id" : "8592967b-18b0-421b-b6c1-079c9ded3931" + } + +Example Responses +----------------- + +**Status code: 202** + +The request is accepted. The stack continues to roll back. + +.. code-block:: + + { + "deployment_id" : "8592967b-18b0-421b-b6c1-079c9ded3931" + } + +Status Codes +------------ + ++-----------------------------------+----------------------------------------------------------------------------+ +| Status Code | Description | ++===================================+============================================================================+ +| 202 | The request is accepted. The stack continues to roll back. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 403 | #. Invalid stack status. | +| | #. The user does not have the permission to call this API. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 404 | The stack does not exist. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 409 | Request conflict. Another request is being processed on the current stack. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+----------------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/stacks/creating_a_stack.rst b/api-ref/source/resource_formation_service/stacks/creating_a_stack.rst new file mode 100644 index 0000000..b20ae5c --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/creating_a_stack.rst @@ -0,0 +1,442 @@ +:original_name: CreateStack.html + +.. _CreateStack: + +Creating a Stack +================ + +Function +-------- + +CreateStack creates a stack. + +- If template, vars, and other information are not included in the request, an empty stack will be created and stack_id will be returned. +- If template, vars, and other information are included in the request, a stack will be created and stack_id and deployment_id will be returned. + +URI +--- + +POST /v1/{project_id}/stacks + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============================+=================+=========================================================================================================+===============================================================================================================================================================================================================================================================================================================================================================================================================+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agencies | No | Array of :ref:`Agency ` objects | Agency information. | + | | | | | + | | | | RFS uses an agency only in requests that involve resource operations, such as creating a stack (triggering deployment), creating an execution plan, deploying a stack, and deleting a stack. In addition, the agency applies only to resource operations performed by the provider bound to the agency. If the permissions provided by the agency are insufficient, operations on related resources may fail. | + | | | | | + | | | | Array Length: **0 - 10** | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | No | String | Description of a stack. It can be used by customers to identify their own stacks. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **1024** | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | enable_deletion_protection | No | Boolean | Deletion protection flag. If this variable is not assigned, the default value is false, indicating that deletion protection is disabled by default. (After deletion protection is enabled, stacks cannot be deleted.) | + | | | | | + | | | | *In the UpdateStack API, if this variable is not assigned in the RequestBody, the deletion protection attribute of the stack will not be updated.* | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | enable_auto_rollback | No | Boolean | Auto-rollback flag. If this variable is not assigned, the default value is false, indicating that auto-rollback is disabled by default. (After auto-rollback is enabled, if the deployment fails, the stack is automatically rolled back and returns to the previous stable status.) | + | | | | | + | | | | *In the UpdateStack API, if this variable is not assigned in the RequestBody, the auto-rollback attribute of the stack will not be updated.* *This property is mutually exclusive with the import resources using templates feature, which does not allow the deployment of templates containing imported resources if the stack's auto-rollback is set to true.* | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | template_body | No | String | HCL template. It describes the target status of a resource. RFS compares the differences between the statuses of this template and the current remote resources. | + | | | | | + | | | | Either template_body or template_uri must be specified but they both cannot be specified together. | + | | | | | + | | | | *In the CreateStack API, template_body and template_uri are optional.* | + | | | | | + | | | | **Note:** | + | | | | | + | | | | - template_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding template_body in plaintext. If the information is sensitive, you are advised to use vars_structure to change the information to a variable and set the encryption field to enable encrypted transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **51200** | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | template_uri | No | String | OBS address of an HCL template. The template describes the target status of a resource. RFS compares the differences between the statuses of this template and the current remote resources. | + | | | | | + | | | | The OBS address allows mutual access to regions of the same type. Regions are classified into universal regions and dedicated regions. A universal region provides universal cloud services for common tenants. A dedicated region provides specific services for specific tenants. | + | | | | | + | | | | The corresponding file must be a tf file or a zip package. | + | | | | | + | | | | A pure .tf file must end with .tf or .tf.json and comply with the HCL syntax. | + | | | | | + | | | | Currently, only the .zip package is supported. The file name extension must be .zip. The decompressed file cannot contain the .tfvars file and must be encoded in UTF8 format (the .tf.json file cannot contain the BOM header). The .zip package supports a maximum of 100 subfiles. | + | | | | | + | | | | Either template_body or template_uri must be specified. | + | | | | | + | | | | *In the CreateStack API, template_body and template_uri are optional.* | + | | | | | + | | | | **Note**: | + | | | | | + | | | | - The template file corresponds to template_uri cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the content of the template file in plaintext. If the information is sensitive, you are advised to use vars_structure to change the information to a variable and set the encryption field to enable encrypted transmission. | + | | | | - If the template file corresponding to template_uri is of zip type, the length of the internal file or folder name must not exceed 255 bytes, the length of the deepest path must not exceed 2048 bytes, and the size of the zip package must not exceed 1MB. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_body | No | String | Content of the HCL variable file. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | - The vars_body uses the tfvars format of HCL. You can submit the content in the .tfvars file to the vars_body. | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - If vars_body is too large, you can use vars_uri. | + | | | | - If the content in vars is simple strings, you can use var_structure. | + | | | | - vars_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to use vars_structure and set the encryption field for transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **51200** | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_structure | No | Array of :ref:`VarsStructure ` objects | HCL variable structure. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | - var_structure allows string variables. | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - vars_structure only supports string variables. To use variables of other types, you need to convert them in HCL reference. Alternatively, you can use vars_uri and vars_body, which support various types and complex structures supported by HCL. | + | | | | - If vars_structure is too large, you can use vars_uri. | + | | | | - Note: vars_structure cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to set the encryption field. | + | | | | | + | | | | Array Length: **0 - 100** | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_uri | No | String | OBS address of the HCL variable file. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | The OBS address allows mutual access to regions of the same type. Regions are classified into universal regions and dedicated regions. A universal region provides universal cloud services for common tenants. A dedicated region provides specific services for specific tenants. | + | | | | | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - The content in vars_uri uses the tfvars format of HCL. You can save the content in .tfvars to a file, upload the file to OBS, and transfer the pre-signed URL of OBS to vars_uri. | + | | | | - vars_uri cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to use vars_structure and set the encryption field for transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +----------------------------+-----------------+---------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _createstack__en-us_topic_0000001709318802_request_agency: + +.. table:: **Table 4** Agency + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=============================================================================================================================================================================================================================================================================================+ + | provider_name | Yes | String | Name of the provider used by a user. If the provider_name value given by the user is duplicate, 400 is returned. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agency_name | No | String | IAM agency used by the corresponding provider. RFS uses this agency to access and create resources of the provider. Either agency_name or agency_urn must be specified. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agency_urn | No | String | Agency URN When a user defines an agency, either agency_name or agency_urn must be specified. You are advised to set agency_urn when using the trust agency. agency_name can only receive common agency names. If agency_name is set to a trust agency name, template deployment will fail. | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _createstack__en-us_topic_0000001709318802_request_varsstructure: + +.. table:: **Table 5** VarsStructure + + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+===========================================================================================================+====================================================================================================================================================================================================+ + | var_key | Yes | String | Variable name. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **32** | + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | var_value | Yes | String | Variable value. | + | | | | | + | | | | Variables must be in the form of a string. If a parameter is a number, it must also be in the form of a string, for example, '10'. | + | | | | | + | | | | For different types or complex structures, you can use vars_uri or vars_body. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | encryption | No | :ref:`EncryptionStructure ` object | If a transferred var_value has been encrypted, you can declare this variable to require RFS to decrypt the var_value before using it. Currently, only KMS encryption and decryption are supported. | + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _createstack__en-us_topic_0000001709318802_request_encryptionstructure: + +.. table:: **Table 6** EncryptionStructure + + +-----------------+-----------------+---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=============================================================================================+===================================================================================================================================================================================================================================================================================================================================================+ + | kms | Yes | :ref:`KmsStructure ` object | If an assigned var_value is encrypted by KMS, related encryption information can be transferred. RFS will help you decrypt the var_value by KMS. | + | | | | | + | | | | **Note:** | + | | | | | + | | | | - The agency you specify for RFS should have the operation permissions on the specified key ID. | + | | | | - KMS provides a quota for free trial every month. If the quota is exceeded, you will be billed for KMS. The fee is not billed by RFS. | + | | | | - KMS encryption only indicates that RFS uses ciphertext for storage and transmission. However, RFS still uses plaintext in stack-events. If you want RFS to use ciphertext in logs, you can declare sensitive in templates. For more information about sensitive, refer to https://learn.hashicorp.com/tutorials/terraform/sensitive-variables. | + +-----------------+-----------------+---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _createstack__en-us_topic_0000001709318802_request_kmsstructure: + +.. table:: **Table 7** KmsStructure + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================+ + | id | Yes | String | KMS key ID is used by RFS during decryption. Generally, the key ID is that used for encryption. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + | cipher_text | Yes | String | Ciphertext of data encryption key. | + | | | | | + | | | | Minimum: **2** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 201** + +.. table:: **Table 8** Response body parameters + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=================================================================================================================================================================================================+ + | stack_id | String | Unique stack ID. | + | | | | + | | | It is a UUID generated by RFS when a stack is created. | + | | | | + | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | + | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | + | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | deployment_id | String | Deployment ID. | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 409** + +.. table:: **Table 12** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 13** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 14** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Create a stack. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks + + { + "stack_name" : "my_first_stack", + "description" : "my first stack" + } + +- Create a stack using an agency. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks + + { + "stack_name" : "my_second_stack", + "description" : "my second stack", + "agencies" : [ { + "provider_name" : "opentelekomcloud", + "agency_name" : "my_agency" + } ] + } + +- Create and deploy a stack using a template. + + .. code-block:: + + { + "stack_name" : "my_fourth_stack", + "template_body" : "terraform {\n required_providers {\n opentelekomcloud = {\n source = \"opentelekomcloud/provider/opentelekomcloud\"\n version = \"1.35.13\"\n }\n }\n}\nprovider \"opentelekomcloud\"{\n insecure = true\n cloud = \"{cloud_name}\"\n region = \"{region}\"\n endpoints = {\n iam = \"{iam_endpoint}\",\n }\n}\n\nresource \"opentelekomcloud_vpc_v1\" \"vpc\" {\n cidr = \"172.16.0.0/16\"\n name = \"my_vpc\"\n}", + "description" : "my third stack" + } + +Example Responses +----------------- + +**Status code: 201** + +Stack created. + +.. code-block:: + + { + "stack_id" : "ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2" + } + +Status Codes +------------ + ++-----------------------------------+--------------------------------------------------------------------+ +| Status Code | Description | ++===================================+====================================================================+ +| 201 | Stack created. | ++-----------------------------------+--------------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+--------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+--------------------------------------------------------------------+ +| 403 | #. The user does not have the permission to call this API. | +| | #. Too many stacks. | ++-----------------------------------+--------------------------------------------------------------------+ +| 409 | Request conflict. Another stack with the same name already exists. | ++-----------------------------------+--------------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+--------------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+--------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/stacks/deleting_a_stack.rst b/api-ref/source/resource_formation_service/stacks/deleting_a_stack.rst new file mode 100644 index 0000000..22f51d0 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/deleting_a_stack.rst @@ -0,0 +1,237 @@ +:original_name: DeleteStack.html + +.. _DeleteStack: + +Deleting a Stack +================ + +Function +-------- + +DeleteStack + +This API deletes a stack. \**Exercise caution when performing this operation. Deleting a stack will delete all data related to the stack by default, such as execution plans, stack events, stack outputs, and resources. \*\* + +- This API triggers the deletion of a stack, and all data of the stack is deleted for eventual consistency. You can call GetStackMetadata or ListStacks to track the deletion. +- A stack cannot be deleted if it is in a non-final state (ending with *IN_PROGRESS*). The states may include: + + - DEPLOYMENT_IN_PROGRESS + - DELETION_IN_PROGRESS + - ROLLBACK_IN_PROGRESS + +- If deletion protection is enabled for a stack, the stack cannot be deleted. You can call GetStackMetadata and view the *enable_deletion_protection* field in the returned result to check whether deletion protection is enabled. You can call UpdateStack to disable deletion protection. +- If the deletion of a stack fails, you can correct the current template based on the information in StackEvents, and delete the stack again after completing deployment. Deployment can be triggered in either of the following ways: + + - Call CreateExecutionPlan to create an execution plan. After the execution plan is created, call ApplyExecutionPlan to deploy the stack. + - Call DeployStack to deploy the stack. + +URI +--- + +DELETE /v1/{project_id}/stacks/{stack_name} + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Delete a specified stack. + + .. code-block:: text + + DELETE https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack + +- Delete a specified stack and check whether the provided stack ID matches the current stack. + + .. code-block:: text + + DELETE https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2 + +Example Responses +----------------- + +None + +Status Codes +------------ + ++-----------------------------------+------------------------------------------------------------+ +| Status Code | Description | ++===================================+============================================================+ +| 202 | The request is accepted and processed asynchronously. | ++-----------------------------------+------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+------------------------------------------------------------+ +| 403 | #. Invalid stack status. | +| | #. The user does not have the permission to call this API. | ++-----------------------------------+------------------------------------------------------------+ +| 404 | The stack does not exist. | ++-----------------------------------+------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/stacks/deleting_a_stack_with_conditions.rst b/api-ref/source/resource_formation_service/stacks/deleting_a_stack_with_conditions.rst new file mode 100644 index 0000000..52e4a28 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/deleting_a_stack_with_conditions.rst @@ -0,0 +1,245 @@ +:original_name: DeleteStackEnhanced.html + +.. _DeleteStackEnhanced: + +Deleting a Stack with Conditions +================================ + +Function +-------- + +This API deletes a stack with conditions. You can determine whether to retain resources. \**Exercise caution when performing this operation. Deleting a stack will delete all data related to the stack by default, such as execution plans, stack events, stack outputs, and resources. \*\* \**If you want to retain stack resources when deleting the stack, specify *retain_all_resources* in the request. + +- This API triggers the deletion of a stack, and all data of the stack is deleted for eventual consistency. You can call GetStackMetadata or ListStacks to track the deletion. After the deletion is complete, the deleted stack will not be returned in the preceding API. +- A stack cannot be deleted if it is in a non-final state (ending with *IN_PROGRESS*). The states may include: +- DEPLOYMENT_IN_PROGRESS +- DELETION_IN_PROGRESS +- ROLLBACK_IN_PROGRESS +- If deletion protection is enabled for a stack, the stack cannot be deleted. You can call GetStackMetadata and view the *enable_deletion_protection* field in the returned result to check whether deletion protection is enabled. You can call UpdateStack to disable deletion protection. +- If the deletion of a stack fails, you can correct the current template based on the information in StackEvents, and delete the stack again after completing deployment. Deployment can be triggered in either of the following ways: +- Call CreateExecutionPlan to create an execution plan. After the execution plan is created, call ApplyExecutionPlan to deploy the stack. +- Call DeployStack to deploy the stack. + +URI +--- + +POST /v1/{project_id}/stacks/{stack_name}/deletion + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +======================+=================+=================+============================================================================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | retain_all_resources | No | Boolean | Indicates whether to retain resources when deleting a stack. If this variable is not assigned, the default value **false** is used, indicating that resources are not retained by default. (After a stack is deleted, resources in the stack are deleted.) | + | | | | | + | | | | - In the DeleteStackEnhanced API, if this variable is not assigned in the RequestBody, the resources in the stack are not retained during deletion. \* | + +----------------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Delete a stack without retaining resources. + + .. code-block:: text + + POST https://{endpoint}/v1/{project_id}/stacks/{stack_name}/deletion + + { + "stack_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3" + } + +- Delete a stack while retaining resources. + + .. code-block:: text + + POST https://{endpoint}/v1/{project_id}/stacks/{stack_name}/deletion + + { + "stack_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3", + "retain_all_resources" : true + } + +Example Responses +----------------- + +None + +Status Codes +------------ + ++-----------------------------------+------------------------------------------------------------+ +| Status Code | Description | ++===================================+============================================================+ +| 202 | The request is accepted and processed asynchronously. | ++-----------------------------------+------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+------------------------------------------------------------+ +| 403 | #. Invalid stack status. | +| | #. The user does not have the permission to call this API. | ++-----------------------------------+------------------------------------------------------------+ +| 404 | The stack does not exist. | ++-----------------------------------+------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/stacks/deploying_a_stack.rst b/api-ref/source/resource_formation_service/stacks/deploying_a_stack.rst new file mode 100644 index 0000000..20eda96 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/deploying_a_stack.rst @@ -0,0 +1,400 @@ +:original_name: DeployStack.html + +.. _DeployStack: + +Deploying a Stack +================= + +Function +-------- + +DeployStack + +This API deploys a created stack. + +- You can call this API to update the template and parameters and trigger a new deployment. +- This API triggers deployment directly. If users want to confirm deployment details in advance, create an execution plan by calling CreateExecutionPlan and get the execution plan by calling GetExecutionPlan. +- Assign all the templates and vars and then call this API. +- If automatic rollback is enabled, the stack rolls back once its deployment fails. If automatic rollback is disabled, the stack stays in the current status when the deployment fails. + +URI +--- + +POST /v1/{project_id}/stacks/{stack_name}/deployments + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------------+-----------------+---------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=========================================================================================================+=======================================================================================================================================================================================================================================================================================================================================================================+ + | template_body | No | String | HCL template. It describes the target status of a resource. RFS compares the differences between the statuses of this template and the current remote resources. | + | | | | | + | | | | Either template_body or template_uri must be specified but they both cannot be specified together. | + | | | | | + | | | | *In the CreateStack API, template_body and template_uri are optional.* | + | | | | | + | | | | **Note:** | + | | | | | + | | | | - template_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding template_body in plaintext. If the information is sensitive, you are advised to use vars_structure to change the information to a variable and set the encryption field to enable encrypted transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **51200** | + +-----------------+-----------------+---------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | template_uri | No | String | OBS address of an HCL template. The template describes the target status of a resource. RFS compares the differences between the statuses of this template and the current remote resources. | + | | | | | + | | | | The OBS address allows mutual access to regions of the same type. Regions are classified into universal regions and dedicated regions. A universal region provides universal cloud services for common tenants. A dedicated region provides specific services for specific tenants. | + | | | | | + | | | | The corresponding file must be a tf file or a zip package. | + | | | | | + | | | | A pure .tf file must end with .tf or .tf.json and comply with the HCL syntax. | + | | | | | + | | | | Currently, only the .zip package is supported. The file name extension must be .zip. The decompressed file cannot contain the .tfvars file and must be encoded in UTF8 format (the .tf.json file cannot contain the BOM header). The .zip package supports a maximum of 100 subfiles. | + | | | | | + | | | | Either template_body or template_uri must be specified. | + | | | | | + | | | | *In the CreateStack API, template_body and template_uri are optional.* | + | | | | | + | | | | **Note**: | + | | | | | + | | | | - The template file corresponds to template_uri cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the content of the template file in plaintext. If the information is sensitive, you are advised to use vars_structure to change the information to a variable and set the encryption field to enable encrypted transmission. | + | | | | - If the template file corresponding to template_uri is of zip type, the length of the internal file or folder name must not exceed 255 bytes, the length of the deepest path must not exceed 2048 bytes, and the size of the zip package must not exceed 1MB. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+---------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_structure | No | Array of :ref:`VarsStructure ` objects | HCL variable structure. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | - var_structure allows string variables. | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - vars_structure only supports string variables. To use variables of other types, you need to convert them in HCL reference. Alternatively, you can use vars_uri and vars_body, which support various types and complex structures supported by HCL. | + | | | | - If vars_structure is too large, you can use vars_uri. | + | | | | - Note: vars_structure cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to set the encryption field. | + | | | | | + | | | | Array Length: **0 - 100** | + +-----------------+-----------------+---------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_body | No | String | Content of the HCL variable file. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | - The vars_body uses the tfvars format of HCL. You can submit the content in the .tfvars file to the vars_body. | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - If vars_body is too large, you can use vars_uri. | + | | | | - If the content in vars is simple strings, you can use var_structure. | + | | | | - vars_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to use vars_structure and set the encryption field for transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **51200** | + +-----------------+-----------------+---------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_uri | No | String | OBS address of the HCL variable file. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | | + | | | | The OBS address allows mutual access to regions of the same type. Regions are classified into universal regions and dedicated regions. A universal region provides universal cloud services for common tenants. A dedicated region provides specific services for specific tenants. | + | | | | | + | | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | | - The content in vars_uri uses the tfvars format of HCL. You can save the content in .tfvars to a file, upload the file to OBS, and transfer the pre-signed URL of OBS to vars_uri. | + | | | | - vars_uri cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to use vars_structure and set the encryption field for transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+---------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+---------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _deploystack__en-us_topic_0000001757158477_request_varsstructure: + +.. table:: **Table 4** VarsStructure + + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+===========================================================================================================+====================================================================================================================================================================================================+ + | var_key | Yes | String | Variable name. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **32** | + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | var_value | Yes | String | Variable value. | + | | | | | + | | | | Variables must be in the form of a string. If a parameter is a number, it must also be in the form of a string, for example, '10'. | + | | | | | + | | | | For different types or complex structures, you can use vars_uri or vars_body. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | encryption | No | :ref:`EncryptionStructure ` object | If a transferred var_value has been encrypted, you can declare this variable to require RFS to decrypt the var_value before using it. Currently, only KMS encryption and decryption are supported. | + +-----------------+-----------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _deploystack__en-us_topic_0000001757158477_request_encryptionstructure: + +.. table:: **Table 5** EncryptionStructure + + +-----------------+-----------------+---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=============================================================================================+===================================================================================================================================================================================================================================================================================================================================================+ + | kms | Yes | :ref:`KmsStructure ` object | If an assigned var_value is encrypted by KMS, related encryption information can be transferred. RFS will help you decrypt the var_value by KMS. | + | | | | | + | | | | **Note:** | + | | | | | + | | | | - The agency you specify for RFS should have the operation permissions on the specified key ID. | + | | | | - KMS provides a quota for free trial every month. If the quota is exceeded, you will be billed for KMS. The fee is not billed by RFS. | + | | | | - KMS encryption only indicates that RFS uses ciphertext for storage and transmission. However, RFS still uses plaintext in stack-events. If you want RFS to use ciphertext in logs, you can declare sensitive in templates. For more information about sensitive, refer to https://learn.hashicorp.com/tutorials/terraform/sensitive-variables. | + +-----------------+-----------------+---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _deploystack__en-us_topic_0000001757158477_request_kmsstructure: + +.. table:: **Table 6** KmsStructure + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================+ + | id | Yes | String | KMS key ID is used by RFS during decryption. Generally, the key ID is that used for encryption. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + | cipher_text | Yes | String | Ciphertext of data encryption key. | + | | | | | + | | | | Minimum: **2** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 202** + +.. table:: **Table 7** Response body parameters + + ============= ====== ============== + Parameter Type Description + ============= ====== ============== + deployment_id String Deployment ID. + ============= ====== ============== + +**Status code: 400** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 409** + +.. table:: **Table 12** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 13** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 14** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +Transfer template and variable information using OBS signed URL. + +.. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/deployments + + { + "template_uri" : "https://my_hello_world_bucket.{region}.otc.t-systems.com/my-hello-world-template.tf", + "vars_uri" : "https://my_hello_world_bucket.{region}.otc.t-systems.com/my-hello-world-vars.tfvars", + "stack_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3" + } + +Example Responses +----------------- + +**Status code: 202** + +The request is accepted and processed asynchronously. + +.. code-block:: + + { + "deployment_id" : "3fef5d3e-27b6-44e8-9769-1d7262bd9430" + } + +Status Codes +------------ + ++-----------------------------------+----------------------------------------------------------------------------+ +| Status Code | Description | ++===================================+============================================================================+ +| 202 | The request is accepted and processed asynchronously. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 403 | #. Invalid stack status. | +| | #. The user does not have the permission to call this API. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 404 | The stack does not exist. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 409 | Request conflict. Another request is being processed on the current stack. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+----------------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/stacks/index.rst b/api-ref/source/resource_formation_service/stacks/index.rst new file mode 100644 index 0000000..cb042e5 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/index.rst @@ -0,0 +1,38 @@ +:original_name: topic_300000000.html + +.. _topic_300000000: + +Stacks +====== + +- :ref:`Listing Events of a Stack ` +- :ref:`Obtaining Stack Metadata ` +- :ref:`Listing Stacks ` +- :ref:`Creating a Stack ` +- :ref:`Obtaining a Stack Template ` +- :ref:`Listing Stack Resources ` +- :ref:`Listing Stack Outputs ` +- :ref:`Continuing to Deploy a Stack ` +- :ref:`Deploying a Stack ` +- :ref:`Deleting a Stack ` +- :ref:`Updating a Stack ` +- :ref:`Deleting a Stack with Conditions ` +- :ref:`Continuing to Roll Back a Stack ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + listing_events_of_a_stack + obtaining_stack_metadata + listing_stacks + creating_a_stack + obtaining_a_stack_template + listing_stack_resources + listing_stack_outputs + continuing_to_deploy_a_stack + deploying_a_stack + deleting_a_stack + updating_a_stack + deleting_a_stack_with_conditions + continuing_to_roll_back_a_stack diff --git a/api-ref/source/resource_formation_service/stacks/listing_events_of_a_stack.rst b/api-ref/source/resource_formation_service/stacks/listing_events_of_a_stack.rst new file mode 100644 index 0000000..8b2c1fe --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/listing_events_of_a_stack.rst @@ -0,0 +1,459 @@ +:original_name: ListStackEvents.html + +.. _ListStackEvents: + +Listing Events of a Stack +========================= + +Function +-------- + +ListStackEvents + +This API lists all deployment events of a stack. + +- If deployment_id is assigned, deployment_id is used as a query criterion and the stack events corresponding to a specific deployment are returned. If no deployment_id is assigned, all of the stack events are returned. +- If the deployment corresponding to the given deployment_id does not exist, 404 is returned. +- You can use filter to query stack events by specifying the event type (event_type), resource type (resource_type), and resource name (resource_name). +- You can use field to set the attributes to be returned. The attribute event type (event_type) cannot be configured and it is returned by default. The available attributes are elapsed time (elapsed_seconds), event message (event_message), resource ID key (resource_id_key), resource ID value (resource_id_value), resource key (resource_key), resource type (resource_type), resource name (resource_name), and timestamp (timestamp). +- The returned events are arranged in descending order of time. + +URI +--- + +GET /v1/{project_id}/stacks/{stack_name}/events + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=============================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | deployment_id | No | String | Unique deployment ID. It is a UUID generated by RFS when deployment or rollback is triggered. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | filter | No | String | Filter criteria. | + | | | | | + | | | | - The AND operator is defined using a comma (,). | + | | | | - The OR operator is defined using a vertical bar (|). The OR operator has a higher priority than the AND operator. | + | | | | - Parentheses are not supported. | + | | | | - Only equal signs (==) are supported as the filter operator. | + | | | | - Filter parameter names and values can contain only letters, digits, and underscores (_). Semicolons (;) are not allowed in filter criteria. If semicolons are used, the filter criteria will be ignored. | + | | | | - A filter parameter can be related to only one AND condition. Multiple OR conditions in an AND condition can be related to only one filter parameter. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **512** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | field | No | String | Specified attribute name. | + | | | | | + | | | | - The attribute name can contain only letters, digits, and underscores (_). | + | | | | - Multiple attribute names are separated by commas (,). | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +--------------+--------------------------------------------------------------------------------------------------------+-----------------------+ + | Parameter | Type | Description | + +==============+========================================================================================================+=======================+ + | stack_events | Array of :ref:`StackEvent ` objects | List of stack events. | + +--------------+--------------------------------------------------------------------------------------------------------+-----------------------+ + +.. _liststackevents__en-us_topic_0000001757158469_response_stackevent: + +.. table:: **Table 5** StackEvent + + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+====================================================================================================================================================================================================================================================================================+ + | resource_type | String | Resource type. | + | | | | + | | | For example, in the following HCL template, the value of resource_type is opentelekomcloud_vpc_v1. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, the value of resource_type is opentelekomcloud_vpc_v1. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc" | + | | | } | + | | | } | + | | | } | + | | | } | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource_name | String | Resource name. The default value is the logical name of a resource. | + | | | | + | | | For example, in the following HCL template, the value of resource_name is my_hello_world_vpc. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, the value of resource_name is my_hello_world_vpc. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc" | + | | | } | + | | | } | + | | | } | + | | | } | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource_id_key | String | Name of resource ID. If a resource is not created, resource_id_key is not returned. The ID is defined by a provider. Different providers may comply with different naming rules. For details about the naming rules, contact provider developers or read provider's documentation. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource_id_value | String | Resource ID value. If a resource is not created, resource_id_value is not returned. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource_key | String | Resource key. If count or for_each is used in a template, resource_key will be returned. | + | | | | + | | | If count is used in a template, resource_key is a number starting from 0. | + | | | | + | | | For example, in the following HCL template, if the count is 2, two resources will be generated and the value of resource_key is 0 and 1. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | count = 2 | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, the value of resource_key is 0 and 1. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc", | + | | | "count": 2 | + | | | } | + | | | } | + | | | } | + | | | } | + | | | | + | | | If for_each is used in a template, resource_key is a user-defined string. In the following HCL template, the value of resource_key is vpc1 and vpc2. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | for_each = { | + | | | "vpc1" = "test_vpc" | + | | | "vpc2" = "test_vpc" | + | | | } | + | | | name = each.value | + | | | } | + | | | | + | | | In the following JSON template, the value of resource_key is vpc1 and vpc2. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "for_each": { | + | | | "vpc1": "test_vpc", | + | | | "vpc2": "test_vpc" | + | | | } | + | | | "name": "${each.value}" | + | | | } | + | | | } | + | | | } | + | | | } | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | time | String | Occurrence time of an event. The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | event_type | String | Event types may include: | + | | | | + | | | - LOG: records status information, such as the current status and target status. | + | | | - ERROR: records failure information. | + | | | - DRIFT: records resource deviation information. | + | | | | + | | | - SUMMARY: records summary of resource change results. | + | | | - CREATION_IN_PROGRESS: The event is being created. | + | | | - CREATION_FAILED: Failed to create the event. | + | | | - CREATION_COMPLETE: Event created. | + | | | - DELETION_IN_PROGRESS: The event is being deleted. | + | | | - DELETION_FAILED: Delete event failed. | + | | | - DELETION_COMPLETE: Event deleted. | + | | | - UPDATE_IN_PROGRESS: The event is being updated. The update is not a replacement. In the case of a replacement update, a replacement event is created and then the old event is deleted. | + | | | - UPDATE_FAILED: Update event failed. The update is not a replacement. In the case of a replacement update, a replacement event is created and then the old event is deleted. | + | | | - UPDATE_COMPLETE: Event updated. The update is not a replacement. In the case of a replacement update, a replacement event is created and then the old event is deleted. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **LOG** | + | | | - **ERROR** | + | | | - **DRIFT** | + | | | - **SUMMARY** | + | | | - **CREATION_IN_PROGRESS** | + | | | - **CREATION_FAILED** | + | | | - **CREATION_COMPLETE** | + | | | - **DELETION_IN_PROGRESS** | + | | | - **DELETION_FAILED** | + | | | - **DELETION_COMPLETE** | + | | | - **UPDATE_IN_PROGRESS** | + | | | - **UPDATE_FAILED** | + | | | - **UPDATE_COMPLETE** | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | event_message | String | Details about a stack event. | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | elapsed_seconds | Integer | Event execution duration (Unit: seconds) | + +-----------------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Use filter to obtain stack events with the specified event_type and resource_name. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/events?filter=event_type==LOG,resource_name==my_hello_world_resource + +- Use field to select the following returned attributes: resource_key, resource_name, and event_type. The event_type attribute is automatically selected even if you do not select it. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/events?field=resource_key,resource_name + +- Obtain stack events of a specified deployment using deployment_id. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/events?deployment_id=81edbb3e-00d9-42fd-94c8-59c7525d0f28 + +Example Responses +----------------- + +**Status code: 200** + +Stack events listed. + +.. code-block:: + + { + "stack_events" : [ { + "event_message" : "Apply required resource success. ", + "event_type" : "LOG", + "time" : "2023-05-17T11:56:47Z" + }, { + "event_message" : "Apply complete! Resources: 1 added, 0 changed, 0 destroyed.", + "event_type" : "SUMMARY", + "time" : "2023-05-17T11:56:45Z" + }, { + "resource_type" : "opentelekomcloud_vpc_v1", + "resource_name" : "vpc", + "elapsed_seconds" : 8, + "event_message" : "opentelekomcloud_vpc_v1.vpc: Creation complete after 8s [id=38d617da-9b7f-4550-9ff7-d0e271dd4735]", + "event_type" : "CREATION_COMPLETE", + "resource_id_key" : "id", + "resource_id_value" : "38d617da-9b7f-4550-9ff7-d0e271dd4735", + "time" : "2023-05-17T11:56:40Z" + }, { + "resource_type" : "opentelekomcloud_vpc_v1", + "resource_name" : "vpc", + "event_message" : "opentelekomcloud_vpc_v1.vpc: Creating...", + "event_type" : "CREATION_IN_PROGRESS", + "time" : "2023-05-17T11:56:32Z" + }, { + "event_message" : "Creating required resource now", + "event_type" : "LOG", + "time" : "2023-05-17T11:56:31Z" + } ] + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Stack events listed. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The stack or the specified deployment does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/stacks/listing_stack_outputs.rst b/api-ref/source/resource_formation_service/stacks/listing_stack_outputs.rst new file mode 100644 index 0000000..2a80b56 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/listing_stack_outputs.rst @@ -0,0 +1,300 @@ +:original_name: ListStackOutputs.html + +.. _ListStackOutputs: + +Listing Stack Outputs +===================== + +Function +-------- + +ListStackOutputs + +This API lists all outputs of a stack. + +The stack output is the return information generated after the deployment of the output statement block defined in the template is complete. After the deployment is complete, you can call this API to obtain the specific output information. + +If the stack is in a non-final state (ending with IN_PROGRESS), this API returns empty value. The non-final states may include: + +- DEPLOYMENT_IN_PROGRESS +- DELETION_IN_PROGRESS +- ROLLBACK_IN_PROGRESS + +Output is defined in the HCL syntax. The returned information is similar to the return value programmatically. For details, refer to the HCL documentation. + +URI +--- + +GET /v1/{project_id}/stacks/{stack_name}/outputs + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------+-----------------------------------------------------------------------------------------------------------+--------------------+ + | Parameter | Type | Description | + +===========+===========================================================================================================+====================+ + | outputs | Array of :ref:`StackOutput ` objects | Stack output list. | + +-----------+-----------------------------------------------------------------------------------------------------------+--------------------+ + +.. _liststackoutputs__en-us_topic_0000001757038285_response_stackoutput: + +.. table:: **Table 5** StackOutput + + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=======================================================================================================================================+ + | name | String | Name of a stack output, defined in a template. | + | | | | + | | | For example, in the following HCL template, the value of name is vpc_id. | + | | | | + | | | .. code-block:: | + | | | | + | | | output "vpc_id" { | + | | | value = opentelekomcloud_vpc_v1.my_hello_world_vpc.id | + | | | } | + | | | | + | | | In a JSON template, the value of name is vpc_id. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "output": { | + | | | "vpc_id": [ | + | | | { | + | | | "value": "${opentelekomcloud_vpc_v1.my_hello_world_vpc.id}" | + | | | } | + | | | ] | + | | | } | + | | | } | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | description | String | Description of a stack output, defined in a template. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | type | String | Output type of a stack. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | value | String | Output value of a stack. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | sensitive | Boolean | Whether a stack output is sensitive. This is defined in a template. | + | | | | + | | | If an output is defined as sensitive in a template, the actual value and type of the output will not be returned in the reponse body. | + | | | | + | | | Instead, it will be returned. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- List the stack outputs. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/outputs + +- List the stack outputs and check whether the stack ID matches the current stack. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/outputs?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2 + +Example Responses +----------------- + +**Status code: 200** + +The stack outputs listed. + +.. code-block:: + + { + "outputs" : [ { + "name" : "my_first_vpc", + "sensitive" : true, + "type" : "", + "value" : "", + "description" : "type and value is invisible when sensitive is true." + }, { + "name" : "my_second_vpc", + "type" : "string", + "value" : "\"opentelekomcloud_vpc_v1.my_second_vpc\"", + "description" : "type and value is real when sensitive not set or is false." + } ] + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 The stack outputs listed. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The stack does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/stacks/listing_stack_resources.rst b/api-ref/source/resource_formation_service/stacks/listing_stack_resources.rst new file mode 100644 index 0000000..860cb25 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/listing_stack_resources.rst @@ -0,0 +1,429 @@ +:original_name: ListStackResources.html + +.. _ListStackResources: + +Listing Stack Resources +======================= + +Function +-------- + +ListStackResources + +This API lists the information about all resources managed by a stack. + +When the stack is in a non-final state, only brief information about the resources in the stack is output, including logical_resource_name, logical_resource_type, physical_resource_id, physical_resource_name, and status. When the stack is in the final status, additional detailed information is output. For example, the resource_attributes. + +The non-final states may include: + +- DEPLOYMENT_IN_PROGRESS +- DELETION_IN_PROGRESS +- ROLLBACK_IN_PROGRESS + +URI +--- + +GET /v1/{project_id}/stacks/{stack_name}/resources + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------------+-----------------------------------------------------------------------------------------------------------------+---------------------------------------+ + | Parameter | Type | Description | + +=================+=================================================================================================================+=======================================+ + | stack_resources | Array of :ref:`StackResource ` objects | List of resources managed by a stack. | + +-----------------+-----------------------------------------------------------------------------------------------------------------+---------------------------------------+ + +.. _liststackresources__en-us_topic_0000001709159310_response_stackresource: + +.. table:: **Table 5** StackResource + + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +========================+=========================================================================================================================+======================================================================================================================================================================================================================================================+ + | physical_resource_id | String | Physical ID of a resource, generated by the resource provider, cloud service provider, or other service providers during resource deployment. | + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | physical_resource_name | String | Physical name of the resource, defined by the resource provider, cloud service provider, or other service providers during resource deployment. | + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | logical_resource_name | String | Logical name of the resource, defined in a template. | + | | | | + | | | Logical variables are only used as identifiers of the resource in the template. | + | | | | + | | | For example, in the following HCL template, the value of logical_resource_name is my_hello_world_vpc. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, the value of logical_resource_name is my_hello_world_vpc. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc" | + | | | } | + | | | } | + | | | } | + | | | } | + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | logical_resource_type | String | Resource type. | + | | | | + | | | Logical variables are only used as identifiers of the resource in the template. | + | | | | + | | | For example, in the following HCL template, the value of logical_resource_type is opentelekomcloud_vpc_v1. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, the value of logical_resource_type is opentelekomcloud_vpc_v1. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc" | + | | | } | + | | | } | + | | | } | + | | | } | + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | index_key | String | Resource index. If count or for_each is used in a template, index_key is returned. If index_key appears, logical_resource_name + index_key can be used as an identifier of the resource. | + | | | | + | | | If count is used in a template, index_key is a number starting from 0. | + | | | | + | | | For example, in the following HCL template, you can use opentelekomcloud_vpc_v1.my_hello_world_vpc[0] and opentelekomcloud_vpc_v1.my_hello_world_vpc[1] to identify two resources. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | count = 2 | + | | | name = "test_vpc" | + | | | } | + | | | | + | | | In a JSON template, you can use opentelekomcloud_vpc_v1.my_hello_world_vpc[0] and opentelekomcloud_vpc_v1.my_hello_world_vpc[1] to identify two resources. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "name": "test_vpc", | + | | | "count": 2 | + | | | } | + | | | } | + | | | } | + | | | } | + | | | | + | | | If for_each is used in a template, index_key is a user-defined string. For example, in the following HCL template, opentelekomcloud_vpc_v1.my_hello_world_vpc["vpc1"] and opentelekomcloud_vpc_v1.my_hello_world_vpc["vpc2"] identify two resources. | + | | | | + | | | .. code-block:: | + | | | | + | | | resource "opentelekomcloud_vpc_v1" "my_hello_world_vpc" { | + | | | for_each = { | + | | | "vpc1" = "test_vpc" | + | | | "vpc2" = "test_vpc" | + | | | } | + | | | name = each.value | + | | | } | + | | | | + | | | In a JSON template, opentelekomcloud_vpc_v1.my_hello_world_vpc["vpc1"] and opentelekomcloud_vpc_v1.my_hello_world_vpc["vpc2"] identify two resources. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "resource": { | + | | | "opentelekomcloud_vpc_v1": { | + | | | "my_hello_world_vpc": { | + | | | "for_each": { | + | | | "vpc1": "test_vpc", | + | | | "vpc2": "test_vpc" | + | | | } | + | | | "name": "${each.value}" | + | | | } | + | | | } | + | | | } | + | | | } | + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource_status | String | Status of the resource. | + | | | | + | | | - CREATION_IN_PROGRESS: The resource is being created. | + | | | - CREATION_FAILED: Create resource failed. | + | | | - CREATION_COMPLETE: Resource created. | + | | | - DELETION_IN_PROGRESS: The resource is being deleted. | + | | | - DELETION_FAILED: Delete resource failed. | + | | | - DELETION_COMPLETE: Resource deleted. | + | | | - UPDATE_IN_PROGRESS: The resource is being updated. The update is not a replacement. In the case of a replacement update, a replacement resource is created and then the old resource is deleted. | + | | | - UPDATE_FAILED: Update resource failed. The update is not a replacement. In the case of a replacement update, a replacement resource is created and then the old resource is deleted. | + | | | - UPDATE_COMPLETE: Resource updated. The update is not a replacement. In the case of a replacement update, a replacement resource is created and then the old resource is deleted. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **CREATION_IN_PROGRESS** | + | | | - **CREATION_FAILED** | + | | | - **CREATION_COMPLETE** | + | | | - **DELETION_IN_PROGRESS** | + | | | - **DELETION_FAILED** | + | | | - **DELETION_COMPLETE** | + | | | - **UPDATE_IN_PROGRESS** | + | | | - **UPDATE_FAILED** | + | | | - **UPDATE_COMPLETE** | + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status_message | String | If the resource is in a failure state (ending with FAILED), a summary of the error information is displayed for debugging. | + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource_attributes | Array of :ref:`ResourceAttribute ` objects | Resource attribute list. | + +------------------------+-------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _liststackresources__en-us_topic_0000001709159310_response_resourceattribute: + +.. table:: **Table 6** ResourceAttribute + + ========= ====== ========================= + Parameter Type Description + ========= ====== ========================= + key String Resource attribute key. + value String Resource attribute value. + ========= ====== ========================= + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 12** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- List the stack resources. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/resources + +- List the stack resources and check whether the stack ID matches the current stack. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/resources?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2 + +Example Responses +----------------- + +**Status code: 200** + +Stack resources listed. + +.. code-block:: + + { + "stack_resources" : [ { + "logical_resource_name" : "vpc", + "logical_resource_type" : "opentelekomcloud_vpc_v1", + "physical_resource_id" : "38d617da-9b7f-4550-9ff7-d0e271dd4735", + "physical_resource_name" : "my_vpc", + "resource_attributes" : [ { + "key" : "cidr", + "value" : "172.16.0.0/16" + }, { + "key" : "description", + "value" : "" + }, { + "key" : "id", + "value" : "38d617da-9b7f-4550-9ff7-d0e271dd4735" + }, { + "key" : "name", + "value" : "test_name" + }, { + "key" : "secondary_cidr", + "value" : "null" + }, { + "key" : "tags", + "value" : "null" + }], + "resource_status" : "CREATION_COMPLETE" + } ] + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Stack resources listed. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The stack does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/stacks/listing_stacks.rst b/api-ref/source/resource_formation_service/stacks/listing_stacks.rst new file mode 100644 index 0000000..f0c61d0 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/listing_stacks.rst @@ -0,0 +1,258 @@ +:original_name: ListStacks.html + +.. _ListStacks: + +Listing Stacks +============== + +Function +-------- + +ListStacks + +This API lists all stacks in current region. + +- Stacks are sorted by creation time in descending order so that the stack created latest is displayed at the front. +- Pagination is not supported so all stacks will be returned. +- If no stacks are available, a list of empty value will be returned. + +ListStacks returns only the summary information, ListStacksResponseBody returns details, and GetStackMetadata returns detailed metadata of stacks. + +URI +--- + +GET /v1/{project_id}/stacks + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 3** Response body parameters + + +-----------+-----------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+=========================================================================================+=====================================================================================================================+ + | stacks | Array of :ref:`Stack ` objects | Stack list. Stacks are sorted by creation time in descending order. The one created latest is displayed on the top. | + +-----------+-----------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+ + +.. _liststacks__en-us_topic_0000001757038281_response_stack: + +.. table:: **Table 4** Stack + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | stack_name | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | String | Description of a stack. It can be used by customers to identify their own stacks. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_id | String | Unique stack ID. | + | | | | + | | | It is a UUID generated by RFS when a stack is created. | + | | | | + | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | + | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | + | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status | String | Status of a stack. \* CREATION_COMPLETE indicates an empty stack has been created and no deployment is performed. \* DEPLOYMENT_IN_PROGRESS indicates the stack deployment is in progress. \* DEPLOYMENT_FAILED indicates the deployment fails. You can obtain the error information summary from status_message. To obtain event details, you can call ListStackEvents. \* DEPLOYMENT_COMPLETE indicates the deployment completed. \* ROLLBACK_IN_PROGRESS indicates the deployment failed and the rollback is in progress. \* ROLLBACK_FAILED indicates the rollback failed. You can obtain the error information summary from status_message. To obtain event details, you can call ListStackEvents. \* ROLLBACK_COMPLETE indicates the rollback completed. \* DELETION_IN_PROGRESS indicates the deletion is in progress. \* DELETION_FAILED indicates the deletion failed. You can obtain the error information summary from status_message. To obtain event details, you can call ListStackEvents. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **CREATION_COMPLETE** | + | | | - **DEPLOYMENT_IN_PROGRESS** | + | | | - **DEPLOYMENT_FAILED** | + | | | - **DEPLOYMENT_COMPLETE** | + | | | - **ROLLBACK_IN_PROGRESS** | + | | | - **ROLLBACK_FAILED** | + | | | - **ROLLBACK_COMPLETE** | + | | | - **DELETION_IN_PROGRESS** | + | | | - **DELETION_FAILED** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | create_time | String | Creation time of a stack. The format complies with the RFC 3339 format (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | update_time | String | Update time of a stack (applied to the metadata update and deployment scenarios). The format complies with the RFC 3339 format (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status_message | String | If a stack is in a failure state (ending with FAILED), a brief error information summary is displayed for debugging. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +List stacks. + +.. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks + +Example Responses +----------------- + +**Status code: 200** + +Stacks listed. + +.. code-block:: + + { + "stacks" : [ { + "stack_name" : "my_second_stack", + "description" : "my second stack", + "stack_id" : "4d4f4ece-b291-4c71-8083-bec9b8a44de0", + "status" : "DEPLOYMENT_COMPLETE", + "create_time" : "2023-05-17T07:34:22Z", + "update_time" : "2023-05-17T07:34:44Z" + }, { + "stack_name" : "my_first_stack", + "description" : "my second stack", + "stack_id" : "e830c288-ee34-48c0-ba6b-a0e6f6b48d3e", + "status" : "CREATION_COMPLETE", + "create_time" : "2023-05-17T07:34:06Z", + "update_time" : "2023-05-17T07:34:28Z" + } ] + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Stacks listed. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/stacks/obtaining_a_stack_template.rst b/api-ref/source/resource_formation_service/stacks/obtaining_a_stack_template.rst new file mode 100644 index 0000000..2c7bc35 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/obtaining_a_stack_template.rst @@ -0,0 +1,246 @@ +:original_name: GetStackTemplate.html + +.. _GetStackTemplate: + +Obtaining a Stack Template +========================== + +Function +-------- + +GetStackTemplate + +This API obtains the template used for the current deployment if the stack is in the final state. + +Note: When a stack is in a non-final state (ending with IN_PROGRESS), the stack is in the transition phase. This API obtains the template used for the last deployment of the stack. Only when the stack is in the final state (ending with COMPLETE or FAILED), this API obtains the template used for the current deployment. CREATION_COMPLETE is an exception because there is no template yet and 404 is returned, indicating that the template does not exist. + +The non-final states may include: + +- DEPLOYMENT_IN_PROGRESS +- ROLLBACK_IN_PROGRESS +- DELETION_IN_PROGRESS + +The final states may include: + +- CREATION_COMPLETE (an empty stack has been created) +- DEPLOYMENT_FAILED +- DEPLOYMENT_COMPLETE +- ROLLBACK_FAILED +- ROLLBACK_COMPLETE +- DELETION_FAILED + +If the template is successfully obtained, the template download link (OBS presigned URL, valid for 5 minutes) is returned in temporary redirection mode. Most clients automatically redirect and download the template. If automatic redirection is not performed, refer to the HTTP redirection rule and manually download the template. + +URI +--- + +GET /v1/{project_id}/stacks/{stack_name}/templates + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 307** + +.. table:: **Table 4** Response header parameters + + +-----------+--------+----------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+========+========================================================================================================================================+ + | Location | String | HTTP redirect header. The client can use this header to redirect to a template download link (OBS presigned URL, valid for 5 minutes). | + +-----------+--------+----------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Obtain a stack template. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/templates + +- Obtain a stack template and check whether the stack ID matches the current stack. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/templates?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2 + +Example Responses +----------------- + +None + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +307 Stack template obtained. Temporary redirect. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The stack or template does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/stacks/obtaining_stack_metadata.rst b/api-ref/source/resource_formation_service/stacks/obtaining_stack_metadata.rst new file mode 100644 index 0000000..7461421 --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/obtaining_stack_metadata.rst @@ -0,0 +1,429 @@ +:original_name: GetStackMetadata.html + +.. _GetStackMetadata: + +Obtaining Stack Metadata +======================== + +Function +-------- + +GetStackMetadata + +This API obtains the metadata of a stack, including the stack ID, stack name, stack description, creation time, update time, stack status, and agency. You can obtain details by referring to GetStackMetadataResponseBody. + +If a stack is in a non-final state (The state ends with IN_PROGRESS. Details are shown in the following description.), its metadata is in a transition phase, which may be a state before or after deployment. The metadata of the stack is in a state after deployment only when the stack is in a final state (ending with *COMPLETE* or *FAILED*). + +The non-final states may include: + +- DEPLOYMENT_IN_PROGRESS +- ROLLBACK_IN_PROGRESS +- DELETION_IN_PROGRESS + +The final states may include: + +- CREATION_COMPLETE +- DEPLOYMENT_FAILED +- DEPLOYMENT_COMPLETE +- ROLLBACK_FAILED +- ROLLBACK_COMPLETE +- DELETION_FAILED + +URI +--- + +GET /v1/{project_id}/stacks/{stack_name}/metadata + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================================================================================================================================================+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============================+===============================================================================================================+==========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | stack_id | String | Unique stack ID. | + | | | | + | | | It is a UUID generated by RFS when a stack is created. | + | | | | + | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | + | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | + | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | String | Description of a stack. It can be used by customers to identify their own stacks. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_structure | Array of :ref:`VarsStructure ` objects | HCL variable structure. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | + | | | - var_structure allows string variables. | + | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | - vars_structure only supports string variables. To use variables of other types, you need to convert them in HCL reference. Alternatively, you can use vars_uri and vars_body, which support various types and complex structures supported by HCL. | + | | | - If vars_structure is too large, you can use vars_uri. | + | | | - Note: vars_structure cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to set the encryption field. | + | | | | + | | | Array Length: **0 - 100** | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_body | String | Content of the HCL variable file. Transferring variables is supported by the HCL template. The same template can use different variables for different purposes. | + | | | | + | | | - The vars_body uses the tfvars format of HCL. You can submit the content in the .tfvars file to the vars_body. | + | | | - RFS supports vars_structure, vars_body, and vars_uri. If they declare the same variable, error code 400 will be reported. | + | | | - If vars_body is too large, you can use vars_uri. | + | | | - If the content in vars is simple strings, you can use var_structure. | + | | | - vars_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding vars in plaintext. If the information is sensitive, you are advised to use vars_structure and set the encryption field for transmission. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **51200** | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | enable_deletion_protection | Boolean | Deletion protection flag. If this variable is not assigned, the default value is false, indicating that deletion protection is disabled by default. (After deletion protection is enabled, stacks cannot be deleted.) | + | | | | + | | | *In the UpdateStack API, if this variable is not assigned in the RequestBody, the deletion protection attribute of the stack will not be updated.* | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | enable_auto_rollback | Boolean | Auto-rollback flag. If this variable is not assigned, the default value is false, indicating that auto-rollback is disabled by default. (After auto-rollback is enabled, if the deployment fails, the stack is automatically rolled back and returns to the previous stable status.) | + | | | | + | | | *In the UpdateStack API, if this variable is not assigned in the RequestBody, the auto-rollback attribute of the stack will not be updated.* *This property is mutually exclusive with the import resources using templates feature, which does not allow the deployment of templates containing imported resources if the stack's auto-rollback is set to true.* | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status | String | Status of a stack. \* CREATION_COMPLETE indicates an empty stack has been created and no deployment is performed. \* DEPLOYMENT_IN_PROGRESS indicates the stack deployment is in progress. \* DEPLOYMENT_FAILED indicates the deployment fails. You can obtain the error information summary from status_message. To obtain event details, you can call ListStackEvents. \* DEPLOYMENT_COMPLETE indicates the deployment completed. \* ROLLBACK_IN_PROGRESS indicates the deployment failed and the rollback is in progress. \* ROLLBACK_FAILED indicates the rollback failed. You can obtain the error information summary from status_message. To obtain event details, you can call ListStackEvents. \* ROLLBACK_COMPLETE indicates the rollback completed. \* DELETION_IN_PROGRESS indicates the deletion is in progress. \* DELETION_FAILED indicates the deletion failed. You can obtain the error information summary from status_message. To obtain event details, you can call ListStackEvents. | + | | | | + | | | Enumeration values: | + | | | | + | | | - **CREATION_COMPLETE** | + | | | - **DEPLOYMENT_IN_PROGRESS** | + | | | - **DEPLOYMENT_FAILED** | + | | | - **DEPLOYMENT_COMPLETE** | + | | | - **ROLLBACK_IN_PROGRESS** | + | | | - **ROLLBACK_FAILED** | + | | | - **ROLLBACK_COMPLETE** | + | | | - **DELETION_IN_PROGRESS** | + | | | - **DELETION_FAILED** | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agencies | Array of :ref:`Agency ` objects | Agency information. | + | | | | + | | | RFS uses an agency only in requests that involve resource operations, such as creating a stack (triggering deployment), creating an execution plan, deploying a stack, and deleting a stack. In addition, the agency applies only to resource operations performed by the provider bound to the agency. If the permissions provided by the agency are insufficient, operations on related resources may fail. | + | | | | + | | | Array Length: **0 - 10** | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | status_message | String | If a stack is in a failure state (ending with FAILED), a brief error information summary is displayed for debugging. | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vars_uri_content | String | File content corresponding to vars_uri. | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | create_time | String | Creation time of a stack. The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | update_time | String | Update time of a stack (applied to the metadata update and deployment). The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +----------------------------+---------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _getstackmetadata__en-us_topic_0000001709159306_response_varsstructure: + +.. table:: **Table 5** VarsStructure + + +-----------------------+-----------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=================================================================================================================+====================================================================================================================================================================================================+ + | var_key | String | Variable name. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **32** | + +-----------------------+-----------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | var_value | String | Variable value. | + | | | | + | | | Variables must be in the form of a string. If a parameter is a number, it must also be in the form of a string, for example, '10'. | + | | | | + | | | For different types or complex structures, you can use vars_uri or vars_body. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **2048** | + +-----------------------+-----------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | encryption | :ref:`EncryptionStructure ` object | If a transferred var_value has been encrypted, you can declare this variable to require RFS to decrypt the var_value before using it. Currently, only KMS encryption and decryption are supported. | + +-----------------------+-----------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _getstackmetadata__en-us_topic_0000001709159306_response_encryptionstructure: + +.. table:: **Table 6** EncryptionStructure + + +-----------------------+---------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===================================================================================================+===================================================================================================================================================================================================================================================================================================================================================+ + | kms | :ref:`KmsStructure ` object | If an assigned var_value is encrypted by KMS, related encryption information can be transferred. RFS will help you decrypt the var_value by KMS. | + | | | | + | | | **Note:** | + | | | | + | | | - The agency you specify for RFS should have the operation permissions on the specified key ID. | + | | | - KMS provides a quota for free trial every month. If the quota is exceeded, you will be billed for KMS. The fee is not billed by RFS. | + | | | - KMS encryption only indicates that RFS uses ciphertext for storage and transmission. However, RFS still uses plaintext in stack-events. If you want RFS to use ciphertext in logs, you can declare sensitive in templates. For more information about sensitive, refer to https://learn.hashicorp.com/tutorials/terraform/sensitive-variables. | + +-----------------------+---------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _getstackmetadata__en-us_topic_0000001709159306_response_kmsstructure: + +.. table:: **Table 7** KmsStructure + + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=================================================================================================+ + | id | String | KMS key ID is used by RFS during decryption. Generally, the key ID is that used for encryption. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------+ + | cipher_text | String | Ciphertext of data encryption key. | + | | | | + | | | Minimum: **2** | + | | | | + | | | Maximum: **2048** | + +-----------------------+-----------------------+-------------------------------------------------------------------------------------------------+ + +.. _getstackmetadata__en-us_topic_0000001709159306_response_agency: + +.. table:: **Table 8** Agency + + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=============================================================================================================================================================================================================================================================================================+ + | provider_name | String | Name of the provider used by a user. If the provider_name value given by the user is duplicate, 400 is returned. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agency_name | String | IAM agency used by the corresponding provider. RFS uses this agency to access and create resources of the provider. Either agency_name or agency_urn must be specified. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **64** | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agency_urn | String | Agency URN When a user defines an agency, either agency_name or agency_urn must be specified. You are advised to set agency_urn when using the trust agency. agency_name can only receive common agency names. If agency_name is set to a trust agency name, template deployment will fail. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 12** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 13** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 14** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Obtain stack metadata. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/metadata + +- Obtain stack metadata, with a stack ID provided to check whether the stack ID matches the current stack. + + .. code-block:: text + + GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/metadata?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2 + +Example Responses +----------------- + +**Status code: 200** + +Stack metadata obtained. + +.. code-block:: + + { + "stack_id" : "f689e9fd-97e7-4185-bd8a-7d5f708d45d7", + "stack_name" : "my_hello_world_stack", + "description" : "my hello world stack", + "enable_deletion_protection" : false, + "enable_auto_rollback" : false, + "status" : "DEPLOYMENT_COMPLETE", + "agencies" : [ { + "agency_name" : "rf_admin_trust", + "provider_name" : "opentelekomcloud" + } ], + "create_time" : "2023-03-16T03:28:20Z", + "update_time" : "2023-05-24T08:56:10Z" + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Stack metadata obtained. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The stack does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/stacks/updating_a_stack.rst b/api-ref/source/resource_formation_service/stacks/updating_a_stack.rst new file mode 100644 index 0000000..d11807c --- /dev/null +++ b/api-ref/source/resource_formation_service/stacks/updating_a_stack.rst @@ -0,0 +1,327 @@ +:original_name: UpdateStack.html + +.. _UpdateStack: + +Updating a Stack +================ + +Function +-------- + +This API updates the attributes of a stack based on the information provided by users. One or more of the following attributes can be updated: **description**, **enable_deletion_protection**, **enable_auto_rollback**, and **agencies**. + +This API updates only the fields contained in the information assigned by the user. + +Note: All attributes are overwritten once updated. New parameters will overwrite original attributes of a stack. + +For example, if you want to add agencies, call GetStackMetadata to obtain the original agencies, integrate the information of old and new agencies, and then call UpdateStack. + +- A stack cannot be updated if it is in a non-final state (ending with *IN_PROGRESS*). The states may include: + + - DEPLOYMENT_IN_PROGRESS + - DELETION_IN_PROGRESS + - ROLLBACK_IN_PROGRESS + +- If the value of enable_auto_rollback is changed from false to true, the stack state is determined more strictly. A stack cannot be updated if it is in a state ending with *\_FAILED*. The states may include: + + - DEPLOYMENT_FAILED + - ROLLBACK_FAILED + - DELETION_FAILED + +URI +--- + +PATCH /v1/{project_id}/stacks/{stack_name} + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+============================================================================================================================================================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_name | Yes | String | A stack name is unique within its domain (domain_id), region, and project (project_id). It is case-sensitive and starts with a letter. Only letters, digits, underscores (_), and hyphens (-) are allowed. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +----------------------------+-----------------+-------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +============================+=================+===========================================================================================+===============================================================================================================================================================================================================================================================================================================================================================================================================+ + | description | No | String | Description of a stack. It can be used by customers to identify their own stacks. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **1024** | + +----------------------------+-----------------+-------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | stack_id | No | String | Unique stack ID. | + | | | | | + | | | | It is a UUID generated by RFS when a stack is created. | + | | | | | + | | | | Stack names are unique at one specific time, so you can create a stack named HelloWorld and another stack with the same name after deleting the first one. | + | | | | | + | | | | For parallel development, team members may want to ensure that they are operating the stack they created, not one with the same name created by other members after deleting the previous one. | + | | | | | + | | | | To avoid this mismatch, check the ID, since RFS ensures each stack has a unique ID that does not change with updates. If the stack_id value differs from the current stack ID, 400 is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +----------------------------+-----------------+-------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | enable_deletion_protection | No | Boolean | Deletion protection flag. If this variable is not assigned, the default value is false, indicating that deletion protection is disabled by default. (After deletion protection is enabled, stacks cannot be deleted.) | + | | | | | + | | | | *In the UpdateStack API, if this variable is not assigned in the RequestBody, the deletion protection attribute of the stack will not be updated.* | + +----------------------------+-----------------+-------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | enable_auto_rollback | No | Boolean | Auto-rollback flag. If this variable is not assigned, the default value is false, indicating that auto-rollback is disabled by default. (After auto-rollback is enabled, if the deployment fails, the stack is automatically rolled back and returns to the previous stable status.) | + | | | | | + | | | | *In the UpdateStack API, if this variable is not assigned in the RequestBody, the auto-rollback attribute of the stack will not be updated.* *This property is mutually exclusive with the import resources using templates feature, which does not allow the deployment of templates containing imported resources if the stack's auto-rollback is set to true.* | + +----------------------------+-----------------+-------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agencies | No | Array of :ref:`Agency ` objects | Agency information. | + | | | | | + | | | | RFS uses an agency only in requests that involve resource operations, such as creating a stack (triggering deployment), creating an execution plan, deploying a stack, and deleting a stack. In addition, the agency applies only to resource operations performed by the provider bound to the agency. If the permissions provided by the agency are insufficient, operations on related resources may fail. | + | | | | | + | | | | Array Length: **0 - 10** | + +----------------------------+-----------------+-------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _updatestack__en-us_topic_0000001757038289_request_agency: + +.. table:: **Table 4** Agency + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=============================================================================================================================================================================================================================================================================================+ + | provider_name | Yes | String | Name of the provider used by a user. If the provider_name value given by the user is duplicate, 400 is returned. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agency_name | No | String | IAM agency used by the corresponding provider. RFS uses this agency to access and create resources of the provider. Either agency_name or agency_urn must be specified. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | agency_urn | No | String | Agency URN When a user defines an agency, either agency_name or agency_urn must be specified. You are advised to set agency_urn when using the trust agency. agency_name can only receive common agency names. If agency_name is set to a trust agency name, template deployment will fail. | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 404** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 409** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Update the description of a stack. + + .. code-block:: + + PATCH https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack + + { + "stack_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3", + "description" : "my hello world stack" + } + +- Disable deletion protection and auto-rollback of a stack. + + .. code-block:: + + PATCH https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack + + { + "stack_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3", + "enable_deletion_protection" : false, + "enable_auto_rollback" : false + } + +- Update agency information of a stack. + + .. code-block:: + + PATCH https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack + + { + "stack_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3", + "agencies" : { + "provider_name" : "my_hello_world_provider", + "agency_name" : "my_agency" + } + } + +Example Responses +----------------- + +None + +Status Codes +------------ + ++-----------------------------------+----------------------------------------------------------------------------+ +| Status Code | Description | ++===================================+============================================================================+ +| 204 | Updated. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 400 | Invalid request. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 403 | #. Invalid stack status. | +| | #. The user does not have the permission to call this API. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 404 | The stack does not exist. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 409 | Request conflict. Another request is being processed on the current stack. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-----------------------------------+----------------------------------------------------------------------------+ +| 500 | Internal server error. | ++-----------------------------------+----------------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/template_analysis/index.rst b/api-ref/source/resource_formation_service/template_analysis/index.rst new file mode 100644 index 0000000..9a008ea --- /dev/null +++ b/api-ref/source/resource_formation_service/template_analysis/index.rst @@ -0,0 +1,14 @@ +:original_name: topic_300000002.html + +.. _topic_300000002: + +Template Analysis +================= + +- :ref:`Parsing Template Variables ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + parsing_template_variables diff --git a/api-ref/source/resource_formation_service/template_analysis/parsing_template_variables.rst b/api-ref/source/resource_formation_service/template_analysis/parsing_template_variables.rst new file mode 100644 index 0000000..949c969 --- /dev/null +++ b/api-ref/source/resource_formation_service/template_analysis/parsing_template_variables.rst @@ -0,0 +1,534 @@ +:original_name: ParseTemplateVariables.html + +.. _ParseTemplateVariables: + +Parsing Template Variables +========================== + +Function +-------- + +ParseTemplateVariables + +This API parses variables in your input template and returns all variable blocks in the template. + +- If variables are defined in the input template, 200 and all variables are returned. +- If variables are not defined in the input template, 200 and an empty object are returned. +- If your request or the input template is invalid, 400 is returned. + +URI +--- + +POST /v1/{project_id}/template-analyses/variables + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=================================================================+ + | project_id | Yes | String | A project ID is obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+======================================================================================+ + | Client-Request-Id | Yes | String | A unique request ID is specified by a user to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+--------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================================================================================================================================================================================================================================================================================================================+ + | template_body | No | String | HCL template. It describes the target status of a resource. RFS compares the differences between the statuses of this template and the current remote resources. | + | | | | | + | | | | Either template_body or template_uri must be specified but they both cannot be specified together. | + | | | | | + | | | | *In the CreateStack API, template_body and template_uri are optional.* | + | | | | | + | | | | **Note:** | + | | | | | + | | | | - template_body cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the corresponding template_body in plaintext. If the information is sensitive, you are advised to use vars_structure to change the information to a variable and set the encryption field to enable encrypted transmission. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **51200** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | template_uri | No | String | OBS address of an HCL template. The template describes the target status of a resource. RFS compares the differences between the statuses of this template and the current remote resources. | + | | | | | + | | | | The OBS address allows mutual access to regions of the same type. Regions are classified into universal regions and dedicated regions. A universal region provides universal cloud services for common tenants. A dedicated region provides specific services for specific tenants. | + | | | | | + | | | | The corresponding file must be a tf file or a zip package. | + | | | | | + | | | | A pure .tf file must end with .tf or .tf.json and comply with the HCL syntax. | + | | | | | + | | | | Currently, only the .zip package is supported. The file name extension must be .zip. The decompressed file cannot contain the .tfvars file and must be encoded in UTF8 format (the .tf.json file cannot contain the BOM header). The .zip package supports a maximum of 100 subfiles. | + | | | | | + | | | | Either template_body or template_uri must be specified. | + | | | | | + | | | | *In the CreateStack API, template_body and template_uri are optional.* | + | | | | | + | | | | **Note**: | + | | | | | + | | | | - The template file corresponds to template_uri cannot contain any sensitive information. RFS directly uses, logs, displays, and stores the content of the template file in plaintext. If the information is sensitive, you are advised to use vars_structure to change the information to a variable and set the encryption field to enable encrypted transmission. | + | | | | - If the template file corresponding to template_uri is of zip type, the length of the internal file or folder name must not exceed 255 bytes, the length of the deepest path must not exceed 2048 bytes, and the size of the zip package must not exceed 1MB. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **2048** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ + | Parameter | Type | Description | + +===========+===========================================================================================================================+===================================+ + | variables | Array of :ref:`VariableResponse ` objects | Variables parsed from a template. | + +-----------+---------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ + +.. _parsetemplatevariables__en-us_topic_0000001757038301_response_variableresponse: + +.. table:: **Table 5** VariableResponse + + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===============================================================================================================================================+========================================================================================================================================================================+ + | name | String | Variable name. | + | | | | + | | | For example, in the following HCL template, the value of name is my_hello_world_variable. | + | | | | + | | | .. code-block:: | + | | | | + | | | variable "my_hello_world_variable" { | + | | | type = string | + | | | description = "this is a variable" | + | | | default = "hello world" | + | | | sensitive = false | + | | | nullable = false | + | | | validation { | + | | | condition = length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == "hello" | + | | | error_message = "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | } | + | | | | + | | | In a JSON template, the value of name is my_hello_world_variable. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "variable": { | + | | | "my_hello_world_variable": [ | + | | | { | + | | | "default": "hello world", | + | | | "description": "this is a variable", | + | | | "nullable": false, | + | | | "sensitive": false, | + | | | "type": "string", | + | | | "validation": [ | + | | | { | + | | | "condition": "${length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == \"hello\"}", | + | | | "error_message": "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | ] | + | | | } | + | | | ] | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | type | String | Variable type. | + | | | | + | | | For example, in the following HCL template, the value of type is string. | + | | | | + | | | .. code-block:: | + | | | | + | | | variable "my_hello_world_variable" { | + | | | type = string | + | | | description = "this is a variable" | + | | | default = "hello world" | + | | | sensitive = false | + | | | nullable = false | + | | | validation { | + | | | condition = length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == "hello" | + | | | error_message = "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | } | + | | | | + | | | In a JSON template, the value of type is string. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "variable": { | + | | | "my_hello_world_variable": [ | + | | | { | + | | | "default": "hello world", | + | | | "description": "this is a variable", | + | | | "nullable": false, | + | | | "sensitive": false, | + | | | "type": "string", | + | | | "validation": [ | + | | | { | + | | | "condition": "${length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == \"hello\"}", | + | | | "error_message": "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | ] | + | | | } | + | | | ] | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | description | String | Variable description. | + | | | | + | | | For example, in the following HCL template, the value of description is *this is a variable*. | + | | | | + | | | .. code-block:: | + | | | | + | | | variable "my_hello_world_variable" { | + | | | type = string | + | | | description = "this is a variable" | + | | | default = "hello world" | + | | | sensitive = false | + | | | nullable = false | + | | | validation { | + | | | condition = length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == "hello" | + | | | error_message = "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | } | + | | | | + | | | In a JSON template, the value of description is *this is a variable*. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "variable": { | + | | | "my_hello_world_variable": [ | + | | | { | + | | | "default": "hello world", | + | | | "description": "this is a variable", | + | | | "nullable": false, | + | | | "sensitive": false, | + | | | "type": "string", | + | | | "validation": [ | + | | | { | + | | | "condition": "${length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == \"hello\"}", | + | | | "error_message": "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | ] | + | | | } | + | | | ] | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | default | Object | Default variable value. The type of the return value is the same as that defined in the type field. | + | | | | + | | | For example, for a variable whose type is string, the type of the return value is string; for a variable whose type is number, the type of the return value is number. | + | | | | + | | | For example, in the following HCL template, the value of default is *hello world*. | + | | | | + | | | .. code-block:: | + | | | | + | | | variable "my_hello_world_variable" { | + | | | type = string | + | | | description = "this is a variable" | + | | | default = "hello world" | + | | | sensitive = false | + | | | nullable = false | + | | | validation { | + | | | condition = length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == "hello" | + | | | error_message = "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | } | + | | | | + | | | In a JSON template, the value of default is *hello world*. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "variable": { | + | | | "my_hello_world_variable": [ | + | | | { | + | | | "default": "hello world", | + | | | "description": "this is a variable", | + | | | "nullable": false, | + | | | "sensitive": false, | + | | | "type": "string", | + | | | "validation": [ | + | | | { | + | | | "condition": "${length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == \"hello\"}", | + | | | "error_message": "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | ] | + | | | } | + | | | ] | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | sensitive | Boolean | Whether the variable is sensitive. | + | | | | + | | | If sensitive is not defined in the variable, false is returned by default. | + | | | | + | | | For example, in the following HCL template, the value of sensitive is false. | + | | | | + | | | .. code-block:: | + | | | | + | | | variable "my_hello_world_variable" { | + | | | type = string | + | | | description = "this is a variable" | + | | | default = "hello world" | + | | | sensitive = false | + | | | nullable = false | + | | | validation { | + | | | condition = length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == "hello" | + | | | error_message = "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | } | + | | | | + | | | In a JSON template, the value of sensitive is false. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "variable": { | + | | | "my_hello_world_variable": [ | + | | | { | + | | | "default": "hello world", | + | | | "description": "this is a variable", | + | | | "nullable": false, | + | | | "sensitive": false, | + | | | "type": "string", | + | | | "validation": [ | + | | | { | + | | | "condition": "${length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == \"hello\"}", | + | | | "error_message": "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | ] | + | | | } | + | | | ] | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | nullable | Boolean | Whether the variable can be set to null. | + | | | | + | | | If nullable is not defined in the variable, true is returned by default. | + | | | | + | | | For example, in the following HCL template, the value of nullable is false. | + | | | | + | | | .. code-block:: | + | | | | + | | | variable "my_hello_world_variable" { | + | | | type = string | + | | | description = "this is a variable" | + | | | default = "hello world" | + | | | sensitive = false | + | | | nullable = false | + | | | validation { | + | | | condition = length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == "hello" | + | | | error_message = "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | } | + | | | | + | | | In a JSON template, the value of nullable is false. | + | | | | + | | | .. code-block:: | + | | | | + | | | { | + | | | "variable": { | + | | | "my_hello_world_variable": [ | + | | | { | + | | | "default": "hello world", | + | | | "description": "this is a variable", | + | | | "nullable": false, | + | | | "sensitive": false, | + | | | "type": "string", | + | | | "validation": [ | + | | | { | + | | | "condition": "${length(var.my_hello_world_variable) > 0 && substr(var.my_hello_world_variable, 0, 5) == \"hello\"}", | + | | | "error_message": "my_hello_world_variable should start with 'hello'." | + | | | } | + | | | ] | + | | | } | + | | | ] | + | | | } | + | | | } | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | validations | Array of :ref:`VariableValidationResponse ` objects | Variable verification module. | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _parsetemplatevariables__en-us_topic_0000001757038301_response_variablevalidationresponse: + +.. table:: **Table 6** VariableValidationResponse + + ============= ====== ================================================== + Parameter Type Description + ============= ====== ================================================== + condition String Variable expression. + error_message String Error message generated upon verification failure. + ============= ====== ================================================== + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 401** + +.. table:: **Table 8** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 403** + +.. table:: **Table 9** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | Parameter | Type | Description | + +===============================+=======================+===============================================================+ + | error_code | String | Response code. | + | | | | + | | | Minimum: **11** | + | | | | + | | | Maximum: **11** | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | error_msg | String | Response message. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + | encoded_authorization_message | String | The message contains information about unauthorized requests. | + +-------------------------------+-----------------------+---------------------------------------------------------------+ + +Example Requests +---------------- + +- Parse template variables in the URI. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/template-analyses/variables + + { + "template_uri" : "https://my_hello_world_bucket.{region}.otc.t-systems.com/my_hello_world_template.zip" + } + +- Parse template variables in the request. + + .. code-block:: text + + POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/template-analyses/variables + + { + "template_body" : "terraform {\n required_providers {\n opentelekomcloud = {\n source = \"opentelekomcloud/provider/opentelekomcloud\"\n version = \"1.41.0\"\n }\n }\n}\nprovider \"opentelekomcloud\"{\n insecure = true\n cloud = \"{cloud_name}\"\n region = \"{region}\"\n endpoints = {\n iam = \"{iam_endpoint}\",\n }\n}\n\nvariable \"name\" {\n type = string\n default = \"my_default_vpc\"\n sensitive = true\n nullable = true\n validation {\n condition = length(var.name) > 2 && substr(var.name, 0, 2) == \"my\"\n error_message = \"The name value must be a valid name, starting with my.\"\n }\n}\n\nresource \"opentelekomcloud_vpc_v1\" \"vpc\" {\n cidr = \"172.16.0.0/16\"\n name = var.name\n}" + } + +Example Responses +----------------- + +**Status code: 200** + +Variables parsed. + +.. code-block:: + + { + "variables" : [ { + "default" : "my_default_vpc", + "name" : "name", + "nullable" : true, + "sensitive" : true, + "type" : "string", + "validations" : [ { + "condition" : "${length(var.id) > 2 && substr(var.id, 0, 2) == \"my\"}", + "error_message" : "The id value must be a valid id, starting with my." + } ] + } ] + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Variables parsed. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/template_management/deleting_a_template.rst b/api-ref/source/resource_formation_service/template_management/deleting_a_template.rst new file mode 100644 index 0000000..1292006 --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/deleting_a_template.rst @@ -0,0 +1,169 @@ +:original_name: DeleteTemplate.html + +.. _DeleteTemplate: + +Deleting a Template +=================== + +Function +-------- + +DeleteTemplate + +This API deletes a template and all its versions. \**Exercise caution when performing this operation. Deleting a template will delete all its versions. \*\* + +- template_id is the unique ID of the template. It is a UUID generated by RFS when a template is created. Template names are unique at one specific time, so you can create a template named HelloWorld and another template with the same name after deleting the first one. For parallel development, team members may want to ensure that they are operating the template they created, not one with the same name created by other members after deleting the previous one. To avoid this mismatch, check the ID, since RFS ensures each template has a unique ID that does not change with updates. If the template_id value differs from the current template ID, 400 is returned. + +URI +--- + +DELETE /v1/{project_id}/templates/{template_name} + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================+ + | project_id | Yes | String | Project ID. It can be obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | template_name | Yes | String | Name of the template to be created. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================================================+ + | template_id | No | String | ID of a template. If **template_id** exists, the template service checks whether **template_id** matches **template_name**. If not, **400** is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+====================================================================================================+ + | Client-Request-Id | Yes | String | Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 401** + +.. table:: **Table 5** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 403** + +.. table:: **Table 6** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 404** + +.. table:: **Table 7** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 429** + +.. table:: **Table 8** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +Example Requests +---------------- + +- Delete a template. + + .. code-block:: text + + DELETE https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template + +- Delete a template and check whether the template ID matches the current template. + + .. code-block:: text + + DELETE https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template?template_id=1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3 + +Example Responses +----------------- + +None + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +204 Template deleted. No data returned. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The template does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/template_management/deleting_a_template_version.rst b/api-ref/source/resource_formation_service/template_management/deleting_a_template_version.rst new file mode 100644 index 0000000..58c1433 --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/deleting_a_template_version.rst @@ -0,0 +1,178 @@ +:original_name: DeleteTemplateVersion.html + +.. _DeleteTemplateVersion: + +Deleting a Template Version +=========================== + +Function +-------- + +DeleteTemplateVersion + +This API deletes a template version. + +- template_id is the unique ID of the template. It is a UUID generated by RFS when a template is created. Template names are unique at one specific time, so you can create a template named HelloWorld and another template with the same name after deleting the first one. For parallel development, team members may want to ensure that they are operating the template they created, not one with the same name created by other members after deleting the previous one. To avoid this mismatch, check the ID, since RFS ensures each template has a unique ID that does not change with updates. If the template_id value differs from the current template ID, 400 is returned. +- If a template has only one version, the version cannot be deleted. To delete the only version, call DeleteTemplate. A template must have at least one version. + +**Exercise caution when you perform this operation.** + +URI +--- + +DELETE /v1/{project_id}/templates/{template_name}/versions/{version_id} + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=============================================================================================================================+ + | project_id | Yes | String | Project ID. It can be obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | template_name | Yes | String | Name of the template to be created. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | version_id | Yes | String | Template version ID. It starts with V (uppercase). The number of the ID is incremented by 1 each time a version is created. | + | | | | | + | | | | Minimum: **2** | + | | | | | + | | | | Maximum: **11** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================================================+ + | template_id | No | String | ID of a template. If **template_id** exists, the template service checks whether **template_id** matches **template_name**. If not, **400** is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+====================================================================================================+ + | Client-Request-Id | Yes | String | Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 401** + +.. table:: **Table 5** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 403** + +.. table:: **Table 6** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 404** + +.. table:: **Table 7** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 429** + +.. table:: **Table 8** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +Example Requests +---------------- + +- Delete a specified template version. + + .. code-block:: text + + DELETE https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions/V1 + +- Delete a specified template version and check whether the template ID matches the current template. + + .. code-block:: text + + DELETE https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions/V1?template_id=1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3 + +Example Responses +----------------- + +None + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +204 Template version deleted. No data returned. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The template or template version does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/template_management/index.rst b/api-ref/source/resource_formation_service/template_management/index.rst new file mode 100644 index 0000000..4e284a1 --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/index.rst @@ -0,0 +1,28 @@ +:original_name: topic_300000003.html + +.. _topic_300000003: + +Template Management +=================== + +- :ref:`Listing Templates ` +- :ref:`Deleting a Template ` +- :ref:`Updating Template Metadata ` +- :ref:`Obtaining Template Metadata ` +- :ref:`Listing Template Versions ` +- :ref:`Deleting a Template Version ` +- :ref:`Obtaining Template Version Content ` +- :ref:`Obtaining Template Version Metadata ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + listing_templates + deleting_a_template + updating_template_metadata + obtaining_template_metadata + listing_template_versions + deleting_a_template_version + obtaining_template_version_content + obtaining_template_version_metadata diff --git a/api-ref/source/resource_formation_service/template_management/listing_template_versions.rst b/api-ref/source/resource_formation_service/template_management/listing_template_versions.rst new file mode 100644 index 0000000..96125c9 --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/listing_template_versions.rst @@ -0,0 +1,241 @@ +:original_name: ListTemplateVersions.html + +.. _ListTemplateVersions: + +Listing Template Versions +========================= + +Function +-------- + +ListTemplateVersions + +This API lists all template versions in a template. + +- By default, the template versions are sorted by creation time. The template created latest is displayed on the top. +- Currently, all template versions are returned. Pagination is not supported. +- If there is no template version, an empty list will be returned. +- template_id is the unique ID of the template. It is a UUID generated by RFS when a template is created. Template names are unique at one specific time, so you can create a template named HelloWorld and another template with the same name after deleting the first one. For parallel development, team members may want to ensure that they are operating the template they created, not one with the same name created by other members after deleting the previous one. To avoid this mismatch, check the ID, since RFS ensures each template has a unique ID that does not change with updates. If the template_id value differs from the current template ID, 400 is returned. +- If the template does not exist, 404 is returned. + +ListTemplateVersions returns only summaries of template versions. For details, refer to ListTemplateVersionsResponseBody. To obtain the template version, call ShowTemplateVersionContent. + +URI +--- + +GET /v1/{project_id}/templates/{template_name}/versions + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================+ + | project_id | Yes | String | Project ID. It can be obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | template_name | Yes | String | Name of the template to be created. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================================================+ + | template_id | No | String | ID of a template. If **template_id** exists, the template service checks whether **template_id** matches **template_name**. If not, **400** is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+====================================================================================================+ + | Client-Request-Id | Yes | String | Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------------------+-----------------------------------------------------------------------------------------------------------------------+---------------------------+ + | Parameter | Type | Description | + +=======================+=======================================================================================================================+===========================+ + | versions | Array of :ref:`TemplateVersion ` objects | Template version list. | + | | | | + | | | Array Length: **0 - 100** | + +-----------------------+-----------------------------------------------------------------------------------------------------------------------+---------------------------+ + +.. _listtemplateversions__en-us_topic_0000001757158497_response_templateversion: + +.. table:: **Table 5** TemplateVersion + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==================================================================================================================================+ + | template_id | String | Unique template ID. It is randomly generated by the template service. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | template_name | String | Name of the template to be created. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | version_description | String | Description of a template version. It can be used by users to identify their own template versions. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | create_time | String | Creation time of a template version. The format complies with RFC3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | version_id | String | Template version ID. | + | | | | + | | | Minimum: **2** | + | | | | + | | | Maximum: **11** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 401** + +.. table:: **Table 7** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 403** + +.. table:: **Table 8** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 404** + +.. table:: **Table 9** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 429** + +.. table:: **Table 10** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 500** + +.. table:: **Table 11** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +Example Requests +---------------- + +- List all versions of the current template. + + .. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions + +- List all versions of the current template and check whether the template ID matches the current template. + + .. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions?template_id=1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3 + +Example Responses +----------------- + +**Status code: 200** + +Template versions listed. + +.. code-block:: + + { + "versions" : [ { + "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c8", + "template_name" : "my_first_template", + "version_description" : "Second version of the current template", + "create_time" : "2023-05-09T08:01:24Z", + "version_id" : "V2" + }, { + "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c8", + "template_name" : "my_first_template", + "version_description" : "First version of the current template", + "create_time" : "2023-05-09T08:01:23Z", + "version_id" : "V1" + } ] + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Template versions listed. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The template does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/template_management/listing_templates.rst b/api-ref/source/resource_formation_service/template_management/listing_templates.rst new file mode 100644 index 0000000..5408178 --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/listing_templates.rst @@ -0,0 +1,216 @@ +:original_name: ListTemplates.html + +.. _ListTemplates: + +Listing Templates +================= + +Function +-------- + +ListTemplates + +This API lists all your templates at the current region. + +- By default, the templates are sorted by creation time. The template created latest is displayed on the top. +- Currently, all templates are returned. Pagination is not supported. +- If no template is available, an empty list will be returned. +- To obtain details about template versions, call ListTemplateVersions. + +ListTemplates returns only summaries of templates. You can obtain details about the summaries by referring to ListTemplatesResponseBody. For details about a particular template, call ShowTemplateMetadata. + +URI +--- + +GET /v1/{project_id}/templates + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================+ + | project_id | Yes | String | Project ID. It can be obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+====================================================================================================+ + | Client-Request-Id | Yes | String | Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 3** Response body parameters + + +-----------------------+--------------------------------------------------------------------------------------------------+---------------------------+ + | Parameter | Type | Description | + +=======================+==================================================================================================+===========================+ + | templates | Array of :ref:`Template ` objects | Template list. | + | | | | + | | | Array Length: **0 - 100** | + +-----------------------+--------------------------------------------------------------------------------------------------+---------------------------+ + +.. _listtemplates__en-us_topic_0000001757158493_response_template: + +.. table:: **Table 4** Template + + +----------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +============================+=======================+===========================================================================================================================+ + | template_id | String | Unique template ID. It is randomly generated by the template service. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +----------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | template_name | String | Name of the template to be created. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +----------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | template_description | String | Template description. It can be used by users to identify their own templates. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +----------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | create_time | String | Creation time of a template. The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +----------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | update_time | String | Update time of a template. The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +----------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | latest_version_id | String | ID of the latest template version. | + | | | | + | | | Minimum: **2** | + | | | | + | | | Maximum: **11** | + +----------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | latest_version_description | String | Description of the latest template version. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +----------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 429** + +.. table:: **Table 8** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +Example Requests +---------------- + +List all your templates at the current region. + +.. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates + +Example Responses +----------------- + +**Status code: 200** + +Templates listed. + +.. code-block:: + + { + "templates" : [ { + "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c8", + "template_name" : "my_first_template", + "template_description" : "Template description", + "create_time" : "2023-05-09T08:00:00Z", + "update_time" : "2023-05-09T09:00:00Z", + "latest_version_description" : "Latest version description", + "latest_version_id" : "V10" + }, { + "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c9", + "template_name" : "my_second_template", + "template_description" : "Description", + "create_time" : "2023-05-09T09:00:00Z", + "update_time" : "2023-05-09T10:00:00Z", + "latest_version_description" : "Latest version description", + "latest_version_id" : "V10" + } ] + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Templates listed. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/template_management/obtaining_template_metadata.rst b/api-ref/source/resource_formation_service/template_management/obtaining_template_metadata.rst new file mode 100644 index 0000000..ef3552b --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/obtaining_template_metadata.rst @@ -0,0 +1,213 @@ +:original_name: ShowTemplateMetadata.html + +.. _ShowTemplateMetadata: + +Obtaining Template Metadata +=========================== + +Function +-------- + +ShowTemplateMetadata + +This API obtains the metadata of the current template. + +To obtain details, you can refer to ShowTemplateMetadataResponseBody. To view all versions of a template, call ListTemplateVersions. + +- template_id is the unique ID of the template. It is a UUID generated by RFS when a template is created. Template names are unique at one specific time, so you can create a template named HelloWorld and another template with the same name after deleting the first one. For parallel development, team members may want to ensure that they are operating the template they created, not one with the same name created by other members after deleting the previous one. To avoid this mismatch, check the ID, since RFS ensures each template has a unique ID that does not change with updates. If the template_id value differs from the current template ID, 400 is returned. + +URI +--- + +GET /v1/{project_id}/templates/{template_name}/metadata + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================+ + | project_id | Yes | String | Project ID. It can be obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | template_name | Yes | String | Name of the template to be created. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================================================+ + | template_id | No | String | ID of a template. If **template_id** exists, the template service checks whether **template_id** matches **template_name**. If not, **400** is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+====================================================================================================+ + | Client-Request-Id | Yes | String | Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+===========================================================================================================================+ + | template_id | String | Unique template ID. It is randomly generated by the template service. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | template_name | String | Name of the template to be created. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | template_description | String | Template description. It can be used by users to identify their own templates. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | create_time | String | Creation time of a template. The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + | update_time | String | Update time of a template. The format complies with RFC 3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 404** + +.. table:: **Table 8** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 429** + +.. table:: **Table 9** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 500** + +.. table:: **Table 10** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +Example Requests +---------------- + +- Obtain the metadata of the current template. + + .. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/metadata + +- Obtain the metadata of the current template and check whether the template ID matches the current template. + + .. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/metadata?template_id=1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3 + +Example Responses +----------------- + +**Status code: 200** + +Template metadata obtained. + +.. code-block:: + + { + "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c8", + "template_name" : "my_first_template", + "template_description" : "Template description", + "create_time" : "2023-05-09T08:00:00Z", + "update_time" : "2023-05-09T09:00:00Z" + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Template metadata obtained. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The template does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/template_management/obtaining_template_version_content.rst b/api-ref/source/resource_formation_service/template_management/obtaining_template_version_content.rst new file mode 100644 index 0000000..22844b0 --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/obtaining_template_version_content.rst @@ -0,0 +1,196 @@ +:original_name: ShowTemplateVersionContent.html + +.. _ShowTemplateVersionContent: + +Obtaining Template Version Content +================================== + +Function +-------- + +ShowTemplateVersionContent + +This API obtains the template version content. + +- template_id is the unique ID of the template. It is a UUID generated by RFS when a template is created. Template names are unique at one specific time, so you can create a template named HelloWorld and another template with the same name after deleting the first one. For parallel development, team members may want to ensure that they are operating the template they created, not one with the same name created by other members after deleting the previous one. To avoid this mismatch, check the ID, since RFS ensures each template has a unique ID that does not change with updates. If the template_id value differs from the current template ID, 400 is returned. +- This API returns the download link (a pre-signed URL of OBS, valid for 5 minutes) of the template content through temporary redirection. You can download the template version content from the link. + +ShowTemplateVersionContent returns only the template version content. To obtain the metadata of a template version, call ShowTemplateVersionMetadata. + +URI +--- + +GET /v1/{project_id}/templates/{template_name}/versions/{version_id} + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=============================================================================================================================+ + | project_id | Yes | String | Project ID. It can be obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | template_name | Yes | String | Name of the template to be created. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | version_id | Yes | String | Template version ID. It starts with V (uppercase). The number of the ID is incremented by 1 each time a version is created. | + | | | | | + | | | | Minimum: **2** | + | | | | | + | | | | Maximum: **11** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================================================+ + | template_id | No | String | ID of a template. If **template_id** exists, the template service checks whether **template_id** matches **template_name**. If not, **400** is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+====================================================================================================+ + | Client-Request-Id | Yes | String | Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 307** + +.. table:: **Table 4** Response header parameters + + +-----------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+========+====================================================================================================================================================================================+ + | Location | String | HTTP redirection header. The client can use this header to redirect to a new address. The content is a template download link, which is a pre-signed OBS URL valid for 10 minutes. | + +-----------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 404** + +.. table:: **Table 8** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 429** + +.. table:: **Table 9** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 500** + +.. table:: **Table 10** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +Example Requests +---------------- + +- Obtain a specified version of a specified template. + + .. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions/V1 + +- Obtain a specified version of a specified template and check whether the template ID matches the current template. + + .. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions/V1?template_id=1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3 + +Example Responses +----------------- + +None + +Status Codes +------------ + ++-------------+-------------------------------------------------------------------------------------+ +| Status Code | Description | ++=============+=====================================================================================+ +| 200 | Empty response body. | ++-------------+-------------------------------------------------------------------------------------+ +| 307 | Template version content requested. The request is redirected to the download link. | ++-------------+-------------------------------------------------------------------------------------+ +| 400 | Invalid request. | ++-------------+-------------------------------------------------------------------------------------+ +| 401 | Authentication failed. | ++-------------+-------------------------------------------------------------------------------------+ +| 403 | The user does not have the permission to call this API. | ++-------------+-------------------------------------------------------------------------------------+ +| 404 | The template or template version does not exist. | ++-------------+-------------------------------------------------------------------------------------+ +| 429 | Too frequent requests. | ++-------------+-------------------------------------------------------------------------------------+ +| 500 | Internal server error. | ++-------------+-------------------------------------------------------------------------------------+ diff --git a/api-ref/source/resource_formation_service/template_management/obtaining_template_version_metadata.rst b/api-ref/source/resource_formation_service/template_management/obtaining_template_version_metadata.rst new file mode 100644 index 0000000..0c7bf76 --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/obtaining_template_version_metadata.rst @@ -0,0 +1,216 @@ +:original_name: ShowTemplateVersionMetadata.html + +.. _ShowTemplateVersionMetadata: + +Obtaining Template Version Metadata +=================================== + +Function +-------- + +ShowTemplateVersionMetadata + +This API displays the metadata of a template version. + +- template_id is the unique ID of the template. It is a UUID generated by RFS when a template is created. Template names are unique at one specific time, so you can create a template named HelloWorld and another template with the same name after deleting the first one. For parallel development, team members may want to ensure that they are operating the template they created, not one with the same name created by other members after deleting the previous one. To avoid this mismatch, check the ID, since RFS ensures each template has a unique ID that does not change with updates. If the template_id value differs from the current template ID, 400 is returned. + +ShowTemplateVersionMetadata returns only the template version metadata. For details about the summary, refer to ShowTemplateVersionMetadataResponseBody. For details about template version, call ShowTemplateVersionContent. + +URI +--- + +GET /v1/{project_id}/templates/{template_name}/versions/{version_id}/metadata + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=============================================================================================================================+ + | project_id | Yes | String | Project ID. It can be obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | template_name | Yes | String | Name of the template to be created. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + | version_id | Yes | String | Template version ID. It starts with V (uppercase). The number of the ID is incremented by 1 each time a version is created. | + | | | | | + | | | | Minimum: **2** | + | | | | | + | | | | Maximum: **11** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 2** Query Parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================================================+ + | template_id | No | String | ID of a template. If **template_id** exists, the template service checks whether **template_id** matches **template_name**. If not, **400** is returned. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+====================================================================================================+ + | Client-Request-Id | Yes | String | Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+==================================================================================================================================+ + | template_id | String | Unique template ID. It is randomly generated by the template service. | + | | | | + | | | Minimum: **36** | + | | | | + | | | Maximum: **36** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | template_name | String | Name of the template to be created. | + | | | | + | | | Minimum: **1** | + | | | | + | | | Maximum: **128** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | version_description | String | Description of a template version. It can be used by users to identify their own template versions. | + | | | | + | | | Minimum: **0** | + | | | | + | | | Maximum: **1024** | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + | create_time | String | Creation time of a template version. The format complies with RFC3339 (YYYY-MM-DDTHH:MM:SSZ), for example, 1970-01-01T00:00:00Z. | + +-----------------------+-----------------------+----------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 401** + +.. table:: **Table 6** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 403** + +.. table:: **Table 7** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 404** + +.. table:: **Table 8** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 429** + +.. table:: **Table 9** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 500** + +.. table:: **Table 10** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +Example Requests +---------------- + +- Display the metadata of a template version. + + .. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions/V10/metadata + +- Display the metadata of a template version and check whether the template ID matches the current template. + + .. code-block:: text + + GET https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/versions/V10/metadata?template_id=1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3 + +Example Responses +----------------- + +**Status code: 200** + +Template version metadata obtained. + +.. code-block:: + + { + "template_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3", + "template_name" : "my_template", + "version_description" : "version description", + "create_time" : "2023-05-09T08:00:00Z" + } + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +200 Template version metadata obtained. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The template or template version does not exist. +429 Too frequent requests. +500 Internal server error. +=========== ======================================================= diff --git a/api-ref/source/resource_formation_service/template_management/updating_template_metadata.rst b/api-ref/source/resource_formation_service/template_management/updating_template_metadata.rst new file mode 100644 index 0000000..f01708c --- /dev/null +++ b/api-ref/source/resource_formation_service/template_management/updating_template_metadata.rst @@ -0,0 +1,174 @@ +:original_name: UpdateTemplateMetadata.html + +.. _UpdateTemplateMetadata: + +Updating Template Metadata +========================== + +Function +-------- + +UpdateTemplateMetadata + +This API updates template metadata. + +- This API only updates template description. + +URI +--- + +PATCH /v1/{project_id}/templates/{template_name}/metadata + +.. table:: **Table 1** Path Parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================+ + | project_id | Yes | String | Project ID. It can be obtained by calling an API or from the console. | + | | | | | + | | | | Minimum: **3** | + | | | | | + | | | | Maximum: **64** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + | template_name | Yes | String | Name of the template to be created. | + | | | | | + | | | | Minimum: **1** | + | | | | | + | | | | Maximum: **128** | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+=================+=================+====================================================================================================+ + | Client-Request-Id | Yes | String | Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **128** | + +-------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +----------------------+-----------------+-----------------+--------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +======================+=================+=================+================================================================================+ + | template_id | No | String | Unique template ID. It is randomly generated by the template service. | + | | | | | + | | | | Minimum: **36** | + | | | | | + | | | | Maximum: **36** | + +----------------------+-----------------+-----------------+--------------------------------------------------------------------------------+ + | template_description | No | String | Template description. It can be used by users to identify their own templates. | + | | | | | + | | | | Minimum: **0** | + | | | | | + | | | | Maximum: **1024** | + +----------------------+-----------------+-----------------+--------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 401** + +.. table:: **Table 5** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 403** + +.. table:: **Table 6** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 404** + +.. table:: **Table 7** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 429** + +.. table:: **Table 8** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + ========== ====== ============== + Parameter Type Description + ========== ====== ============== + error_code String Error code. + error_msg String Error message. + ========== ====== ============== + +Example Requests +---------------- + +Update template metadata. + +.. code-block:: + + PATCH https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates/my_template/metadata + + { + "template_id" : "1b15e005-bdbb-4bd7-8f9a-a09b6774b4b3", + "template_description" : "my template description" + } + +Example Responses +----------------- + +None + +Status Codes +------------ + +=========== ======================================================= +Status Code Description +=========== ======================================================= +204 Template metadata updated. No data returned. +400 Invalid request. +401 Authentication failed. +403 The user does not have the permission to call this API. +404 The template does not exist. +429 Too frequent requests. +500 Internal server error. +=========== =======================================================