Skip to content

Commit d5e204c

Browse files
committed
object storage support for cache control and control-disposition headers
1 parent 5d86aba commit d5e204c

File tree

7 files changed

+162
-48
lines changed

7 files changed

+162
-48
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Support Etag for ListObjects
55
- Support for Network Security Groups in `oci_file_storage_mount_target` resource
66
- Support for multi-attach for block storage
7+
- Support for cache control and control-disposition headers in `oci_objectstorage_object`
78

89
## 3.54.0 (November 27, 2019)
910

examples/object_storage/object.tf

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,32 @@
88
*/
99

1010
resource "oci_objectstorage_object" "object1" {
11-
namespace = "${data.oci_objectstorage_namespace.ns.namespace}"
12-
bucket = "${oci_objectstorage_bucket.bucket1.name}"
13-
object = "index.html"
14-
content_language = "en-US"
15-
content_type = "text/html"
16-
content = "${file("index.html")}"
11+
namespace = "${data.oci_objectstorage_namespace.ns.namespace}"
12+
bucket = "${oci_objectstorage_bucket.bucket1.name}"
13+
object = "index.html"
14+
content_language = "en-US"
15+
content_type = "text/html"
16+
content = "${file("index.html")}"
17+
content_disposition = "attachment; filename=\"filename.html\""
1718
}
1819

1920
resource "oci_objectstorage_object" "source_object" {
20-
namespace = "${data.oci_objectstorage_namespace.ns.namespace}"
21-
bucket = "${oci_objectstorage_bucket.bucket1.name}"
22-
object = "same_index.html"
23-
content_language = "en-US"
24-
content_type = "text/html"
25-
source = "index.html"
21+
namespace = "${data.oci_objectstorage_namespace.ns.namespace}"
22+
bucket = "${oci_objectstorage_bucket.bucket1.name}"
23+
object = "same_index.html"
24+
content_language = "en-US"
25+
content_type = "text/html"
26+
source = "index.html"
27+
content_disposition = "attachment; filename=\"filename.html\""
2628
}
2729

