code: func (ci *ClusterID) getOrInitialize() error {
  	if ci.store == nil {
  		return errors.New("Cloud.ClusterID is not ready. Call Initialize() before using")
  	}
  
  	if ci.clusterID != nil {
  		return nil
  	}
  
  	exists, err := ci.getConfigMap()
  	if err != nil {
  		return err
  	} else if exists {
  		return nil
  	}
  
  	// The configmap does not exist - let's try creating one.
  	newID, err := makeUID()
  	if err != nil {
  		return err
  	}
  
  	klog.V(4).Infof("Creating clusteriD: %v", newID)
  	cfg := &v1.ConfigMap{
  		ObjectMeta: metav1.ObjectMeta{
  			Name:      UIDConfigMapName,
  			Namespace: UIDNamespace,
  		},
  	}
  	cfg.Data = map[string]string{
  		UIDCluster:  newID,
  		UIDProvider: newID,
  	}
  
  	if _, err := ci.client.CoreV1().ConfigMaps(UIDNamespace).Create(cfg); err != nil {
  		klog.Errorf("GCE cloud provider failed to create %v config map to store cluster id: %v", ci.cfgMapKey, err)
  		return err
  	}
  
  	klog.V(2).Infof("Created a config map containing clusteriD: %v", newID)
  	ci.update(cfg)
  	return nil
  }
docs: // getOrInitialize either grabs the configmaps current value or defines the value
  // and sets the configmap. This is for the case of the user calling GetClusterID()
  // before the watch has begun.