@@ -324,6 +324,23 @@ func resourceComputeSecurityPolicy() *schema.Resource {
324324 ValidateFunc : validation .StringInSlice ([]string {"DISABLED" , "STANDARD" }, false ),
325325 Description : `JSON body parsing. Supported values include: "DISABLED", "STANDARD".` ,
326326 },
327+ "json_custom_config" : {
328+ Type : schema .TypeList ,
329+ Optional : true ,
330+ Computed : true ,
331+ Description : `Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD.` ,
332+ MaxItems : 1 ,
333+ Elem : & schema.Resource {
334+ Schema : map [string ]* schema.Schema {
335+ "content_types" : {
336+ Type : schema .TypeSet ,
337+ Required : true ,
338+ Elem : & schema.Schema {Type : schema .TypeString },
339+ Description : `A list of custom Content-Type header values to apply the JSON parsing.` ,
340+ },
341+ },
342+ },
343+ },
327344 "log_level" : {
328345 Type : schema .TypeString ,
329346 Optional : true ,
@@ -530,7 +547,7 @@ func resourceComputeSecurityPolicyUpdate(d *schema.ResourceData, meta interface{
530547
531548 if d .HasChange ("advanced_options_config" ) {
532549 securityPolicy .AdvancedOptionsConfig = expandSecurityPolicyAdvancedOptionsConfig (d .Get ("advanced_options_config" ).([]interface {}))
533- securityPolicy .ForceSendFields = append (securityPolicy .ForceSendFields , "AdvancedOptionsConfig" , "advancedOptionsConfig.jsonParsing" , "advancedOptionsConfig.logLevel" )
550+ securityPolicy .ForceSendFields = append (securityPolicy .ForceSendFields , "AdvancedOptionsConfig" , "advancedOptionsConfig.jsonParsing" , "advancedOptionsConfig.jsonCustomConfig" , "advancedOptionsConfig. logLevel" )
534551 }
535552
536553 if d .HasChange ("adaptive_protection_config" ) {
@@ -778,8 +795,9 @@ func expandSecurityPolicyAdvancedOptionsConfig(configured []interface{}) *comput
778795
779796 data := configured [0 ].(map [string ]interface {})
780797 return & compute.SecurityPolicyAdvancedOptionsConfig {
781- JsonParsing : data ["json_parsing" ].(string ),
782- LogLevel : data ["log_level" ].(string ),
798+ JsonParsing : data ["json_parsing" ].(string ),
799+ JsonCustomConfig : expandSecurityPolicyAdvancedOptionsConfigJsonCustomConfig (data ["json_custom_config" ].([]interface {})),
800+ LogLevel : data ["log_level" ].(string ),
783801 }
784802}
785803
@@ -789,8 +807,33 @@ func flattenSecurityPolicyAdvancedOptionsConfig(conf *compute.SecurityPolicyAdva
789807 }
790808
791809 data := map [string ]interface {}{
792- "json_parsing" : conf .JsonParsing ,
793- "log_level" : conf .LogLevel ,
810+ "json_parsing" : conf .JsonParsing ,
811+ "json_custom_config" : flattenSecurityPolicyAdvancedOptionsConfigJsonCustomConfig (conf .JsonCustomConfig ),
812+ "log_level" : conf .LogLevel ,
813+ }
814+
815+ return []map [string ]interface {}{data }
816+ }
817+
818+ func expandSecurityPolicyAdvancedOptionsConfigJsonCustomConfig (configured []interface {}) * compute.SecurityPolicyAdvancedOptionsConfigJsonCustomConfig {
819+ if len (configured ) == 0 || configured [0 ] == nil {
820+ // If configuration is unset, return an empty JsonCustomConfig; this ensures the ContentTypes list can be cleared
821+ return & compute.SecurityPolicyAdvancedOptionsConfigJsonCustomConfig {}
822+ }
823+
824+ data := configured [0 ].(map [string ]interface {})
825+ return & compute.SecurityPolicyAdvancedOptionsConfigJsonCustomConfig {
826+ ContentTypes : convertStringArr (data ["content_types" ].(* schema.Set ).List ()),
827+ }
828+ }
829+
830+ func flattenSecurityPolicyAdvancedOptionsConfigJsonCustomConfig (conf * compute.SecurityPolicyAdvancedOptionsConfigJsonCustomConfig ) []map [string ]interface {} {
831+ if conf == nil {
832+ return nil
833+ }
834+
835+ data := map [string ]interface {}{
836+ "content_types" : schema .NewSet (schema .HashString , convertStringArrToInterface (conf .ContentTypes )),
794837 }
795838
796839 return []map [string ]interface {}{data }
0 commit comments