...

Source file src/edge-infra.dev/pkg/lib/gcp/serviceusage/serviceusage.go

Documentation: edge-infra.dev/pkg/lib/gcp/serviceusage

     1  package serviceusage
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"time"
     7  
     8  	"google.golang.org/api/option"
     9  	svcusage "google.golang.org/api/serviceusage/v1"
    10  )
    11  
    12  type Client struct {
    13  	s             *svcusage.Service
    14  	ctx           context.Context
    15  	ProjectNumber string
    16  }
    17  
    18  func New(ctx context.Context, projectNumber string, opts option.ClientOption) (*Client, error) {
    19  	svc, err := svcusage.NewService(ctx, opts)
    20  	if err != nil {
    21  		return nil, fmt.Errorf("serviceusage.New: failed to create serviceusage service. error: %w", err)
    22  	}
    23  
    24  	return &Client{svc, ctx, projectNumber}, nil
    25  }
    26  
    27  func (c *Client) EnableServices(svcs []string) error {
    28  	req := &svcusage.BatchEnableServicesRequest{ServiceIds: svcs}
    29  
    30  	op, err := c.s.Services.BatchEnable(fmt.Sprintf("projects/%s", c.ProjectNumber), req).Do()
    31  	if err != nil {
    32  		return wrapErr(err)
    33  	}
    34  
    35  	// wait for services to be enabled, or fail to enable
    36  	for {
    37  		if op.Done {
    38  			break
    39  		}
    40  		op, err = c.s.Operations.Get(op.Name).Do()
    41  		if err != nil {
    42  			return wrapErr(err)
    43  		}
    44  		select {
    45  		case <-c.ctx.Done():
    46  			if err := c.ctx.Err(); err != nil {
    47  				return wrapErr(err)
    48  			}
    49  			return nil
    50  		case <-time.After(5 * time.Second):
    51  			continue
    52  		}
    53  	}
    54  
    55  	return nil
    56  }
    57  
    58  func wrapErr(err error) error {
    59  	return fmt.Errorf("serviceusage.EnableServices: failed to execute batch enablement operation. error: %w", err)
    60  }
    61  

View as plain text