func (r *NetworkInterfaceSubresource) Create(l object.VirtualDeviceList) ([]types.BaseVirtualDeviceConfigSpec, error) {
	log.Printf("[DEBUG] %s: Running create", r)
	var spec []types.BaseVirtualDeviceConfigSpec
	ctlr, err := r.ControllerForCreateUpdate(l, SubresourceControllerTypePCI, 0)
	if err != nil {
		return nil, err
	}

	// govmomi has helpers that allow the easy fetching of a network's backing
	// info, once we actually know what that backing is. Set all of that stuff up
	// now.
	net, err := network.FromID(r.client, r.Get("network_id").(string))
	if err != nil {
		return nil, err
	}
	bctx, bcancel := context.WithTimeout(context.Background(), provider.DefaultAPITimeout)
	defer bcancel()
	backing, err := net.EthernetCardBackingInfo(bctx)
	if err != nil {
		return nil, err
	}
	device, err := l.CreateEthernetCard(r.Get("adapter_type").(string), backing)
	if err != nil {
		return nil, err
	}

	// CreateEthernetCard does not attach stuff, however, assuming that you will
	// let vSphere take care of the attachment and what not, as there is usually
	// only one PCI device per virtual machine and their tools don't really care
	// about state. Terraform does though, so we need to not only set but also
	// track that stuff.
	if err := r.assignEthernetCard(l, device, ctlr); err != nil {
		return nil, err
	}
	// Ensure the device starts connected
	l.Connect(device)

	// Set base-level card bits now
	card := device.(types.BaseVirtualEthernetCard).GetVirtualEthernetCard()
	card.Key = l.NewKey()

	// Set the rest of the settings here.
	if r.Get("use_static_mac").(bool) {
		card.AddressType = string(types.VirtualEthernetCardMacTypeManual)
		card.MacAddress = r.Get("mac_address").(string)
	}
	version := viapi.ParseVersionFromClient(r.client)
	if version.Newer(viapi.VSphereVersion{Product: version.Product, Major: 6}) {
		alloc := &types.VirtualEthernetCardResourceAllocation{
			Limit:       structure.Int64Ptr(int64(r.Get("bandwidth_limit").(int))),
			Reservation: structure.Int64Ptr(int64(r.Get("bandwidth_reservation").(int))),
			Share: types.SharesInfo{
				Shares: int32(r.Get("bandwidth_share_count").(int)),
				Level:  types.SharesLevel(r.Get("bandwidth_share_level").(string)),
			},
		}
		card.ResourceAllocation = alloc
	}

	// Done here. Save ID, push the device to the new device list and return.
	if err := r.SaveDevIDs(device, ctlr); err != nil {
		return nil, err
	}
	dspec, err := object.VirtualDeviceList{device}.ConfigSpec(types.VirtualDeviceConfigSpecOperationAdd)
	if err != nil {
		return nil, err
	}
	spec = append(spec, dspec...)
	log.Printf("[DEBUG] %s: Device config operations from create: %s", r, DeviceChangeString(spec))
	log.Printf("[DEBUG] %s: Create finished", r)
	return spec, nil
}
func (r *NetworkInterfaceSubresource) Create(l object.VirtualDeviceList) ([]types.BaseVirtualDeviceConfigSpec, error) {
	log.Printf("[DEBUG] %s: Running create", r)
	var spec []types.BaseVirtualDeviceConfigSpec
	ctlr, err := r.ControllerForCreateUpdate(l, SubresourceControllerTypePCI, 0)
	if err != nil {
		return nil, err
	}

	// govmomi has helpers that allow the easy fetching of a network's backing
	// info, once we actually know what that backing is. Set all of that stuff up
	// now.
	net, err := network.FromID(r.client, r.Get("network_id").(string))
	if err != nil {
		return nil, err
	}
	bctx, bcancel := context.WithTimeout(context.Background(), provider.DefaultAPITimeout)
	defer bcancel()
	backing, err := net.EthernetCardBackingInfo(bctx)
	if err != nil {
		return nil, err
	}
	device, err := l.CreateEthernetCard(r.Get("adapter_type").(string), backing)
	if err != nil {
		return nil, err
	}

	// CreateEthernetCard does not attach stuff, however, assuming that you will
	// let vSphere take care of the attachment and what not, as there is usually
	// only one PCI device per virtual machine and their tools don't really care
	// about state. Terraform does though, so we need to not only set but also
	// track that stuff.
	if err := r.assignEthernetCard(l, device, ctlr); err != nil {
		return nil, err
	}
	// Ensure the device starts connected
	l.Connect(device)

	// Set base-level card bits now
	card := device.(types.BaseVirtualEthernetCard).GetVirtualEthernetCard()
	card.Key = l.NewKey()

	// Set the rest of the settings here.
	if r.Get("use_static_mac").(bool) {
		card.AddressType = string(types.VirtualEthernetCardMacTypeManual)
		card.MacAddress = r.Get("mac_address").(string)
	}
	version := viapi.ParseVersionFromClient(r.client)
	if version.Newer(viapi.VSphereVersion{Product: version.Product, Major: 6}) {
		alloc := &types.VirtualEthernetCardResourceAllocation{
			Limit:       structure.Int64Ptr(int64(r.Get("bandwidth_limit").(int))),
			Reservation: structure.Int64Ptr(int64(r.Get("bandwidth_reservation").(int))),
			Share: types.SharesInfo{
				Shares: int32(r.Get("bandwidth_share_count").(int)),
				Level:  types.SharesLevel(r.Get("bandwidth_share_level").(string)),
			},
		}
		card.ResourceAllocation = alloc
	}

	// Done here. Save ID, push the device to the new device list and return.
	if err := r.SaveDevIDs(device, ctlr); err != nil {
		return nil, err
	}
	dspec, err := object.VirtualDeviceList{device}.ConfigSpec(types.VirtualDeviceConfigSpecOperationAdd)
	if err != nil {
		return nil, err
	}
	spec = append(spec, dspec...)
	log.Printf("[DEBUG] %s: Device config operations from create: %s", r, DeviceChangeString(spec))
	log.Printf("[DEBUG] %s: Create finished", r)
	return spec, nil
}
func ( r * NetworkInterfaceSubresource ) Create ( l object . VirtualDeviceList ) ( [ ] types . BaseVirtualDeviceConfigSpec , error ) { log . Printf ( " " , r ) var spec [ ] types . BaseVirtualDeviceConfigSpec ctlr , err := r . ControllerForCreateUpdate ( l , SubresourceControllerTypePCI , 0 ) if err != nil { return nil , err } // govmomi has helpers that allow the easy fetching of a network's backing // info, once we actually know what that backing is. Set all of that stuff up // now. net , err := network . FromID ( r . client , r . Get ( " " ) . ( string ) ) if err != nil { return nil , err } bctx , bcancel := context . WithTimeout ( context . Background ( ) , provider . DefaultAPITimeout ) defer bcancel ( ) backing , err := net . EthernetCardBackingInfo ( bctx ) if err != nil { return nil , err } device , err := l . CreateEthernetCard ( r . Get ( " " ) . ( string ) , backing ) if err != nil { return nil , err } // CreateEthernetCard does not attach stuff, however, assuming that you will // let vSphere take care of the attachment and what not, as there is usually // only one PCI device per virtual machine and their tools don't really care // about state. Terraform does though, so we need to not only set but also // track that stuff. if err := r . assignEthernetCard ( l , device , ctlr ) ; err != nil { return nil , err } // Ensure the device starts connected l . Connect ( device ) // Set base-level card bits now card := device . ( types . BaseVirtualEthernetCard ) . GetVirtualEthernetCard ( ) card . Key = l . NewKey ( ) // Set the rest of the settings here. if r . Get ( " " ) . ( bool ) { card . AddressType = string ( types . VirtualEthernetCardMacTypeManual ) card . MacAddress = r . Get ( " " ) . ( string ) } version := viapi . ParseVersionFromClient ( r . client ) if version . Newer ( viapi . VSphereVersion { Product : version . Product , Major : 6 } ) { alloc := & types . VirtualEthernetCardResourceAllocation { Limit : structure . Int64Ptr ( int64 ( r . Get ( " " ) . ( int ) ) ) , Reservation : structure . Int64Ptr ( int64 ( r . Get ( " " ) . ( int ) ) ) , Share : types . SharesInfo { Shares : int32 ( r . Get ( " " ) . ( int ) ) , Level : types . SharesLevel ( r . Get ( " " ) . ( string ) ) , } , } card . ResourceAllocation = alloc } // Done here. Save ID, push the device to the new device list and return. if err := r . SaveDevIDs ( device , ctlr ) ; err != nil { return nil , err } dspec , err := object . VirtualDeviceList { device } . ConfigSpec ( types . VirtualDeviceConfigSpecOperationAdd ) if err != nil { return nil , err } spec = append ( spec , dspec ... ) log . Printf ( " " , r , DeviceChangeString ( spec ) ) log . Printf ( " " , r ) return spec , nil }
// Create creates a vsphere_virtual_machine network_interface sub-resource.
Create creates a vsphere_virtual_machine network_interface sub - resource .