Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Atracker v2 metadata backup #3887

Merged
merged 5 commits into from
Aug 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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.32.0
github.com/IBM/platform-services-go-sdk v0.27.0
github.com/IBM/platform-services-go-sdk v0.28.1
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
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ github.com/IBM/networking-go-sdk v0.32.0 h1:QWd7CxC+Wzap+zWFfXMjbqB5LpvrB1KvNtIb
github.com/IBM/networking-go-sdk v0.32.0/go.mod h1:tVxXclpQs8nQJYPTr9ZPNC1voaPNQLy8iy/72oVfFtM=
github.com/IBM/platform-services-go-sdk v0.27.0 h1:f32yicOrrQigzoOUNeNbr2lhwoB6mRK0izdQOQDg9Vk=
github.com/IBM/platform-services-go-sdk v0.27.0/go.mod h1:ZFuISyKu+qekMfvFebzqJ8AIpNlRqI7a6WuieGfjGuA=
github.com/IBM/platform-services-go-sdk v0.28.1 h1:0f/Av3Ub+udL28PSEmYN98YtpH9jK+wrCKeQaejB5Qg=
github.com/IBM/platform-services-go-sdk v0.28.1/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=
Expand Down
57 changes: 26 additions & 31 deletions ibm/service/atracker/resource_ibm_atracker_settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if user doesn't provide metadata_region_backup will we have any default value?
In Read we are setting back

d.Set("metadata_region_backup", settings.MetadataRegionBackup)

what value we get?
if we have some value we should mark it as both optional and computed

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no default value for this, it is expected to return "" if nothing has been set.

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,
Expand All @@ -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: 0,
MaxValueLength: 256,
},
)

resourceValidator := validate.ResourceValidator{ResourceName: "ibm_atracker_settings", Schema: validateSchema}
Expand All @@ -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 {
Expand Down Expand Up @@ -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))
}
Expand All @@ -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)
Expand All @@ -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)
Expand Down
41 changes: 12 additions & 29 deletions ibm/service/atracker/resource_ibm_atracker_settings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,26 +26,31 @@ 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),
),
},
},
})
}

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"
Expand All @@ -61,33 +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"
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 {
Expand Down
3 changes: 3 additions & 0 deletions website/docs/r/atracker_settings.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.
Expand Down