diff --git a/internal/service/resiliencehub/resiliency_policy.go b/internal/service/resiliencehub/resiliency_policy.go index 520ae6825e8e..5c7571d5019f 100644 --- a/internal/service/resiliencehub/resiliency_policy.go +++ b/internal/service/resiliencehub/resiliency_policy.go @@ -14,14 +14,13 @@ import ( "github.com/aws/aws-sdk-go-v2/service/resiliencehub" awstypes "github.com/aws/aws-sdk-go-v2/service/resiliencehub/types" "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" - "github.com/hashicorp/terraform-plugin-framework-validators/int32validator" + "github.com/hashicorp/terraform-plugin-framework-timetypes/timetypes" "github.com/hashicorp/terraform-plugin-framework-validators/objectvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/int32planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/schema/validator" @@ -64,24 +63,20 @@ func (r *resourceResiliencyPolicy) Metadata(_ context.Context, req resource.Meta func (r *resourceResiliencyPolicy) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { requiredObjAttrs := map[string]schema.Attribute{ - "rto_in_secs": schema.Int32Attribute{ - Description: "Recovery Time Objective (RTO) in seconds.", + "rto": schema.StringAttribute{ + Description: "Recovery Time Objective (RTO) as a Go duration.", + CustomType: timetypes.GoDurationType{}, Required: true, - PlanModifiers: []planmodifier.Int32{ - int32planmodifier.UseStateForUnknown(), - }, - Validators: []validator.Int32{ - int32validator.AtLeast(0), + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), }, }, - "rpo_in_secs": schema.Int32Attribute{ - Description: "Recovery Point Objective (RPO) in seconds.", + "rpo": schema.StringAttribute{ + Description: "Recovery Point Objective (RPO) as a Go duration.", + CustomType: timetypes.GoDurationType{}, Required: true, - PlanModifiers: []planmodifier.Int32{ - int32planmodifier.UseStateForUnknown(), - }, - Validators: []validator.Int32{ - int32validator.AtLeast(0), + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), }, }, } @@ -172,29 +167,25 @@ func (r *resourceResiliencyPolicy) Schema(ctx context.Context, req resource.Sche Description: "The RTO and RPO target to measure resiliency for potential region disruptions.", Validators: []validator.Object{ objectvalidator.AlsoRequires( - path.MatchRelative().AtName("rto_in_secs"), - path.MatchRelative().AtName("rpo_in_secs"), + path.MatchRelative().AtName("rto"), + path.MatchRelative().AtName("rpo"), ), }, Attributes: map[string]schema.Attribute{ - "rto_in_secs": schema.Int32Attribute{ - Description: "Recovery Time Objective (RTO) in seconds.", + "rto": schema.StringAttribute{ + Description: "Recovery Time Objective (RTO) as a Go duration.", + CustomType: timetypes.GoDurationType{}, Optional: true, - PlanModifiers: []planmodifier.Int32{ - int32planmodifier.UseStateForUnknown(), - }, - Validators: []validator.Int32{ - int32validator.AtLeast(0), + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), }, }, - "rpo_in_secs": schema.Int32Attribute{ - Description: "Recovery Point Objective (RPO) in seconds.", + "rpo": schema.StringAttribute{ + Description: "Recovery Point Objective (RPO) as a Go duration.", + CustomType: timetypes.GoDurationType{}, Optional: true, - PlanModifiers: []planmodifier.Int32{ - int32planmodifier.UseStateForUnknown(), - }, - Validators: []validator.Int32{ - int32validator.AtLeast(0), + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), }, }, }, @@ -546,18 +537,26 @@ func (m *resourceResiliencyPolicyModel) expandPolicy(ctx context.Context) (resul awstypes.TestTypeAz: m.AZ, awstypes.TestTypeHardware: m.Hardware, awstypes.TestTypeSoftware: m.Software, - awstypes.TestTypeRegion: m.Region} - + awstypes.TestTypeRegion: m.Region, + } for k, v := range failurePolicyKeyMap { if !v.IsNull() { resObjModel, d := v.ToPtr(ctx) diags.Append(d...) - if diags.HasError() { + if d.HasError() { + return result, diags + } + rpo, d := resObjModel.Rpo.ValueGoDuration() + if d.HasError() { + return result, diags + } + rto, d := resObjModel.Rto.ValueGoDuration() + if d.HasError() { return result, diags } failurePolicy[string(k)] = awstypes.FailurePolicy{ - RpoInSecs: resObjModel.RpoInSecs.ValueInt32(), - RtoInSecs: resObjModel.RtoInSecs.ValueInt32(), + RpoInSecs: int32(rpo.Seconds()), + RtoInSecs: int32(rto.Seconds()), } } } @@ -575,8 +574,9 @@ func (m *resourceResiliencyPolicyData) flattenPolicy(ctx context.Context, failur newResObjModel := func(policyType awstypes.TestType, failurePolicy map[string]awstypes.FailurePolicy) fwtypes.ObjectValueOf[resourceResiliencyObjectiveModel] { if pv, exists := failurePolicy[string(policyType)]; exists { return fwtypes.NewObjectValueOfMust(ctx, &resourceResiliencyObjectiveModel{ - RpoInSecs: types.Int32Value(pv.RpoInSecs), - RtoInSecs: types.Int32Value(pv.RtoInSecs)}) + Rpo: timetypes.NewGoDurationValue(time.Duration(pv.RpoInSecs) * time.Second), + Rto: timetypes.NewGoDurationValue(time.Duration(pv.RtoInSecs) * time.Second), + }) } else { return fwtypes.NewObjectValueOfNull[resourceResiliencyObjectiveModel](ctx) } @@ -611,6 +611,6 @@ type resourceResiliencyPolicyModel struct { } type resourceResiliencyObjectiveModel struct { - RpoInSecs types.Int32 `tfsdk:"rpo_in_secs"` - RtoInSecs types.Int32 `tfsdk:"rto_in_secs"` + Rpo timetypes.GoDuration `tfsdk:"rpo"` + Rto timetypes.GoDuration `tfsdk:"rto"` } diff --git a/internal/service/resiliencehub/resiliency_policy_test.go b/internal/service/resiliencehub/resiliency_policy_test.go index 478d5190d253..b0bc5fb6a617 100644 --- a/internal/service/resiliencehub/resiliency_policy_test.go +++ b/internal/service/resiliencehub/resiliency_policy_test.go @@ -57,14 +57,14 @@ func TestAccResilienceHubResiliencyPolicy_basic(t *testing.T) { resource.TestCheckNoResourceAttr(resourceName, names.AttrDescription), resource.TestCheckResourceAttr(resourceName, "tier", "NotApplicable"), resource.TestCheckResourceAttr(resourceName, "data_location_constraint", "AnyLocation"), - resource.TestCheckResourceAttr(resourceName, "policy.az.rpo_in_secs", "3600"), - resource.TestCheckResourceAttr(resourceName, "policy.az.rto_in_secs", "3600"), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo_in_secs", "3600"), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto_in_secs", "3600"), - resource.TestCheckNoResourceAttr(resourceName, "policy.region.rpo_in_secs"), - resource.TestCheckNoResourceAttr(resourceName, "policy.region.rto_in_secs"), - resource.TestCheckResourceAttr(resourceName, "policy.software.rpo_in_secs", "3600"), - resource.TestCheckResourceAttr(resourceName, "policy.software.rto_in_secs", "3600"), + resource.TestCheckResourceAttr(resourceName, "policy.az.rpo", "1h0m0s"), + resource.TestCheckResourceAttr(resourceName, "policy.az.rto", "1h0m0s"), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo", "1h0m0s"), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto", "1h0m0s"), + resource.TestCheckNoResourceAttr(resourceName, "policy.region.rpo"), + resource.TestCheckNoResourceAttr(resourceName, "policy.region.rto"), + resource.TestCheckResourceAttr(resourceName, "policy.software.rpo", "1h0m0s"), + resource.TestCheckResourceAttr(resourceName, "policy.software.rto", "1h0m0s"), ), }, { @@ -307,8 +307,8 @@ func TestAccResilienceHubResiliencyPolicy_policy(t *testing.T) { expectNoARNChange := statecheck.CompareValue(compare.ValuesSame()) const ( - initialDuration = "3600" - updatedDuration = "86400" + initialDuration = "1h0m0s" + updatedDuration = "24h0m0s" ) resource.ParallelTest(t, resource.TestCase{ @@ -325,14 +325,14 @@ func TestAccResilienceHubResiliencyPolicy_policy(t *testing.T) { Config: testAccResiliencyPolicyConfig_policy(rName, initialDuration), Check: resource.ComposeTestCheckFunc( testAccCheckResiliencyPolicyExists(ctx, resourceName, &policy1), - resource.TestCheckResourceAttr(resourceName, "policy.az.rpo_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.az.rto_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto_in_secs", initialDuration), - resource.TestCheckNoResourceAttr(resourceName, "policy.region.rpo_in_secs"), - resource.TestCheckNoResourceAttr(resourceName, "policy.region.rto_in_secs"), - resource.TestCheckResourceAttr(resourceName, "policy.software.rpo_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rto_in_secs", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rpo", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rto", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto", initialDuration), + resource.TestCheckNoResourceAttr(resourceName, "policy.region.rpo"), + resource.TestCheckNoResourceAttr(resourceName, "policy.region.rto"), + resource.TestCheckResourceAttr(resourceName, "policy.software.rpo", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rto", initialDuration), ), ConfigStateChecks: []statecheck.StateCheck{ expectNoARNChange.AddStateValue(resourceName, tfjsonpath.New(names.AttrARN)), @@ -354,14 +354,14 @@ func TestAccResilienceHubResiliencyPolicy_policy(t *testing.T) { Config: testAccResiliencyPolicyConfig_policy(rName, updatedDuration), Check: resource.ComposeTestCheckFunc( testAccCheckResiliencyPolicyExists(ctx, resourceName, &policy2), - resource.TestCheckResourceAttr(resourceName, "policy.az.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.az.rto_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto_in_secs", updatedDuration), - resource.TestCheckNoResourceAttr(resourceName, "policy.region.rpo_in_secs"), - resource.TestCheckNoResourceAttr(resourceName, "policy.region.rto_in_secs"), - resource.TestCheckResourceAttr(resourceName, "policy.software.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rto_in_secs", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rto", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto", updatedDuration), + resource.TestCheckNoResourceAttr(resourceName, "policy.region.rpo"), + resource.TestCheckNoResourceAttr(resourceName, "policy.region.rto"), + resource.TestCheckResourceAttr(resourceName, "policy.software.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rto", updatedDuration), ), ConfigStateChecks: []statecheck.StateCheck{ expectNoARNChange.AddStateValue(resourceName, tfjsonpath.New(names.AttrARN)), @@ -383,14 +383,14 @@ func TestAccResilienceHubResiliencyPolicy_policy(t *testing.T) { Config: testAccResiliencyPolicyConfig_policyWithRegion(rName, updatedDuration), Check: resource.ComposeTestCheckFunc( testAccCheckResiliencyPolicyExists(ctx, resourceName, &policy2), - resource.TestCheckResourceAttr(resourceName, "policy.az.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.az.rto_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.region.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.region.rto_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rto_in_secs", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rto", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.region.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.region.rto", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rto", updatedDuration), ), ConfigStateChecks: []statecheck.StateCheck{ expectNoARNChange.AddStateValue(resourceName, tfjsonpath.New(names.AttrARN)), @@ -425,8 +425,8 @@ func TestAccResilienceHubResiliencyPolicy_policyWithRegion(t *testing.T) { expectNoARNChange := statecheck.CompareValue(compare.ValuesSame()) const ( - initialDuration = "3600" - updatedDuration = "86400" + initialDuration = "1h0m0s" + updatedDuration = "24h0m0s" ) resource.ParallelTest(t, resource.TestCase{ @@ -443,14 +443,14 @@ func TestAccResilienceHubResiliencyPolicy_policyWithRegion(t *testing.T) { Config: testAccResiliencyPolicyConfig_policyWithRegion(rName, initialDuration), Check: resource.ComposeTestCheckFunc( testAccCheckResiliencyPolicyExists(ctx, resourceName, &policy1), - resource.TestCheckResourceAttr(resourceName, "policy.az.rpo_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.az.rto_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.region.rpo_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.region.rto_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rpo_in_secs", initialDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rto_in_secs", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rpo", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rto", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.region.rpo", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.region.rto", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rpo", initialDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rto", initialDuration), ), ConfigStateChecks: []statecheck.StateCheck{ expectNoARNChange.AddStateValue(resourceName, tfjsonpath.New(names.AttrARN)), @@ -472,14 +472,14 @@ func TestAccResilienceHubResiliencyPolicy_policyWithRegion(t *testing.T) { Config: testAccResiliencyPolicyConfig_policyWithRegion(rName, updatedDuration), Check: resource.ComposeTestCheckFunc( testAccCheckResiliencyPolicyExists(ctx, resourceName, &policy2), - resource.TestCheckResourceAttr(resourceName, "policy.az.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.az.rto_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.region.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.region.rto_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rto_in_secs", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rto", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.region.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.region.rto", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rto", updatedDuration), ), ConfigStateChecks: []statecheck.StateCheck{ expectNoARNChange.AddStateValue(resourceName, tfjsonpath.New(names.AttrARN)), @@ -501,14 +501,14 @@ func TestAccResilienceHubResiliencyPolicy_policyWithRegion(t *testing.T) { Config: testAccResiliencyPolicyConfig_policy(rName, updatedDuration), Check: resource.ComposeTestCheckFunc( testAccCheckResiliencyPolicyExists(ctx, resourceName, &policy2), - resource.TestCheckResourceAttr(resourceName, "policy.az.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.az.rto_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto_in_secs", updatedDuration), - resource.TestCheckNoResourceAttr(resourceName, "policy.region.rpo_in_secs"), - resource.TestCheckNoResourceAttr(resourceName, "policy.region.rto_in_secs"), - resource.TestCheckResourceAttr(resourceName, "policy.software.rpo_in_secs", updatedDuration), - resource.TestCheckResourceAttr(resourceName, "policy.software.rto_in_secs", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.az.rto", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.hardware.rto", updatedDuration), + resource.TestCheckNoResourceAttr(resourceName, "policy.region.rpo"), + resource.TestCheckNoResourceAttr(resourceName, "policy.region.rto"), + resource.TestCheckResourceAttr(resourceName, "policy.software.rpo", updatedDuration), + resource.TestCheckResourceAttr(resourceName, "policy.software.rto", updatedDuration), ), ConfigStateChecks: []statecheck.StateCheck{ expectNoARNChange.AddStateValue(resourceName, tfjsonpath.New(names.AttrARN)), @@ -775,16 +775,16 @@ resource "aws_resiliencehub_resiliency_policy" "test" { policy { az { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } hardware { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } software { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } } } @@ -802,16 +802,16 @@ resource "aws_resiliencehub_resiliency_policy" "test" { policy { az { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } hardware { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } software { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } } } @@ -829,16 +829,16 @@ resource "aws_resiliencehub_resiliency_policy" "test" { policy { az { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } hardware { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } software { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } } } @@ -856,16 +856,16 @@ resource "aws_resiliencehub_resiliency_policy" "test" { policy { az { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } hardware { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } software { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } } } @@ -881,16 +881,16 @@ resource "aws_resiliencehub_resiliency_policy" "test" { policy { az { - rpo_in_secs = %[2]s - rto_in_secs = %[2]s + rpo = %[2]q + rto = %[2]q } hardware { - rpo_in_secs = %[2]s - rto_in_secs = %[2]s + rpo = %[2]q + rto = %[2]q } software { - rpo_in_secs = %[2]s - rto_in_secs = %[2]s + rpo = %[2]q + rto = %[2]q } } } @@ -906,20 +906,20 @@ resource "aws_resiliencehub_resiliency_policy" "test" { policy { az { - rpo_in_secs = %[2]s - rto_in_secs = %[2]s + rpo = %[2]q + rto = %[2]q } hardware { - rpo_in_secs = %[2]s - rto_in_secs = %[2]s + rpo = %[2]q + rto = %[2]q } region { - rpo_in_secs = %[2]s - rto_in_secs = %[2]s + rpo = %[2]q + rto = %[2]q } software { - rpo_in_secs = %[2]s - rto_in_secs = %[2]s + rpo = %[2]q + rto = %[2]q } } } @@ -939,20 +939,20 @@ resource "aws_resiliencehub_resiliency_policy" "test" { policy { region { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } az { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } hardware { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } software { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } } @@ -976,20 +976,20 @@ resource "aws_resiliencehub_resiliency_policy" "test" { policy { region { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } az { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } hardware { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } software { - rpo_in_secs = 3600 - rto_in_secs = 3600 + rpo = "1h0m0s" + rto = "1h0m0s" } } diff --git a/website/docs/r/resiliencehub_resiliency_policy.html.markdown b/website/docs/r/resiliencehub_resiliency_policy.html.markdown index bfabdc0e9b23..3ddee6e8db0c 100644 --- a/website/docs/r/resiliencehub_resiliency_policy.html.markdown +++ b/website/docs/r/resiliencehub_resiliency_policy.html.markdown @@ -23,20 +23,20 @@ resource "aws_resiliencehub_resiliency_policy" "example" { policy { region { - rpo_in_secs = 86400 - rto_in_secs = 86400 + rpo = "24h" + rto = "24h" } az { - rpo_in_secs = 86400 - rto_in_secs = 86400 + rpo = "24h" + rto = "24h" } hardware { - rpo_in_secs = 86400 - rto_in_secs = 86400 + rpo = "24h" + rto = "24h" } software { - rpo_in_secs = 86400 - rto_in_secs = 86400 + rpo = "24h" + rto = "24h" } } } @@ -76,30 +76,38 @@ The following arguments are optional: The following arguments are required: -* `rpo_in_secs` - (Number) RPO in seconds. -* `rto_in_secs` - (Number) RTO in seconds. +* `rpo` - (Number) Recovery Point Objective (RPO) as a Go duration. + Represented by a string such as `1h`, `2h45m`, or `30m15s`. +* `rto` - (Number) Recovery Time Objective (RTO) as a Go duration. + Represented by a string such as `1h`, `2h45m`, or `30m15s`. ### `policy.hardware` The following arguments are required: -* `rpo_in_secs` - (Number) RPO in seconds. -* `rto_in_secs` - (Number) RTO in seconds. +* `rpo` - (Number) Recovery Point Objective (RPO) as a Go duration. + Represented by a string such as `1h`, `2h45m`, or `30m15s`. +* `rto` - (Number) Recovery Time Objective (RTO) as a Go duration. + Represented by a string such as `1h`, `2h45m`, or `30m15s`. ### `policy.software` The following arguments are required: -* `rpo_in_secs` - (Number) RPO in seconds. -* `rto_in_secs` - (Number) RTO in seconds. +* `rpo` - (Number) Recovery Point Objective (RPO) as a Go duration. + Represented by a string such as `1h`, `2h45m`, or `30m15s`. +* `rto` - (Number) Recovery Time Objective (RTO) as a Go duration. + Represented by a string such as `1h`, `2h45m`, or `30m15s`. ### `policy.region` The following arguments are required: -* `rpo_in_secs` - (Number) RPO in seconds. -* `rto_in_secs` - (Number) RTO in seconds. - +* `rpo` - (Number) Recovery Point Objective (RPO) as a Go duration. + Represented by a string such as `1h`, `2h45m`, or `30m15s`. +* `rto` - (Number) Recovery Time Objective (RTO) as a Go duration. + Represented by a string such as `1h`, `2h45m`, or `30m15s`. + ## Attribute Reference This resource exports the following attributes in addition to the arguments above: