code: func (r *DiskSubresource) Create(l object.VirtualDeviceList) ([]types.BaseVirtualDeviceConfigSpec, error) {
  	log.Printf("[DEBUG] %s: Creating disk", r)
  	var spec []types.BaseVirtualDeviceConfigSpec
  
  	disk, err := r.createDisk(l)
  	if err != nil {
  		return nil, fmt.Errorf("error creating disk: %s", err)
  	}
  	// We now have the controller on which we can create our device on.
  	// Assign the disk to a controller.
  	ctlr, err := r.assignDisk(l, disk)
  	if err != nil {
  		return nil, fmt.Errorf("cannot assign disk: %s", err)
  	}
  
  	if err := r.expandDiskSettings(disk); err != nil {
  		return nil, err
  	}
  
  	// Done here. Save ID, push the device to the new device list and return.
  	if err := r.SaveDevIDs(disk, ctlr); err != nil {
  		return nil, err
  	}
  	dspec, err := object.VirtualDeviceList{disk}.ConfigSpec(types.VirtualDeviceConfigSpecOperationAdd)
  	if err != nil {
  		return nil, err
  	}
  	if len(dspec) != 1 {
  		return nil, fmt.Errorf("incorrect number of config spec items returned - expected 1, got %d", len(dspec))
  	}
  	// Clear the file operation if we are attaching.
  	if r.Get("attach").(bool) {
  		dspec[0].GetVirtualDeviceConfigSpec().FileOperation = ""
  	}
  	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
  }
docs: // Create creates a vsphere_virtual_machine disk sub-resource.