@@ -326,6 +326,13 @@ func resourceComputeInstanceTemplate() *schema.Resource {
326326 Computed : true ,
327327 Description : `The name of the network_interface.` ,
328328 },
329+ "nic_type" : {
330+ Type : schema .TypeString ,
331+ Optional : true ,
332+ ForceNew : true ,
333+ ValidateFunc : validation .StringInSlice ([]string {"GVNIC" , "VIRTIO_NET" }, false ),
334+ Description : `The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET` ,
335+ },
329336 "access_config" : {
330337 Type : schema .TypeList ,
331338 Optional : true ,
@@ -854,7 +861,7 @@ func resourceComputeInstanceTemplateCreate(d *schema.ResourceData, meta interfac
854861 return err
855862 }
856863
857- networks , err := expandComputeInstanceTemplateNetworkInterfaces (d , config )
864+ networks , err := expandNetworkInterfaces (d , config )
858865 if err != nil {
859866 return err
860867 }
@@ -1218,7 +1225,7 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{
12181225 return fmt .Errorf ("Error setting project: %s" , err )
12191226 }
12201227 if instanceTemplate .Properties .NetworkInterfaces != nil {
1221- networkInterfaces , region , _ , _ , err := flattenComputeInstanceTemplateNetworkInterfaces (d , config , instanceTemplate .Properties .NetworkInterfaces )
1228+ networkInterfaces , region , _ , _ , err := flattenNetworkInterfaces (d , config , instanceTemplate .Properties .NetworkInterfaces )
12221229 if err != nil {
12231230 return err
12241231 }
@@ -1343,75 +1350,3 @@ func resourceComputeInstanceTemplateImportState(d *schema.ResourceData, meta int
13431350
13441351 return []* schema.ResourceData {d }, nil
13451352}
1346-
1347- // this func could be replaced by flattenNetworkInterfaces once NicType is supported
1348- func flattenComputeInstanceTemplateNetworkInterfaces (d * schema.ResourceData , config * Config , networkInterfaces []* computeBeta.NetworkInterface ) ([]map [string ]interface {}, string , string , string , error ) {
1349- flattened := make ([]map [string ]interface {}, len (networkInterfaces ))
1350- var region , internalIP , externalIP string
1351-
1352- for i , iface := range networkInterfaces {
1353- var ac []map [string ]interface {}
1354- ac , externalIP = flattenAccessConfigs (iface .AccessConfigs )
1355-
1356- subnet , err := ParseSubnetworkFieldValue (iface .Subnetwork , d , config )
1357- if err != nil {
1358- return nil , "" , "" , "" , err
1359- }
1360- region = subnet .Region
1361-
1362- flattened [i ] = map [string ]interface {}{
1363- "network_ip" : iface .NetworkIP ,
1364- "network" : ConvertSelfLinkToV1 (iface .Network ),
1365- "subnetwork" : ConvertSelfLinkToV1 (iface .Subnetwork ),
1366- "subnetwork_project" : subnet .Project ,
1367- "access_config" : ac ,
1368- "alias_ip_range" : flattenAliasIpRange (iface .AliasIpRanges ),
1369- }
1370- // Instance template interfaces never have names, so they're absent
1371- // in the instance template network_interface schema. We want to use the
1372- // same flattening code for both resource types, so we avoid trying to
1373- // set the name field when it's not set at the GCE end.
1374- if iface .Name != "" {
1375- flattened [i ]["name" ] = iface .Name
1376- }
1377- if internalIP == "" {
1378- internalIP = iface .NetworkIP
1379- }
1380- }
1381- return flattened , region , internalIP , externalIP , nil
1382- }
1383-
1384- // this func could be replaced by expandNetworkInterfaces once NicType is supported
1385- func expandComputeInstanceTemplateNetworkInterfaces (d TerraformResourceData , config * Config ) ([]* computeBeta.NetworkInterface , error ) {
1386- configs := d .Get ("network_interface" ).([]interface {})
1387- ifaces := make ([]* computeBeta.NetworkInterface , len (configs ))
1388- for i , raw := range configs {
1389- data := raw .(map [string ]interface {})
1390-
1391- network := data ["network" ].(string )
1392- subnetwork := data ["subnetwork" ].(string )
1393- if network == "" && subnetwork == "" {
1394- return nil , fmt .Errorf ("exactly one of network or subnetwork must be provided" )
1395- }
1396-
1397- nf , err := ParseNetworkFieldValue (network , d , config )
1398- if err != nil {
1399- return nil , fmt .Errorf ("cannot determine self_link for network %q: %s" , network , err )
1400- }
1401-
1402- subnetProjectField := fmt .Sprintf ("network_interface.%d.subnetwork_project" , i )
1403- sf , err := ParseSubnetworkFieldValueWithProjectField (subnetwork , subnetProjectField , d , config )
1404- if err != nil {
1405- return nil , fmt .Errorf ("cannot determine self_link for subnetwork %q: %s" , subnetwork , err )
1406- }
1407-
1408- ifaces [i ] = & computeBeta.NetworkInterface {
1409- NetworkIP : data ["network_ip" ].(string ),
1410- Network : nf .RelativeLink (),
1411- Subnetwork : sf .RelativeLink (),
1412- AccessConfigs : expandAccessConfigs (data ["access_config" ].([]interface {})),
1413- AliasIpRanges : expandAliasIpRanges (data ["alias_ip_range" ].([]interface {})),
1414- }
1415- }
1416- return ifaces , nil
1417- }
0 commit comments