...
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
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