mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-30 10:47:14 -06:00
Add S3 bucket object tag support. (#11344)
This commit is contained in:
parent
911717c9d5
commit
03af9fa42d
@ -99,6 +99,8 @@ func dataSourceAwsS3BucketObject() *schema.Resource {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"tags": tagsSchemaComputed(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -201,6 +203,16 @@ func dataSourceAwsS3BucketObjectRead(d *schema.ResourceData, meta interface{}) e
|
|||||||
uniqueId, contentType)
|
uniqueId, contentType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tagResp, err := conn.GetObjectTagging(
|
||||||
|
&s3.GetObjectTaggingInput{
|
||||||
|
Bucket: aws.String(bucket),
|
||||||
|
Key: aws.String(key),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.Set("tags", tagsToMapS3(tagResp.TagSet))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// make testacc TEST=./builtin/providers/aws/ TESTARGS='-run=TestAccDataSourceAWSS3BucketObject_'
|
||||||
package aws
|
package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -160,6 +161,7 @@ func TestAccDataSourceAWSS3BucketObject_allParams(t *testing.T) {
|
|||||||
resource.TestCheckResourceAttr("data.aws_s3_bucket_object.obj", "expires", ""),
|
resource.TestCheckResourceAttr("data.aws_s3_bucket_object.obj", "expires", ""),
|
||||||
resource.TestCheckResourceAttr("data.aws_s3_bucket_object.obj", "website_redirect_location", ""),
|
resource.TestCheckResourceAttr("data.aws_s3_bucket_object.obj", "website_redirect_location", ""),
|
||||||
resource.TestCheckResourceAttr("data.aws_s3_bucket_object.obj", "metadata.%", "0"),
|
resource.TestCheckResourceAttr("data.aws_s3_bucket_object.obj", "metadata.%", "0"),
|
||||||
|
resource.TestCheckResourceAttr("data.aws_s3_bucket_object.obj", "tags.%", "1"),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -284,6 +286,9 @@ CONTENT
|
|||||||
content_disposition = "attachment"
|
content_disposition = "attachment"
|
||||||
content_encoding = "gzip"
|
content_encoding = "gzip"
|
||||||
content_language = "en-GB"
|
content_language = "en-GB"
|
||||||
|
tags {
|
||||||
|
Key1 = "Value 1"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
`, randInt, randInt)
|
`, randInt, randInt)
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@ -117,6 +118,8 @@ func resourceAwsS3BucketObject() *schema.Resource {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"tags": tagsSchema(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,6 +191,15 @@ func resourceAwsS3BucketObjectPut(d *schema.ResourceData, meta interface{}) erro
|
|||||||
putInput.ServerSideEncryption = aws.String(s3.ServerSideEncryptionAwsKms)
|
putInput.ServerSideEncryption = aws.String(s3.ServerSideEncryptionAwsKms)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v, ok := d.GetOk("tags"); ok {
|
||||||
|
// The tag-set must be encoded as URL Query parameters.
|
||||||
|
values := url.Values{}
|
||||||
|
for k, v := range v.(map[string]interface{}) {
|
||||||
|
values.Add(k, v.(string))
|
||||||
|
}
|
||||||
|
putInput.Tagging = aws.String(values.Encode())
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := s3conn.PutObject(putInput)
|
resp, err := s3conn.PutObject(putInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error putting object in S3 bucket (%s): %s", bucket, err)
|
return fmt.Errorf("Error putting object in S3 bucket (%s): %s", bucket, err)
|
||||||
@ -257,6 +269,16 @@ func resourceAwsS3BucketObjectRead(d *schema.ResourceData, meta interface{}) err
|
|||||||
d.Set("storage_class", resp.StorageClass)
|
d.Set("storage_class", resp.StorageClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tagResp, err := s3conn.GetObjectTagging(
|
||||||
|
&s3.GetObjectTaggingInput{
|
||||||
|
Bucket: aws.String(bucket),
|
||||||
|
Key: aws.String(key),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.Set("tags", tagsToMapS3(tagResp.TagSet))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// make testacc TEST=./builtin/providers/aws/ TESTARGS='-run=TestAccAWSS3BucketObject_'
|
||||||
package aws
|
package aws
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -532,6 +533,27 @@ func testAccCheckAWSS3BucketObjectSSE(n, expectedSSE string) resource.TestCheckF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccAWSS3BucketObject_tags(t *testing.T) {
|
||||||
|
rInt := acctest.RandInt()
|
||||||
|
var obj s3.GetObjectOutput
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckAWSS3BucketObjectDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
PreConfig: func() {},
|
||||||
|
Config: testAccAWSS3BucketObjectConfig_withTags(rInt),
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckAWSS3BucketObjectExists("aws_s3_bucket_object.object", &obj),
|
||||||
|
resource.TestCheckResourceAttr("aws_s3_bucket_object.object", "tags.%", "2"),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func testAccAWSS3BucketObjectConfigSource(randInt int, source string) string {
|
func testAccAWSS3BucketObjectConfigSource(randInt int, source string) string {
|
||||||
return fmt.Sprintf(`
|
return fmt.Sprintf(`
|
||||||
resource "aws_s3_bucket" "object_bucket" {
|
resource "aws_s3_bucket" "object_bucket" {
|
||||||
@ -668,3 +690,21 @@ resource "aws_s3_bucket_object" "object" {
|
|||||||
}
|
}
|
||||||
`, randInt, storage_class)
|
`, randInt, storage_class)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testAccAWSS3BucketObjectConfig_withTags(randInt int) string {
|
||||||
|
return fmt.Sprintf(`
|
||||||
|
resource "aws_s3_bucket" "object_bucket_2" {
|
||||||
|
bucket = "tf-object-test-bucket-%d"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_object" "object" {
|
||||||
|
bucket = "${aws_s3_bucket.object_bucket_2.bucket}"
|
||||||
|
key = "test-key"
|
||||||
|
content = "stuff"
|
||||||
|
tags {
|
||||||
|
Key1 = "Value One"
|
||||||
|
Description = "Very interesting"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`, randInt)
|
||||||
|
}
|
||||||
|
@ -79,3 +79,4 @@ The following attributes are exported:
|
|||||||
* `storage_class` - [Storage class](http://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html) information of the object. Available for all objects except for `Standard` storage class objects.
|
* `storage_class` - [Storage class](http://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html) information of the object. Available for all objects except for `Standard` storage class objects.
|
||||||
* `version_id` - The latest version ID of the object returned.
|
* `version_id` - The latest version ID of the object returned.
|
||||||
* `website_redirect_location` - If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.
|
* `website_redirect_location` - If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.
|
||||||
|
* `tags` - A mapping of tags assigned to the object.
|
||||||
|
@ -83,6 +83,7 @@ This attribute is not compatible with `kms_key_id`.
|
|||||||
This value is a fully qualified **ARN** of the KMS Key. If using `aws_kms_key`,
|
This value is a fully qualified **ARN** of the KMS Key. If using `aws_kms_key`,
|
||||||
use the exported `arn` attribute:
|
use the exported `arn` attribute:
|
||||||
`kms_key_id = "${aws_kms_key.foo.arn}"`
|
`kms_key_id = "${aws_kms_key.foo.arn}"`
|
||||||
|
* `tags` - (Optional) A mapping of tags to assign to the object.
|
||||||
|
|
||||||
Either `source` or `content` must be provided to specify the bucket content.
|
Either `source` or `content` must be provided to specify the bucket content.
|
||||||
These two arguments are mutually-exclusive.
|
These two arguments are mutually-exclusive.
|
||||||
|
Loading…
Reference in New Issue
Block a user