func()

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
}