From 8f7d645b2443a9dfe973e27c20563f03bfe0bbc7 Mon Sep 17 00:00:00 2001 From: Van Chau Bui Date: Wed, 29 Jun 2022 11:59:31 -0400 Subject: [PATCH 1/3] initial commit for metadata backup --- go.mod | 2 +- go.sum | 2 + .../resource_ibm_atracker_settings.go | 57 +++++++++---------- .../docs/r/atracker_settings.html.markdown | 3 + 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/go.mod b/go.mod index d430da0372..e606e488ad 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/IBM/ibm-hpcs-uko-sdk v0.0.4 github.com/IBM/keyprotect-go-client v0.7.0 github.com/IBM/networking-go-sdk v0.30.0 - github.com/IBM/platform-services-go-sdk v0.26.1 + github.com/IBM/platform-services-go-sdk v0.26.2-0.20220627211559-4da3e42ead84 github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 github.com/IBM/scc-go-sdk v1.3.4 github.com/IBM/scc-go-sdk/v3 v3.1.6 diff --git a/go.sum b/go.sum index 7a8e9ede33..36e4f74033 100644 --- a/go.sum +++ b/go.sum @@ -65,6 +65,8 @@ github.com/IBM/platform-services-go-sdk v0.25.1 h1:hF4EvJNe8KRGiytN0mVJvJaZV4UJH github.com/IBM/platform-services-go-sdk v0.25.1/go.mod h1:9/v5qTMXaEBOpFe2marMukgCqv83W8PcjPWr91m2Ids= github.com/IBM/platform-services-go-sdk v0.26.1 h1:8maFrdgp8su5H99v5/fith9ft+nE1V7RRpcM3jBUKYs= github.com/IBM/platform-services-go-sdk v0.26.1/go.mod h1:ZFuISyKu+qekMfvFebzqJ8AIpNlRqI7a6WuieGfjGuA= +github.com/IBM/platform-services-go-sdk v0.26.2-0.20220627211559-4da3e42ead84 h1:dMeGr/tNdl6LQxaMhtFKA1A0FtvURNtc+Psa4Ou7A2U= +github.com/IBM/platform-services-go-sdk v0.26.2-0.20220627211559-4da3e42ead84/go.mod h1:ZFuISyKu+qekMfvFebzqJ8AIpNlRqI7a6WuieGfjGuA= github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 h1:NPUhkoOCRuv3OFWt19PmwjXGGTKlvmbuPg9fUrBUNe4= github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5/go.mod h1:b07XHUVh0XYnQE9s2mqgjYST1h9buaQNqN4EcKhOsX0= github.com/IBM/scc-go-sdk v1.3.4 h1:nvSsyA2GfwjX3Aloty/LStkrY0e2rV2r+CM+YYg3zR4= diff --git a/ibm/service/atracker/resource_ibm_atracker_settings.go b/ibm/service/atracker/resource_ibm_atracker_settings.go index 4c65d475cb..5f8af3c473 100644 --- a/ibm/service/atracker/resource_ibm_atracker_settings.go +++ b/ibm/service/atracker/resource_ibm_atracker_settings.go @@ -49,13 +49,12 @@ func ResourceIBMAtrackerSettings() *schema.Resource { Description: "If present then only these regions may be used to define a target.", Elem: &schema.Schema{Type: schema.TypeString}, }, - // Future Planned support - // "metadata_region_backup": &schema.Schema{ - // Type: schema.TypeString, - // Optional: true, - // ValidateFunc: validate.InvokeValidator("ibm_atracker_settings", "metadata_region_backup"), - // Description: "Provide a back up region to store meta data.", - // }, + "metadata_region_backup": { + Type: schema.TypeString, + Optional: true, + ValidateFunc: validate.InvokeValidator("ibm_atracker_settings", "metadata_region_backup"), + Description: "Provide a back up region to store meta data.", + }, "api_version": { Type: schema.TypeInt, Computed: true, @@ -77,16 +76,15 @@ func ResourceIBMAtrackerSettingsValidator() *validate.ResourceValidator { MinValueLength: 3, MaxValueLength: 256, }, - // Future Planned support - // validate.ValidateSchema{ - // Identifier: "metadata_region_backup", - // ValidateFunctionIdentifier: validate.ValidateRegexpLen, - // Type: validate.TypeString, - // Optional: true, - // Regexp: `^[a-zA-Z0-9 -_]`, - // MinValueLength: 3, - // MaxValueLength: 256, - // }, + validate.ValidateSchema{ + Identifier: "metadata_region_backup", + ValidateFunctionIdentifier: validate.ValidateRegexpLen, + Type: validate.TypeString, + Optional: true, + Regexp: `^[a-zA-Z0-9 -_]`, + MinValueLength: 3, + MaxValueLength: 256, + }, ) resourceValidator := validate.ResourceValidator{ResourceName: "ibm_atracker_settings", Schema: validateSchema} @@ -109,10 +107,9 @@ func resourceIBMAtrackerSettingsCreate(context context.Context, d *schema.Resour if _, ok := d.GetOk("permitted_target_regions"); ok { putSettingsOptions.SetPermittedTargetRegions(resourceInterfaceToStringArray(d.Get("permitted_target_regions").([]interface{}))) } - // Future planned support - // if _, ok := d.GetOk("metadata_region_backup"); ok { - // putSettingsOptions.SetMetadataRegionBackup(d.Get("metadata_region_backup").(string)) - // } + if _, ok := d.GetOk("metadata_region_backup"); ok { + putSettingsOptions.SetMetadataRegionBackup(d.Get("metadata_region_backup").(string)) + } settings, response, err := atrackerClient.PutSettingsWithContext(context, putSettingsOptions) if err != nil { @@ -158,10 +155,9 @@ func resourceIBMAtrackerSettingsRead(context context.Context, d *schema.Resource return diag.FromErr(fmt.Errorf("Error setting permitted_target_regions: %s", err)) } } - // Future planned support - // if err = d.Set("metadata_region_backup", settings.MetadataRegionBackup); err != nil { - // return diag.FromErr(fmt.Errorf("Error setting metadata_region_backup: %s", err)) - // } + if err = d.Set("metadata_region_backup", settings.MetadataRegionBackup); err != nil { + return diag.FromErr(fmt.Errorf("Error setting metadata_region_backup: %s", err)) + } if err = d.Set("api_version", flex.IntValue(settings.APIVersion)); err != nil { return diag.FromErr(fmt.Errorf("Error setting api_version: %s", err)) } @@ -181,7 +177,7 @@ func resourceIBMAtrackerSettingsUpdate(context context.Context, d *schema.Resour newMetaDataRegionPrimary := d.Get("metadata_region_primary").(string) putSettingsOptions.SetMetadataRegionPrimary(newMetaDataRegionPrimary) putSettingsOptions.SetPrivateAPIEndpointOnly(d.Get("private_api_endpoint_only").(bool)) - hasChange = hasChange || d.HasChange("metadata_region_primary") || d.HasChange("private_api_endpoint_only") || d.HasChange("metadata_region_primary") || d.HasChange("permitted_target_regions") || d.HasChange("default_targets") + hasChange = hasChange || d.HasChange("metadata_region_primary") || d.HasChange("private_api_endpoint_only") || d.HasChange("metadata_region_primary") || d.HasChange("permitted_target_regions") || d.HasChange("default_targets") || d.HasChange("metadata_region_backup") if d.HasChange("metadata_region_primary") { d.SetId(newMetaDataRegionPrimary) @@ -190,11 +186,10 @@ func resourceIBMAtrackerSettingsUpdate(context context.Context, d *schema.Resour putSettingsOptions.PermittedTargetRegions = resourceInterfaceToStringArray(d.Get("permitted_target_regions").([]interface{})) - // Future planned support - // if d.HasChange("metadata_region_backup") { - // putSettingsOptions.SetMetadataRegionBackup(d.Get("metadata_region_backup").(string)) - // hasChange = true - // } + if d.HasChange("metadata_region_backup") { + putSettingsOptions.SetMetadataRegionBackup(d.Get("metadata_region_backup").(string)) + hasChange = true + } if hasChange { setting, response, err := atrackerClient.PutSettingsWithContext(context, putSettingsOptions) diff --git a/website/docs/r/atracker_settings.html.markdown b/website/docs/r/atracker_settings.html.markdown index 3a3c13cefc..be26ebf20d 100644 --- a/website/docs/r/atracker_settings.html.markdown +++ b/website/docs/r/atracker_settings.html.markdown @@ -16,6 +16,7 @@ Provides a resource for atracker_settings. This allows atracker_settings to be c resource "ibm_atracker_settings" "atracker_settings" { default_targets = [ ibm_atracker_target.atracker_target.id ] metadata_region_primary = "us-south" + metadata_region_backup = "us-east" permitted_target_regions = us-south private_api_endpoint_only = false # Optional but recommended lifecycle flag to ensure target delete order is correct @@ -33,6 +34,8 @@ Review the argument reference that you can specify for your resource. * Constraints: The list items must match regular expression `/^[a-zA-Z0-9 -]/`. * `metadata_region_primary` - (Required, String) To store all your meta data in a single region. * Constraints: The maximum length is `256` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 -_]/`. +* `metadata_region_primary` - (Optional, String) To store all your meta data in a backup region. + * Constraints: The maximum length is `256` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 -_]/`. * `permitted_target_regions` - (Optional, List) If present then only these regions may be used to define a target. * Constraints: The list items must match regular expression `/^[a-zA-Z0-9 -_]/`. * `private_api_endpoint_only` - (Required, Boolean) If you set this true then you cannot access api through public network. From dc48feebd78a54481635a3155c2e7c228e5a03eb Mon Sep 17 00:00:00 2001 From: Van Chau Bui Date: Wed, 29 Jun 2022 12:38:43 -0400 Subject: [PATCH 2/3] updated test case --- ibm/service/atracker/resource_ibm_atracker_settings_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/ibm/service/atracker/resource_ibm_atracker_settings_test.go b/ibm/service/atracker/resource_ibm_atracker_settings_test.go index f5869ddfb8..1c9c945bc4 100644 --- a/ibm/service/atracker/resource_ibm_atracker_settings_test.go +++ b/ibm/service/atracker/resource_ibm_atracker_settings_test.go @@ -83,6 +83,7 @@ func testAccCheckIBMAtrackerSettingsConfig(metadataRegionPrimary string, private resource "ibm_atracker_settings" "atracker_settings" { metadata_region_primary = "%s" + metadata_region_backup = "us-east" private_api_endpoint_only = %s default_targets = [ ibm_atracker_target.atracker_target.id ] permitted_target_regions = ["us-south", "us-east"] From 148116860d9d78e4046dcd6b9ce47d8d38bdda90 Mon Sep 17 00:00:00 2001 From: Van Chau Bui Date: Tue, 16 Aug 2022 15:29:31 -0400 Subject: [PATCH 3/3] Adds extra tests, fixes validator --- .../resource_ibm_atracker_settings.go | 4 +- .../resource_ibm_atracker_settings_test.go | 42 ++++++------------- 2 files changed, 14 insertions(+), 32 deletions(-) diff --git a/ibm/service/atracker/resource_ibm_atracker_settings.go b/ibm/service/atracker/resource_ibm_atracker_settings.go index 5f8af3c473..b921922920 100644 --- a/ibm/service/atracker/resource_ibm_atracker_settings.go +++ b/ibm/service/atracker/resource_ibm_atracker_settings.go @@ -81,8 +81,8 @@ func ResourceIBMAtrackerSettingsValidator() *validate.ResourceValidator { ValidateFunctionIdentifier: validate.ValidateRegexpLen, Type: validate.TypeString, Optional: true, - Regexp: `^[a-zA-Z0-9 -_]`, - MinValueLength: 3, + Regexp: `^[a-zA-Z0-9 -_]*`, + MinValueLength: 0, MaxValueLength: 256, }, ) diff --git a/ibm/service/atracker/resource_ibm_atracker_settings_test.go b/ibm/service/atracker/resource_ibm_atracker_settings_test.go index 1c9c945bc4..07d7ad0efe 100644 --- a/ibm/service/atracker/resource_ibm_atracker_settings_test.go +++ b/ibm/service/atracker/resource_ibm_atracker_settings_test.go @@ -26,18 +26,22 @@ func TestAccIBMAtrackerSettingsBasic(t *testing.T) { Providers: acc.TestAccProviders, CheckDestroy: testAccCheckIBMAtrackerSettingsDestroy, Steps: []resource.TestStep{ - resource.TestStep{ - Config: testAccCheckIBMAtrackerSettingsConfigBasic(metadataRegionPrimary, privateAPIEndpointOnly), + { + Config: testAccCheckIBMAtrackerSettingsConfigBasic(metadataRegionPrimary, + "", privateAPIEndpointOnly), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMAtrackerSettingsExists("ibm_atracker_settings.atracker_settings", conf), resource.TestCheckResourceAttr("ibm_atracker_settings.atracker_settings", "metadata_region_primary", metadataRegionPrimary), + resource.TestCheckResourceAttr("ibm_atracker_settings.atracker_settings", "metadata_region_backup", ""), resource.TestCheckResourceAttr("ibm_atracker_settings.atracker_settings", "private_api_endpoint_only", privateAPIEndpointOnly), ), }, resource.TestStep{ - Config: testAccCheckIBMAtrackerSettingsConfigBasic(metadataRegionPrimaryUpdate, privateAPIEndpointOnly), + Config: testAccCheckIBMAtrackerSettingsConfigBasic(metadataRegionPrimaryUpdate, + metadataRegionPrimary, privateAPIEndpointOnly), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("ibm_atracker_settings.atracker_settings", "metadata_region_primary", metadataRegionPrimaryUpdate), + resource.TestCheckResourceAttr("ibm_atracker_settings.atracker_settings", "metadata_region_backup", metadataRegionPrimary), resource.TestCheckResourceAttr("ibm_atracker_settings.atracker_settings", "private_api_endpoint_only", privateAPIEndpointOnly), ), }, @@ -45,7 +49,8 @@ func TestAccIBMAtrackerSettingsBasic(t *testing.T) { }) } -func testAccCheckIBMAtrackerSettingsConfigBasic(metadataRegionPrimary string, privateAPIEndpointOnly string) string { +func testAccCheckIBMAtrackerSettingsConfigBasic(metadataRegionPrimary string, + metadataRegionBackup string, privateAPIEndpointOnly string) string { return fmt.Sprintf(` resource "ibm_atracker_target" "atracker_target" { name = "my-cos-target" @@ -61,34 +66,11 @@ func testAccCheckIBMAtrackerSettingsConfigBasic(metadataRegionPrimary string, pr resource "ibm_atracker_settings" "atracker_settings" { metadata_region_primary = "%s" + metadata_region_backup = "%s" private_api_endpoint_only = %s } - `, metadataRegionPrimary, privateAPIEndpointOnly) -} - -func testAccCheckIBMAtrackerSettingsConfig(metadataRegionPrimary string, privateAPIEndpointOnly string) string { - return fmt.Sprintf(` - - resource "ibm_atracker_target" "atracker_target" { - name = "my-cos-target" - target_type = "cloud_object_storage" - cos_endpoint { - endpoint = "s3.private.us-east.cloud-object-storage.appdomain.cloud" - target_crn = "crn:v1:bluemix:public:cloud-object-storage:global:a/11111111111111111111111111111111:22222222-2222-2222-2222-222222222222::" - bucket = "my-atracker-bucket" - api_key = "xxxxxxxxxxxxxx" # pragma: whitelist secret - service_to_service_enabled = false - } - } - - resource "ibm_atracker_settings" "atracker_settings" { - metadata_region_primary = "%s" - metadata_region_backup = "us-east" - private_api_endpoint_only = %s - default_targets = [ ibm_atracker_target.atracker_target.id ] - permitted_target_regions = ["us-south", "us-east"] - } - `, metadataRegionPrimary, privateAPIEndpointOnly) + `, metadataRegionPrimary, + metadataRegionBackup, privateAPIEndpointOnly) } func testAccCheckIBMAtrackerSettingsExists(n string, obj atrackerv2.Settings) resource.TestCheckFunc {