@@ -140,6 +140,55 @@ CIDR-formatted string.`,
140
140
Where there is more than one matching route of maximum
141
141
length, the routes with the lowest priority value win.` ,
142
142
},
143
+ "bfd" : {
144
+ Type : schema .TypeList ,
145
+ Computed : true ,
146
+ Optional : true ,
147
+ Description : `BFD configuration for the BGP peering.` ,
148
+ MaxItems : 1 ,
149
+ Elem : & schema.Resource {
150
+ Schema : map [string ]* schema.Schema {
151
+ "session_initialization_mode" : {
152
+ Type : schema .TypeString ,
153
+ Required : true ,
154
+ ValidateFunc : validation .StringInSlice ([]string {"ACTIVE" , "DISABLED" , "PASSIVE" }, false ),
155
+ Description : `The BFD session initialization mode for this BGP peer.
156
+ If set to 'ACTIVE', the Cloud Router will initiate the BFD session
157
+ for this BGP peer. If set to 'PASSIVE', the Cloud Router will wait
158
+ for the peer router to initiate the BFD session for this BGP peer.
159
+ If set to 'DISABLED', BFD is disabled for this BGP peer. Possible values: ["ACTIVE", "DISABLED", "PASSIVE"]` ,
160
+ },
161
+ "min_receive_interval" : {
162
+ Type : schema .TypeInt ,
163
+ Optional : true ,
164
+ Description : `The minimum interval, in milliseconds, between BFD control packets
165
+ received from the peer router. The actual value is negotiated
166
+ between the two routers and is equal to the greater of this value
167
+ and the transmit interval of the other router. If set, this value
168
+ must be between 1000 and 30000.` ,
169
+ Default : 1000 ,
170
+ },
171
+ "min_transmit_interval" : {
172
+ Type : schema .TypeInt ,
173
+ Optional : true ,
174
+ Description : `The minimum interval, in milliseconds, between BFD control packets
175
+ transmitted to the peer router. The actual value is negotiated
176
+ between the two routers and is equal to the greater of this value
177
+ and the corresponding receive interval of the other router. If set,
178
+ this value must be between 1000 and 30000.` ,
179
+ Default : 1000 ,
180
+ },
181
+ "multiplier" : {
182
+ Type : schema .TypeInt ,
183
+ Optional : true ,
184
+ Description : `The number of consecutive BFD packets that must be missed before
185
+ BFD declares that a peer is unavailable. If set, the value must
186
+ be a value between 5 and 16.` ,
187
+ Default : 5 ,
188
+ },
189
+ },
190
+ },
191
+ },
143
192
"enable" : {
144
193
Type : schema .TypeBool ,
145
194
Optional : true ,
@@ -252,6 +301,12 @@ func resourceComputeRouterBgpPeerCreate(d *schema.ResourceData, meta interface{}
252
301
} else if v , ok := d .GetOkExists ("advertised_ip_ranges" ); ok || ! reflect .DeepEqual (v , advertisedIpRangesProp ) {
253
302
obj ["advertisedIpRanges" ] = advertisedIpRangesProp
254
303
}
304
+ bfdProp , err := expandNestedComputeRouterBgpPeerBfd (d .Get ("bfd" ), d , config )
305
+ if err != nil {
306
+ return err
307
+ } else if v , ok := d .GetOkExists ("bfd" ); ! isEmptyValue (reflect .ValueOf (bfdProp )) && (ok || ! reflect .DeepEqual (v , bfdProp )) {
308
+ obj ["bfd" ] = bfdProp
309
+ }
255
310
enableProp , err := expandNestedComputeRouterBgpPeerEnable (d .Get ("enable" ), d , config )
256
311
if err != nil {
257
312
return err
@@ -393,6 +448,9 @@ func resourceComputeRouterBgpPeerRead(d *schema.ResourceData, meta interface{})
393
448
if err := d .Set ("management_type" , flattenNestedComputeRouterBgpPeerManagementType (res ["managementType" ], d , config )); err != nil {
394
449
return fmt .Errorf ("Error reading RouterBgpPeer: %s" , err )
395
450
}
451
+ if err := d .Set ("bfd" , flattenNestedComputeRouterBgpPeerBfd (res ["bfd" ], d , config )); err != nil {
452
+ return fmt .Errorf ("Error reading RouterBgpPeer: %s" , err )
453
+ }
396
454
if err := d .Set ("enable" , flattenNestedComputeRouterBgpPeerEnable (res ["enable" ], d , config )); err != nil {
397
455
return fmt .Errorf ("Error reading RouterBgpPeer: %s" , err )
398
456
}
@@ -458,6 +516,12 @@ func resourceComputeRouterBgpPeerUpdate(d *schema.ResourceData, meta interface{}
458
516
} else if v , ok := d .GetOkExists ("advertised_ip_ranges" ); ok || ! reflect .DeepEqual (v , advertisedIpRangesProp ) {
459
517
obj ["advertisedIpRanges" ] = advertisedIpRangesProp
460
518
}
519
+ bfdProp , err := expandNestedComputeRouterBgpPeerBfd (d .Get ("bfd" ), d , config )
520
+ if err != nil {
521
+ return err
522
+ } else if v , ok := d .GetOkExists ("bfd" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , bfdProp )) {
523
+ obj ["bfd" ] = bfdProp
524
+ }
461
525
enableProp , err := expandNestedComputeRouterBgpPeerEnable (d .Get ("enable" ), d , config )
462
526
if err != nil {
463
527
return err
@@ -679,6 +743,80 @@ func flattenNestedComputeRouterBgpPeerManagementType(v interface{}, d *schema.Re
679
743
return v
680
744
}
681
745
746
+ func flattenNestedComputeRouterBgpPeerBfd (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
747
+ if v == nil {
748
+ return nil
749
+ }
750
+ original := v .(map [string ]interface {})
751
+ if len (original ) == 0 {
752
+ return nil
753
+ }
754
+ transformed := make (map [string ]interface {})
755
+ transformed ["session_initialization_mode" ] =
756
+ flattenNestedComputeRouterBgpPeerBfdSessionInitializationMode (original ["sessionInitializationMode" ], d , config )
757
+ transformed ["min_transmit_interval" ] =
758
+ flattenNestedComputeRouterBgpPeerBfdMinTransmitInterval (original ["minTransmitInterval" ], d , config )
759
+ transformed ["min_receive_interval" ] =
760
+ flattenNestedComputeRouterBgpPeerBfdMinReceiveInterval (original ["minReceiveInterval" ], d , config )
761
+ transformed ["multiplier" ] =
762
+ flattenNestedComputeRouterBgpPeerBfdMultiplier (original ["multiplier" ], d , config )
763
+ return []interface {}{transformed }
764
+ }
765
+ func flattenNestedComputeRouterBgpPeerBfdSessionInitializationMode (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
766
+ return v
767
+ }
768
+
769
+ func flattenNestedComputeRouterBgpPeerBfdMinTransmitInterval (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
770
+ // Handles the string fixed64 format
771
+ if strVal , ok := v .(string ); ok {
772
+ if intVal , err := strconv .ParseInt (strVal , 10 , 64 ); err == nil {
773
+ return intVal
774
+ }
775
+ }
776
+
777
+ // number values are represented as float64
778
+ if floatVal , ok := v .(float64 ); ok {
779
+ intVal := int (floatVal )
780
+ return intVal
781
+ }
782
+
783
+ return v // let terraform core handle it otherwise
784
+ }
785
+
786
+ func flattenNestedComputeRouterBgpPeerBfdMinReceiveInterval (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
787
+ // Handles the string fixed64 format
788
+ if strVal , ok := v .(string ); ok {
789
+ if intVal , err := strconv .ParseInt (strVal , 10 , 64 ); err == nil {
790
+ return intVal
791
+ }
792
+ }
793
+
794
+ // number values are represented as float64
795
+ if floatVal , ok := v .(float64 ); ok {
796
+ intVal := int (floatVal )
797
+ return intVal
798
+ }
799
+
800
+ return v // let terraform core handle it otherwise
801
+ }
802
+
803
+ func flattenNestedComputeRouterBgpPeerBfdMultiplier (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
804
+ // Handles the string fixed64 format
805
+ if strVal , ok := v .(string ); ok {
806
+ if intVal , err := strconv .ParseInt (strVal , 10 , 64 ); err == nil {
807
+ return intVal
808
+ }
809
+ }
810
+
811
+ // number values are represented as float64
812
+ if floatVal , ok := v .(float64 ); ok {
813
+ intVal := int (floatVal )
814
+ return intVal
815
+ }
816
+
817
+ return v // let terraform core handle it otherwise
818
+ }
819
+
682
820
func flattenNestedComputeRouterBgpPeerEnable (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
683
821
if v == nil {
684
822
return true
@@ -760,6 +898,62 @@ func expandNestedComputeRouterBgpPeerAdvertisedIpRangesDescription(v interface{}
760
898
return v , nil
761
899
}
762
900
901
+ func expandNestedComputeRouterBgpPeerBfd (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
902
+ l := v .([]interface {})
903
+ if len (l ) == 0 || l [0 ] == nil {
904
+ return nil , nil
905
+ }
906
+ raw := l [0 ]
907
+ original := raw .(map [string ]interface {})
908
+ transformed := make (map [string ]interface {})
909
+
910
+ transformedSessionInitializationMode , err := expandNestedComputeRouterBgpPeerBfdSessionInitializationMode (original ["session_initialization_mode" ], d , config )
911
+ if err != nil {
912
+ return nil , err
913
+ } else if val := reflect .ValueOf (transformedSessionInitializationMode ); val .IsValid () && ! isEmptyValue (val ) {
914
+ transformed ["sessionInitializationMode" ] = transformedSessionInitializationMode
915
+ }
916
+
917
+ transformedMinTransmitInterval , err := expandNestedComputeRouterBgpPeerBfdMinTransmitInterval (original ["min_transmit_interval" ], d , config )
918
+ if err != nil {
919
+ return nil , err
920
+ } else if val := reflect .ValueOf (transformedMinTransmitInterval ); val .IsValid () && ! isEmptyValue (val ) {
921
+ transformed ["minTransmitInterval" ] = transformedMinTransmitInterval
922
+ }
923
+
924
+ transformedMinReceiveInterval , err := expandNestedComputeRouterBgpPeerBfdMinReceiveInterval (original ["min_receive_interval" ], d , config )
925
+ if err != nil {
926
+ return nil , err
927
+ } else if val := reflect .ValueOf (transformedMinReceiveInterval ); val .IsValid () && ! isEmptyValue (val ) {
928
+ transformed ["minReceiveInterval" ] = transformedMinReceiveInterval
929
+ }
930
+
931
+ transformedMultiplier , err := expandNestedComputeRouterBgpPeerBfdMultiplier (original ["multiplier" ], d , config )
932
+ if err != nil {
933
+ return nil , err
934
+ } else if val := reflect .ValueOf (transformedMultiplier ); val .IsValid () && ! isEmptyValue (val ) {
935
+ transformed ["multiplier" ] = transformedMultiplier
936
+ }
937
+
938
+ return transformed , nil
939
+ }
940
+
941
+ func expandNestedComputeRouterBgpPeerBfdSessionInitializationMode (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
942
+ return v , nil
943
+ }
944
+
945
+ func expandNestedComputeRouterBgpPeerBfdMinTransmitInterval (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
946
+ return v , nil
947
+ }
948
+
949
+ func expandNestedComputeRouterBgpPeerBfdMinReceiveInterval (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
950
+ return v , nil
951
+ }
952
+
953
+ func expandNestedComputeRouterBgpPeerBfdMultiplier (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
954
+ return v , nil
955
+ }
956
+
763
957
func expandNestedComputeRouterBgpPeerEnable (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
764
958
if v == nil {
765
959
return nil , nil
0 commit comments