// newGCECloud creates a new instance of GCECloud. func newGCECloud(config io.Reader) (*GCECloud, error) { projectID, zone, err := getProjectAndZone() if err != nil { return nil, err } // TODO: if we want to use this on a machine that doesn't have the http://metadata server // e.g. on a user's machine (not VM) somewhere, we need to have an alternative for // instance id lookup. instanceID, err := getInstanceID() if err != nil { return nil, err } externalID, err := getCurrentExternalID() if err != nil { return nil, err } networkName, err := getNetworkName() if err != nil { return nil, err } tokenSource := google.ComputeTokenSource("") 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 } if cfg.Global.ProjectID != "" { projectID = cfg.Global.ProjectID } if cfg.Global.NetworkName != "" { networkName = cfg.Global.NetworkName } if cfg.Global.TokenURL != "" { tokenSource = newAltTokenSource(cfg.Global.TokenURL) } } client := oauth2.NewClient(oauth2.NoContext, tokenSource) svc, err := compute.New(client) if err != nil { return nil, err } containerSvc, err := container.New(client) if err != nil { return nil, err } return &GCECloud{ service: svc, containerService: containerSvc, projectID: projectID, zone: zone, instanceID: instanceID, externalID: externalID, networkName: networkName, metadataAccess: getMetadata, }, nil }
func rawService(ctx context.Context) *raw.Service { return internal.Service(ctx, "container", func(hc *http.Client) interface{} { svc, _ := raw.New(hc) return svc }).(*raw.Service) }