in cmd/cloudshell_open/api.go [24:70]
func enableAPIs(project string, apis []string) error {
client, err := serviceusage.NewService(context.TODO())
if err != nil {
return fmt.Errorf("failed to create resource manager client: %w", err)
}
enabled, err := enabledAPIs(client, project)
if err != nil {
return err
}
var needAPIs []string
for _, api := range apis {
need := true
for _, v := range enabled {
if v == api {
need = false
break
}
}
if need {
needAPIs = append(needAPIs, api)
}
}
if len(needAPIs) == 0 {
return nil
}
op, err := client.Services.BatchEnable("projects/"+project, &serviceusage.BatchEnableServicesRequest{
ServiceIds: needAPIs,
}).Do()
if err != nil {
return fmt.Errorf("failed to issue enable APIs request: %w", err)
}
opID := op.Name
for !op.Done {
op, err = client.Operations.Get(opID).Context(context.TODO()).Do()
if err != nil {
return fmt.Errorf("failed to query operation status (%s): %w", opID, err)
}
if op.Error != nil {
return fmt.Errorf("enabling APIs failed (operation=%s, code=%d): %s", op.Name, op.Error.Code, op.Error.Message)
}
}
return nil
}