2830
resource "oci_objectstorage_object" "source_uri_object" {
29-
namespace = "${data.oci_objectstorage_namespace.ns.namespace}"
30-
bucket = "${oci_objectstorage_bucket.bucket1.name}"
31-
object = "copy_index.html"
32-
content_language = "en-US"
33-
content_type = "text/html"
31+
namespace = "${data.oci_objectstorage_namespace.ns.namespace}"
32+
bucket = "${oci_objectstorage_bucket.bucket1.name}"
33+
object = "copy_index.html"
34+
content_language = "en-US"
35+
content_type = "text/html"
36+
content_disposition = "attachment; filename=\"filename.html\""
3437

3538
source_uri_details {
3639
region = "${local.source_region}"

oci/helpers_objectstorage.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ type MultipartUploadData struct {
3434
ObjectStorageClient *oci_object_storage.ObjectStorageClient `mandatory:"true"`
3535
SourcePath *string `mandatory:"true"`
3636
SourceInfo *os.FileInfo `mandatory:"true"`
37+
CacheControl *string
38+
ContentDisposition *string
3739
ContentMD5 *string
3840
ContentType *string
3941
ContentLanguage *string
@@ -143,15 +145,17 @@ func singlePartUpload(multipartUploadData MultipartUploadData) (string, error) {
143145
tmpSize := sourceInfo.Size()
144146

145147
putObjectRequest := &oci_object_storage.PutObjectRequest{
146-
ContentEncoding: multipartUploadData.ContentEncoding,
147-
ContentLanguage: multipartUploadData.ContentLanguage,
148-
ContentType: multipartUploadData.ContentType,
149-
BucketName: multipartUploadData.BucketName,
150-
ContentLength: &tmpSize,
151-
PutObjectBody: ioutil.NopCloser(sourceFile),
152-
OpcMeta: resourceObjectStorageMapToMetadata(multipartUploadData.Metadata),
153-
NamespaceName: multipartUploadData.NamespaceName,
154-
ObjectName: multipartUploadData.ObjectName,
148+
CacheControl: multipartUploadData.CacheControl,
149+
ContentDisposition: multipartUploadData.ContentDisposition,
150+
ContentEncoding: multipartUploadData.ContentEncoding,
151+
ContentLanguage: multipartUploadData.ContentLanguage,
152+
ContentType: multipartUploadData.ContentType,
153+
BucketName: multipartUploadData.BucketName,
154+
ContentLength: &tmpSize,
155+
PutObjectBody: ioutil.NopCloser(sourceFile),
156+
OpcMeta: resourceObjectStorageMapToMetadata(multipartUploadData.Metadata),
157+
NamespaceName: multipartUploadData.NamespaceName,
158+
ObjectName: multipartUploadData.ObjectName,
155159
}
156160
putObjectRequest.RequestMetadata.RetryPolicy = multipartUploadData.RequestMetadata.RetryPolicy
157161

@@ -183,11 +187,13 @@ func multiPartUploadImpl(multipartUploadData MultipartUploadData) (string, error
183187
BucketName: multipartUploadData.BucketName,
184188
RequestMetadata: multipartUploadData.RequestMetadata,
185189
CreateMultipartUploadDetails: oci_object_storage.CreateMultipartUploadDetails{
186-
ContentEncoding: multipartUploadData.ContentEncoding,
187-
ContentLanguage: multipartUploadData.ContentLanguage,
188-
ContentType: multipartUploadData.ContentType,
189-
Object: multipartUploadData.ObjectName,
190-
Metadata: resourceObjectStorageMapToOPCMetadata(multipartUploadData.Metadata),
190+
CacheControl: multipartUploadData.CacheControl,
191+
ContentDisposition: multipartUploadData.ContentDisposition,
192+
ContentEncoding: multipartUploadData.ContentEncoding,
193+
ContentLanguage: multipartUploadData.ContentLanguage,
194+
ContentType: multipartUploadData.ContentType,
195+
Object: multipartUploadData.ObjectName,
196+
Metadata: resourceObjectStorageMapToOPCMetadata(multipartUploadData.Metadata),
191197
},
192198
}
193199
source := multipartUploadData.SourcePath

oci/objectstorage_object_data_source.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@ func ObjectStorageObjectDataSource() *schema.Resource {
4343
},
4444

4545
// Computed
46+
"cache_control": {
47+
Type: schema.TypeString,
48+
Computed: true,
49+
},
50+
"content_disposition": {
51+
Type: schema.TypeString,
52+
Computed: true,
53+
},
4654
"content": {
4755
Type: schema.TypeString,
4856
Computed: true,
@@ -167,6 +175,14 @@ func (s *ObjectStorageObjectDataSourceCrud) SetData() error {
167175
s.D.Set("content", string(contentArray))
168176
}
169177

178+
if s.Res.CacheControl != nil {
179+
s.D.Set("cache_control", *s.Res.CacheControl)
180+
}
181+
182+
if s.Res.ContentDisposition != nil {
183+
s.D.Set("content_disposition", *s.Res.ContentDisposition)
184+
}
185+
170186
if s.Res.ContentEncoding != nil {
171187
s.D.Set("content_encoding", *s.Res.ContentEncoding)
172188
}

oci/objectstorage_object_resource.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,16 @@ func ObjectStorageObjectResource() *schema.Resource {
6262
},
6363

6464
// Optional
65+
"cache_control": {
66+
Type: schema.TypeString,
67+
Optional: true,
68+
ForceNew: true,
69+
},
70+
"content_disposition": {
71+
Type: schema.TypeString,
72+
Optional: true,
73+
ForceNew: true,
74+
},
6575
"content": {
6676
Type: schema.TypeString,
6777
// @CODEGEN 2/2018: content is optional and stored as checksum to avoid bloating the state file
@@ -214,6 +224,16 @@ func (s *ObjectStorageObjectResourceCrud) createMultiPartObject() error {
214224
multipartUploadData.SourcePath = &tmpSource
215225
multipartUploadData.SourceInfo = &sourceInfo
216226

227+
if cacheControl, ok := s.D.GetOkExists("cache_control"); ok {
228+
tmp := cacheControl.(string)
229+
multipartUploadData.CacheControl = &tmp
230+
}
231+
232+
if contentDisposition, ok := s.D.GetOkExists("content_disposition"); ok {
233+
tmp := contentDisposition.(string)
234+
multipartUploadData.ContentDisposition = &tmp
235+
}
236+
217237
if contentEncoding, ok := s.D.GetOkExists("content_encoding"); ok {
218238
tmp := contentEncoding.(string)
219239
multipartUploadData.ContentEncoding = &tmp
@@ -481,6 +501,16 @@ func (s *ObjectStorageObjectResourceCrud) CreatedTarget() []string {
481501
func (s *ObjectStorageObjectResourceCrud) createContentObject() error {
482502
request := oci_object_storage.PutObjectRequest{}
483503

504+
if cacheControl, ok := s.D.GetOkExists("cache_control"); ok {
505+
tmp := cacheControl.(string)
506+
request.CacheControl = &tmp
507+
}
508+
509+
if contentDisposition, ok := s.D.GetOkExists("content_disposition"); ok {
510+
tmp := contentDisposition.(string)
511+
request.ContentDisposition = &tmp
512+
}
513+
484514
if contentEncoding, ok := s.D.GetOkExists("content_encoding"); ok {
485515
tmp := contentEncoding.(string)
486516
request.ContentEncoding = &tmp
@@ -783,6 +813,14 @@ func (s *ObjectStorageObjectResourceCrud) setDataObjectHead() error {
783813

784814
response := s.Res.HeadObjectResponse
785815

816+
if response.CacheControl != nil {
817+
s.D.Set("cache_control", *response.CacheControl)
818+
}
819+
820+
if response.ContentDisposition != nil {
821+
s.D.Set("content_disposition", *response.ContentDisposition)
822+
}
823+
786824
if response.ContentEncoding != nil {
787825
s.D.Set("content_encoding", *response.ContentEncoding)
788826
}
@@ -854,6 +892,14 @@ func (s *ObjectStorageObjectResourceCrud) setDataObject() error {
854892
}
855893
s.D.Set("content", contentArray)
856894

895+
if s.Res.ObjectResponse.CacheControl != nil {
896+
s.D.Set("cache_control", *s.Res.ObjectResponse.CacheControl)
897+
}
898+
899+
if s.Res.ObjectResponse.ContentDisposition != nil {
900+
s.D.Set("content_disposition", *s.Res.ObjectResponse.ContentDisposition)
901+
}
902+
857903
if s.Res.ObjectResponse.ContentEncoding != nil {
858904
s.D.Set("content_encoding", *s.Res.ObjectResponse.ContentEncoding)
859905
}

0 commit comments

Comments
 (0)