feat(api): Improve OpenAPI spec and add rate limit handling for Hetzner

- Add 429 response with Retry-After header for Hetzner server creation
- Create RateLimitException for proper rate limit error handling
- Rename cloud_provider_token_id to cloud_provider_token_uuid with deprecation
- Fix prices array schema in server-types endpoint with proper items definition
- Add explicit default: true to autogenerate_domain properties
- Add timeout and retry options to Docker install curl commands
- Fix race condition in deployment status update using atomic query
This commit is contained in:
Andras Bacsai
2025-12-11 12:12:43 +01:00
parent cf4985c596
commit 5d38147899
10 changed files with 238 additions and 46 deletions
+36 -6
View File
@@ -364,6 +364,7 @@
},
"autogenerate_domain": {
"type": "boolean",
"default": true,
"description": "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
}
},
@@ -778,6 +779,7 @@
},
"autogenerate_domain": {
"type": "boolean",
"default": true,
"description": "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
}
},
@@ -1192,6 +1194,7 @@
},
"autogenerate_domain": {
"type": "boolean",
"default": true,
"description": "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
}
},
@@ -1535,6 +1538,7 @@
},
"autogenerate_domain": {
"type": "boolean",
"default": true,
"description": "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
}
},
@@ -1861,6 +1865,7 @@
},
"autogenerate_domain": {
"type": "boolean",
"default": true,
"description": "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
}
},
@@ -6915,11 +6920,21 @@
"description": "Get all available Hetzner system images (operating systems).",
"operationId": "get-hetzner-images",
"parameters": [
{
"name": "cloud_provider_token_uuid",
"in": "query",
"description": "Cloud provider token UUID. Required if cloud_provider_token_id is not provided.",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "cloud_provider_token_id",
"in": "query",
"description": "Cloud provider token UUID",
"required": true,
"description": "Deprecated: Use cloud_provider_token_uuid instead. Cloud provider token UUID.",
"required": false,
"deprecated": true,
"schema": {
"type": "string"
}
@@ -6985,11 +7000,21 @@
"description": "Get all SSH keys stored in the Hetzner account.",
"operationId": "get-hetzner-ssh-keys",
"parameters": [
{
"name": "cloud_provider_token_uuid",
"in": "query",
"description": "Cloud provider token UUID. Required if cloud_provider_token_id is not provided.",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "cloud_provider_token_id",
"in": "query",
"description": "Cloud provider token UUID",
"required": true,
"description": "Deprecated: Use cloud_provider_token_uuid instead. Cloud provider token UUID.",
"required": false,
"deprecated": true,
"schema": {
"type": "string"
}
@@ -7052,17 +7077,22 @@
"application\/json": {
"schema": {
"required": [
"cloud_provider_token_id",
"location",
"server_type",
"image",
"private_key_uuid"
],
"properties": {
"cloud_provider_token_uuid": {
"type": "string",
"example": "abc123",
"description": "Cloud provider token UUID. Required if cloud_provider_token_id is not provided."
},
"cloud_provider_token_id": {
"type": "string",
"example": "abc123",
"description": "Cloud provider token UUID"
"description": "Deprecated: Use cloud_provider_token_uuid instead. Cloud provider token UUID.",
"deprecated": true
},
"location": {
"type": "string",