github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/providers/gce/context.go (about) 1 package gce 2 3 import ( 4 ctxpkg "context" 5 "encoding/json" 6 "fmt" 7 "hash/fnv" 8 9 "github.com/caos/orbos/mntr" 10 "google.golang.org/api/compute/v1" 11 "google.golang.org/api/option" 12 ) 13 14 type context struct { 15 monitor mntr.Monitor 16 networkName string 17 networkURL string 18 orbID string 19 providerID string 20 projectID string 21 desired *Spec 22 client *compute.Service 23 // machinesService *machinesService 24 ctx ctxpkg.Context 25 auth *option.ClientOption 26 } 27 28 func service(monitor mntr.Monitor, desired *Spec, orbID, providerID string, oneoff bool) (*machinesService, error) { 29 30 jsonKey := []byte(desired.JSONKey.Value) 31 ctx := ctxpkg.Background() 32 opt := option.WithCredentialsJSON(jsonKey) 33 computeClient, err := compute.NewService(ctx, opt) 34 if err != nil { 35 return nil, mntr.ToUserError(err) 36 } 37 38 key := struct { 39 ProjectID string `json:"project_id"` 40 }{} 41 if err := json.Unmarshal(jsonKey, &key); err != nil { 42 panic("extracting project id from jsonkey failed") 43 } 44 45 monitor = monitor.WithField("projectID", key.ProjectID) 46 h := fnv.New32() 47 h.Write([]byte(orbID)) 48 networkName := fmt.Sprintf("orbos-network-%d", h.Sum32()) 49 h.Reset() 50 networkURL := fmt.Sprintf("projects/%s/global/networks/%s", key.ProjectID, networkName) 51 52 return newMachinesService(&context{ 53 monitor: monitor, 54 orbID: orbID, 55 providerID: providerID, 56 projectID: key.ProjectID, 57 desired: desired, 58 client: computeClient, 59 ctx: ctx, 60 auth: &opt, 61 networkName: networkName, 62 networkURL: networkURL, 63 }, oneoff), nil 64 }