Search in sources :

Example 1 with Service

use of com.google.api.services.serviceusage.v1beta1.model.Service in project terra-resource-buffer by DataBiosphere.

the class CreateConsumerDefinedQuotaForBigQueryDailyUsageStep method doStep.

/**
 * Apply a Consumer Quota Override for the BigQuery Query Usage Quota.
 */
@Override
public StepResult doStep(FlightContext context) throws InterruptedException, RetryException {
    Optional<Long> overrideValue = GoogleProjectConfigUtils.bigQueryDailyUsageOverrideValueMebibytes(gcpProjectConfig);
    if (overrideValue.isEmpty()) {
        // Do not apply any quota override
        return StepResult.getStepResultSuccess();
    }
    long projectNumber = Optional.ofNullable(context.getWorkingMap().get(GOOGLE_PROJECT_NUMBER, Long.class)).orElseThrow();
    QuotaOverride overridePerProjectPerDay = buildQuotaOverride(projectNumber, overrideValue.get());
    // parent format and other details obtained by hitting the endpoint
    // https://serviceusage.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/services/bigquery.googleapis.com/consumerQuotaMetrics
    String parent = String.format("projects/%d/services/bigquery.googleapis.com/consumerQuotaMetrics/" + "bigquery.googleapis.com%%2Fquota%%2Fquery%%2Fusage/limits/%%2Fd%%2Fproject", projectNumber);
    try {
        // We are decreasing the quota by more than 10%, so we must tell Service Usage to bypass the
        // check with the force flag.
        Operation createOperation = serviceUsageCow.services().consumerQuotaMetrics().limits().consumerOverrides().create(parent, overridePerProjectPerDay).setForce(true).execute();
        OperationCow<Operation> operationCow = serviceUsageCow.operations().operationCow(createOperation);
        pollUntilSuccess(operationCow, Duration.ofSeconds(3), Duration.ofMinutes(5));
    } catch (IOException e) {
        throw new RetryException(e);
    }
    return StepResult.getStepResultSuccess();
}
Also used : QuotaOverride(com.google.api.services.serviceusage.v1beta1.model.QuotaOverride) Operation(com.google.api.services.serviceusage.v1beta1.model.Operation) IOException(java.io.IOException) RetryException(bio.terra.stairway.exception.RetryException) QuotaOverride(com.google.api.services.serviceusage.v1beta1.model.QuotaOverride)

Example 2 with Service

use of com.google.api.services.serviceusage.v1beta1.model.Service in project terra-cloud-resource-lib by DataBiosphere.

the class ServiceUsageCowTest method listAndEnableServices.

@Test
public void listAndEnableServices() throws Exception {
    ServiceUsageCow serviceUsage = defaultServiceUsage();
    Project project = ProjectUtils.executeCreateProject();
    String projectName = projectIdToName(project.getProjectId());
    String storageServiceName = serviceName(project, STORAGE_SERVICE_ID);
    ListServicesResponse response1 = serviceUsage.services().list(projectName).setFilter(ENABLED_FILTER).execute();
    assertNull(response1.getServices());
    Operation operation = serviceUsage.services().batchEnable(projectName, new BatchEnableServicesRequest().setServiceIds(ImmutableList.of(STORAGE_SERVICE_ID))).execute();
    OperationTestUtils.pollAndAssertSuccess(serviceUsage.operations().operationCow(operation), Duration.ofSeconds(5), Duration.ofSeconds(60));
    ListServicesResponse response2 = serviceUsage.services().list(projectName).setFilter(ENABLED_FILTER).execute();
    List<String> services2 = response2.getServices().stream().map(Service::getName).collect(Collectors.toList());
    assertThat(services2, Matchers.hasItem(storageServiceName));
}
Also used : Project(com.google.api.services.cloudresourcemanager.v3.model.Project) ListServicesResponse(com.google.api.services.serviceusage.v1beta1.model.ListServicesResponse) Operation(com.google.api.services.serviceusage.v1beta1.model.Operation) BatchEnableServicesRequest(com.google.api.services.serviceusage.v1beta1.model.BatchEnableServicesRequest) Test(org.junit.jupiter.api.Test)

