Closed
Description
Environment details
- Programming language: golang
- OS: macOS darwin 22.6.0
- Language runtime version:
go version go1.21.0 darwin/arm64
- Package version: 0.142.0
Steps to reproduce
I am trying to enable certain APIs for my project
- Below is the code
func enableRequiredAPIS(projectName string) error {
ctx := context.Background()
projectParentName := fmt.Sprintf("projects/%s", projectName)
serviceusageServiceClient, err := serviceusage.NewService(ctx)
if err != nil {
return fmt.Errorf("enableRequiredAPIS: Error getting serviceusage.NewService type: %w", err)
}
serviceUsageServicesServiceClient := serviceusage.NewServicesService(serviceusageServiceClient)
// get project information
projectBatchGet := serviceUsageServicesServiceClient.BatchGet(projectParentName)
// all the required services we want to check and enable
allServices := []string{
fmt.Sprintf("%s/services/compute.googleapis.com", projectParentName),
fmt.Sprintf("%s/services/container.googleapis.com", projectParentName),
fmt.Sprintf("%s/services/secretmanager.googleapis.com", projectParentName),
fmt.Sprintf("%s/services/artifactregistry.googleapis.com", projectParentName),
}
// assigning service names
projectBatchGet.Names(allServices...)
resp, err := projectBatchGet.Do()
if err != nil {
return fmt.Errorf("enableRequiredAPIS: Error getting batch GET for services %w", err)
}
var serviceToEnable []string
for _, service := range resp.Services {
if service.State == "DISABLED" {
serviceName := strings.Replace(service.Name, fmt.Sprintf("%s/services/", service.Parent), "", 1)
utils.PrintInfoln(fmt.Sprintf("service %s not enabled for project %s", serviceName, projectName))
serviceToEnable = append(serviceToEnable, serviceName)
}
}
if len(serviceToEnable) != 0 {
enableOperation, err := serviceUsageServicesServiceClient.BatchEnable(projectParentName, &serviceusage.BatchEnableServicesRequest{
ServiceIds: serviceToEnable,
}).Do()
if err != nil {
return fmt.Errorf("enableRequiredAPIS: Error enabling services %w", err)
}
for {
fmt.Println("Waiting for the services to get enabled...")
fmt.Println("done", enableOperation.Done)
fmt.Println("statuscode", enableOperation.ServerResponse.HTTPStatusCode)
if enableOperation.Done {
fmt.Println("Successfully enabled all the services")
return nil
} else if opErr := enableOperation.Error; opErr != nil {
fmt.Println(fmt.Sprintf("Failed to enable services. error: %s %d", opErr.Message, opErr.Code))
return fmt.Errorf("enableRequiredAPIS: error enabling services, error %s %d", opErr.Message, opErr.Code)
} else {
fmt.Println(string(enableOperation.Response))
time.Sleep(3 * time.Second)
}
}
}
return nil
}
- When I am trying to execute the code to enable the APIs which are disabled, the
for
loop is running indefinitely. - When I check the API from the console it gets enabled after certain time which is the ideal behaviour.
- The operation should return
target
and notret
, but I am not perfectly sure of this.
What should happen
I should either get an error or operation.Done
should be marked as true