code: func newGCECloud(config io.Reader) (*Cloud, error) {
  	projectID, zone, err := getProjectAndZone()
  	if err != nil {
  		return nil, err
  	}
  
  	region, err := GetGCERegion(zone)
  	if err != nil {
  		return nil, err
  	}
  
  	networkName, err := getNetworkNameViaMetadata()
  	if err != nil {
  		return nil, err
  	}
  	networkURL := gceNetworkURL(projectID, networkName)
  
  	// By default, Kubernetes clusters only run against one zone
  	managedZones := []string{zone}
  
  	tokenSource := google.ComputeTokenSource("")
  	var nodeTags []string
  	var nodeInstancePrefix string
  	if config != nil {
  		var cfg Config
  		if err := gcfg.ReadInto(&cfg, config); err != nil {
  			glog.Errorf("Couldn't read config: %v", err)
  			return nil, err
  		}
  		glog.Infof("Using GCE provider config %+v", cfg)
  		if cfg.Global.ProjectID != "" {
  			projectID = cfg.Global.ProjectID
  		}
  		if cfg.Global.NetworkName != "" {
  			if strings.Contains(cfg.Global.NetworkName, "/") {
  				networkURL = cfg.Global.NetworkName
  			} else {
  				networkURL = gceNetworkURL(cfg.Global.ProjectID, cfg.Global.NetworkName)
  			}
  		}
  		if cfg.Global.TokenURL != "" {
  			tokenSource = NewAltTokenSource(cfg.Global.TokenURL, cfg.Global.TokenBody)
  		}
  		nodeTags = cfg.Global.NodeTags
  		nodeInstancePrefix = cfg.Global.NodeInstancePrefix
  		if cfg.Global.Multizone {
  			managedZones = nil // Use all zones in region
  		}
  	}
  
  	return CreateGCECloud(projectID, region, zone, managedZones, networkURL, nodeTags, nodeInstancePrefix, tokenSource, true /* useMetadataServer */)
  }
docs: // newGCECloud creates a new instance of GCECloud.