Example 3 with Service

use of com.google.api.services.serviceusage.v1beta1.model.Service in project jade-data-repo by DataBiosphere.

the class GoogleResourceService method enableServices.

private void enableServices(GoogleProjectResource projectResource) throws InterruptedException {
    BatchEnableServicesRequest batchRequest = new BatchEnableServicesRequest().setServiceIds(projectResource.getServiceIds());
    try {
        ServiceUsage serviceUsage = serviceUsage();
        String projectNumberString = "projects/" + projectResource.getGoogleProjectNumber();
        logger.info("trying to get services for {} ({})", projectNumberString, projectResource.getGoogleProjectId());
        ServiceUsage.Services.List list = serviceUsage.services().list(projectNumberString).setFilter(ENABLED_FILTER);
        ListServicesResponse listServicesResponse = list.execute();
        logger.info("found: " + String.join(", ", projectResource.getServiceIds()));
        List<String> services = projectResource.getServiceIds().stream().map(s -> String.format("%s/services/%s", projectNumberString, s)).collect(Collectors.toList());
        List<Service> serviceList = listServicesResponse.getServices();
        List<String> actualServiceNames = Collections.emptyList();
        if (serviceList != null) {
            actualServiceNames = serviceList.stream().map(s -> s.getName()).collect(Collectors.toList());
        }
        if (actualServiceNames.containsAll(services)) {
            logger.info("project already has the right resources enabled, skipping");
        } else {
            logger.info("project does not have all resources enabled");
            ServiceUsage.Services.BatchEnable batchEnable = serviceUsage.services().batchEnable(projectNumberString, batchRequest);
            long timeout = resourceConfiguration.getProjectCreateTimeoutSeconds();
            blockUntilServiceOperationComplete(serviceUsage, batchEnable.execute(), timeout);
        }
    } catch (IOException | GeneralSecurityException e) {
        throw new GoogleResourceException("Could not enable services", e);
    }
}
Also used : StringUtils(org.apache.commons.lang.StringUtils) Status(com.google.api.services.cloudresourcemanager.model.Status) ServiceUsage(com.google.api.services.serviceusage.v1beta1.ServiceUsage) ListServicesResponse(com.google.api.services.serviceusage.v1beta1.model.ListServicesResponse) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) StorageOptions(com.google.cloud.storage.StorageOptions) Binding(com.google.api.services.cloudresourcemanager.model.Binding) GoogleJsonResponseException(com.google.api.client.googleapis.json.GoogleJsonResponseException) GeneralSecurityException(java.security.GeneralSecurityException) InaccessibleBillingAccountException(bio.terra.service.resourcemanagement.exception.InaccessibleBillingAccountException) Map(java.util.Map) Bucket(com.google.cloud.storage.Bucket) Project(com.google.api.services.cloudresourcemanager.model.Project) JacksonFactory(com.google.api.client.json.jackson2.JacksonFactory) BucketInfo(com.google.cloud.storage.BucketInfo) Collection(java.util.Collection) HttpTransport(com.google.api.client.http.HttpTransport) GoogleResourceException(bio.terra.service.resourcemanagement.exception.GoogleResourceException) GoogleNetHttpTransport(com.google.api.client.googleapis.javanet.GoogleNetHttpTransport) UUID(java.util.UUID) BatchEnableServicesRequest(com.google.api.services.serviceusage.v1beta1.model.BatchEnableServicesRequest) Collectors(java.util.stream.Collectors) GcsProjectFactory(bio.terra.service.filedata.google.gcs.GcsProjectFactory) CorruptMetadataException(bio.terra.service.snapshot.exception.CorruptMetadataException) ConfigEnum(bio.terra.service.configuration.ConfigEnum) List(java.util.List) Service(com.google.api.services.serviceusage.v1beta1.model.Service) Environment(org.springframework.core.env.Environment) Storage(com.google.cloud.storage.Storage) ConfigurationService(bio.terra.service.configuration.ConfigurationService) GoogleCredential(com.google.api.client.googleapis.auth.oauth2.GoogleCredential) SetIamPolicyRequest(com.google.api.services.cloudresourcemanager.model.SetIamPolicyRequest) HashMap(java.util.HashMap) GetIamPolicyRequest(com.google.api.services.cloudresourcemanager.model.GetIamPolicyRequest) Value(org.springframework.beans.factory.annotation.Value) CloudResourceManager(com.google.api.services.cloudresourcemanager.CloudResourceManager) ResourceId(com.google.api.services.cloudresourcemanager.model.ResourceId) EnablePermissionsFailedException(bio.terra.service.resourcemanagement.exception.EnablePermissionsFailedException) BillingProfile(bio.terra.service.resourcemanagement.BillingProfile) BucketLockException(bio.terra.service.resourcemanagement.exception.BucketLockException) Logger(org.slf4j.Logger) GcsProject(bio.terra.service.filedata.google.gcs.GcsProject) Policy(com.google.api.services.cloudresourcemanager.model.Policy) ProfileService(bio.terra.service.resourcemanagement.ProfileService) Acl(com.google.cloud.storage.Acl) IOException(java.io.IOException) TimeUnit(java.util.concurrent.TimeUnit) Component(org.springframework.stereotype.Component) JsonFactory(com.google.api.client.json.JsonFactory) StorageException(com.google.cloud.storage.StorageException) Operation(com.google.api.services.cloudresourcemanager.model.Operation) GoogleResourceNotFoundException(bio.terra.service.resourcemanagement.exception.GoogleResourceNotFoundException) StorageClass(com.google.cloud.storage.StorageClass) Collections(java.util.Collections) GeneralSecurityException(java.security.GeneralSecurityException) Service(com.google.api.services.serviceusage.v1beta1.model.Service) ConfigurationService(bio.terra.service.configuration.ConfigurationService) ProfileService(bio.terra.service.resourcemanagement.ProfileService) IOException(java.io.IOException) ListServicesResponse(com.google.api.services.serviceusage.v1beta1.model.ListServicesResponse) ServiceUsage(com.google.api.services.serviceusage.v1beta1.ServiceUsage) BatchEnableServicesRequest(com.google.api.services.serviceusage.v1beta1.model.BatchEnableServicesRequest) GoogleResourceException(bio.terra.service.resourcemanagement.exception.GoogleResourceException)

