From 25ab0b653542e5a0171bba5045bebbc24284948e Mon Sep 17 00:00:00 2001 From: Deatcu Andrei-Cristian Date: Mon, 27 Jan 2025 15:15:35 +0200 Subject: [PATCH 1/3] doc: Fix CHANGELOG.md (#744) --- CHANGELOG.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74e138de1..6028afd20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,11 @@ - Fix [#735](https://github.com/ionos-cloud/terraform-provider-ionoscloud/issues/735) by reading all values for `api_subnet_allow_list`, not only non-nill values. ### Features - Add new read-only attribute: `ipv4_cidr_block` to `ionoscloud_lan` resource and data source. -- Make `volume` optional for `ionoscloud_server` resource +- Make `volume` optional for `ionoscloud_server` resource. - `name` attribute for `ionoscloud_auto_certificate` resource is now required. +- Add `allow_replace` field to `ionoscloud_pg_cluster` resource. +### Docs +- Changed dead link in MongoDB cluster docs. ## 6.6.9 ### Features @@ -1024,9 +1027,3 @@ FEATURES: https://nfs.us-las.ionos.com (Las Vegas, USA) https://nfs.us-ewr.ionos.com (Newark, USA) https://nfs.us-mci.ionos.com (Lenexa, USA) - -### Fixes: -- Changed Dead link in MongoDB cluster docs - -### Features: -- Add `allow_replace` field to `ionoscloud_pg_cluster` resource. \ No newline at end of file From 319f6795f000ff8f621ac3c7a693f970b533a3f7 Mon Sep 17 00:00:00 2001 From: cciopa-ionos Date: Wed, 29 Jan 2025 12:07:15 +0200 Subject: [PATCH 2/3] Remove extra check --- CHANGELOG.md | 1 + ionoscloud/resource_user.go | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6028afd20..78462e305 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 6.7.0 ### Fixes - Fix [#735](https://github.com/ionos-cloud/terraform-provider-ionoscloud/issues/735) by reading all values for `api_subnet_allow_list`, not only non-nill values. +- Fix [#748](https://github.com/ionos-cloud/terraform-provider-ionoscloud/issues/748) by removing unecessary error check ### Features - Add new read-only attribute: `ipv4_cidr_block` to `ionoscloud_lan` resource and data source. - Make `volume` optional for `ionoscloud_server` resource. diff --git a/ionoscloud/resource_user.go b/ionoscloud/resource_user.go index ae6b648b6..6e50403a3 100644 --- a/ionoscloud/resource_user.go +++ b/ionoscloud/resource_user.go @@ -179,10 +179,6 @@ func resourceUserRead(ctx context.Context, d *schema.ResourceData, meta interfac return diag.FromErr(err) } - if err = d.Set("group_ids", getUserGroups(&user)); err != nil { - return diag.FromErr(err) - } - return nil } From 6ca4426f97089111b27977ae5be97a6e8ab43da2 Mon Sep 17 00:00:00 2001 From: cguran-ionos Date: Wed, 29 Jan 2025 13:52:21 +0200 Subject: [PATCH 3/3] fix: add check for 422 response on ionoscloud_s3_key key not found (#746) --- CHANGELOG.md | 1 + ionoscloud/resource_s3_key.go | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78462e305..e8f55895c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Fixes - Fix [#735](https://github.com/ionos-cloud/terraform-provider-ionoscloud/issues/735) by reading all values for `api_subnet_allow_list`, not only non-nill values. - Fix [#748](https://github.com/ionos-cloud/terraform-provider-ionoscloud/issues/748) by removing unecessary error check +- S3 key creation fails with 422 if s3 key not found. Add function to check for that specific response from the API. ### Features - Add new read-only attribute: `ipv4_cidr_block` to `ionoscloud_lan` resource and data source. - Make `volume` optional for `ionoscloud_server` resource. diff --git a/ionoscloud/resource_s3_key.go b/ionoscloud/resource_s3_key.go index 3e5455646..046b3e1d5 100644 --- a/ionoscloud/resource_s3_key.go +++ b/ionoscloud/resource_s3_key.go @@ -2,6 +2,7 @@ package ionoscloud import ( "context" + "errors" "fmt" "log" "strings" @@ -102,7 +103,7 @@ func resourceS3KeyRead(ctx context.Context, d *schema.ResourceData, meta interfa logApiRequestTime(apiResponse) if err != nil { - if httpNotFound(apiResponse) { + if httpNotFound(apiResponse) || isS3KeyNotFound(err) { d.SetId("") return nil } @@ -141,7 +142,7 @@ func resourceS3KeyUpdate(ctx context.Context, d *schema.ResourceData, meta inter logApiRequestTime(apiResponse) if err != nil { - if httpNotFound(apiResponse) { + if httpNotFound(apiResponse) || isS3KeyNotFound(err) { d.SetId("") return nil } @@ -164,7 +165,7 @@ func resourceS3KeyDelete(ctx context.Context, d *schema.ResourceData, meta inter logApiRequestTime(apiResponse) if err != nil { - if httpNotFound(apiResponse) { + if httpNotFound(apiResponse) || isS3KeyNotFound(err) { d.SetId("") return nil } @@ -178,6 +179,10 @@ func resourceS3KeyDelete(ctx context.Context, d *schema.ResourceData, meta inter s3KeyDeleted, dsErr := s3KeyDeleted(ctx, client, d) if dsErr != nil { + if isS3KeyNotFound(dsErr) { + log.Printf("[INFO] Successfully deleted Object Storage key: %s", d.Id()) + return nil + } diags := diag.FromErr(fmt.Errorf("error while checking deletion status of Object Storage key %s: %w", d.Id(), dsErr)) return diags } @@ -200,6 +205,15 @@ func resourceS3KeyDelete(ctx context.Context, d *schema.ResourceData, meta inter return nil } +// isS3KeyNotFound needed because api returns 422 instead of 404 on key being not found. will be removed once API issue is fixed +func isS3KeyNotFound(err error) bool { + var genericOpenAPIError ionoscloud.GenericOpenAPIError + if !errors.As(err, &genericOpenAPIError) { + return false + } + return genericOpenAPIError.StatusCode() == 422 && strings.Contains(genericOpenAPIError.Error(), "[VDC-21-2] The access key cannot be found, please double-check the key id and try again.") +} + func s3KeyDeleted(ctx context.Context, client *ionoscloud.APIClient, d *schema.ResourceData) (bool, error) { userId := d.Get("user_id").(string) _, apiResponse, err := client.UserS3KeysApi.UmUsersS3keysFindByKeyId(ctx, userId, d.Id()).Execute() @@ -242,7 +256,7 @@ func resourceS3KeyImport(ctx context.Context, d *schema.ResourceData, meta inter logApiRequestTime(apiResponse) if err != nil { - if httpNotFound(apiResponse) { + if httpNotFound(apiResponse) || isS3KeyNotFound(err) { d.SetId("") return nil, fmt.Errorf("unable to find Object Storage key %q", keyId) }