Skip to content

Commit 878390d

Browse files
committed
Fix state backward compatibility for object storage resources
* Update composite Id for Objects and PARs in Read if older state is encountered
1 parent 25f4eb1 commit 878390d

File tree

4 files changed

+72
-42
lines changed

4 files changed

+72
-42
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
### Added
44
- Support for `compartment_id` filter in `email_senders` and `email_suppressions` data sources
55

6+
### Fixed
7+
- Backward compatibility for compositeId in Object Storage - Objects and PARs
8+
69
## 3.21.0 (April 03, 2019)
710

811
### Added

examples/object_storage/object.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
22

33
/* This example demonstrates object store object management. It uses Terraforms built-in `file` function to upload a file.
4-
*
4+
*
55
* WARNING: This should only be used with small files. The file helper does stringification so large files
66
* may cause terraform to slow, become unresponsive or exceed allowed memory usage.
77
*/

oci/object_storage_object_resource.go

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,20 @@ func (s *ObjectStorageObjectResourceCrud) createCopyObject() error {
401401

402402
func readObjectStorageObject(d *schema.ResourceData, m interface{}) error {
403403
sync := &ObjectStorageObjectResourceCrud{}
404+
// For backward compatibility with CompositeId change
405+
log.Printf("[DEBUG] readObjectStorageObject() Resource Id in state: %s", d.Id())
406+
_, _, _, err := parseObjectCompositeId(d.Id())
407+
408+
if err != nil {
409+
bucket, bOk := d.GetOkExists("bucket")
410+
namespace, nOk := d.GetOkExists("namespace")
411+
object, oOk := d.GetOkExists("object")
412+
413+
if bOk && nOk && oOk {
414+
compositeId := getObjectCompositeId(bucket.(string), namespace.(string), object.(string))
415+
d.SetId(compositeId)
416+
}
417+
}
404418
sync.D = d
405419
sync.Client = m.(*OracleClients).objectStorageClient
406420

@@ -716,48 +730,53 @@ func (s *ObjectStorageObjectResourceCrud) Update() error {
716730
}
717731
request := oci_object_storage.RenameObjectRequest{}
718732

719-
bucketName, namespaceName, objectName, err := parseObjectCompositeId(s.D.Id())
720-
if err == nil {
721-
request.NamespaceName = &namespaceName
722-
request.BucketName = &bucketName
723-
request.SourceName = &objectName
724-
} else {
725-
log.Printf("[WARN] Update() unable to parse current ID: %s", s.D.Id())
726-
return err
733+
if bucket, ok := s.D.GetOkExists("bucket"); ok {
734+
tmp := bucket.(string)
735+
request.BucketName = &tmp
727736
}
728-
729-
if object, ok := s.D.GetOkExists("object"); ok {
730-
tmp := object.(string)
731-
request.NewName = &tmp
737+
if namespace, ok := s.D.GetOkExists("namespace"); ok {
738+
tmp := namespace.(string)
739+
request.NamespaceName = &tmp
732740
}
741+
oldRaw, newRaw := s.D.GetChange("object")
742+
sourceName := oldRaw.(string)
743+
request.SourceName = &sourceName
744+
745+
newName := newRaw.(string)
746+
request.NewName = &newName
733747

734748
request.RequestMetadata.RetryPolicy = getRetryPolicy(s.DisableNotFoundRetries, "object_storage")
735-
_, err = s.Client.RenameObject(context.Background(), request)
749+
_, err := s.Client.RenameObject(context.Background(), request)
736750
if err != nil {
737751
return err
738752
}
739753

740-
updatedId := getObjectCompositeId(bucketName, namespaceName, *request.NewName)
754+
updatedId := getObjectCompositeId(*request.BucketName, *request.NamespaceName, *request.NewName)
741755
s.D.SetId(updatedId)
742756
return s.Get()
743757
}
744758

745759
func (s *ObjectStorageObjectResourceCrud) Delete() error {
746760
request := oci_object_storage.DeleteObjectRequest{}
747761

748-
bucketName, namespaceName, objectName, err := parseObjectCompositeId(s.D.Id())
749-
if err == nil {
750-
request.NamespaceName = &namespaceName
751-
request.BucketName = &bucketName
752-
request.ObjectName = &objectName
753-
} else {
754-
log.Printf("[WARN] Delete() unable to parse current ID: %s", s.D.Id())
755-
return err
762+
if bucket, ok := s.D.GetOkExists("bucket"); ok {
763+
tmp := bucket.(string)
764+
request.BucketName = &tmp
765+
}
766+
767+
if namespace, ok := s.D.GetOkExists("namespace"); ok {
768+
tmp := namespace.(string)
769+
request.NamespaceName = &tmp
770+
}
771+
772+
if object, ok := s.D.GetOkExists("object"); ok {
773+
tmp := object.(string)
774+
request.ObjectName = &tmp
756775
}
757776

758777
request.RequestMetadata.RetryPolicy = getRetryPolicy(s.DisableNotFoundRetries, "object_storage")
759778

760-
_, err = s.Client.DeleteObject(context.Background(), request)
779+
_, err := s.Client.DeleteObject(context.Background(), request)
761780
return err
762781
}
763782

oci/object_storage_preauthenticated_request_resource.go

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,20 @@ func createObjectStoragePreauthenticatedRequest(d *schema.ResourceData, m interf
9696

9797
func readObjectStoragePreauthenticatedRequest(d *schema.ResourceData, m interface{}) error {
9898
sync := &ObjectStoragePreauthenticatedRequestResourceCrud{}
99+
// For backward compatibility with CompositeId change
100+
101+
log.Printf("[DEBUG] readObjectStoragePreauthenticatedRequest() Resource Id in state: %s", d.Id())
102+
_, _, _, err := parsePreauthenticatedRequestCompositeId(d.Id())
103+
104+
if err != nil {
105+
bucket, bOk := d.GetOkExists("bucket")
106+
namespace, nOk := d.GetOkExists("namespace")
107+
108+
if bOk && nOk {
109+
compositeId := getPreauthenticatedRequestCompositeId(bucket.(string), namespace.(string), d.Id())
110+
d.SetId(compositeId)
111+
}
112+
}
99113
sync.D = d
100114
sync.Client = m.(*OracleClients).objectStorageClient
101115

@@ -172,16 +186,6 @@ func (s *ObjectStoragePreauthenticatedRequestResourceCrud) Create() error {
172186
func (s *ObjectStoragePreauthenticatedRequestResourceCrud) Get() error {
173187
request := oci_object_storage.GetPreauthenticatedRequestRequest{}
174188

175-
if bucket, ok := s.D.GetOkExists("bucket"); ok {
176-
tmp := bucket.(string)
177-
request.BucketName = &tmp
178-
}
179-
180-
if namespace, ok := s.D.GetOkExists("namespace"); ok {
181-
tmp := namespace.(string)
182-
request.NamespaceName = &tmp
183-
}
184-
185189
bucket, namespace, parId, err := parsePreauthenticatedRequestCompositeId(s.D.Id())
186190
if err == nil {
187191
request.BucketName = &bucket
@@ -216,16 +220,20 @@ func (s *ObjectStoragePreauthenticatedRequestResourceCrud) Get() error {
216220
func (s *ObjectStoragePreauthenticatedRequestResourceCrud) Delete() error {
217221
request := oci_object_storage.DeletePreauthenticatedRequestRequest{}
218222

219-
bucket, namespace, parId, parseErr := parsePreauthenticatedRequestCompositeId(s.D.Id())
220-
if parseErr == nil {
221-
request.BucketName = &bucket
222-
request.NamespaceName = &namespace
223-
request.ParId = &parId
224-
} else {
225-
log.Printf("[WARN] Delete() unable to parse current ID: %s", s.D.Id())
226-
return parseErr
223+
if bucket, ok := s.D.GetOkExists("bucket"); ok {
224+
tmp := bucket.(string)
225+
request.BucketName = &tmp
227226
}
228227

228+
if namespace, ok := s.D.GetOkExists("namespace"); ok {
229+
tmp := namespace.(string)
230+
request.NamespaceName = &tmp
231+
}
232+
233+
if parId, ok := s.D.GetOkExists("par_id"); ok {
234+
tmp := parId.(string)
235+
request.ParId = &tmp
236+
}
229237
request.RequestMetadata.RetryPolicy = getRetryPolicy(s.DisableNotFoundRetries, "object_storage")
230238

231239
_, err := s.Client.DeletePreauthenticatedRequest(context.Background(), request)

0 commit comments

Comments
 (0)