Skip to content

Commit

Permalink
fix: Add missing type-specific args for aws_datasync_location_*
Browse files Browse the repository at this point in the history
resources
  • Loading branch information
acwwat committed Mar 4, 2024
1 parent 2dc8341 commit 7acb5a5
Show file tree
Hide file tree
Showing 12 changed files with 138 additions and 63 deletions.
19 changes: 19 additions & 0 deletions .changelog/36072.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
```release-note:bug
resource/aws_datasync_location_azure_blob: Fix missing `container_url` attribute value and bad `subdirectory` attribute value from state read/refresh
```

```release-note:bug
resource/aws_datasync_location_efs: Fix missing `efs_file_system_arn` attribute value from state read/refresh
```

```release-note:bug
resource/aws_datasync_location_nfs: Fix missing `server_hostname` attribute value from state read/refresh
```

```release-note:bug
resource/aws_datasync_location_s3: Fix missing `s3_bucket_arn` attribute value from state read/refresh
```

```release-note:bug
resource/aws_datasync_location_smb: Fix missing `server_hostname` attribute value from state read/refresh
```
11 changes: 10 additions & 1 deletion internal/service/datasync/location_azure_blob.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package datasync

import (
"context"
"fmt"
"log"
"strings"

Expand Down Expand Up @@ -167,19 +168,27 @@ func resourceLocationAzureBlobRead(ctx context.Context, d *schema.ResourceData,
}

uri := aws.StringValue(output.LocationUri)
accountHostName, err := globalIdFromLocationURI(aws.StringValue(output.LocationUri))
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}
subdirectory, err := subdirectoryFromLocationURI(uri)
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}

containerName := subdirectory[:strings.IndexAny(subdirectory[1:], "/")+1]
containerUrl := fmt.Sprintf("https://%s%s", accountHostName, containerName)
d.Set("container_url", containerUrl)

d.Set("access_tier", output.AccessTier)
d.Set("agent_arns", aws.StringValueSlice(output.AgentArns))
d.Set("arn", output.LocationArn)
d.Set("authentication_type", output.AuthenticationType)
d.Set("blob_type", output.BlobType)
d.Set("container_url", d.Get("container_url"))
d.Set("sas_configuration", d.Get("sas_configuration"))
d.Set("subdirectory", subdirectory)
d.Set("subdirectory", subdirectory[strings.IndexAny(subdirectory[1:], "/")+1:])
d.Set("uri", uri)

