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  }