code: func (m VirtualDiskManager) CopyVirtualDisk(
  	ctx context.Context,
  	sourceName string, sourceDatacenter *Datacenter,
  	destName string, destDatacenter *Datacenter,
  	destSpec *types.VirtualDiskSpec, force bool) (*Task, error) {
  
  	req := types.CopyVirtualDisk_Task{
  		This:       m.Reference(),
  		SourceName: sourceName,
  		DestName:   destName,
  		DestSpec:   destSpec,
  		Force:      types.NewBool(force),
  	}
  
  	if sourceDatacenter != nil {
  		ref := sourceDatacenter.Reference()
  		req.SourceDatacenter = &ref
  	}
  
  	if destDatacenter != nil {
  		ref := destDatacenter.Reference()
  		req.DestDatacenter = &ref
  	}
  
  	res, err := methods.CopyVirtualDisk_Task(ctx, m.c, &req)
  	if err != nil {
  		return nil, err
  	}
  
  	return NewTask(m.c, res.Returnval), nil
  }
docs: // CopyVirtualDisk copies a virtual disk, performing conversions as specified in the spec.