in gcloud/serviceusage.go [122:164]
func (c *Client) ServiceEnable(project string, service Service) error {
if _, ok := c.enabledServices[service.String()]; ok {
return nil
}
svc, err := c.getServiceUsageService()
if err != nil {
return fmt.Errorf("could not getServiceUsageService: %s", err)
}
enabled, err := c.ServiceIsEnabled(project, service)
if err != nil {
return fmt.Errorf("could not confirm if service is already enabled: %w", err)
}
if enabled {
c.enabledServices[service.String()] = true
return nil
}
s := fmt.Sprintf("projects/%s/services/%s", project, service)
op, err := svc.Services.Enable(s, &serviceusage.EnableServiceRequest{}).Do()
if err != nil {
return fmt.Errorf("could not enable service: %s", err)
}
if !strings.Contains(string(op.Response), "ENABLED") {
for i := 0; i < 60; i++ {
enabled, err = c.ServiceIsEnabled(project, service)
if err != nil {
return err
}
if enabled {
c.enabledServices[service.String()] = true
return nil
}
time.Sleep(1 * time.Second)
}
}
c.enabledServices[service.String()] = true
return nil
}