@@ -664,95 +664,7 @@ func resourceStorageBucketRead(d *schema.ResourceData, meta interface{}) error {
664
664
}
665
665
log .Printf ("[DEBUG] Read bucket %v at location %v\n \n " , res .Name , res .SelfLink )
666
666
667
- // We are trying to support several different use cases for bucket. Buckets are globally
668
- // unique but they are associated with projects internally, but some users want to use
669
- // buckets in a project agnostic way. Thus we will check to see if the project ID has been
670
- // explicitly set and use that first. However if no project is explicitly set, such as during
671
- // import, we will look up the ID from the compute API using the project Number from the
672
- // bucket API response.
673
- // If you are working in a project-agnostic way and have not set the project ID in the provider
674
- // block, or the resource or an environment variable, we use the compute API to lookup the projectID
675
- // from the projectNumber which is included in the bucket API response
676
- if d .Get ("project" ) == "" {
677
- project , _ := getProject (d , config )
678
- if err := d .Set ("project" , project ); err != nil {
679
- return fmt .Errorf ("Error setting project: %s" , err )
680
- }
681
- }
682
- if d .Get ("project" ) == "" {
683
- proj , err := config .NewComputeClient (userAgent ).Projects .Get (strconv .FormatUint (res .ProjectNumber , 10 )).Do ()
684
- if err != nil {
685
- return err
686
- }
687
- log .Printf ("[DEBUG] Bucket %v is in project number %v, which is project ID %s.\n " , res .Name , res .ProjectNumber , proj .Name )
688
- if err := d .Set ("project" , proj .Name ); err != nil {
689
- return fmt .Errorf ("Error setting project: %s" , err )
690
- }
691
- }
692
-
693
- // Update the bucket ID according to the resource ID
694
- if err := d .Set ("self_link" , res .SelfLink ); err != nil {
695
- return fmt .Errorf ("Error setting self_link: %s" , err )
696
- }
697
- if err := d .Set ("url" , fmt .Sprintf ("gs://%s" , bucket )); err != nil {
698
- return fmt .Errorf ("Error setting url: %s" , err )
699
- }
700
- if err := d .Set ("storage_class" , res .StorageClass ); err != nil {
701
- return fmt .Errorf ("Error setting storage_class: %s" , err )
702
- }
703
- if err := d .Set ("encryption" , flattenBucketEncryption (res .Encryption )); err != nil {
704
- return fmt .Errorf ("Error setting encryption: %s" , err )
705
- }
706
- if err := d .Set ("location" , res .Location ); err != nil {
707
- return fmt .Errorf ("Error setting location: %s" , err )
708
- }
709
- if err := d .Set ("cors" , flattenCors (res .Cors )); err != nil {
710
- return fmt .Errorf ("Error setting cors: %s" , err )
711
- }
712
- if err := d .Set ("default_event_based_hold" , res .DefaultEventBasedHold ); err != nil {
713
- return fmt .Errorf ("Error setting default_event_based_hold: %s" , err )
714
- }
715
- if err := d .Set ("logging" , flattenBucketLogging (res .Logging )); err != nil {
716
- return fmt .Errorf ("Error setting logging: %s" , err )
717
- }
718
- if err := d .Set ("versioning" , flattenBucketVersioning (res .Versioning )); err != nil {
719
- return fmt .Errorf ("Error setting versioning: %s" , err )
720
- }
721
- if err := d .Set ("lifecycle_rule" , flattenBucketLifecycle (res .Lifecycle )); err != nil {
722
- return fmt .Errorf ("Error setting lifecycle_rule: %s" , err )
723
- }
724
- if err := d .Set ("labels" , res .Labels ); err != nil {
725
- return fmt .Errorf ("Error setting labels: %s" , err )
726
- }
727
- if err := d .Set ("website" , flattenBucketWebsite (res .Website )); err != nil {
728
- return fmt .Errorf ("Error setting website: %s" , err )
729
- }
730
- if err := d .Set ("retention_policy" , flattenBucketRetentionPolicy (res .RetentionPolicy )); err != nil {
731
- return fmt .Errorf ("Error setting retention_policy: %s" , err )
732
- }
733
-
734
- if res .IamConfiguration != nil && res .IamConfiguration .UniformBucketLevelAccess != nil {
735
- if err := d .Set ("uniform_bucket_level_access" , res .IamConfiguration .UniformBucketLevelAccess .Enabled ); err != nil {
736
- return fmt .Errorf ("Error setting uniform_bucket_level_access: %s" , err )
737
- }
738
- } else {
739
- if err := d .Set ("uniform_bucket_level_access" , false ); err != nil {
740
- return fmt .Errorf ("Error setting uniform_bucket_level_access: %s" , err )
741
- }
742
- }
743
-
744
- if res .Billing == nil {
745
- if err := d .Set ("requester_pays" , nil ); err != nil {
746
- return fmt .Errorf ("Error setting requester_pays: %s" , err )
747
- }
748
- } else {
749
- if err := d .Set ("requester_pays" , res .Billing .RequesterPays ); err != nil {
750
- return fmt .Errorf ("Error setting requester_pays: %s" , err )
751
- }
752
- }
753
-
754
- d .SetId (res .Id )
755
- return nil
667
+ return setStorageBucket (d , config , res , bucket , userAgent )
756
668
}
757
669
758
670
func resourceStorageBucketDelete (d * schema.ResourceData , meta interface {}) error {
@@ -1379,3 +1291,97 @@ func detectLifecycleChange(d *schema.ResourceData) bool {
1379
1291
1380
1292
return false
1381
1293
}
1294
+
1295
+ // Resource Read and DataSource Read both need to set attributes, but Data Sources don't support Timeouts
1296
+ // so we pulled this portion out separately (https://github.com/hashicorp/terraform-provider-google/issues/11264)
1297
+ func setStorageBucket (d * schema.ResourceData , config * Config , res * storage.Bucket , bucket , userAgent string ) error {
1298
+ // We are trying to support several different use cases for bucket. Buckets are globally
1299
+ // unique but they are associated with projects internally, but some users want to use
1300
+ // buckets in a project agnostic way. Thus we will check to see if the project ID has been
1301
+ // explicitly set and use that first. However if no project is explicitly set, such as during
1302
+ // import, we will look up the ID from the compute API using the project Number from the
1303
+ // bucket API response.
1304
+ // If you are working in a project-agnostic way and have not set the project ID in the provider
1305
+ // block, or the resource or an environment variable, we use the compute API to lookup the projectID
1306
+ // from the projectNumber which is included in the bucket API response
1307
+ if d .Get ("project" ) == "" {
1308
+ project , _ := getProject (d , config )
1309
+ if err := d .Set ("project" , project ); err != nil {
1310
+ return fmt .Errorf ("Error setting project: %s" , err )
1311
+ }
1312
+ }
1313
+ if d .Get ("project" ) == "" {
1314
+ proj , err := config .NewComputeClient (userAgent ).Projects .Get (strconv .FormatUint (res .ProjectNumber , 10 )).Do ()
1315
+ if err != nil {
1316
+ return err
1317
+ }
1318
+ log .Printf ("[DEBUG] Bucket %v is in project number %v, which is project ID %s.\n " , res .Name , res .ProjectNumber , proj .Name )
1319
+ if err := d .Set ("project" , proj .Name ); err != nil {
1320
+ return fmt .Errorf ("Error setting project: %s" , err )
1321
+ }
1322
+ }
1323
+
1324
+ // Update the bucket ID according to the resource ID
1325
+ if err := d .Set ("self_link" , res .SelfLink ); err != nil {
1326
+ return fmt .Errorf ("Error setting self_link: %s" , err )
1327
+ }
1328
+ if err := d .Set ("url" , fmt .Sprintf ("gs://%s" , bucket )); err != nil {
1329
+ return fmt .Errorf ("Error setting url: %s" , err )
1330
+ }
1331
+ if err := d .Set ("storage_class" , res .StorageClass ); err != nil {
1332
+ return fmt .Errorf ("Error setting storage_class: %s" , err )
1333
+ }
1334
+ if err := d .Set ("encryption" , flattenBucketEncryption (res .Encryption )); err != nil {
1335
+ return fmt .Errorf ("Error setting encryption: %s" , err )
1336
+ }
1337
+ if err := d .Set ("location" , res .Location ); err != nil {
1338
+ return fmt .Errorf ("Error setting location: %s" , err )
1339
+ }
1340
+ if err := d .Set ("cors" , flattenCors (res .Cors )); err != nil {
1341
+ return fmt .Errorf ("Error setting cors: %s" , err )
1342
+ }
1343
+ if err := d .Set ("default_event_based_hold" , res .DefaultEventBasedHold ); err != nil {
1344
+ return fmt .Errorf ("Error setting default_event_based_hold: %s" , err )
1345
+ }
1346
+ if err := d .Set ("logging" , flattenBucketLogging (res .Logging )); err != nil {
1347
+ return fmt .Errorf ("Error setting logging: %s" , err )
1348
+ }
1349
+ if err := d .Set ("versioning" , flattenBucketVersioning (res .Versioning )); err != nil {
1350
+ return fmt .Errorf ("Error setting versioning: %s" , err )
1351
+ }
1352
+ if err := d .Set ("lifecycle_rule" , flattenBucketLifecycle (res .Lifecycle )); err != nil {
1353
+ return fmt .Errorf ("Error setting lifecycle_rule: %s" , err )
1354
+ }
1355
+ if err := d .Set ("labels" , res .Labels ); err != nil {
1356
+ return fmt .Errorf ("Error setting labels: %s" , err )
1357
+ }
1358
+ if err := d .Set ("website" , flattenBucketWebsite (res .Website )); err != nil {
1359
+ return fmt .Errorf ("Error setting website: %s" , err )
1360
+ }
1361
+ if err := d .Set ("retention_policy" , flattenBucketRetentionPolicy (res .RetentionPolicy )); err != nil {
1362
+ return fmt .Errorf ("Error setting retention_policy: %s" , err )
1363
+ }
1364
+
1365
+ if res .IamConfiguration != nil && res .IamConfiguration .UniformBucketLevelAccess != nil {
1366
+ if err := d .Set ("uniform_bucket_level_access" , res .IamConfiguration .UniformBucketLevelAccess .Enabled ); err != nil {
1367
+ return fmt .Errorf ("Error setting uniform_bucket_level_access: %s" , err )
1368
+ }
1369
+ } else {
1370
+ if err := d .Set ("uniform_bucket_level_access" , false ); err != nil {
1371
+ return fmt .Errorf ("Error setting uniform_bucket_level_access: %s" , err )
1372
+ }
1373
+ }
1374
+
1375
+ if res .Billing == nil {
1376
+ if err := d .Set ("requester_pays" , nil ); err != nil {
1377
+ return fmt .Errorf ("Error setting requester_pays: %s" , err )
1378
+ }
1379
+ } else {
1380
+ if err := d .Set ("requester_pays" , res .Billing .RequesterPays ); err != nil {
1381
+ return fmt .Errorf ("Error setting requester_pays: %s" , err )
1382
+ }
1383
+ }
1384
+
1385
+ d .SetId (res .Id )
1386
+ return nil
1387
+ }
0 commit comments