code: func (l VirtualDeviceList) CreateSCSIController(name string) (types.BaseVirtualDevice, error) {
  	ctypes := SCSIControllerTypes()
  
  	if name == "" || name == "scsi" {
  		name = ctypes.Type(ctypes[0])
  	} else if name == "virtualscsi" {
  		name = "pvscsi" // ovf VirtualSCSI mapping
  	}
  
  	found := ctypes.Select(func(device types.BaseVirtualDevice) bool {
  		return l.Type(device) == name
  	})
  
  	if len(found) == 0 {
  		return nil, fmt.Errorf("unknown SCSI controller type '%s'", name)
  	}
  
  	c, ok := found[0].(types.BaseVirtualSCSIController)
  	if !ok {
  		return nil, fmt.Errorf("invalid SCSI controller type '%s'", name)
  	}
  
  	scsi := c.GetVirtualSCSIController()
  	scsi.BusNumber = l.newSCSIBusNumber()
  	scsi.Key = l.NewKey()
  	scsi.ScsiCtlrUnitNumber = 7
  	return c.(types.BaseVirtualDevice), nil
  }
docs: // CreateSCSIController creates a new SCSI controller of type name if given, otherwise defaults to lsilogic.