@@ -180,6 +180,109 @@ except the last character, which cannot be a dash.`,
180180gateway and the peer VPN gateway.` ,
181181 Sensitive : true ,
182182 },
183+ "cipher_suite" : {
184+ Type : schema .TypeList ,
185+ Optional : true ,
186+ ForceNew : true ,
187+ Description : `User specified list of ciphers to use for the phase 1 and phase 2 of the IKE protocol.` ,
188+ MaxItems : 1 ,
189+ Elem : & schema.Resource {
190+ Schema : map [string ]* schema.Schema {
191+ "phase1" : {
192+ Type : schema .TypeList ,
193+ Optional : true ,
194+ ForceNew : true ,
195+ Description : `Cipher configuration for phase 1 of the IKE protocol.` ,
196+ MaxItems : 1 ,
197+ Elem : & schema.Resource {
198+ Schema : map [string ]* schema.Schema {
199+ "dh" : {
200+ Type : schema .TypeSet ,
201+ Optional : true ,
202+ ForceNew : true ,
203+ Description : `Diffie-Hellman groups.` ,
204+ Elem : & schema.Schema {
205+ Type : schema .TypeString ,
206+ },
207+ Set : schema .HashString ,
208+ },
209+ "encryption" : {
210+ Type : schema .TypeSet ,
211+ Optional : true ,
212+ ForceNew : true ,
213+ Description : `Encryption algorithms.` ,
214+ Elem : & schema.Schema {
215+ Type : schema .TypeString ,
216+ },
217+ Set : schema .HashString ,
218+ },
219+ "integrity" : {
220+ Type : schema .TypeSet ,
221+ Optional : true ,
222+ ForceNew : true ,
223+ Description : `Integrity algorithms.` ,
224+ Elem : & schema.Schema {
225+ Type : schema .TypeString ,
226+ },
227+ Set : schema .HashString ,
228+ },
229+ "prf" : {
230+ Type : schema .TypeSet ,
231+ Optional : true ,
232+ ForceNew : true ,
233+ Description : `Pseudo-random functions.` ,
234+ Elem : & schema.Schema {
235+ Type : schema .TypeString ,
236+ },
237+ Set : schema .HashString ,
238+ },
239+ },
240+ },
241+ },
242+ "phase2" : {
243+ Type : schema .TypeList ,
244+ Optional : true ,
245+ ForceNew : true ,
246+ Description : `Cipher configuration for phase 2 of the IKE protocol.` ,
247+ MaxItems : 1 ,
248+ Elem : & schema.Resource {
249+ Schema : map [string ]* schema.Schema {
250+ "encryption" : {
251+ Type : schema .TypeSet ,
252+ Optional : true ,
253+ ForceNew : true ,
254+ Description : `Encryption algorithms.` ,
255+ Elem : & schema.Schema {
256+ Type : schema .TypeString ,
257+ },
258+ Set : schema .HashString ,
259+ },
260+ "integrity" : {
261+ Type : schema .TypeSet ,
262+ Optional : true ,
263+ ForceNew : true ,
264+ Description : `Integrity algorithms.` ,
265+ Elem : & schema.Schema {
266+ Type : schema .TypeString ,
267+ },
268+ Set : schema .HashString ,
269+ },
270+ "pfs" : {
271+ Type : schema .TypeSet ,
272+ Optional : true ,
273+ ForceNew : true ,
274+ Description : `Perfect forward secrecy groups.` ,
275+ Elem : & schema.Schema {
276+ Type : schema .TypeString ,
277+ },
278+ Set : schema .HashString ,
279+ },
280+ },
281+ },
282+ },
283+ },
284+ },
285+ },
183286 "description" : {
184287 Type : schema .TypeString ,
185288 Optional : true ,
@@ -455,6 +558,12 @@ func resourceComputeVpnTunnelCreate(d *schema.ResourceData, meta interface{}) er
455558 } else if v , ok := d .GetOkExists ("label_fingerprint" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (labelFingerprintProp )) && (ok || ! reflect .DeepEqual (v , labelFingerprintProp )) {
456559 obj ["labelFingerprint" ] = labelFingerprintProp
457560 }
561+ cipherSuiteProp , err := expandComputeVpnTunnelCipherSuite (d .Get ("cipher_suite" ), d , config )
562+ if err != nil {
563+ return err
564+ } else if v , ok := d .GetOkExists ("cipher_suite" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (cipherSuiteProp )) && (ok || ! reflect .DeepEqual (v , cipherSuiteProp )) {
565+ obj ["cipherSuite" ] = cipherSuiteProp
566+ }
458567 labelsProp , err := expandComputeVpnTunnelEffectiveLabels (d .Get ("effective_labels" ), d , config )
459568 if err != nil {
460569 return err
@@ -688,6 +797,9 @@ func resourceComputeVpnTunnelRead(d *schema.ResourceData, meta interface{}) erro
688797 if err := d .Set ("detailed_status" , flattenComputeVpnTunnelDetailedStatus (res ["detailedStatus" ], d , config )); err != nil {
689798 return fmt .Errorf ("Error reading VpnTunnel: %s" , err )
690799 }
800+ if err := d .Set ("cipher_suite" , flattenComputeVpnTunnelCipherSuite (res ["cipherSuite" ], d , config )); err != nil {
801+ return fmt .Errorf ("Error reading VpnTunnel: %s" , err )
802+ }
691803 if err := d .Set ("terraform_labels" , flattenComputeVpnTunnelTerraformLabels (res ["labels" ], d , config )); err != nil {
692804 return fmt .Errorf ("Error reading VpnTunnel: %s" , err )
693805 }
@@ -1002,6 +1114,106 @@ func flattenComputeVpnTunnelDetailedStatus(v interface{}, d *schema.ResourceData
10021114 return v
10031115}
10041116
1117+ func flattenComputeVpnTunnelCipherSuite (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1118+ if v == nil {
1119+ return nil
1120+ }
1121+ original := v .(map [string ]interface {})
1122+ if len (original ) == 0 {
1123+ return nil
1124+ }
1125+ transformed := make (map [string ]interface {})
1126+ transformed ["phase1" ] =
1127+ flattenComputeVpnTunnelCipherSuitePhase1 (original ["phase1" ], d , config )
1128+ transformed ["phase2" ] =
1129+ flattenComputeVpnTunnelCipherSuitePhase2 (original ["phase2" ], d , config )
1130+ return []interface {}{transformed }
1131+ }
1132+ func flattenComputeVpnTunnelCipherSuitePhase1 (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1133+ if v == nil {
1134+ return nil
1135+ }
1136+ original := v .(map [string ]interface {})
1137+ if len (original ) == 0 {
1138+ return nil
1139+ }
1140+ transformed := make (map [string ]interface {})
1141+ transformed ["encryption" ] =
1142+ flattenComputeVpnTunnelCipherSuitePhase1Encryption (original ["encryption" ], d , config )
1143+ transformed ["integrity" ] =
1144+ flattenComputeVpnTunnelCipherSuitePhase1Integrity (original ["integrity" ], d , config )
1145+ transformed ["prf" ] =
1146+ flattenComputeVpnTunnelCipherSuitePhase1Prf (original ["prf" ], d , config )
1147+ transformed ["dh" ] =
1148+ flattenComputeVpnTunnelCipherSuitePhase1Dh (original ["dh" ], d , config )
1149+ return []interface {}{transformed }
1150+ }
1151+ func flattenComputeVpnTunnelCipherSuitePhase1Encryption (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1152+ if v == nil {
1153+ return v
1154+ }
1155+ return schema .NewSet (schema .HashString , v .([]interface {}))
1156+ }
1157+
1158+ func flattenComputeVpnTunnelCipherSuitePhase1Integrity (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1159+ if v == nil {
1160+ return v
1161+ }
1162+ return schema .NewSet (schema .HashString , v .([]interface {}))
1163+ }
1164+
1165+ func flattenComputeVpnTunnelCipherSuitePhase1Prf (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1166+ if v == nil {
1167+ return v
1168+ }
1169+ return schema .NewSet (schema .HashString , v .([]interface {}))
1170+ }
1171+
1172+ func flattenComputeVpnTunnelCipherSuitePhase1Dh (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1173+ if v == nil {
1174+ return v
1175+ }
1176+ return schema .NewSet (schema .HashString , v .([]interface {}))
1177+ }
1178+
1179+ func flattenComputeVpnTunnelCipherSuitePhase2 (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1180+ if v == nil {
1181+ return nil
1182+ }
1183+ original := v .(map [string ]interface {})
1184+ if len (original ) == 0 {
1185+ return nil
1186+ }
1187+ transformed := make (map [string ]interface {})
1188+ transformed ["encryption" ] =
1189+ flattenComputeVpnTunnelCipherSuitePhase2Encryption (original ["encryption" ], d , config )
1190+ transformed ["integrity" ] =
1191+ flattenComputeVpnTunnelCipherSuitePhase2Integrity (original ["integrity" ], d , config )
1192+ transformed ["pfs" ] =
1193+ flattenComputeVpnTunnelCipherSuitePhase2Pfs (original ["pfs" ], d , config )
1194+ return []interface {}{transformed }
1195+ }
1196+ func flattenComputeVpnTunnelCipherSuitePhase2Encryption (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1197+ if v == nil {
1198+ return v
1199+ }
1200+ return schema .NewSet (schema .HashString , v .([]interface {}))
1201+ }
1202+
1203+ func flattenComputeVpnTunnelCipherSuitePhase2Integrity (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1204+ if v == nil {
1205+ return v
1206+ }
1207+ return schema .NewSet (schema .HashString , v .([]interface {}))
1208+ }
1209+
1210+ func flattenComputeVpnTunnelCipherSuitePhase2Pfs (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1211+ if v == nil {
1212+ return v
1213+ }
1214+ return schema .NewSet (schema .HashString , v .([]interface {}))
1215+ }
1216+
10051217func flattenComputeVpnTunnelTerraformLabels (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
10061218 if v == nil {
10071219 return v
@@ -1119,6 +1331,140 @@ func expandComputeVpnTunnelLabelFingerprint(v interface{}, d tpgresource.Terrafo
11191331 return v , nil
11201332}
11211333
1334+ func expandComputeVpnTunnelCipherSuite (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1335+ l := v .([]interface {})
1336+ if len (l ) == 0 || l [0 ] == nil {
1337+ return nil , nil
1338+ }
1339+ raw := l [0 ]
1340+ original := raw .(map [string ]interface {})
1341+ transformed := make (map [string ]interface {})
1342+
1343+ transformedPhase1 , err := expandComputeVpnTunnelCipherSuitePhase1 (original ["phase1" ], d , config )
1344+ if err != nil {
1345+ return nil , err
1346+ } else if val := reflect .ValueOf (transformedPhase1 ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1347+ transformed ["phase1" ] = transformedPhase1
1348+ }
1349+
1350+ transformedPhase2 , err := expandComputeVpnTunnelCipherSuitePhase2 (original ["phase2" ], d , config )
1351+ if err != nil {
1352+ return nil , err
1353+ } else if val := reflect .ValueOf (transformedPhase2 ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1354+ transformed ["phase2" ] = transformedPhase2
1355+ }
1356+
1357+ return transformed , nil
1358+ }
1359+
1360+ func expandComputeVpnTunnelCipherSuitePhase1 (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1361+ l := v .([]interface {})
1362+ if len (l ) == 0 || l [0 ] == nil {
1363+ return nil , nil
1364+ }
1365+ raw := l [0 ]
1366+ original := raw .(map [string ]interface {})
1367+ transformed := make (map [string ]interface {})
1368+
1369+ transformedEncryption , err := expandComputeVpnTunnelCipherSuitePhase1Encryption (original ["encryption" ], d , config )
1370+ if err != nil {
1371+ return nil , err
1372+ } else if val := reflect .ValueOf (transformedEncryption ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1373+ transformed ["encryption" ] = transformedEncryption
1374+ }
1375+
1376+ transformedIntegrity , err := expandComputeVpnTunnelCipherSuitePhase1Integrity (original ["integrity" ], d , config )
1377+ if err != nil {
1378+ return nil , err
1379+ } else if val := reflect .ValueOf (transformedIntegrity ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1380+ transformed ["integrity" ] = transformedIntegrity
1381+ }
1382+
1383+ transformedPrf , err := expandComputeVpnTunnelCipherSuitePhase1Prf (original ["prf" ], d , config )
1384+ if err != nil {
1385+ return nil , err
1386+ } else if val := reflect .ValueOf (transformedPrf ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1387+ transformed ["prf" ] = transformedPrf
1388+ }
1389+
1390+ transformedDh , err := expandComputeVpnTunnelCipherSuitePhase1Dh (original ["dh" ], d , config )
1391+ if err != nil {
1392+ return nil , err
1393+ } else if val := reflect .ValueOf (transformedDh ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1394+ transformed ["dh" ] = transformedDh
1395+ }
1396+
1397+ return transformed , nil
1398+ }
1399+
1400+ func expandComputeVpnTunnelCipherSuitePhase1Encryption (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1401+ v = v .(* schema.Set ).List ()
1402+ return v , nil
1403+ }
1404+
1405+ func expandComputeVpnTunnelCipherSuitePhase1Integrity (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1406+ v = v .(* schema.Set ).List ()
1407+ return v , nil
1408+ }
1409+
1410+ func expandComputeVpnTunnelCipherSuitePhase1Prf (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1411+ v = v .(* schema.Set ).List ()
1412+ return v , nil
1413+ }
1414+
1415+ func expandComputeVpnTunnelCipherSuitePhase1Dh (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1416+ v = v .(* schema.Set ).List ()
1417+ return v , nil
1418+ }
1419+
1420+ func expandComputeVpnTunnelCipherSuitePhase2 (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1421+ l := v .([]interface {})
1422+ if len (l ) == 0 || l [0 ] == nil {
1423+ return nil , nil
1424+ }
1425+ raw := l [0 ]
1426+ original := raw .(map [string ]interface {})
1427+ transformed := make (map [string ]interface {})
1428+
1429+ transformedEncryption , err := expandComputeVpnTunnelCipherSuitePhase2Encryption (original ["encryption" ], d , config )
1430+ if err != nil {
1431+ return nil , err
1432+ } else if val := reflect .ValueOf (transformedEncryption ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1433+ transformed ["encryption" ] = transformedEncryption
1434+ }
1435+
1436+ transformedIntegrity , err := expandComputeVpnTunnelCipherSuitePhase2Integrity (original ["integrity" ], d , config )
1437+ if err != nil {
1438+ return nil , err
1439+ } else if val := reflect .ValueOf (transformedIntegrity ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1440+ transformed ["integrity" ] = transformedIntegrity
1441+ }
1442+
1443+ transformedPfs , err := expandComputeVpnTunnelCipherSuitePhase2Pfs (original ["pfs" ], d , config )
1444+ if err != nil {
1445+ return nil , err
1446+ } else if val := reflect .ValueOf (transformedPfs ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1447+ transformed ["pfs" ] = transformedPfs
1448+ }
1449+
1450+ return transformed , nil
1451+ }
1452+
1453+ func expandComputeVpnTunnelCipherSuitePhase2Encryption (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1454+ v = v .(* schema.Set ).List ()
1455+ return v , nil
1456+ }
1457+
1458+ func expandComputeVpnTunnelCipherSuitePhase2Integrity (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1459+ v = v .(* schema.Set ).List ()
1460+ return v , nil
1461+ }
1462+
1463+ func expandComputeVpnTunnelCipherSuitePhase2Pfs (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1464+ v = v .(* schema.Set ).List ()
1465+ return v , nil
1466+ }
1467+
11221468func expandComputeVpnTunnelEffectiveLabels (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (map [string ]string , error ) {
11231469 if v == nil {
11241470 return map [string ]string {}, nil
0 commit comments