@@ -29,6 +29,7 @@ import (
29
29
30
30
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
31
31
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
32
+ "github.com/hashicorp/terraform-provider-google/google/verify"
32
33
)
33
34
34
35
func ResourceGKEHub2Fleet () * schema.Resource {
@@ -53,6 +54,38 @@ func ResourceGKEHub2Fleet() *schema.Resource {
53
54
),
54
55
55
56
Schema : map [string ]* schema.Schema {
57
+ "default_cluster_config" : {
58
+ Type : schema .TypeList ,
59
+ Optional : true ,
60
+ Description : `The default cluster configurations to apply across the fleet.` ,
61
+ MaxItems : 1 ,
62
+ Elem : & schema.Resource {
63
+ Schema : map [string ]* schema.Schema {
64
+ "security_posture_config" : {
65
+ Type : schema .TypeList ,
66
+ Optional : true ,
67
+ Description : `Enable/Disable Security Posture features for the cluster.` ,
68
+ MaxItems : 1 ,
69
+ Elem : & schema.Resource {
70
+ Schema : map [string ]* schema.Schema {
71
+ "mode" : {
72
+ Type : schema .TypeString ,
73
+ Optional : true ,
74
+ ValidateFunc : verify .ValidateEnum ([]string {"DISABLED" , "BASIC" , "ENTERPRISE" , "" }),
75
+ Description : `Sets which mode to use for Security Posture features. Possible values: ["DISABLED", "BASIC", "ENTERPRISE"]` ,
76
+ },
77
+ "vulnerability_mode" : {
78
+ Type : schema .TypeString ,
79
+ Optional : true ,
80
+ ValidateFunc : verify .ValidateEnum ([]string {"VULNERABILITY_DISABLED" , "VULNERABILITY_BASIC" , "VULNERABILITY_ENTERPRISE" , "" }),
81
+ Description : `Sets which mode to use for vulnerability scanning. Possible values: ["VULNERABILITY_DISABLED", "VULNERABILITY_BASIC", "VULNERABILITY_ENTERPRISE"]` ,
82
+ },
83
+ },
84
+ },
85
+ },
86
+ },
87
+ },
88
+ },
56
89
"display_name" : {
57
90
Type : schema .TypeString ,
58
91
Optional : true ,
@@ -120,6 +153,12 @@ func resourceGKEHub2FleetCreate(d *schema.ResourceData, meta interface{}) error
120
153
} else if v , ok := d .GetOkExists ("display_name" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (displayNameProp )) && (ok || ! reflect .DeepEqual (v , displayNameProp )) {
121
154
obj ["displayName" ] = displayNameProp
122
155
}
156
+ defaultClusterConfigProp , err := expandGKEHub2FleetDefaultClusterConfig (d .Get ("default_cluster_config" ), d , config )
157
+ if err != nil {
158
+ return err
159
+ } else if v , ok := d .GetOkExists ("default_cluster_config" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (defaultClusterConfigProp )) && (ok || ! reflect .DeepEqual (v , defaultClusterConfigProp )) {
160
+ obj ["defaultClusterConfig" ] = defaultClusterConfigProp
161
+ }
123
162
124
163
url , err := tpgresource .ReplaceVars (d , config , "{{GKEHub2BasePath}}projects/{{project}}/locations/global/fleets" )
125
164
if err != nil {
@@ -233,6 +272,9 @@ func resourceGKEHub2FleetRead(d *schema.ResourceData, meta interface{}) error {
233
272
if err := d .Set ("state" , flattenGKEHub2FleetState (res ["state" ], d , config )); err != nil {
234
273
return fmt .Errorf ("Error reading Fleet: %s" , err )
235
274
}
275
+ if err := d .Set ("default_cluster_config" , flattenGKEHub2FleetDefaultClusterConfig (res ["defaultClusterConfig" ], d , config )); err != nil {
276
+ return fmt .Errorf ("Error reading Fleet: %s" , err )
277
+ }
236
278
237
279
return nil
238
280
}
@@ -259,6 +301,12 @@ func resourceGKEHub2FleetUpdate(d *schema.ResourceData, meta interface{}) error
259
301
} else if v , ok := d .GetOkExists ("display_name" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , displayNameProp )) {
260
302
obj ["displayName" ] = displayNameProp
261
303
}
304
+ defaultClusterConfigProp , err := expandGKEHub2FleetDefaultClusterConfig (d .Get ("default_cluster_config" ), d , config )
305
+ if err != nil {
306
+ return err
307
+ } else if v , ok := d .GetOkExists ("default_cluster_config" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , defaultClusterConfigProp )) {
308
+ obj ["defaultClusterConfig" ] = defaultClusterConfigProp
309
+ }
262
310
263
311
url , err := tpgresource .ReplaceVars (d , config , "{{GKEHub2BasePath}}projects/{{project}}/locations/global/fleets/default" )
264
312
if err != nil {
@@ -271,6 +319,10 @@ func resourceGKEHub2FleetUpdate(d *schema.ResourceData, meta interface{}) error
271
319
if d .HasChange ("display_name" ) {
272
320
updateMask = append (updateMask , "displayName" )
273
321
}
322
+
323
+ if d .HasChange ("default_cluster_config" ) {
324
+ updateMask = append (updateMask , "defaultClusterConfig" )
325
+ }
274
326
// updateMask is a URL parameter but not present in the schema, so ReplaceVars
275
327
// won't set it
276
328
url , err = transport_tpg .AddQueryParams (url , map [string ]string {"updateMask" : strings .Join (updateMask , "," )})
@@ -422,6 +474,95 @@ func flattenGKEHub2FleetStateCode(v interface{}, d *schema.ResourceData, config
422
474
return v
423
475
}
424
476
477
+ func flattenGKEHub2FleetDefaultClusterConfig (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
478
+ if v == nil {
479
+ return nil
480
+ }
481
+ original := v .(map [string ]interface {})
482
+ if len (original ) == 0 {
483
+ return nil
484
+ }
485
+ transformed := make (map [string ]interface {})
486
+ transformed ["security_posture_config" ] =
487
+ flattenGKEHub2FleetDefaultClusterConfigSecurityPostureConfig (original ["securityPostureConfig" ], d , config )
488
+ return []interface {}{transformed }
489
+ }
490
+ func flattenGKEHub2FleetDefaultClusterConfigSecurityPostureConfig (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
491
+ if v == nil {
492
+ return nil
493
+ }
494
+ original := v .(map [string ]interface {})
495
+ if len (original ) == 0 {
496
+ return nil
497
+ }
498
+ transformed := make (map [string ]interface {})
499
+ transformed ["mode" ] =
500
+ flattenGKEHub2FleetDefaultClusterConfigSecurityPostureConfigMode (original ["mode" ], d , config )
501
+ transformed ["vulnerability_mode" ] =
502
+ flattenGKEHub2FleetDefaultClusterConfigSecurityPostureConfigVulnerabilityMode (original ["vulnerabilityMode" ], d , config )
503
+ return []interface {}{transformed }
504
+ }
505
+ func flattenGKEHub2FleetDefaultClusterConfigSecurityPostureConfigMode (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
506
+ return v
507
+ }
508
+
509
+ func flattenGKEHub2FleetDefaultClusterConfigSecurityPostureConfigVulnerabilityMode (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
510
+ return v
511
+ }
512
+
425
513
func expandGKEHub2FleetDisplayName (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
426
514
return v , nil
427
515
}
516
+
517
+ func expandGKEHub2FleetDefaultClusterConfig (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
518
+ l := v .([]interface {})
519
+ if len (l ) == 0 || l [0 ] == nil {
520
+ return nil , nil
521
+ }
522
+ raw := l [0 ]
523
+ original := raw .(map [string ]interface {})
524
+ transformed := make (map [string ]interface {})
525
+
526
+ transformedSecurityPostureConfig , err := expandGKEHub2FleetDefaultClusterConfigSecurityPostureConfig (original ["security_posture_config" ], d , config )
527
+ if err != nil {
528
+ return nil , err
529
+ } else if val := reflect .ValueOf (transformedSecurityPostureConfig ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
530
+ transformed ["securityPostureConfig" ] = transformedSecurityPostureConfig
531
+ }
532
+
533
+ return transformed , nil
534
+ }
535
+
536
+ func expandGKEHub2FleetDefaultClusterConfigSecurityPostureConfig (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
537
+ l := v .([]interface {})
538
+ if len (l ) == 0 || l [0 ] == nil {
539
+ return nil , nil
540
+ }
541
+ raw := l [0 ]
542
+ original := raw .(map [string ]interface {})
543
+ transformed := make (map [string ]interface {})
544
+
545
+ transformedMode , err := expandGKEHub2FleetDefaultClusterConfigSecurityPostureConfigMode (original ["mode" ], d , config )
546
+ if err != nil {
547
+ return nil , err
548
+ } else if val := reflect .ValueOf (transformedMode ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
549
+ transformed ["mode" ] = transformedMode
550
+ }
551
+
552
+ transformedVulnerabilityMode , err := expandGKEHub2FleetDefaultClusterConfigSecurityPostureConfigVulnerabilityMode (original ["vulnerability_mode" ], d , config )
553
+ if err != nil {
554
+ return nil , err
555
+ } else if val := reflect .ValueOf (transformedVulnerabilityMode ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
556
+ transformed ["vulnerabilityMode" ] = transformedVulnerabilityMode
557
+ }
558
+
559
+ return transformed , nil
560
+ }
561
+
562
+ func expandGKEHub2FleetDefaultClusterConfigSecurityPostureConfigMode (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
563
+ return v , nil
564
+ }
565
+
566
+ func expandGKEHub2FleetDefaultClusterConfigSecurityPostureConfigVulnerabilityMode (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
567
+ return v , nil
568
+ }
0 commit comments