> For the complete documentation index, see [llms.txt](https://docs.ionos.com/terraform-provider/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/terraform-provider/gitbook_docs.md).

# Introduction

## IONOS CLOUD Terraform Provider

The IONOS CLOUD provider gives the ability to deploy and configure resources using the IONOS CLOUD APIs.

### Requirements

* [Terraform](https://www.terraform.io/downloads.html) 0.12.x

**NOTE:** In order to use a specific version of this provider, please include the following block at the beginning of your terraform config files [details](https://www.terraform.io/docs/configuration/terraform.html#specifying-a-required-terraform-version):

```
provider "ionoscloud" {
  version = ">= 6.4.10"
}
```

### Using the provider

See the [IONOS CLOUD Provider documentation](https://registry.terraform.io/providers/ionos-cloud/ionoscloud/latest/docs) to get started using the IONOS CLOUD provider.

### Environment Variables

| Environment Variable    | Description                                                                                                                                                                |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `IONOS_USERNAME`        | Specify the username used to login, to authenticate against the IONOS CLOUD API, unless a token is provided                                                                |
| `IONOS_PASSWORD`        | Specify the password used to login, to authenticate against the IONOS CLOUD API, unless a token is provided                                                                |
| `IONOS_TOKEN`           | Specify the token used to login, if a token is being used instead of username and password                                                                                 |
| `IONOS_API_URL`         | Specify th`e API URL. It will overwrite the API endpoint default value` api.ionos.com\`. It is not necessary to override this value unless you have special routing config |
| `IONOS_LOG_LEVEL`       | Specify the Log Level used to log messages. Possible values: Off, Debug, Trace                                                                                             |
| `IONOS_PINNED_CERT`     | Specify the SHA-256 public fingerprint here, enables certificate pinning                                                                                                   |
| `IONOS_CONTRACT_NUMBER` | Specify the contract number on which you wish to provision. Only valid for reseller accounts, for other types of accounts the header will be ignored                       |

### Custom API URLs for location based products

| Environment Variable                      | Description                                                                                                                                                                                             |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `IONOS_API_URL_NFS`                       | Sets a custom API URL for the NFS product. `location` field needs to be empty, otherwise it will override the custom API URL. Setting `endpoint` or `IONOS_API_URL` does not have any effect.           |
| `IONOS_API_URL_MARIADB`                   | Sets a custom API URL for the MariaDB product. `location` field needs to be empty, otherwise it will override the custom API URL. Setting `endpoint` or `IONOS_API_URL` does not have any effect.       |
| `IONOS_API_URL_INMEMORYDB`                | Sets a custom API URL for the InMemoryDB product. `location` field needs to be empty, otherwise it will override the custom API URL. Setting `endpoint` or `IONOS_API_URL` does not have any effect.    |
| `IONOS_API_URL_LOGGING`                   | Sets a custom API URL for the Logging product. `location` field needs to be empty, otherwise it will override the custom API URL. Setting `endpoint` or `IONOS_API_URL` does not have any effect.       |
| `IONOS_API_URL_KAFKA`                     | Sets a custom API URL for the Event Streams product. `location` field needs to be empty, otherwise it will override the custom API URL. Setting `endpoint` or `IONOS_API_URL` does not have any effect. |
| `IONOS_API_URL_VPN`                       | Sets a custom API URL for the VPN product. `location` field needs to be empty, otherwise it will override the custom API URL. Setting `endpoint` or `IONOS_API_URL` does not have any effect.           |
| `IONOS_API_URL_OBJECT_STORAGE`            | Sets a custom API URL for the Object Storage product. `region` field needs to be empty, otherwise it will override the custom API URL. Setting `endpoint` or `IONOS_API_URL` does not have any effect.  |
| `IONOS_API_URL_OBJECT_STORAGE_MANAGEMENT` | Sets a custom API URL for the Object Storage Management product. Setting `endpoint` or `IONOS_API_URL` does not have any effect.                                                                        |
| `IONOS_API_URL_MONITORING`                | Sets a custom API URL for the Monitoring product. `location` field needs to be empty, otherwise it will override the custom API URL. Setting `endpoint` or `IONOS_API_URL` does not have any effect.    |

### Certificate pinning:

You can enable certificate pinning if you want to bypass the normal certificate checking procedure, by doing the following:

Set env variable IONOS\_PINNED\_CERT=`<insert_sha256_public_fingerprint_here>`

You can get the sha256 fingerprint most easily form the browser by inspecting the certificate.

### Debugging

In the default mode, the Terraform provider returns only HTTP client errors. These usually consist only of the HTTP status code. There is no clear description of the problem. But if you want to see the API call error messages as well, you need to set the SDK and Terraform provider environment variables.

You can enable logging now using the `IONOS_LOG_LEVEL` env variable. Allowed values: `off`, `debug` and `trace`. Defaults to `off`.

⚠️ **Note:** We recommend you only use `trace` level for debugging purposes. Disable it in your production environments because it can log sensitive data. It logs the full request and response without encryption, even for an HTTPS call. Verbose request and response logging can also significantly impact your application’s performance.

```bash
$ export IONOS_LOG_LEVEL=debug
```

⚠️ **Note:** `IONOS_DEBUG` is now deprecated and will be removed in a future release.

⚠️ **Note:** We recommend you only use `IONOS_DEBUG` for debugging purposes. Disable it in your production environments because it can log sensitive data. It logs the full request and response without encryption, even for an HTTPS call. Verbose request and response logging can also significantly impact your application’s performance.

```bash
$ export TF_LOG=debug
$ export IONOS_DEBUG=true
$ terraform apply
```

now you can see the response body incl. api error message:

```json
{
  "httpStatus" : 422,
  "messages" : [ {
    "errorCode" : "200",
    "message" : "[VDC-yy-xxxx] Operation cannot be executed since this Kubernetes Nodepool is already marked for deletion. Current state of the resource is FAILED_DESTROYING."
  }]
}
```

### For more complex examples on how to use the provider

Please check out the [examples](https://github.com/ionos-cloud/terraform-provider-ionoscloud/tree/master/gitbook_docs/examples/README.md) directory.
