> For the complete documentation index, see [llms.txt](https://docs.ionos.com/cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ionos.com/cloud/api-reference/databases/v2-1/clusters/ensure-cluster.md).

# Ensure Cluster

Ensures that the Cluster with the provided ID is created or modified. The full Cluster needs to be provided to ensure (either update or create) the Cluster. Non present data will only be filled with defaults or left empty, but not take previous values into consideration.

```json
{"openapi":"3.0.3","info":{"title":"IONOS CLOUD DBaaS MariaDB","version":"2.0.0"},"tags":[{"name":"Clusters","description":"Create, manage, and monitor MariaDB clusters through the IONOS CLOUD API.\nThis tag groups all operations for clusters.\n"}],"servers":[{"url":"https://mariadb.de-txl.ionos.com/v2","description":"Germany, Berlin"},{"url":"https://mariadb.de-fra.ionos.com/v2","description":"Germany, Frankfurt (de-fra)"},{"url":"https://mariadb.fr-par.ionos.com/v2","description":"France, Paris"},{"url":"https://mariadb.es-vit.ionos.com/v2","description":"Spain, Logroño"},{"url":"https://mariadb.gb-lhr.ionos.com/v2","description":"United Kingdom, London"},{"url":"https://mariadb.gb-bhx.ionos.com/v2","description":"United Kingdom, Worcester"},{"url":"https://mariadb.us-las.ionos.com/v2","description":"United States, Las Vegas"},{"url":"https://mariadb.us-mci.ionos.com/v2","description":"United States, Lenexa"},{"url":"https://mariadb.us-ewr.ionos.com/v2","description":"United States, Newark"}],"security":[{"tokenAuth":[]}],"components":{"securitySchemes":{"tokenAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"The token can be generated using the \n[Authentication API](https://api.ionos.com/docs/authentication/v1/#tag/tokens/operation/tokensGenerate).\n"}},"schemas":{"ClusterEnsure":{"type":"object","required":["id","properties"],"properties":{"id":{"type":"string","description":"The ID (UUID) of the Cluster.","format":"uuid"},"metadata":{"description":"Metadata","additionalProperties":true},"properties":{"$ref":"#/components/schemas/Cluster"}}},"Cluster":{"type":"object","description":"Create, manage, and monitor MariaDB clusters through the IONOS CLOUD API.\n","required":["name","instances","connection","maintenanceWindow","version","backup"],"properties":{"name":{"$ref":"#/components/schemas/MariadbClusterName"},"description":{"$ref":"#/components/schemas/MariadbClusterDescription"},"version":{"$ref":"#/components/schemas/MariadbClusterVersion"},"instances":{"$ref":"#/components/schemas/InstanceConfiguration"},"connection":{"$ref":"#/components/schemas/MariadbClusterConnection"},"maintenanceWindow":{"$ref":"#/components/schemas/MaintenanceWindow"},"credentials":{"$ref":"#/components/schemas/MariadbUser"},"restoreFromBackup":{"$ref":"#/components/schemas/MariadbRestoreClusterFromBackup"},"logsEnabled":{"$ref":"#/components/schemas/LogsEnabled"},"metricsEnabled":{"$ref":"#/components/schemas/MetricsEnabled"},"backup":{"$ref":"#/components/schemas/ClusterBackup"}}},"MariadbClusterName":{"type":"string","description":"The name of your MariaDB cluster.\nMust be 63 characters or less and must begin and end with an alphanumeric character (`[a-z0-9A-Z]`)\nwith dashes (`-`), underscores (`_`), dots (`.`), and alphanumerics between.\n","pattern":"^[A-Za-z0-9][-A-Za-z0-9_.]*[A-Za-z0-9]$","minLength":2,"maxLength":63},"MariadbClusterDescription":{"type":"string","description":"Human-readable description for the cluster."},"MariadbClusterVersion":{"type":"string","description":"The MariaDB version for the cluster. Use GET /versions to retrieve the\nlist of supported versions. To upgrade, provide a version listed in\ncanUpgradeTo for the current version. Downgrades are not supported.\n"},"InstanceConfiguration":{"type":"object","required":["count","ram","cores","storageSize"],"properties":{"count":{"description":"The total number of instances in the cluster.\nA value of 1 creates a single-instance cluster.\nValues from 2 to 5 create a replicated cluster with one primary and n-1 secondary instances.\n","type":"integer","minimum":1,"maximum":5},"ram":{"$ref":"#/components/schemas/InstancesMemory"},"cores":{"$ref":"#/components/schemas/InstancesCores"},"storageSize":{"$ref":"#/components/schemas/InstancesStorageSize"}}},"InstancesMemory":{"type":"integer","description":"The amount of memory (RAM) per instance in gigabytes (GB). On update, RAM can be increased or decreased.","minimum":4,"maximum":240},"InstancesCores":{"type":"integer","description":"The number of CPU cores per instance. On update, cores can be increased or decreased.","minimum":1,"maximum":62},"InstancesStorageSize":{"type":"integer","description":"The amount of storage per instance in gigabytes (GB).\nOn update, storage size can only be increased; it cannot be reduced.\n","minimum":10,"maximum":4096},"MariadbClusterConnection":{"description":"Connection information of the MariaDB cluster.\n","type":"object","required":["datacenterId","lanId","primaryInstanceAddress"],"properties":{"datacenterId":{"description":"The data center to connect your instance to.","type":"string","format":"uuid"},"lanId":{"description":"The numeric LAN ID to connect your instance to.","type":"string"},"primaryInstanceAddress":{"$ref":"#/components/schemas/MariadbClusterInstanceIp"}}},"MariadbClusterInstanceIp":{"type":"string","description":"Assigns the IP address and netmask to the cluster's primary instance, in CIDR notation.\nNote the following unavailable IP ranges:\n10.208.0.0/12\n10.233.0.0/18\n10.233.64.0/18\n192.168.230.0/24\n"},"MaintenanceWindow":{"description":"A weekly 4 hour-long window, during which maintenance might occur.\n","properties":{"time":{"type":"string","description":"Start of the maintenance window in UTC time."},"dayOfTheWeek":{"$ref":"#/components/schemas/DayOfTheWeek"}},"required":["time","dayOfTheWeek"],"type":"object"},"DayOfTheWeek":{"description":"The name of the week day.","type":"string","enum":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},"MariadbUser":{"type":"object","description":"Credentials for the initial database user to be created.","required":["username","database"],"properties":{"username":{"$ref":"#/components/schemas/MariadbUsername"},"password":{"$ref":"#/components/schemas/MariadbUserPassword"},"database":{"$ref":"#/components/schemas/MariadbDatabaseName"}}},"MariadbUsername":{"type":"string","description":"The username of the initial MariaDB user.\nMust be 16 characters or less and must include only alphanumeric characters (`[A-Za-z0-9_]`)\nand underscores (`_`). Some usernames are reserved for platform use (for example `mariadb`, `admin`, `standby`).\n","pattern":"^[A-Za-z0-9_]+$","minLength":2,"maxLength":16},"MariadbUserPassword":{"type":"string","description":"The password for the initial MariaDB user.\nPassword is required whenever credentials are supplied, on create and on update; never returned in responses.\nMust be between 10 and 256 characters long.\nFor a strong password we recommend that it also meets the following\ncriteria, though these are not enforced:\n- Contains at least one lowercase letter.\n- Contains at least one uppercase letter.\n- Contains at least one digit (0-9).\n- Contains at least one special character from the set: @$!%*?&\n","writeOnly":true,"minLength":10,"maxLength":256},"MariadbDatabaseName":{"type":"string","description":"The name of the initial database to be created.\nMust be 63 characters or less and must include only alphanumeric characters (`[a-z0-9A-Z]`)\nand underscores (`_`).\n","pattern":"^[a-z0-9A-Z_]+$","minLength":2,"maxLength":63},"MariadbRestoreClusterFromBackup":{"type":"object","writeOnly":true,"description":"Restores the cluster from a backup.\nOn cluster creation, set `sourceBackupId` (optionally `recoveryTargetDatetime`) to initialize the new cluster from an existing backup.\nOn in-place modification, set `recoveryTargetDatetime` only; the restore source is inferred from the cluster's own backups. The current data is overwritten with the restored data, and the cluster may experience a brief period of downtime during this process.\n","properties":{"sourceBackupId":{"type":"string","format":"uuid","description":"UUID of the backup to restore from. Required for restore on cluster creation; not valid for in-place restore, where the source is inferred from the cluster's own backups.\n"},"recoveryTargetDatetime":{"type":"string","format":"date-time","description":"Providing this value as an ISO 8601 timestamp causes the system to replay the backups up to the specified time.\nOptional on cluster creation (the backup is applied in its entirety if omitted); required for in-place restore.\n"}}},"LogsEnabled":{"type":"boolean","default":false,"description":"Allows or disallows the collection and reporting of logs for this cluster's observability.\nIf the observability service is not activated on the contract, this setting is accepted but has no effect;\nlog collection will not be enabled until the observability service is activated.\n"},"MetricsEnabled":{"type":"boolean","default":false,"description":"Allows or disallows the collection and reporting of metrics for this cluster's observability.\nIf the observability service is not activated on the contract, this setting is accepted but has no effect;\nmetric collection will not be enabled until the observability service is activated.\n"},"ClusterBackup":{"description":"Configures backup location and retention","type":"object","properties":{"location":{"$ref":"#/components/schemas/BackupLocationName"},"retentionDays":{"$ref":"#/components/schemas/BackupRetentionDays"}},"required":["location","retentionDays"]},"BackupLocationName":{"description":"The Object Storage location where the backup will be created. The BackupLocations provides a list of supported locations.\n","type":"string"},"BackupRetentionDays":{"description":"Configures how many days cluster backups are retained.","type":"integer","minimum":1,"maximum":365},"ClusterRead":{"type":"object","required":["id","type","href","metadata","properties"],"properties":{"id":{"type":"string","description":"The ID (UUID) of the Cluster.","format":"uuid"},"type":{"description":"The type of the resource.","type":"string","enum":["cluster"]},"href":{"description":"The URL of the Cluster.","type":"string"},"metadata":{"$ref":"#/components/schemas/ClusterMetadata"},"properties":{"$ref":"#/components/schemas/Cluster"}}},"ClusterMetadata":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/Metadata"},{"type":"object","properties":{"state":{"$ref":"#/components/schemas/MariadbClusterStates"},"statusMessage":{"type":"string","description":"A human-readable message describing the current state. Populated when `state` is `FAILED`.","readOnly":true}}},{"type":"object","properties":{"dnsName":{"type":"string","description":"The DNS name used to access the cluster.","readOnly":true}}}]},"Metadata":{"type":"object","description":"Metadata of the resource.","properties":{"createdDate":{"type":"string","format":"date-time","description":"The ISO 8601 creation timestamp.","readOnly":true},"createdBy":{"type":"string","description":"Unique name of the identity that created the resource.","readOnly":true},"createdByUserId":{"type":"string","description":"Unique id of the identity that created the resource.","readOnly":true},"lastModifiedDate":{"type":"string","format":"date-time","description":"The ISO 8601 modified timestamp.","readOnly":true},"lastModifiedBy":{"type":"string","description":"Unique name of the identity that last modified the resource.","readOnly":true},"lastModifiedByUserId":{"type":"string","description":"Unique id of the identity that last modified the resource.","readOnly":true},"resourceURN":{"type":"string","description":"Unique name of the resource.","readOnly":true}}},"MariadbClusterStates":{"description":"The current lifecycle state of the cluster.\n- `PROVISIONING`: The system is actively applying the changes.\n- `AVAILABLE`: The resource is fully operational with no pending changes.\n- `UPDATING`: A modification is in progress.\n- `DESTROYING`: The resource is being deleted.\n- `FAILED`: The provisioning failed due to an internal error.\n","type":"string","enum":["PROVISIONING","AVAILABLE","UPDATING","DESTROYING","FAILED"],"readOnly":true},"Error":{"description":"The Error object is used to represent an error response from the API.\n","type":"object","properties":{"httpStatus":{"type":"integer","description":"The HTTP status code of the operation."},"messages":{"type":"array","description":"A list of error messages.\n","items":{"type":"object","properties":{"errorCode":{"type":"string","description":"Application internal error code\n"},"message":{"type":"string","description":"A human readable explanation specific to this occurrence of the\nproblem.\n"}}}}}}},"responses":{"BadRequest":{"description":"### Bad Request\nThe request send to the API was malformed.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"### Unauthorized\nThe request is missing authorization information or the authorization information provided are expired.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotAllowed":{"description":"### Not Allowed\nThe user issuing the request does not have the needed permissions.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"### Not Found\nThe resource that was requested could not be found.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Conflict":{"description":"### Conflict\nThe UUID is already taken by another party, follow the guides to generate UUIDs uniquely.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"UnsupportedMediaType":{"description":"### Unsupported Media Type\nThe request has an unsupported media type.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"UnprocessableEntity":{"description":"### Unprocessable Entity\nThe request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"### Too Many Requests\nThe user has sent too many requests in a given amount of time.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"### Internal Server Error\nAn internal error occurred. We apologize for the inconvenience!\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ServiceUnavailable":{"description":"### Service Unavailable\nThe server is currently unable to handle the request due to a temporary overloading or maintenance of the server.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"UnexpectedError":{"description":"### Unexpected Internal Server Error\nAn unexpected internal error occurred. We apologize for the inconvenience!\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/clusters/{clusterId}":{"put":{"operationId":"clustersPut","summary":"Ensure Cluster","tags":["Clusters"],"description":"Ensures that the Cluster with the provided ID is created or modified.\nThe full Cluster needs to be provided to ensure\n(either update or create) the Cluster. Non present data will\nonly be filled with defaults or left empty, but not take\nprevious values into consideration.\n","parameters":[{"name":"clusterId","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":"The ID (UUID) of the Cluster."}],"requestBody":{"description":"update Cluster","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterEnsure"}}}},"responses":{"200":{"description":"Cluster successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterRead"}}}},"201":{"description":"Cluster successfully ensured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterRead"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/NotAllowed"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"},"default":{"$ref":"#/components/responses/UnexpectedError"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ionos.com/cloud/api-reference/databases/v2-1/clusters/ensure-cluster.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
