From 099bd8c4066124eb2e1bb01e83519303886977df Mon Sep 17 00:00:00 2001 From: Sasi Date: Thu, 22 Jun 2023 19:26:43 -0400 Subject: [PATCH 01/19] New resources and data sources for step function alias and versioning --- go.mod | 2 +- go.sum | 4 +- internal/service/sfn/alias.go | 280 ++++++++++++++++ internal/service/sfn/alias_data_source.go | 111 ++++++ .../service/sfn/alias_data_source_test.go | 46 +++ internal/service/sfn/alias_test.go | 317 ++++++++++++++++++ internal/service/sfn/service_package_gen.go | 13 +- internal/service/sfn/state_machine.go | 41 ++- .../service/sfn/state_machine_data_source.go | 12 +- .../sfn/state_machine_data_source_test.go | 1 + internal/service/sfn/state_machine_test.go | 109 +++++- .../sfn/state_machine_versions_data_source.go | 67 ++++ ...state_machine_versions_data_source_test.go | 41 +++ website/docs/d/sfn_alias.html.markdown | 38 +++ .../docs/d/sfn_state_machine.html.markdown | 1 + .../sfn_state_machine_versions.html.markdown | 34 ++ website/docs/r/sfn_alias.html.markdown | 69 ++++ .../docs/r/sfn_state_machine.html.markdown | 28 ++ 18 files changed, 1191 insertions(+), 23 deletions(-) create mode 100644 internal/service/sfn/alias.go create mode 100644 internal/service/sfn/alias_data_source.go create mode 100644 internal/service/sfn/alias_data_source_test.go create mode 100644 internal/service/sfn/alias_test.go create mode 100644 internal/service/sfn/state_machine_versions_data_source.go create mode 100644 internal/service/sfn/state_machine_versions_data_source_test.go create mode 100644 website/docs/d/sfn_alias.html.markdown create mode 100644 website/docs/d/sfn_state_machine_versions.html.markdown create mode 100644 website/docs/r/sfn_alias.html.markdown diff --git a/go.mod b/go.mod index 172a4d625e45..a81fcd1f89d4 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 - github.com/aws/aws-sdk-go v1.44.286 + github.com/aws/aws-sdk-go v1.44.288 github.com/aws/aws-sdk-go-v2 v1.18.1 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4 github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.19.14 diff --git a/go.sum b/go.sum index 99ec7c5403d9..a7977ff3309e 100644 --- a/go.sum +++ b/go.sum @@ -15,8 +15,8 @@ github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6 github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aws/aws-sdk-go v1.44.286 h1:bLnBVutuyCGYZgQlu3wiXOJXtgI7EIWAaDIqVVudF3w= -github.com/aws/aws-sdk-go v1.44.286/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.288 h1:Ln7fIao/nl0ACtelgR1I4AiEw/GLNkKcXfCaHupUW5Q= +github.com/aws/aws-sdk-go v1.44.288/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= github.com/aws/aws-sdk-go-v2 v1.18.1 h1:+tefE750oAb7ZQGzla6bLkOwfcQCEtC5y2RqoqCeqKo= github.com/aws/aws-sdk-go-v2 v1.18.1/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= diff --git a/internal/service/sfn/alias.go b/internal/service/sfn/alias.go new file mode 100644 index 000000000000..ea0ace12da10 --- /dev/null +++ b/internal/service/sfn/alias.go @@ -0,0 +1,280 @@ +package sfn + +import ( + "context" + "errors" + "log" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/sfn" + "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// @SDKResource("aws_sfn_alias") +func ResourceAlias() *schema.Resource { + return &schema.Resource{ + CreateWithoutTimeout: resourceAliasCreate, + ReadWithoutTimeout: resourceAliasRead, + UpdateWithoutTimeout: resourceAliasUpdate, + DeleteWithoutTimeout: resourceAliasDelete, + + Importer: &schema.ResourceImporter{ + StateContext: schema.ImportStatePassthroughContext, + }, + + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(30 * time.Minute), + Update: schema.DefaultTimeout(30 * time.Minute), + Delete: schema.DefaultTimeout(30 * time.Minute), + }, + Schema: map[string]*schema.Schema{ + "arn": { + Type: schema.TypeString, + Computed: true, + }, + "creation_date": { + Type: schema.TypeString, + Computed: true, + }, + "description": { + Type: schema.TypeString, + Optional: true, + }, + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "routing_configuration": { + Type: schema.TypeList, + Required: true, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "state_machine_version_arn": { + Type: schema.TypeString, + Required: true, + }, + "weight": { + Type: schema.TypeInt, + Required: true, + }, + }, + }, + }, + }, + } +} + +const ( + ResNameAlias = "Alias" +) + +func resourceAliasCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SFNConn(ctx) + + in := &sfn.CreateStateMachineAliasInput{ + Name: aws.String(d.Get("name").(string)), + Description: aws.String(d.Get("description").(string)), + } + + if v, ok := d.GetOk("routing_configuration"); ok && len(v.([]interface{})) > 0 { + in.RoutingConfiguration = expandAliasRoutingConfiguration(v.([]interface{})) + } + + out, err := conn.CreateStateMachineAliasWithContext(ctx, in) + if err != nil { + return create.DiagError(names.SFN, create.ErrActionCreating, ResNameAlias, d.Get("name").(string), err) + } + + if out == nil || out.StateMachineAliasArn == nil { + return create.DiagError(names.SFN, create.ErrActionCreating, ResNameAlias, d.Get("name").(string), errors.New("empty output")) + } + + d.SetId(aws.StringValue(out.StateMachineAliasArn)) + + return resourceAliasRead(ctx, d, meta) +} + +func resourceAliasRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SFNConn(ctx) + + out, err := FindAliasByARN(ctx, conn, d.Id()) + + if !d.IsNewResource() && tfresource.NotFound(err) { + log.Printf("[WARN] SFN Alias (%s) not found, removing from state", d.Id()) + d.SetId("") + return nil + } + + if err != nil { + return create.DiagError(names.SFN, create.ErrActionReading, ResNameAlias, d.Id(), err) + } + + d.Set("arn", out.StateMachineAliasArn) + d.Set("name", out.Name) + d.Set("description", out.Description) + d.Set("creation_date", aws.TimeValue(out.CreationDate).Format(time.RFC3339)) + d.SetId(aws.StringValue(out.StateMachineAliasArn)) + + if err := d.Set("routing_configuration", flattenAliasRoutingConfiguration(d, out.RoutingConfiguration)); err != nil { + return create.DiagError(names.SFN, create.ErrActionSetting, ResNameAlias, d.Id(), err) + } + return nil +} + +func resourceAliasUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SFNConn(ctx) + + update := false + + in := &sfn.UpdateStateMachineAliasInput{ + StateMachineAliasArn: aws.String(d.Id()), + } + + if d.HasChanges("description") { + in.Description = aws.String(d.Get("description").(string)) + update = true + } + + if d.HasChange("routing_configuration") { + in.RoutingConfiguration = expandAliasRoutingConfiguration(d.Get("routing_configuration").([]interface{})) + update = true + } + + if !update { + return nil + } + + log.Printf("[DEBUG] Updating SFN Alias (%s): %#v", d.Id(), in) + _, err := conn.UpdateStateMachineAliasWithContext(ctx, in) + if err != nil { + return create.DiagError(names.SFN, create.ErrActionUpdating, ResNameAlias, d.Id(), err) + } + + return resourceAliasRead(ctx, d, meta) +} + +func resourceAliasDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SFNConn(ctx) + log.Printf("[INFO] Deleting SFN Alias %s", d.Id()) + + _, err := conn.DeleteStateMachineAliasWithContext(ctx, &sfn.DeleteStateMachineAliasInput{ + StateMachineAliasArn: aws.String(d.Id()), + }) + + if err != nil { + return create.DiagError(names.SFN, create.ErrActionDeleting, ResNameAlias, d.Id(), err) + } + + return nil +} + +func FindAliasByARN(ctx context.Context, conn *sfn.SFN, arn string) (*sfn.DescribeStateMachineAliasOutput, error) { + in := &sfn.DescribeStateMachineAliasInput{ + StateMachineAliasArn: aws.String(arn), + } + out, err := conn.DescribeStateMachineAliasWithContext(ctx, in) + if tfawserr.ErrCodeEquals(err, sfn.ErrCodeResourceNotFound) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + + if err != nil { + return nil, err + } + + if out == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return out, nil +} + +func flattenAliasRoutingConfigurationItem(d *schema.ResourceData, i int, apiObject *sfn.RoutingConfigurationListItem) map[string]interface{} { + if apiObject == nil { + return nil + } + + tfMap := map[string]interface{}{} + + if v := apiObject.StateMachineVersionArn; v != nil { + tfMap["state_machine_version_arn"] = aws.StringValue(v) + } + + if v := apiObject.Weight; v != nil { + tfMap["weight"] = aws.Int64Value(v) + } + + return tfMap +} + +func flattenAliasRoutingConfiguration(d *schema.ResourceData, apiObjects []*sfn.RoutingConfigurationListItem) []interface{} { + if len(apiObjects) == 0 { + return nil + } + + var tfList []interface{} + + for i, apiObject := range apiObjects { + if apiObject == nil { + continue + } + + tfList = append(tfList, flattenAliasRoutingConfigurationItem(d, i, apiObject)) + } + + return tfList +} + +func expandAliasRoutingConfiguration(tfList []interface{}) []*sfn.RoutingConfigurationListItem { + if len(tfList) == 0 { + return nil + } + var configurationListItems []*sfn.RoutingConfigurationListItem + + for _, tfMapRaw := range tfList { + tfMap, ok := tfMapRaw.(map[string]interface{}) + + if !ok { + continue + } + + configurationListItem := expandAliasRoutingConfigurationItem(tfMap) + + if configurationListItem == nil { + continue + } + + configurationListItems = append(configurationListItems, configurationListItem) + } + + return configurationListItems +} + +func expandAliasRoutingConfigurationItem(tfMap map[string]interface{}) *sfn.RoutingConfigurationListItem { + if tfMap == nil { + return nil + } + + apiObject := &sfn.RoutingConfigurationListItem{} + if v, ok := tfMap["state_machine_version_arn"].(string); ok && v != "" { + apiObject.StateMachineVersionArn = aws.String(v) + } + + if v, ok := tfMap["weight"].(int); ok && v != 0 { + apiObject.Weight = aws.Int64(int64(v)) + } + + return apiObject +} diff --git a/internal/service/sfn/alias_data_source.go b/internal/service/sfn/alias_data_source.go new file mode 100644 index 000000000000..4859a37c3155 --- /dev/null +++ b/internal/service/sfn/alias_data_source.go @@ -0,0 +1,111 @@ +package sfn + +import ( + "context" + "strings" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/sfn" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func DataSourceAlias() *schema.Resource { + return &schema.Resource{ + ReadWithoutTimeout: dataSourceAliasRead, + + Schema: map[string]*schema.Schema{ + "arn": { + Type: schema.TypeString, + Computed: true, + }, + "creation_date": { + Type: schema.TypeString, + Computed: true, + }, + "description": { + Type: schema.TypeString, + Optional: true, + }, + "name": { + Type: schema.TypeString, + Required: true, + }, + "routing_configuration": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "state_machine_version_arn": { + Type: schema.TypeString, + Required: true, + }, + "weight": { + Type: schema.TypeInt, + Required: true, + }, + }, + }, + }, + "statemachine_arn": { + Type: schema.TypeString, + Required: true, + }, + }, + } +} + +const ( + DSNameAlias = "Alias Data Source" +) + +func dataSourceAliasRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SFNConn(ctx) + aliasArn := "" + + in := &sfn.ListStateMachineAliasesInput{ + StateMachineArn: aws.String(d.Get("statemachine_arn").(string)), + } + + out, err := conn.ListStateMachineAliasesWithContext(ctx, in) + + if err != nil { + return diag.Errorf("listing Step Functions State Machines: %s", err) + } + + if n := len(out.StateMachineAliases); n == 0 { + return diag.Errorf("no Step Functions State Machine Aliases matched") + } + + for _, in := range out.StateMachineAliases { + if strings.HasSuffix(*in.StateMachineAliasArn, d.Get("name").(string)) { + aliasArn = *in.StateMachineAliasArn + } + } + + if aliasArn == "" { + return diag.Errorf("no Step Functions State Machine Aliases matched") + } + + output, err := FindAliasByARN(ctx, conn, aliasArn) + + if err != nil { + return diag.Errorf("reading Step Functions State Machine Alias (%s): %s", aliasArn, err) + } + + d.SetId(aliasArn) + d.Set("arn", output.StateMachineAliasArn) + d.Set("name", output.Name) + d.Set("description", output.Description) + d.Set("creation_date", aws.TimeValue(output.CreationDate).Format(time.RFC3339)) + + if err := d.Set("routing_configuration", flattenAliasRoutingConfiguration(d, output.RoutingConfiguration)); err != nil { + return create.DiagError(names.SFN, create.ErrActionSetting, ResNameAlias, d.Id(), err) + } + + return nil +} diff --git a/internal/service/sfn/alias_data_source_test.go b/internal/service/sfn/alias_data_source_test.go new file mode 100644 index 000000000000..da5864c6f8cc --- /dev/null +++ b/internal/service/sfn/alias_data_source_test.go @@ -0,0 +1,46 @@ +package sfn_test + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/service/sfn" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" +) + +func TestAccSFNAliasDataSource_basic(t *testing.T) { + ctx := acctest.Context(t) + dataSourceName := "data.aws_sfn_alias.test" + resourceName := "aws_sfn_alias.test" + rString := sdkacctest.RandString(8) + stateMachineName := fmt.Sprintf("tf_acc_state_machine_alias_basic_%s", rString) + aliasName := fmt.Sprintf("tf_acc_state_machine_alias_basic_%s", rString) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, sfn.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + Steps: []resource.TestStep{ + { + Config: testAccSFNAliasDataSourceConfig_basic(stateMachineName, aliasName, 10), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttrPair(resourceName, "id", dataSourceName, "arn"), + resource.TestCheckResourceAttrPair(resourceName, "creation_date", dataSourceName, "creation_date"), + resource.TestCheckResourceAttrPair(resourceName, "description", dataSourceName, "description"), + resource.TestCheckResourceAttrPair(resourceName, "name", dataSourceName, "name"), + ), + }, + }, + }) +} + +func testAccSFNAliasDataSourceConfig_basic(statemachineName string, aliasName string, rMaxAttempts int) string { + return acctest.ConfigCompose(testAccStateMachineAliasConfig_basic(statemachineName, aliasName, rMaxAttempts), ` +data "aws_sfn_alias" "test" { + name = aws_sfn_alias.test.name + statemachine_arn = aws_sfn_state_machine.test.arn +} +`) +} diff --git a/internal/service/sfn/alias_test.go b/internal/service/sfn/alias_test.go new file mode 100644 index 000000000000..acfaa14c1417 --- /dev/null +++ b/internal/service/sfn/alias_test.go @@ -0,0 +1,317 @@ +package sfn_test + +import ( + "context" + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/service/sfn" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + + tfsfn "github.com/hashicorp/terraform-provider-aws/internal/service/sfn" +) + +func TestAccSFNAlias_basic(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + var alias sfn.DescribeStateMachineAliasOutput + rString := sdkacctest.RandString(8) + stateMachineName := fmt.Sprintf("tf_acc_state_machine_alias_basic_%s", rString) + aliasName := fmt.Sprintf("tf_acc_state_machine_alias_basic_%s", rString) + resourceName := "aws_sfn_alias.test" + functionArnResourcePart := fmt.Sprintf("stateMachine:%s:%s", stateMachineName, aliasName) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, sfn.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckAliasDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccStateMachineAliasConfig_basic(stateMachineName, aliasName, 10), + Check: resource.ComposeTestCheckFunc( + testAccCheckAliasExists(ctx, resourceName, &alias), + testAccCheckAliasAttributes(&alias), + resource.TestCheckResourceAttrSet(resourceName, "creation_date"), + resource.TestCheckResourceAttr(resourceName, "name", aliasName), + acctest.CheckResourceAttrRegionalARN(resourceName, "arn", "states", functionArnResourcePart), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccSFNAlias_disappears(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + var alias sfn.DescribeStateMachineAliasOutput + rString := sdkacctest.RandString(8) + stateMachineName := fmt.Sprintf("tf_acc_state_machine_alias_basic_%s", rString) + aliasName := fmt.Sprintf("tf_acc_state_machine_alias_basic_%s", rString) + resourceName := "aws_sfn_alias.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, sfn.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckAliasDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccStateMachineAliasConfig_basic(stateMachineName, aliasName, 10), + Check: resource.ComposeTestCheckFunc( + testAccCheckAliasExists(ctx, resourceName, &alias), + acctest.CheckResourceDisappears(ctx, acctest.Provider, tfsfn.ResourceAlias(), resourceName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + +func testAccCheckAliasAttributes(mapping *sfn.DescribeStateMachineAliasOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + name := *mapping.Name + arn := *mapping.StateMachineAliasArn + if arn == "" { + return fmt.Errorf("Could not read StateMachine alias ARN") + } + if name == "" { + return fmt.Errorf("Could not read StateMachine alias name") + } + return nil + } +} + +func testAccCheckAliasDestroy(ctx context.Context) resource.TestCheckFunc { + return func(s *terraform.State) error { + conn := acctest.Provider.Meta().(*conns.AWSClient).SFNConn(ctx) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_sfn_alias" { + continue + } + + _, err := tfsfn.FindAliasByARN(ctx, conn, rs.Primary.ID) + + if tfresource.NotFound(err) { + continue + } + + if err != nil { + return err + } + + return fmt.Errorf("Step Functions State Machine Alias %s still exists", rs.Primary.ID) + } + + return nil + } +} + +func testAccCheckAliasExists(ctx context.Context, name string, v *sfn.DescribeStateMachineAliasOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[name] + if !ok { + return fmt.Errorf("Not found: %s", name) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No Step Functions State Machine Alias ID is set") + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).SFNConn(ctx) + + output, err := tfsfn.FindAliasByARN(ctx, conn, rs.Primary.ID) + + if err != nil { + return err + } + + *v = *output + + return nil + } +} + +func testAccCheckExistsIn(ctx context.Context, n string, v *sfn.DescribeStateMachineOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No Step Functions State Machine ID is set") + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).SFNConn(ctx) + + output, err := tfsfn.FindStateMachineByARN(context.Background(), conn, rs.Primary.ID) + + if err != nil { + return err + } + + *v = *output + + return nil + } +} + +func testAccStateMachineAliasConfig_base(rName string, rMaxAttempts int) string { + return fmt.Sprintf(` +resource "aws_iam_role_policy" "for_lambda" { + name = "%[1]s-lambda" + role = aws_iam_role.for_lambda.id + + policy = < *NOTE:* See the [AWS Step Functions Developer Guide](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) for more information about enabling Step Function logging. @@ -104,6 +131,7 @@ The following arguments are supported: * `logging_configuration` - (Optional) Defines what execution history events are logged and where they are logged. The `logging_configuration` parameter is only valid when `type` is set to `EXPRESS`. Defaults to `OFF`. For more information see [Logging Express Workflows](https://docs.aws.amazon.com/step-functions/latest/dg/cw-logs.html) and [Log Levels](https://docs.aws.amazon.com/step-functions/latest/dg/cloudwatch-log-level.html) in the AWS Step Functions User Guide. * `name` - (Optional) The name of the state machine. The name should only contain `0`-`9`, `A`-`Z`, `a`-`z`, `-` and `_`. If omitted, Terraform will assign a random, unique name. * `name_prefix` - (Optional) Creates a unique name beginning with the specified prefix. Conflicts with `name`. +* `publish` - (Optional) Set to true to publish a version of the state machine during creation. Default: false. * `role_arn` - (Required) The Amazon Resource Name (ARN) of the IAM role to use for this state machine. * `tags` - (Optional) Key-value map of resource tags. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. * `tracing_configuration` - (Optional) Selects whether AWS X-Ray tracing is enabled. From 30c688d490ad577047f801df60819771142c4850 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:17:18 -0400 Subject: [PATCH 02/19] Add CHANGELOG entry. --- .changelog/32176.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .changelog/32176.txt diff --git a/.changelog/32176.txt b/.changelog/32176.txt new file mode 100644 index 000000000000..c6d6e530605f --- /dev/null +++ b/.changelog/32176.txt @@ -0,0 +1,15 @@ +```release-note:new-resource +aws_sfn_alias +``` + +```release-note:new-data-source +aws_sfn_alias +``` + +```release-note:new-data-source +aws_sfn_state_machine_versions +``` + +```release-note:enhancement +resource/aws_sfn_state_machine: Add `description`, `publish`, `revision_id`, `state_machine_version_arn` and `version_description` attributes +``` \ No newline at end of file From ae2531ef07cc2a2bd2869d4532814c998165107c Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:19:38 -0400 Subject: [PATCH 03/19] Add missing '@SDKDataSource(aws_sfn_alias)'. --- internal/service/sfn/alias_data_source.go | 1 + internal/service/sfn/service_package_gen.go | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/internal/service/sfn/alias_data_source.go b/internal/service/sfn/alias_data_source.go index 4859a37c3155..cb17dfdb0353 100644 --- a/internal/service/sfn/alias_data_source.go +++ b/internal/service/sfn/alias_data_source.go @@ -14,6 +14,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) +// @SDKDataSource("aws_sfn_alias") func DataSourceAlias() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceAliasRead, diff --git a/internal/service/sfn/service_package_gen.go b/internal/service/sfn/service_package_gen.go index 1ab1f0b2c687..69f79c7ab52b 100644 --- a/internal/service/sfn/service_package_gen.go +++ b/internal/service/sfn/service_package_gen.go @@ -4,6 +4,7 @@ package sfn import ( "context" + aws_sdkv1 "github.com/aws/aws-sdk-go/aws" session_sdkv1 "github.com/aws/aws-sdk-go/aws/session" sfn_sdkv1 "github.com/aws/aws-sdk-go/service/sfn" @@ -28,14 +29,14 @@ func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePac Factory: DataSourceActivity, TypeName: "aws_sfn_activity", }, - { - Factory: DataSourceStateMachine, - TypeName: "aws_sfn_state_machine", - }, { Factory: DataSourceAlias, TypeName: "aws_sfn_alias", }, + { + Factory: DataSourceStateMachine, + TypeName: "aws_sfn_state_machine", + }, { Factory: DataSourceStateMachineVersions, TypeName: "aws_sfn_state_machine_versions", @@ -53,6 +54,10 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePacka IdentifierAttribute: "id", }, }, + { + Factory: ResourceAlias, + TypeName: "aws_sfn_alias", + }, { Factory: ResourceStateMachine, TypeName: "aws_sfn_state_machine", @@ -61,10 +66,6 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePacka IdentifierAttribute: "id", }, }, - { - Factory: ResourceAlias, - TypeName: "aws_sfn_alias", - }, } } From 522479baa2313eee552e5512aa4067359dd10d27 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:25:18 -0400 Subject: [PATCH 04/19] Fix terrafmt errors with acceptance test configurations. --- .../service/sfn/alias_data_source_test.go | 2 +- internal/service/sfn/alias_test.go | 29 ++++++++++--------- internal/service/sfn/state_machine_test.go | 1 + ...state_machine_versions_data_source_test.go | 5 ++-- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/internal/service/sfn/alias_data_source_test.go b/internal/service/sfn/alias_data_source_test.go index da5864c6f8cc..783e0040b896 100644 --- a/internal/service/sfn/alias_data_source_test.go +++ b/internal/service/sfn/alias_data_source_test.go @@ -39,7 +39,7 @@ func TestAccSFNAliasDataSource_basic(t *testing.T) { func testAccSFNAliasDataSourceConfig_basic(statemachineName string, aliasName string, rMaxAttempts int) string { return acctest.ConfigCompose(testAccStateMachineAliasConfig_basic(statemachineName, aliasName, rMaxAttempts), ` data "aws_sfn_alias" "test" { - name = aws_sfn_alias.test.name + name = aws_sfn_alias.test.name statemachine_arn = aws_sfn_state_machine.test.arn } `) diff --git a/internal/service/sfn/alias_test.go b/internal/service/sfn/alias_test.go index acfaa14c1417..1c788e187fed 100644 --- a/internal/service/sfn/alias_test.go +++ b/internal/service/sfn/alias_test.go @@ -271,12 +271,13 @@ resource "aws_iam_role" "for_sfn" { } EOF } + resource "aws_sfn_state_machine" "test" { - name = %[1]q - publish = true - role_arn = aws_iam_role.for_sfn.arn + name = %[1]q + publish = true + role_arn = aws_iam_role.for_sfn.arn - definition = < Date: Fri, 23 Jun 2023 13:27:54 -0400 Subject: [PATCH 05/19] Fix semgrep 'ci.semgrep.aws.prefer-pointer-conversion-assignment'. --- internal/service/sfn/alias_data_source.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/sfn/alias_data_source.go b/internal/service/sfn/alias_data_source.go index cb17dfdb0353..82656c0c49b1 100644 --- a/internal/service/sfn/alias_data_source.go +++ b/internal/service/sfn/alias_data_source.go @@ -83,8 +83,8 @@ func dataSourceAliasRead(ctx context.Context, d *schema.ResourceData, meta inter } for _, in := range out.StateMachineAliases { - if strings.HasSuffix(*in.StateMachineAliasArn, d.Get("name").(string)) { - aliasArn = *in.StateMachineAliasArn + if v := aws.StringValue(in.StateMachineAliasArn); strings.HasSuffix(v, d.Get("name").(string)) { + aliasArn = v } } From 2632072370ab1b66e4c360eaa71c7ddaa09590d0 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:28:56 -0400 Subject: [PATCH 06/19] Fix semgrep 'ci.helper-schema-ResourceData-Set-extraneous-nil-check'. --- internal/service/sfn/state_machine.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/internal/service/sfn/state_machine.go b/internal/service/sfn/state_machine.go index 4447d2a07f27..b503ea51bdab 100644 --- a/internal/service/sfn/state_machine.go +++ b/internal/service/sfn/state_machine.go @@ -222,10 +222,7 @@ func resourceStateMachineRead(ctx context.Context, d *schema.ResourceData, meta d.Set("creation_date", nil) } d.Set("definition", output.Definition) - - if output.Description != nil { - d.Set("description", output.Description) - } + d.Set("description", output.Description) if output.LoggingConfiguration != nil { if err := d.Set("logging_configuration", []interface{}{flattenLoggingConfiguration(output.LoggingConfiguration)}); err != nil { From f4a4eebab1e72f23b60bd9c89e61f5c8918f1add Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:30:13 -0400 Subject: [PATCH 07/19] Fix semgrep 'ci.semgrep.aws.helper-schema-ResourceData-Set-extraneous-value-pointer-conversion'. --- internal/service/sfn/state_machine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/sfn/state_machine.go b/internal/service/sfn/state_machine.go index b503ea51bdab..5ccd0759da88 100644 --- a/internal/service/sfn/state_machine.go +++ b/internal/service/sfn/state_machine.go @@ -307,7 +307,7 @@ func resourceStateMachineUpdate(ctx context.Context, d *schema.ResourceData, met return diag.Errorf("waiting for Step Functions State Machine (%s) update: %s", d.Id(), err) } - d.Set("state_machine_version_arn", aws.StringValue(out.StateMachineVersionArn)) + d.Set("state_machine_version_arn", out.StateMachineVersionArn) } return resourceStateMachineRead(ctx, d, meta) From 2824923e6d14c130fe18e8e86120d5d6cb5f2e3c Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:31:13 -0400 Subject: [PATCH 08/19] Fix semgrep 'ci.semgrep.migrate.aws-api-context'. --- internal/service/sfn/state_machine_data_source.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/sfn/state_machine_data_source.go b/internal/service/sfn/state_machine_data_source.go index a371a92a8280..68f2de31f2d4 100644 --- a/internal/service/sfn/state_machine_data_source.go +++ b/internal/service/sfn/state_machine_data_source.go @@ -59,7 +59,7 @@ func dataSourceStateMachineRead(ctx context.Context, d *schema.ResourceData, met name := d.Get("name").(string) var arns []string - err := conn.ListStateMachinesPages(&sfn.ListStateMachinesInput{}, func(page *sfn.ListStateMachinesOutput, lastPage bool) bool { + err := conn.ListStateMachinesPagesWithContext(ctx, &sfn.ListStateMachinesInput{}, func(page *sfn.ListStateMachinesOutput, lastPage bool) bool { if page == nil { return !lastPage } From a6bd6142ce33149c933d0b87ce9729ec9781ce48 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:32:22 -0400 Subject: [PATCH 09/19] Fix markdown-lint 'MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]'. --- website/docs/r/sfn_alias.html.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/website/docs/r/sfn_alias.html.markdown b/website/docs/r/sfn_alias.html.markdown index dff7f67d6da9..1d4f796865fb 100644 --- a/website/docs/r/sfn_alias.html.markdown +++ b/website/docs/r/sfn_alias.html.markdown @@ -59,7 +59,6 @@ In addition to all arguments above, the following attributes are exported: * `arn` - The Amazon Resource Name (ARN) identifying your state machine alias. * `creation_date` - The date the state machine alias was created. - ## Import SFN (Step Functions) Alias can be imported using the `arn`, e.g., From 421bba234ee13202fd4d9d459c8c7f7e44fe6859 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:34:18 -0400 Subject: [PATCH 10/19] Fix importlint error. --- internal/service/sfn/alias_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/service/sfn/alias_test.go b/internal/service/sfn/alias_test.go index 1c788e187fed..d2c4ca25dd30 100644 --- a/internal/service/sfn/alias_test.go +++ b/internal/service/sfn/alias_test.go @@ -11,9 +11,8 @@ import ( "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-aws/internal/acctest" "github.com/hashicorp/terraform-provider-aws/internal/conns" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" - tfsfn "github.com/hashicorp/terraform-provider-aws/internal/service/sfn" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" ) func TestAccSFNAlias_basic(t *testing.T) { From cb4cd92dc651c99dc6daffd7b81d1b2e9ca3e23a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:36:20 -0400 Subject: [PATCH 11/19] Fix terrafmt errors with documentation. --- website/docs/d/sfn_alias.html.markdown | 2 +- website/docs/r/sfn_alias.html.markdown | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/website/docs/d/sfn_alias.html.markdown b/website/docs/d/sfn_alias.html.markdown index 3f77498c59e8..1d5b0695a365 100644 --- a/website/docs/d/sfn_alias.html.markdown +++ b/website/docs/d/sfn_alias.html.markdown @@ -16,7 +16,7 @@ Terraform data source for managing an AWS SFN (Step Functions) State Machine Ali ```terraform data "aws_sfn_alias" "example" { - name = "my_sfn_alias" + name = "my_sfn_alias" statemachine_arn = aws_sfn_state_machine.sfn_test.arn } ``` diff --git a/website/docs/r/sfn_alias.html.markdown b/website/docs/r/sfn_alias.html.markdown index 1d4f796865fb..9df6c666ed4f 100644 --- a/website/docs/r/sfn_alias.html.markdown +++ b/website/docs/r/sfn_alias.html.markdown @@ -17,22 +17,26 @@ Provides a Step Function State Machine Alias. ```terraform resource "aws_sfn_alias" "sfn_alias" { name = "my_sfn_alias" + routing_configuration { state_machine_version_arn = aws_sfn_state_machine.sfn_test.state_machine_version_arn weight = 100 } } + resource "aws_sfn_alias" "my_sfn_alias" { - name = "my_sfn_alias" + name = "my_sfn_alias" + routing_configuration { state_machine_version_arn = "arn:aws:states:us-east-1:12345:stateMachine:demo:3" weight = 50 } + routing_configuration { state_machine_version_arn = "arn:aws:states:us-east-1:12345:stateMachine:demo:2" weight = 50 } -} +} ``` ## Argument Reference From fc821bb3f33a1de6f8aea32e6a347023e17a2fe9 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:38:10 -0400 Subject: [PATCH 12/19] Fix semgrep 'ci.sfn-in-func-name'. --- internal/service/sfn/alias_data_source_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/sfn/alias_data_source_test.go b/internal/service/sfn/alias_data_source_test.go index 783e0040b896..78ed4ddc2efc 100644 --- a/internal/service/sfn/alias_data_source_test.go +++ b/internal/service/sfn/alias_data_source_test.go @@ -24,7 +24,7 @@ func TestAccSFNAliasDataSource_basic(t *testing.T) { ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, Steps: []resource.TestStep{ { - Config: testAccSFNAliasDataSourceConfig_basic(stateMachineName, aliasName, 10), + Config: testAccAliasDataSourceConfig_basic(stateMachineName, aliasName, 10), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrPair(resourceName, "id", dataSourceName, "arn"), resource.TestCheckResourceAttrPair(resourceName, "creation_date", dataSourceName, "creation_date"), @@ -36,7 +36,7 @@ func TestAccSFNAliasDataSource_basic(t *testing.T) { }) } -func testAccSFNAliasDataSourceConfig_basic(statemachineName string, aliasName string, rMaxAttempts int) string { +func testAccAliasDataSourceConfig_basic(statemachineName string, aliasName string, rMaxAttempts int) string { return acctest.ConfigCompose(testAccStateMachineAliasConfig_basic(statemachineName, aliasName, rMaxAttempts), ` data "aws_sfn_alias" "test" { name = aws_sfn_alias.test.name From c9d235122c11bb0207059139c161c9d940e72986 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:39:47 -0400 Subject: [PATCH 13/19] Fix golangci-lint 'unused'. --- internal/service/sfn/alias_test.go | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/internal/service/sfn/alias_test.go b/internal/service/sfn/alias_test.go index d2c4ca25dd30..a8d638420077 100644 --- a/internal/service/sfn/alias_test.go +++ b/internal/service/sfn/alias_test.go @@ -148,31 +148,6 @@ func testAccCheckAliasExists(ctx context.Context, name string, v *sfn.DescribeSt } } -func testAccCheckExistsIn(ctx context.Context, n string, v *sfn.DescribeStateMachineOutput) resource.TestCheckFunc { - return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("Not found: %s", n) - } - - if rs.Primary.ID == "" { - return fmt.Errorf("No Step Functions State Machine ID is set") - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).SFNConn(ctx) - - output, err := tfsfn.FindStateMachineByARN(context.Background(), conn, rs.Primary.ID) - - if err != nil { - return err - } - - *v = *output - - return nil - } -} - func testAccStateMachineAliasConfig_base(rName string, rMaxAttempts int) string { return fmt.Sprintf(` resource "aws_iam_role_policy" "for_lambda" { From bb24aa5b891de9e09203592b035e2d6f21c0b9bc Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:41:09 -0400 Subject: [PATCH 14/19] Fix golangci-lint 'unparam'. --- internal/service/sfn/alias.go | 10 +++++----- internal/service/sfn/alias_data_source.go | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/sfn/alias.go b/internal/service/sfn/alias.go index ea0ace12da10..81b3b2390472 100644 --- a/internal/service/sfn/alias.go +++ b/internal/service/sfn/alias.go @@ -125,7 +125,7 @@ func resourceAliasRead(ctx context.Context, d *schema.ResourceData, meta interfa d.Set("creation_date", aws.TimeValue(out.CreationDate).Format(time.RFC3339)) d.SetId(aws.StringValue(out.StateMachineAliasArn)) - if err := d.Set("routing_configuration", flattenAliasRoutingConfiguration(d, out.RoutingConfiguration)); err != nil { + if err := d.Set("routing_configuration", flattenAliasRoutingConfiguration(out.RoutingConfiguration)); err != nil { return create.DiagError(names.SFN, create.ErrActionSetting, ResNameAlias, d.Id(), err) } return nil @@ -201,7 +201,7 @@ func FindAliasByARN(ctx context.Context, conn *sfn.SFN, arn string) (*sfn.Descri return out, nil } -func flattenAliasRoutingConfigurationItem(d *schema.ResourceData, i int, apiObject *sfn.RoutingConfigurationListItem) map[string]interface{} { +func flattenAliasRoutingConfigurationItem(apiObject *sfn.RoutingConfigurationListItem) map[string]interface{} { if apiObject == nil { return nil } @@ -219,19 +219,19 @@ func flattenAliasRoutingConfigurationItem(d *schema.ResourceData, i int, apiObje return tfMap } -func flattenAliasRoutingConfiguration(d *schema.ResourceData, apiObjects []*sfn.RoutingConfigurationListItem) []interface{} { +func flattenAliasRoutingConfiguration(apiObjects []*sfn.RoutingConfigurationListItem) []interface{} { if len(apiObjects) == 0 { return nil } var tfList []interface{} - for i, apiObject := range apiObjects { + for _, apiObject := range apiObjects { if apiObject == nil { continue } - tfList = append(tfList, flattenAliasRoutingConfigurationItem(d, i, apiObject)) + tfList = append(tfList, flattenAliasRoutingConfigurationItem(apiObject)) } return tfList diff --git a/internal/service/sfn/alias_data_source.go b/internal/service/sfn/alias_data_source.go index 82656c0c49b1..cabef345c81b 100644 --- a/internal/service/sfn/alias_data_source.go +++ b/internal/service/sfn/alias_data_source.go @@ -104,7 +104,7 @@ func dataSourceAliasRead(ctx context.Context, d *schema.ResourceData, meta inter d.Set("description", output.Description) d.Set("creation_date", aws.TimeValue(output.CreationDate).Format(time.RFC3339)) - if err := d.Set("routing_configuration", flattenAliasRoutingConfiguration(d, output.RoutingConfiguration)); err != nil { + if err := d.Set("routing_configuration", flattenAliasRoutingConfiguration(output.RoutingConfiguration)); err != nil { return create.DiagError(names.SFN, create.ErrActionSetting, ResNameAlias, d.Id(), err) } From 179fa68919a676feab683b4e69053bcc46999334 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:46:29 -0400 Subject: [PATCH 15/19] Fix golangci-lint 'whitespace'. --- internal/service/sfn/state_machine.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/service/sfn/state_machine.go b/internal/service/sfn/state_machine.go index 5ccd0759da88..6fe864895eda 100644 --- a/internal/service/sfn/state_machine.go +++ b/internal/service/sfn/state_machine.go @@ -262,7 +262,6 @@ func resourceStateMachineUpdate(ctx context.Context, d *schema.ResourceData, met if v, ok := d.GetOk("publish"); ok && v == true { input.VersionDescription = aws.String(d.Get("version_description").(string)) - } if d.HasChange("logging_configuration") { From c8d45112bc112ffb1c34cba4dbf71d6abed40892 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 13:47:09 -0400 Subject: [PATCH 16/19] Fix golangci-lint 'contextcheck'. --- internal/service/sfn/state_machine_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/sfn/state_machine_test.go b/internal/service/sfn/state_machine_test.go index 4bcaa3265601..b8e180ed1278 100644 --- a/internal/service/sfn/state_machine_test.go +++ b/internal/service/sfn/state_machine_test.go @@ -428,7 +428,7 @@ func testAccCheckExists(ctx context.Context, n string, v *sfn.DescribeStateMachi conn := acctest.Provider.Meta().(*conns.AWSClient).SFNConn(ctx) - output, err := tfsfn.FindStateMachineByARN(context.Background(), conn, rs.Primary.ID) + output, err := tfsfn.FindStateMachineByARN(ctx, conn, rs.Primary.ID) if err != nil { return err From 0bdacfcd88f2b45430e4e7b0b3c58017b83804a3 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jun 2023 14:10:34 -0400 Subject: [PATCH 17/19] Fix terrafmt errors. --- internal/service/sfn/alias_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/sfn/alias_test.go b/internal/service/sfn/alias_test.go index a8d638420077..ec57071163a6 100644 --- a/internal/service/sfn/alias_test.go +++ b/internal/service/sfn/alias_test.go @@ -250,7 +250,7 @@ resource "aws_sfn_state_machine" "test" { name = %[1]q publish = true role_arn = aws_iam_role.for_sfn.arn - + definition = < Date: Fri, 23 Jun 2023 14:12:21 -0400 Subject: [PATCH 18/19] Fix semgrep 'ci.semgrep.aws.helper-schema-ResourceData-Set-extraneous-value-pointer-conversion'. --- internal/service/sfn/state_machine.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/service/sfn/state_machine.go b/internal/service/sfn/state_machine.go index 6fe864895eda..4cb3da80ffe0 100644 --- a/internal/service/sfn/state_machine.go +++ b/internal/service/sfn/state_machine.go @@ -195,8 +195,10 @@ func resourceStateMachineCreate(ctx context.Context, d *schema.ResourceData, met return diag.Errorf("creating Step Functions State Machine (%s): %s", name, err) } - d.SetId(aws.StringValue(outputRaw.(*sfn.CreateStateMachineOutput).StateMachineArn)) - d.Set("state_machine_version_arn", aws.StringValue(outputRaw.(*sfn.CreateStateMachineOutput).StateMachineVersionArn)) + arn := aws.StringValue(outputRaw.(*sfn.CreateStateMachineOutput).StateMachineArn) + d.SetId(arn) + d.Set("state_machine_version_arn", arn) + return resourceStateMachineRead(ctx, d, meta) } From fb5762a8456f2fbcf1cf4f96c9e157b3a286f08a Mon Sep 17 00:00:00 2001 From: Sharon Nam Date: Fri, 23 Jun 2023 13:25:18 -0700 Subject: [PATCH 19/19] change state_machine_version_arn --- internal/service/sfn/state_machine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/sfn/state_machine.go b/internal/service/sfn/state_machine.go index 4cb3da80ffe0..57bb2a3509c7 100644 --- a/internal/service/sfn/state_machine.go +++ b/internal/service/sfn/state_machine.go @@ -197,7 +197,7 @@ func resourceStateMachineCreate(ctx context.Context, d *schema.ResourceData, met arn := aws.StringValue(outputRaw.(*sfn.CreateStateMachineOutput).StateMachineArn) d.SetId(arn) - d.Set("state_machine_version_arn", arn) + d.Set("state_machine_version_arn", outputRaw.(*sfn.CreateStateMachineOutput).StateMachineVersionArn) return resourceStateMachineRead(ctx, d, meta) }