|
1 | 1 | // Copyright (c) HashiCorp, Inc. |
2 | 2 | // SPDX-License-Identifier: MPL-2.0 |
| 3 | +// SPDX-License-Identifier: MPL-2.0 |
3 | 4 | package storage |
4 | 5 |
|
5 | 6 | import ( |
@@ -90,7 +91,6 @@ func ResourceStorageBucketObject() *schema.Resource { |
90 | 91 | "content": { |
91 | 92 | Type: schema.TypeString, |
92 | 93 | Optional: true, |
93 | | - ForceNew: true, |
94 | 94 | ExactlyOneOf: []string{"source"}, |
95 | 95 | Sensitive: true, |
96 | 96 | Computed: true, |
@@ -122,7 +122,6 @@ func ResourceStorageBucketObject() *schema.Resource { |
122 | 122 | Type: schema.TypeString, |
123 | 123 | // This field is not Computed because it needs to trigger a diff. |
124 | 124 | Optional: true, |
125 | | - ForceNew: true, |
126 | 125 | // Makes the diff message nicer: |
127 | 126 | // detect_md5hash: "1XcnP/iFw/hNrbhXi7QTmQ==" => "different hash" (forces new resource) |
128 | 127 | // Instead of the more confusing: |
@@ -378,45 +377,53 @@ func resourceStorageBucketObjectUpdate(d *schema.ResourceData, meta interface{}) |
378 | 377 | bucket := d.Get("bucket").(string) |
379 | 378 | name := d.Get("name").(string) |
380 | 379 |
|
381 | | - objectsService := storage.NewObjectsService(config.NewStorageClientWithTimeoutOverride(userAgent, d.Timeout(schema.TimeoutUpdate))) |
382 | | - getCall := objectsService.Get(bucket, name) |
| 380 | + if d.HasChange("content") || d.HasChange("detect_md5hash") { |
| 381 | + // The KMS key name are not able to be set on create : |
| 382 | + // or you get error: Error uploading object test-maarc: googleapi: Error 400: Malformed Cloud KMS crypto key: projects/myproject/locations/myregion/keyRings/mykeyring/cryptoKeys/mykeyname/cryptoKeyVersions/1, invalid |
| 383 | + d.Set("kms_key_name", nil) |
| 384 | + return resourceStorageBucketObjectCreate(d, meta) |
| 385 | + } else { |
383 | 386 |
|
384 | | - res, err := getCall.Do() |
385 | | - if err != nil { |
386 | | - return fmt.Errorf("Error retrieving object during update %s: %s", name, err) |
387 | | - } |
| 387 | + objectsService := storage.NewObjectsService(config.NewStorageClientWithTimeoutOverride(userAgent, d.Timeout(schema.TimeoutUpdate))) |
| 388 | + getCall := objectsService.Get(bucket, name) |
388 | 389 |
|
389 | | - hasRetentionChanges := d.HasChange("retention") |
390 | | - if hasRetentionChanges { |
391 | | - if v, ok := d.GetOk("retention"); ok { |
392 | | - res.Retention = expandObjectRetention(v) |
393 | | - } else { |
394 | | - res.Retention = nil |
395 | | - res.NullFields = append(res.NullFields, "Retention") |
| 390 | + res, err := getCall.Do() |
| 391 | + if err != nil { |
| 392 | + return fmt.Errorf("Error retrieving object during update %s: %s", name, err) |
396 | 393 | } |
397 | | - } |
398 | 394 |
|
399 | | - if d.HasChange("event_based_hold") { |
400 | | - v := d.Get("event_based_hold") |
401 | | - res.EventBasedHold = v.(bool) |
402 | | - } |
| 395 | + hasRetentionChanges := d.HasChange("retention") |
| 396 | + if hasRetentionChanges { |
| 397 | + if v, ok := d.GetOk("retention"); ok { |
| 398 | + res.Retention = expandObjectRetention(v) |
| 399 | + } else { |
| 400 | + res.Retention = nil |
| 401 | + res.NullFields = append(res.NullFields, "Retention") |
| 402 | + } |
| 403 | + } |
403 | 404 |
|
404 | | - if d.HasChange("temporary_hold") { |
405 | | - v := d.Get("temporary_hold") |
406 | | - res.TemporaryHold = v.(bool) |
407 | | - } |
| 405 | + if d.HasChange("event_based_hold") { |
| 406 | + v := d.Get("event_based_hold") |
| 407 | + res.EventBasedHold = v.(bool) |
| 408 | + } |
408 | 409 |
|
409 | | - updateCall := objectsService.Update(bucket, name, res) |
410 | | - if hasRetentionChanges { |
411 | | - updateCall.OverrideUnlockedRetention(true) |
412 | | - } |
413 | | - _, err = updateCall.Do() |
| 410 | + if d.HasChange("temporary_hold") { |
| 411 | + v := d.Get("temporary_hold") |
| 412 | + res.TemporaryHold = v.(bool) |
| 413 | + } |
414 | 414 |
|
415 | | - if err != nil { |
416 | | - return fmt.Errorf("Error updating object %s: %s", name, err) |
417 | | - } |
| 415 | + updateCall := objectsService.Update(bucket, name, res) |
| 416 | + if hasRetentionChanges { |
| 417 | + updateCall.OverrideUnlockedRetention(true) |
| 418 | + } |
| 419 | + _, err = updateCall.Do() |
418 | 420 |
|
419 | | - return nil |
| 421 | + if err != nil { |
| 422 | + return fmt.Errorf("Error updating object %s: %s", name, err) |
| 423 | + } |
| 424 | + |
| 425 | + return nil |
| 426 | + } |
420 | 427 | } |
421 | 428 |
|
422 | 429 | func resourceStorageBucketObjectRead(d *schema.ResourceData, meta interface{}) error { |
|
0 commit comments