func enableAPIs()

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
}