func newAPI() (*gceAPI, error) { client, err := serviceaccount.NewClient(&serviceaccount.Options{}) if err != nil { return nil, fmt.Errorf("error creating client: %v", err) } cs, err := compute.New(client) if err != nil { return nil, fmt.Errorf("error creating compute service: %v", err) } networkName, err := networkFromMetadata() if err != nil { return nil, fmt.Errorf("error getting network metadata: %v", err) } prj, err := projectFromMetadata() if err != nil { return nil, fmt.Errorf("error getting project: %v", err) } instanceName, err := instanceNameFromMetadata() if err != nil { return nil, fmt.Errorf("error getting instance name: %v", err) } instanceZone, err := instanceZoneFromMetadata() if err != nil { return nil, fmt.Errorf("error getting instance zone: %v", err) } gn, err := cs.Networks.Get(prj, networkName).Do() if err != nil { return nil, fmt.Errorf("error getting network from compute service: %v", err) } gi, err := cs.Instances.Get(prj, instanceZone, instanceName).Do() if err != nil { return nil, fmt.Errorf("error getting instance from compute service: %v", err) } return &gceAPI{ project: prj, computeService: cs, gceNetwork: gn, gceInstance: gi, }, nil }
func (g *GCEBackend) RegisterNetwork(ctx context.Context, network string, config *subnet.Config) (*backend.SubnetDef, error) { attrs := subnet.LeaseAttrs{ PublicIP: g.publicIP, } l, err := g.sm.AcquireLease(ctx, network, &attrs) switch err { case nil: g.lease = l case context.Canceled, context.DeadlineExceeded: return nil, err default: return nil, fmt.Errorf("failed to acquire lease: %v", err) } client, err := serviceaccount.NewClient(&serviceaccount.Options{}) if err != nil { return nil, fmt.Errorf("error creating client: %v", err) } g.computeService, err = compute.New(client) if err != nil { return nil, fmt.Errorf("error creating compute service: %v", err) } networkName, err := networkFromMetadata() if err != nil { return nil, fmt.Errorf("error getting network metadata: %v", err) } g.project, err = projectFromMetadata() if err != nil { return nil, fmt.Errorf("error getting project: %v", err) } instanceName, err := instanceNameFromMetadata() if err != nil { return nil, fmt.Errorf("error getting instance name: %v", err) } instanceZone, err := instanceZoneFromMetadata() if err != nil { return nil, fmt.Errorf("error getting instance zone: %v", err) } g.gceNetwork, err = g.computeService.Networks.Get(g.project, networkName).Do() if err != nil { return nil, fmt.Errorf("error getting network from compute service: %v", err) } g.gceInstance, err = g.computeService.Instances.Get(g.project, instanceZone, instanceName).Do() if err != nil { return nil, fmt.Errorf("error getting instance from compute service: %v", err) } found, err := g.handleMatchingRoute(l.Subnet.String()) if err != nil { return nil, fmt.Errorf("error handling matching route: %v", err) } if !found { operation, err := g.insertRoute(l.Subnet.String()) if err != nil { return nil, fmt.Errorf("error inserting route: %v", err) } err = g.pollOperationStatus(operation.Name) if err != nil { return nil, fmt.Errorf("insert operaiton failed: ", err) } } return &backend.SubnetDef{ Lease: l, MTU: g.mtu, }, nil }