return diags
Expand Down
26 changes: 14 additions & 12 deletions internal/service/datasync/location_azure_blob_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ func TestAccDataSyncLocationAzureBlob_basic(t *testing.T) {
acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "datasync", regexache.MustCompile(`location/loc-.+`)),
resource.TestCheckResourceAttr(resourceName, "authentication_type", "SAS"),
resource.TestCheckResourceAttr(resourceName, "blob_type", "BLOCK"),
resource.TestCheckResourceAttr(resourceName, "container_url", "https://example.com/path"),
resource.TestCheckResourceAttr(resourceName, "container_url", "https://myaccount.blob.core.windows.net/mycontainer"),
resource.TestCheckResourceAttr(resourceName, "sas_configuration.#", "1"),
resource.TestCheckResourceAttrSet(resourceName, "sas_configuration.0.token"),
resource.TestCheckResourceAttr(resourceName, "subdirectory", "/path/"),
resource.TestCheckResourceAttr(resourceName, "subdirectory", "/myvdir1/myvdir2/"),
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
resource.TestMatchResourceAttr(resourceName, "uri", regexache.MustCompile(`^azure-blob://.+/`)),
),
Expand All @@ -53,7 +53,7 @@ func TestAccDataSyncLocationAzureBlob_basic(t *testing.T) {
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"container_url", "sas_configuration"},
ImportStateVerifyIgnore: []string{"sas_configuration"},
},
},
})
Expand Down Expand Up @@ -107,7 +107,7 @@ func TestAccDataSyncLocationAzureBlob_tags(t *testing.T) {
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"container_url", "sas_configuration"},
ImportStateVerifyIgnore: []string{"sas_configuration"},
},
{
Config: testAccLocationAzureBlobConfig_tags2(rName, "key1", "value1updated", "key2", "value2"),
Expand Down Expand Up @@ -151,10 +151,10 @@ func TestAccDataSyncLocationAzureBlob_update(t *testing.T) {
acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "datasync", regexache.MustCompile(`location/loc-.+`)),
resource.TestCheckResourceAttr(resourceName, "authentication_type", "SAS"),
resource.TestCheckResourceAttr(resourceName, "blob_type", "BLOCK"),
resource.TestCheckResourceAttr(resourceName, "container_url", "https://example.com/path"),
resource.TestCheckResourceAttr(resourceName, "container_url", "https://myaccount.blob.core.windows.net/mycontainer"),
resource.TestCheckResourceAttr(resourceName, "sas_configuration.#", "1"),
resource.TestCheckResourceAttrSet(resourceName, "sas_configuration.0.token"),
resource.TestCheckResourceAttr(resourceName, "subdirectory", "/path/"),
resource.TestCheckResourceAttr(resourceName, "subdirectory", "/myvdir1/myvdir2/"),
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
resource.TestMatchResourceAttr(resourceName, "uri", regexache.MustCompile(`^azure-blob://.+/`)),
),
Expand All @@ -168,10 +168,10 @@ func TestAccDataSyncLocationAzureBlob_update(t *testing.T) {
acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "datasync", regexache.MustCompile(`location/loc-.+`)),
resource.TestCheckResourceAttr(resourceName, "authentication_type", "SAS"),
resource.TestCheckResourceAttr(resourceName, "blob_type", "BLOCK"),
resource.TestCheckResourceAttr(resourceName, "container_url", "https://example.com/path"),
resource.TestCheckResourceAttr(resourceName, "container_url", "https://myaccount.blob.core.windows.net/mycontainer"),
resource.TestCheckResourceAttr(resourceName, "sas_configuration.#", "1"),
resource.TestCheckResourceAttrSet(resourceName, "sas_configuration.0.token"),
resource.TestCheckResourceAttr(resourceName, "subdirectory", "/path/"),
resource.TestCheckResourceAttr(resourceName, "subdirectory", "/"),
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
resource.TestMatchResourceAttr(resourceName, "uri", regexache.MustCompile(`^azure-blob://.+/`)),
),
Expand Down Expand Up @@ -241,7 +241,8 @@ func testAccLocationAzureBlobConfig_basic(rName string) string {
resource "aws_datasync_location_azure_blob" "test" {
agent_arns = [aws_datasync_agent.test.arn]
authentication_type = "SAS"
container_url = "https://example.com/path"
container_url = "https://myaccount.blob.core.windows.net/mycontainer"
subdirectory = "/myvdir1/myvdir2"
sas_configuration {
token = "sp=r&st=2023-12-20T14:54:52Z&se=2023-12-20T22:54:52Z&spr=https&sv=2021-06-08&sr=c&sig=aBBKDWQvyuVcTPH9EBp%%2FXTI9E%%2F%%2Fmq171%%2BZU178wcwqU%%3D"
Expand All @@ -255,7 +256,7 @@ func testAccLocationAzureBlobConfig_tags1(rName, key1, value1 string) string {
resource "aws_datasync_location_azure_blob" "test" {
agent_arns = [aws_datasync_agent.test.arn]
authentication_type = "SAS"
container_url = "https://example.com/path"
container_url = "https://myaccount.blob.core.windows.net/mycontainer"
sas_configuration {
token = "sp=r&st=2023-12-20T14:54:52Z&se=2023-12-20T22:54:52Z&spr=https&sv=2021-06-08&sr=c&sig=aBBKDWQvyuVcTPH9EBp%%2FXTI9E%%2F%%2Fmq171%%2BZU178wcwqU%%3D"
Expand All @@ -273,7 +274,7 @@ func testAccLocationAzureBlobConfig_tags2(rName, key1, value1, key2, value2 stri
resource "aws_datasync_location_azure_blob" "test" {
agent_arns = [aws_datasync_agent.test.arn]
authentication_type = "SAS"
container_url = "https://example.com/path"
container_url = "https://myaccount.blob.core.windows.net/mycontainer"
sas_configuration {
token = "sp=r&st=2023-12-20T14:54:52Z&se=2023-12-20T22:54:52Z&spr=https&sv=2021-06-08&sr=c&sig=aBBKDWQvyuVcTPH9EBp%%2FXTI9E%%2F%%2Fmq171%%2BZU178wcwqU%%3D"
Expand All @@ -293,7 +294,8 @@ resource "aws_datasync_location_azure_blob" "test" {
access_tier = "COOL"
agent_arns = [aws_datasync_agent.test.arn]
authentication_type = "SAS"
container_url = "https://example.com/path"
container_url = "https://myaccount.blob.core.windows.net/mycontainer"
subdirectory = "/"
sas_configuration {
token = "sp=r&st=2023-12-20T14:54:52Z&se=2023-12-20T22:54:52Z&spr=https&sv=2021-06-08&sr=c&sig=aBBKDWQvyuVcTPH9EBp%%2FXTI9E%%2F%%2Fmq171%%2BZU178wcwqU%%3D"
Expand Down
14 changes: 14 additions & 0 deletions internal/service/datasync/location_efs.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ package datasync

import (
"context"
"fmt"
"log"
"strings"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/arn"
"github.com/aws/aws-sdk-go/service/datasync"
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
Expand Down Expand Up @@ -170,11 +172,23 @@ func resourceLocationEFSRead(ctx context.Context, d *schema.ResourceData, meta i
}

uri := aws.StringValue(output.LocationUri)
globalId, err := globalIdFromLocationURI(uri)
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}
subdirectory, err := subdirectoryFromLocationURI(uri)
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}

locationArn, err := arn.Parse(d.Id())
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}
globalIdParts := strings.Split(globalId, ".") // Global ID format for EFS location is <region>.<efs_file_system_id>
efsFileSystemArn := fmt.Sprintf("arn:%s:elasticfilesystem:%s:%s:file-system/%s", locationArn.Partition, globalIdParts[0], locationArn.AccountID, globalIdParts[1])
d.Set("efs_file_system_arn", efsFileSystemArn)

d.Set("access_point_arn", output.AccessPointArn)
d.Set("arn", output.LocationArn)
if err := d.Set("ec2_config", flattenEC2Config(output.Ec2Config)); err != nil {
Expand Down
28 changes: 12 additions & 16 deletions internal/service/datasync/location_efs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,9 @@ func TestAccDataSyncLocationEFS_basic(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"efs_file_system_arn"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
Expand All @@ -79,10 +78,9 @@ func TestAccDataSyncLocationEFS_accessPointARN(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"efs_file_system_arn"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
Expand Down Expand Up @@ -133,10 +131,9 @@ func TestAccDataSyncLocationEFS_subdirectory(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"efs_file_system_arn"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
Expand All @@ -163,10 +160,9 @@ func TestAccDataSyncLocationEFS_tags(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"efs_file_system_arn"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccLocationEFSConfig_tags2(rName, "key1", "value1updated", "key2", "value2"),
Expand Down
5 changes: 5 additions & 0 deletions internal/service/datasync/location_nfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,10 @@ func resourceLocationNFSRead(ctx context.Context, d *schema.ResourceData, meta i
}

uri := aws.StringValue(output.LocationUri)
serverHostName, err := globalIdFromLocationURI(uri)
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}
subdirectory, err := subdirectoryFromLocationURI(uri)
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
Expand All @@ -165,6 +169,7 @@ func resourceLocationNFSRead(ctx context.Context, d *schema.ResourceData, meta i
if err := d.Set("on_prem_config", flattenOnPremConfig(output.OnPremConfig)); err != nil {
return sdkdiag.AppendErrorf(diags, "setting on_prem_config: %s", err)
}
d.Set("server_hostname", serverHostName)
d.Set("subdirectory", subdirectory)
d.Set("uri", uri)

Expand Down
35 changes: 15 additions & 20 deletions internal/service/datasync/location_nfs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,9 @@ func TestAccDataSyncLocationNFS_basic(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"server_hostname"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
Expand All @@ -77,10 +76,9 @@ func TestAccDataSyncLocationNFS_mountOptions(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"server_hostname"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccLocationNFSConfig_mountOptions(rName, "NFS4_1"),
Expand Down Expand Up @@ -138,10 +136,9 @@ func TestAccDataSyncLocationNFS_AgentARNs_multiple(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"server_hostname"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
Expand All @@ -167,10 +164,9 @@ func TestAccDataSyncLocationNFS_subdirectory(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"server_hostname"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccLocationNFSConfig_subdirectory(rName, "/subdirectory2/"),
Expand Down Expand Up @@ -204,10 +200,9 @@ func TestAccDataSyncLocationNFS_tags(t *testing.T) {
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"server_hostname"},
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccLocationNFSConfig_tags2(rName, "key1", "value1updated", "key2", "value2"),
Expand Down
13 changes: 13 additions & 0 deletions internal/service/datasync/location_s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ package datasync

import (
"context"
"fmt"
"log"
"strings"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/arn"
"github.com/aws/aws-sdk-go/service/datasync"
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
Expand Down Expand Up @@ -172,11 +174,22 @@ func resourceLocationS3Read(ctx context.Context, d *schema.ResourceData, meta in
}

uri := aws.StringValue(output.LocationUri)
s3BucketName, err := globalIdFromLocationURI(aws.StringValue(output.LocationUri))
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}
subdirectory, err := subdirectoryFromLocationURI(aws.StringValue(output.LocationUri))
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}

locationArn, err := arn.Parse(d.Id())
if err != nil {
return sdkdiag.AppendFromErr(diags, err)
}
s3BucketArn := fmt.Sprintf("arn:%s:s3:::%s", locationArn.Partition, s3BucketName)
d.Set("s3_bucket_arn", s3BucketArn)

d.Set("agent_arns", aws.StringValueSlice(output.AgentArns))
d.Set("arn", output.LocationArn)
if err := d.Set("s3_config", flattenS3Config(output.S3Config)); err != nil {
Expand Down
Loading

0 comments on commit 7acb5a5

Please sign in to comment.