code: func (g *Cloud) DetachDisk(devicePath string, nodeName types.NodeName) error {
  	instanceName := mapNodeNameToInstanceName(nodeName)
  	inst, err := g.getInstanceByName(instanceName)
  	if err != nil {
  		if err == cloudprovider.InstanceNotFound {
  			// If instance no longer exists, safe to assume volume is not attached.
  			klog.Warningf(
  				"Instance %q does not exist. DetachDisk will assume PD %q is not attached to it.",
  				instanceName,
  				devicePath)
  			return nil
  		}
  
  		return fmt.Errorf("error getting instance %q", instanceName)
  	}
  
  	mc := newDiskMetricContextZonal("detach", g.region, inst.Zone)
  	return mc.Observe(g.manager.DetachDiskOnCloudProvider(inst.Zone, inst.Name, devicePath))
  }
docs: // DetachDisk detaches given disk to the node with the specified NodeName.
  // Current instance is used when nodeName is empty string.