Aggregations

BatchEnableServicesRequest (com.google.api.services.serviceusage.v1beta1.model.BatchEnableServicesRequest)2 ListServicesResponse (com.google.api.services.serviceusage.v1beta1.model.ListServicesResponse)2 Operation (com.google.api.services.serviceusage.v1beta1.model.Operation)2 IOException (java.io.IOException)2 ConfigEnum (bio.terra.service.configuration.ConfigEnum)1 ConfigurationService (bio.terra.service.configuration.ConfigurationService)1 GcsProject (bio.terra.service.filedata.google.gcs.GcsProject)1 GcsProjectFactory (bio.terra.service.filedata.google.gcs.GcsProjectFactory)1 BillingProfile (bio.terra.service.resourcemanagement.BillingProfile)1 ProfileService (bio.terra.service.resourcemanagement.ProfileService)1 BucketLockException (bio.terra.service.resourcemanagement.exception.BucketLockException)1 EnablePermissionsFailedException (bio.terra.service.resourcemanagement.exception.EnablePermissionsFailedException)1 GoogleResourceException (bio.terra.service.resourcemanagement.exception.GoogleResourceException)1 GoogleResourceNotFoundException (bio.terra.service.resourcemanagement.exception.GoogleResourceNotFoundException)1 InaccessibleBillingAccountException (bio.terra.service.resourcemanagement.exception.InaccessibleBillingAccountException)1 CorruptMetadataException (bio.terra.service.snapshot.exception.CorruptMetadataException)1 RetryException (bio.terra.stairway.exception.RetryException)1 GoogleCredential (com.google.api.client.googleapis.auth.oauth2.GoogleCredential)1 GoogleNetHttpTransport (com.google.api.client.googleapis.javanet.GoogleNetHttpTransport)1 GoogleJsonResponseException (com.google.api.client.googleapis.json.GoogleJsonResponseException)1