code: func (gce *Cloud) GetAutoLabelsForPD(name string, zone string) (map[string]string, error) {
  	var disk *gceDisk
  	var err error
  	if zone == "" {
  		// We would like as far as possible to avoid this case,
  		// because GCE doesn't guarantee that volumes are uniquely named per region,
  		// just per zone.  However, creation of GCE PDs was originally done only
  		// by name, so we have to continue to support that.
  		// However, wherever possible the zone should be passed (and it is passed
  		// for most cases that we can control, e.g. dynamic volume provisioning)
  		disk, err = gce.getDiskByNameUnknownZone(name)
  		if err != nil {
  			return nil, err
  		}
  		zone = disk.Zone
  	} else {
  		// We could assume the disks exists; we have all the information we need
  		// However it is more consistent to ensure the disk exists,
  		// and in future we may gather addition information (e.g. disk type, IOPS etc)
  		disk, err = gce.getDiskByName(name, zone)
  		if err != nil {
  			return nil, err
  		}
  	}
  
  	region, err := GetGCERegion(zone)
  	if err != nil {
  		return nil, err
  	}
  
  	if zone == "" || region == "" {
  		// Unexpected, but sanity-check
  		return nil, fmt.Errorf("PD did not have zone/region information: %q", disk.Name)
  	}
  
  	labels := make(map[string]string)
  	labels[apis.LabelZoneFailureDomain] = zone
  	labels[apis.LabelZoneRegion] = region
  
  	return labels, nil
  }
docs: // GetAutoLabelsForPD builds the labels that should be automatically added to a PersistentVolume backed by a GCE PD
  // Specifically, this builds FailureDomain (zone) and Region labels.
  // The PersistentVolumeLabel admission controller calls this and adds the labels when a PV is created.
  // If zone is specified, the volume will only be found in the specified zone,
  // otherwise all managed zones will be searched.