provider/aws: Add support for versioned objects
This commit is contained in:
parent
2f8b9edaf8
commit
24ac996963
|
@ -82,6 +82,11 @@ func resourceAwsS3BucketObject() *schema.Resource {
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"version_id": &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,6 +151,7 @@ func resourceAwsS3BucketObjectPut(d *schema.ResourceData, meta interface{}) erro
|
||||||
// See https://forums.aws.amazon.com/thread.jspa?threadID=44003
|
// See https://forums.aws.amazon.com/thread.jspa?threadID=44003
|
||||||
d.Set("etag", strings.Trim(*resp.ETag, `"`))
|
d.Set("etag", strings.Trim(*resp.ETag, `"`))
|
||||||
|
|
||||||
|
d.Set("version_id", resp.VersionId)
|
||||||
d.SetId(key)
|
d.SetId(key)
|
||||||
return resourceAwsS3BucketObjectRead(d, meta)
|
return resourceAwsS3BucketObjectRead(d, meta)
|
||||||
}
|
}
|
||||||
|
@ -179,6 +185,7 @@ func resourceAwsS3BucketObjectRead(d *schema.ResourceData, meta interface{}) err
|
||||||
d.Set("content_encoding", resp.ContentEncoding)
|
d.Set("content_encoding", resp.ContentEncoding)
|
||||||
d.Set("content_language", resp.ContentLanguage)
|
d.Set("content_language", resp.ContentLanguage)
|
||||||
d.Set("content_type", resp.ContentType)
|
d.Set("content_type", resp.ContentType)
|
||||||
|
d.Set("version_id", resp.VersionId)
|
||||||
|
|
||||||
log.Printf("[DEBUG] Reading S3 Bucket Object meta: %s", resp)
|
log.Printf("[DEBUG] Reading S3 Bucket Object meta: %s", resp)
|
||||||
return nil
|
return nil
|
||||||
|
@ -190,13 +197,40 @@ func resourceAwsS3BucketObjectDelete(d *schema.ResourceData, meta interface{}) e
|
||||||
bucket := d.Get("bucket").(string)
|
bucket := d.Get("bucket").(string)
|
||||||
key := d.Get("key").(string)
|
key := d.Get("key").(string)
|
||||||
|
|
||||||
_, err := s3conn.DeleteObject(
|
if _, ok := d.GetOk("version_id"); ok {
|
||||||
&s3.DeleteObjectInput{
|
// Bucket is versioned, we need to delete all versions
|
||||||
|
vInput := s3.ListObjectVersionsInput{
|
||||||
|
Bucket: aws.String(bucket),
|
||||||
|
Prefix: aws.String(key),
|
||||||
|
}
|
||||||
|
out, err := s3conn.ListObjectVersions(&vInput)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed listing S3 object versions: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range out.Versions {
|
||||||
|
input := s3.DeleteObjectInput{
|
||||||
|
Bucket: aws.String(bucket),
|
||||||
|
Key: aws.String(key),
|
||||||
|
VersionId: v.VersionId,
|
||||||
|
}
|
||||||
|
_, err := s3conn.DeleteObject(&input)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error deleting S3 object version of %s:\n %s:\n %s",
|
||||||
|
key, v, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Just delete the object
|
||||||
|
input := s3.DeleteObjectInput{
|
||||||
Bucket: aws.String(bucket),
|
Bucket: aws.String(bucket),
|
||||||
Key: aws.String(key),
|
Key: aws.String(key),
|
||||||
})
|
}
|
||||||
if err != nil {
|
_, err := s3conn.DeleteObject(&input)
|
||||||
return fmt.Errorf("Error deleting S3 bucket object: %s", err)
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error deleting S3 bucket object: %s", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue