code: func (r *DiskSubresource) assignDisk(l object.VirtualDeviceList, disk *types.VirtualDisk) (types.BaseVirtualController, error) {
  	number := r.Get("unit_number").(int)
  	// Figure out the bus number, and look up the SCSI controller that matches
  	// that. You can attach 15 disks to a SCSI controller, and we allow a maximum
  	// of 30 devices.
  	bus := number / 15
  	// Also determine the unit number on that controller.
  	unit := int32(math.Mod(float64(number), 15))
  
  	// Find the controller.
  	ctlr, err := r.ControllerForCreateUpdate(l, SubresourceControllerTypeSCSI, bus)
  	if err != nil {
  		return nil, err
  	}
  
  	// Build the unit list.
  	units := make([]bool, 16)
  	// Reserve the SCSI unit number
  	scsiUnit := ctlr.(types.BaseVirtualSCSIController).GetVirtualSCSIController().ScsiCtlrUnitNumber
  	units[scsiUnit] = true
  
  	ckey := ctlr.GetVirtualController().Key
  
  	for _, device := range l {
  		d := device.GetVirtualDevice()
  		if d.ControllerKey != ckey || d.UnitNumber == nil {
  			continue
  		}
  		units[*d.UnitNumber] = true
  	}
  
  	// We now have a valid list of units. If we need to, shift up the desired
  	// unit number so it's not taking the unit of the controller itself.
  	if unit >= scsiUnit {
  		unit++
  	}
  
  	if units[unit] {
  		return nil, fmt.Errorf("unit number %d on SCSI bus %d is in use", unit, bus)
  	}
  
  	// If we made it this far, we are good to go!
  	disk.ControllerKey = ctlr.GetVirtualController().Key
  	disk.UnitNumber = &unit
  	return ctlr, nil
  }
docs: // assignDisk takes a unit number and assigns it correctly to a controller on
  // the SCSI bus. An error is returned if the assigned unit number is taken.