|
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