You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/data-sources/resource.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -108,7 +108,7 @@ output "quarantine_policy" {
108
108
```
109
109
110
110
To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
111
-
-`retry` (Attributes) The retry block supports the following arguments: (see [below for nested schema](#nestedatt--retry))
111
+
-`retry` (Attributes) The retry object supports the following attributes: (see [below for nested schema](#nestedatt--retry))
112
112
-`timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
113
113
114
114
### Read-Only
@@ -136,7 +136,7 @@ To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
136
136
137
137
Required:
138
138
139
-
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the error is considered retryable.
139
+
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
Copy file name to clipboardExpand all lines: docs/data-sources/resource_action.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -87,7 +87,7 @@ data "azapi_resource_action" "example" {
87
87
```
88
88
89
89
To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
90
-
-`retry` (Attributes) The retry block supports the following arguments: (see [below for nested schema](#nestedatt--retry))
90
+
-`retry` (Attributes) The retry object supports the following attributes: (see [below for nested schema](#nestedatt--retry))
91
91
-`sensitive_response_export_values` (Dynamic) The attribute can accept either a list or a map.
92
92
93
93
-**List**: A list of paths that need to be exported from the response body. Setting it to `["*"]` will export the full response body. Here's an example. If it sets to `["properties.loginServer", "properties.policies.quarantinePolicy.status"]`, it will set the following HCL object to the computed property sensitive_output.
@@ -154,7 +154,7 @@ To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
154
154
155
155
Required:
156
156
157
-
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the error is considered retryable.
157
+
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
Copy file name to clipboardExpand all lines: docs/data-sources/resource_list.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -113,7 +113,7 @@ data "azapi_resource_list" "listSubnetsByVnet" {
113
113
```
114
114
115
115
To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
116
-
-`retry` (Attributes) The retry block supports the following arguments: (see [below for nested schema](#nestedatt--retry))
116
+
-`retry` (Attributes) The retry object supports the following attributes: (see [below for nested schema](#nestedatt--retry))
117
117
-`timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
118
118
119
119
### Read-Only
@@ -138,7 +138,7 @@ To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
138
138
139
139
Required:
140
140
141
-
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the error is considered retryable.
141
+
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
101
-
-`retry` (Attributes) The retry block supports the following arguments: (see [below for nested schema](#nestedatt--retry))
101
+
-`retry` (Attributes) The retry object supports the following attributes: (see [below for nested schema](#nestedatt--retry))
102
102
-`timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
103
103
104
104
### Read-Only
@@ -123,7 +123,7 @@ To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
123
123
124
124
Required:
125
125
126
-
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the error is considered retryable.
126
+
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
Copy file name to clipboardExpand all lines: docs/guides/feature_customized_retry.md
+55-6Lines changed: 55 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,14 +6,64 @@ description: |-
6
6
7
7
---
8
8
9
-
The AzAPI provider can digest the intermittent API errors and retry the requests based on the customized retry configuration. This feature is useful when you need to handle the API errors gracefully and improve the reliability of the Terraform deployments.
9
+
## Why retry?
10
10
11
+
Sometimes, when managing cloud infrastructure, requests to the cloud provider may fail due to transient issues such as network problems, timeouts, eventual consistency, or rate limiting. In these cases, it can be beneficial to retry the request a few times before giving up.
12
+
13
+
The AzAPI provider can digest these intermittent API errors and retry the requests based on the customized retry configuration. This feature is useful when you need to handle the API errors gracefully and improve the reliability of the Terraform deployments.
11
14
12
15
## Prerequisites
13
16
14
-
-[Terraform AzAPI provider](https://registry.terraform.io/providers/azure/azapi) version 2.1.0 or later
17
+
-[Terraform AzAPI provider](https://registry.terraform.io/providers/azure/azapi) version 2.1.0 or later. Some features are only available from version 2.3.0.
18
+
19
+
## Retry configuration
20
+
21
+
There are two types of retry configurations available in the AzAPI provider:
22
+
23
+
1. Provider retry configuration
24
+
2. Resource-specific retry configuration
25
+
26
+
### Provider retry configuration
27
+
28
+
The provider retry configuration is a global configuration that applies to all resources managed by the provider. You can configure the provider retry behavior by setting the following provider values:
29
+
30
+
-`maximum_busy_retry_attempts`
31
+
32
+
This value controls the number of times the provider will retry a failed request. The default value is `3`.
33
+
A retry will be triggered if the request fails with HTTP 408, 429, 500, 502, 503, or 504.
34
+
35
+
In the case that the response header contains a `Retry-After` value, the provider will wait for the specified duration before retrying the request.
36
+
37
+
### Resource-specific retry configuration
38
+
39
+
In addition to the provider retry configuration, you can also configure the retry behavior for individual resources. This allows you to fine-tune the retry behavior for specific resources.
15
40
16
-
## Customized Retry for Resource Creation
41
+
The resource-specific retry comes after the provider retry, that is to say that the provider retry will be attempted first, and if it fails or exceeds the maximum attempts, the resource-specific retry will be attempted.
42
+
Note that the resource-specific retry does not honour the `Retry-After` header and is exponential backoff based.
43
+
44
+
Resource specific retry is configured using the `retry` attribute.
45
+
46
+
If you configure a retry configuration, the maximum elapsed time for the retry will be set to the resource's timeout value for that operation (create, update, read, delete).
47
+
48
+
With `azapi_resource` and `azapi_data_plane_resource`, the provider performs a read operation after the resource has been created so that we can store the read-only values.
49
+
50
+
The schema of these retry attributes is as follows:
51
+
52
+
-`error_message_regex` - A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
53
+
-`interval_seconds` - The initial number of seconds to wait before the 1st retry. The default value is `10`.
54
+
-`max_interval_seconds` - The maximum number of seconds to wait before retrying a request. The default value is `180`.
55
+
-`multiplier` - The multiplier to apply to the interval between retries. The default value is `1.5`.
56
+
-`randomization_factor` - The randomization factor to apply to the interval between retries. The default value is `0.5`. The formula for the randomized interval is: `RetryInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])`. Set to zero `0.0` for no randomization.
57
+
58
+
## Default resource-specific retry configuration
59
+
60
+
If you do not configure any retry values, the provider will use the following:
61
+
62
+
For the initial create/read/update/delete operation we will only retry on the provider's `maximum_busy_retry_attempts` value.
63
+
64
+
For the read-after-create, the provider will retry on HTTP 404 and 403 status codes up to the operation timeout. This is logical as, if we have just successfully created the resource, we should not be getting a 404 or 403 on any subsequent GET request.
65
+
66
+
## Example - Customized Retry for Resource Creation
17
67
18
68
The virtual network link resource may not be available immediately after the virtual network is created. In this case, you can configure the customized retry configuration to handle the `ResourceNotFound` error and retry the request.
Above configuration is only used for demonstration purposes. From the `2.0.1` version, the AzAPI provider will automatically retry the GET requests when the `ResourceNotFound` error occurs after the resource creation.
94
+
Above configuration is only used for demonstration purposes. From the `2.0.1` version, the AzAPI provider will automatically retry the GET requests when the `ResourceNotFound` error occurs after the resource creation.
45
95
46
-
## Customized Retry for Resource Deletion
96
+
## Example - Customized Retry for Resource Deletion
47
97
48
98
The private DNS zone may not be deleted immediately after the nested virtual network link is deleted. In this case, you can configure the customized retry configuration to handle the `CannotDeleteResource` error and retry the request.
Copy file name to clipboardExpand all lines: docs/index.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -72,6 +72,7 @@ provider "azapi" {
72
72
-`enable_preflight` (Boolean) Enable Preflight Validation. The default is false. When set to true, the provider will use Preflight to do static validation before really deploying a new resource. When set to false, the provider will disable this validation. This can also be sourced from the `ARM_ENABLE_PREFLIGHT` Environment Variable.
73
73
-`endpoint` (Attributes List) The Azure API Endpoint Configuration. (see [below for nested schema](#nestedatt--endpoint))
74
74
-`environment` (String) The Cloud Environment which should be used. Possible values are `public`, `usgovernment` and `china`. Defaults to `public`. This can also be sourced from the `ARM_ENVIRONMENT` Environment Variable.
75
+
-`maximum_busy_retry_attempts` (Number) The maximum number of retries to attempt if the Azure API returns an HTTP 408, 429, 500, 502, 503, or 504 response. The default is `3`. The resource-specific retry configuration may additionally be used to retry on other errors and conditions.
75
76
-`oidc_azure_service_connection_id` (String) The Azure Pipelines Service Connection ID to use for authentication. This can also be sourced from the `ARM_ADO_PIPELINE_SERVICE_CONNECTION_ID` or `ARM_OIDC_AZURE_SERVICE_CONNECTION_ID` Environment Variables.
76
77
-`oidc_request_token` (String) The bearer token for the request to the OIDC provider. This can also be sourced from the `ARM_OIDC_REQUEST_TOKEN` or `ACTIONS_ID_TOKEN_REQUEST_TOKEN` Environment Variables.
77
78
-`oidc_request_url` (String) The URL for the OIDC provider from which to request an ID token. This can also be sourced from the `ARM_OIDC_REQUEST_URL` or `ACTIONS_ID_TOKEN_REQUEST_URL` Environment Variables.
To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
140
-
-`retry` (Attributes) The retry block supports the following arguments: (see [below for nested schema](#nestedatt--retry))
140
+
-`retry` (Attributes) The retry object supports the following attributes: (see [below for nested schema](#nestedatt--retry))
141
141
-`timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
142
142
-`update_headers` (Map of String) A mapping of headers to be sent with the update request.
143
143
-`update_query_parameters` (Map of List of String) A mapping of query parameters to be sent with the update request.
@@ -164,7 +164,7 @@ To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
164
164
165
165
Required:
166
166
167
-
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the error is considered retryable.
167
+
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
165
-
-`retry` (Attributes) The retry block supports the following arguments: (see [below for nested schema](#nestedatt--retry))
165
+
-`retry` (Attributes) The retry object supports the following attributes: (see [below for nested schema](#nestedatt--retry))
166
166
-`schema_validation_enabled` (Boolean) Whether enabled the validation on `type` and `body` with embedded schema. Defaults to `true`.
167
167
-`tags` (Map of String) A mapping of tags which should be assigned to the Azure resource.
168
168
-`timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
@@ -208,7 +208,7 @@ Read-Only:
208
208
209
209
Required:
210
210
211
-
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the error is considered retryable.
211
+
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
Copy file name to clipboardExpand all lines: docs/resources/resource_action.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -107,7 +107,7 @@ description: |-
107
107
```
108
108
109
109
To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
110
-
-`retry` (Attributes) The retry block supports the following arguments: (see [below for nested schema](#nestedatt--retry))
110
+
-`retry` (Attributes) The retry object supports the following attributes: (see [below for nested schema](#nestedatt--retry))
111
111
-`sensitive_response_export_values` (Dynamic) The attribute can accept either a list or a map.
112
112
113
113
-**List**: A list of paths that need to be exported from the response body. Setting it to `["*"]` will export the full response body. Here's an example. If it sets to `["properties.loginServer", "properties.policies.quarantinePolicy.status"]`, it will set the following HCL object to the computed property output.
@@ -175,7 +175,7 @@ To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
175
175
176
176
Required:
177
177
178
-
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the error is considered retryable.
178
+
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
Copy file name to clipboardExpand all lines: docs/resources/update_resource.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -140,7 +140,7 @@ This resource can manage a subset of any existing Azure resource manager resourc
140
140
```
141
141
142
142
To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
143
-
-`retry` (Attributes) The retry block supports the following arguments: (see [below for nested schema](#nestedatt--retry))
143
+
-`retry` (Attributes) The retry object supports the following attributes: (see [below for nested schema](#nestedatt--retry))
144
144
-`timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
145
145
-`update_headers` (Map of String) A mapping of headers to be sent with the update request.
146
146
-`update_query_parameters` (Map of List of String) A mapping of query parameters to be sent with the update request.
@@ -167,7 +167,7 @@ To learn more about JMESPath, visit [JMESPath](https://jmespath.org/).
167
167
168
168
Required:
169
169
170
-
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the error is considered retryable.
170
+
-`error_message_regex` (List of String) A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.
0 commit comments