1// Copyright 2023 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.api.serviceusage.v1; 18 19import "google/api/annotations.proto"; 20import "google/api/client.proto"; 21import "google/api/serviceusage/v1/resources.proto"; 22import "google/longrunning/operations.proto"; 23 24option csharp_namespace = "Google.Cloud.ServiceUsage.V1"; 25option go_package = "cloud.google.com/go/serviceusage/apiv1/serviceusagepb;serviceusagepb"; 26option java_multiple_files = true; 27option java_outer_classname = "ServiceUsageProto"; 28option java_package = "com.google.api.serviceusage.v1"; 29option php_namespace = "Google\\Cloud\\ServiceUsage\\V1"; 30option ruby_package = "Google::Cloud::ServiceUsage::V1"; 31 32// Enables services that service consumers want to use on Google Cloud Platform, 33// lists the available or enabled services, or disables services that service 34// consumers no longer use. 35// 36// See [Service Usage API](https://cloud.google.com/service-usage/docs/overview) 37service ServiceUsage { 38 option (google.api.default_host) = "serviceusage.googleapis.com"; 39 option (google.api.oauth_scopes) = 40 "https://www.googleapis.com/auth/cloud-platform," 41 "https://www.googleapis.com/auth/cloud-platform.read-only," 42 "https://www.googleapis.com/auth/service.management"; 43 44 // Enable a service so that it can be used with a project. 45 rpc EnableService(EnableServiceRequest) 46 returns (google.longrunning.Operation) { 47 option (google.api.http) = { 48 post: "/v1/{name=*/*/services/*}:enable" 49 body: "*" 50 }; 51 option (google.longrunning.operation_info) = { 52 response_type: "EnableServiceResponse" 53 metadata_type: "OperationMetadata" 54 }; 55 } 56 57 // Disable a service so that it can no longer be used with a project. 58 // This prevents unintended usage that may cause unexpected billing 59 // charges or security leaks. 60 // 61 // It is not valid to call the disable method on a service that is not 62 // currently enabled. Callers will receive a `FAILED_PRECONDITION` status if 63 // the target service is not currently enabled. 64 rpc DisableService(DisableServiceRequest) 65 returns (google.longrunning.Operation) { 66 option (google.api.http) = { 67 post: "/v1/{name=*/*/services/*}:disable" 68 body: "*" 69 }; 70 option (google.longrunning.operation_info) = { 71 response_type: "DisableServiceResponse" 72 metadata_type: "OperationMetadata" 73 }; 74 } 75 76 // Returns the service configuration and enabled state for a given service. 77 rpc GetService(GetServiceRequest) returns (Service) { 78 option (google.api.http) = { 79 get: "/v1/{name=*/*/services/*}" 80 }; 81 } 82 83 // List all services available to the specified project, and the current 84 // state of those services with respect to the project. The list includes 85 // all public services, all services for which the calling user has the 86 // `servicemanagement.services.bind` permission, and all services that have 87 // already been enabled on the project. The list can be filtered to 88 // only include services in a specific state, for example to only include 89 // services enabled on the project. 90 // 91 // WARNING: If you need to query enabled services frequently or across 92 // an organization, you should use 93 // [Cloud Asset Inventory 94 // API](https://cloud.google.com/asset-inventory/docs/apis), which provides 95 // higher throughput and richer filtering capability. 96 rpc ListServices(ListServicesRequest) returns (ListServicesResponse) { 97 option (google.api.http) = { 98 get: "/v1/{parent=*/*}/services" 99 }; 100 } 101 102 // Enable multiple services on a project. The operation is atomic: if enabling 103 // any service fails, then the entire batch fails, and no state changes occur. 104 // To enable a single service, use the `EnableService` method instead. 105 rpc BatchEnableServices(BatchEnableServicesRequest) 106 returns (google.longrunning.Operation) { 107 option (google.api.http) = { 108 post: "/v1/{parent=*/*}/services:batchEnable" 109 body: "*" 110 }; 111 option (google.longrunning.operation_info) = { 112 response_type: "BatchEnableServicesResponse" 113 metadata_type: "OperationMetadata" 114 }; 115 } 116 117 // Returns the service configurations and enabled states for a given list of 118 // services. 119 rpc BatchGetServices(BatchGetServicesRequest) 120 returns (BatchGetServicesResponse) { 121 option (google.api.http) = { 122 get: "/v1/{parent=*/*}/services:batchGet" 123 }; 124 } 125} 126 127// Request message for the `EnableService` method. 128message EnableServiceRequest { 129 // Name of the consumer and service to enable the service on. 130 // 131 // The `EnableService` and `DisableService` methods currently only support 132 // projects. 133 // 134 // Enabling a service requires that the service is public or is shared with 135 // the user enabling the service. 136 // 137 // An example name would be: 138 // `projects/123/services/serviceusage.googleapis.com` where `123` is the 139 // project number. 140 string name = 1; 141} 142 143// Response message for the `EnableService` method. 144// This response message is assigned to the `response` field of the returned 145// Operation when that operation is done. 146message EnableServiceResponse { 147 // The new state of the service after enabling. 148 Service service = 1; 149} 150 151// Request message for the `DisableService` method. 152message DisableServiceRequest { 153 // Enum to determine if service usage should be checked when disabling a 154 // service. 155 enum CheckIfServiceHasUsage { 156 // When unset, the default behavior is used, which is SKIP. 157 CHECK_IF_SERVICE_HAS_USAGE_UNSPECIFIED = 0; 158 159 // If set, skip checking service usage when disabling a service. 160 SKIP = 1; 161 162 // If set, service usage is checked when disabling the service. If a 163 // service, or its dependents, has usage in the last 30 days, the request 164 // returns a FAILED_PRECONDITION error. 165 CHECK = 2; 166 } 167 168 // Name of the consumer and service to disable the service on. 169 // 170 // The enable and disable methods currently only support projects. 171 // 172 // An example name would be: 173 // `projects/123/services/serviceusage.googleapis.com` where `123` is the 174 // project number. 175 string name = 1; 176 177 // Indicates if services that are enabled and which depend on this service 178 // should also be disabled. If not set, an error will be generated if any 179 // enabled services depend on the service to be disabled. When set, the 180 // service, and any enabled services that depend on it, will be disabled 181 // together. 182 bool disable_dependent_services = 2; 183 184 // Defines the behavior for checking service usage when disabling a service. 185 CheckIfServiceHasUsage check_if_service_has_usage = 3; 186} 187 188// Response message for the `DisableService` method. 189// This response message is assigned to the `response` field of the returned 190// Operation when that operation is done. 191message DisableServiceResponse { 192 // The new state of the service after disabling. 193 Service service = 1; 194} 195 196// Request message for the `GetService` method. 197message GetServiceRequest { 198 // Name of the consumer and service to get the `ConsumerState` for. 199 // 200 // An example name would be: 201 // `projects/123/services/serviceusage.googleapis.com` where `123` is the 202 // project number. 203 string name = 1; 204} 205 206// Request message for the `ListServices` method. 207message ListServicesRequest { 208 // Parent to search for services on. 209 // 210 // An example name would be: 211 // `projects/123` where `123` is the project number. 212 string parent = 1; 213 214 // Requested size of the next page of data. 215 // Requested page size cannot exceed 200. 216 // If not set, the default page size is 50. 217 int32 page_size = 2; 218 219 // Token identifying which result to start with, which is returned by a 220 // previous list call. 221 string page_token = 3; 222 223 // Only list services that conform to the given filter. 224 // The allowed filter strings are `state:ENABLED` and `state:DISABLED`. 225 string filter = 4; 226} 227 228// Response message for the `ListServices` method. 229message ListServicesResponse { 230 // The available services for the requested project. 231 repeated Service services = 1; 232 233 // Token that can be passed to `ListServices` to resume a paginated 234 // query. 235 string next_page_token = 2; 236} 237 238// Request message for the `BatchEnableServices` method. 239message BatchEnableServicesRequest { 240 // Parent to enable services on. 241 // 242 // An example name would be: 243 // `projects/123` where `123` is the project number. 244 // 245 // The `BatchEnableServices` method currently only supports projects. 246 string parent = 1; 247 248 // The identifiers of the services to enable on the project. 249 // 250 // A valid identifier would be: 251 // serviceusage.googleapis.com 252 // 253 // Enabling services requires that each service is public or is shared with 254 // the user enabling the service. 255 // 256 // A single request can enable a maximum of 20 services at a time. If more 257 // than 20 services are specified, the request will fail, and no state changes 258 // will occur. 259 repeated string service_ids = 2; 260} 261 262// Response message for the `BatchEnableServices` method. 263// This response message is assigned to the `response` field of the returned 264// Operation when that operation is done. 265message BatchEnableServicesResponse { 266 // Provides error messages for the failing services. 267 message EnableFailure { 268 // The service id of a service that could not be enabled. 269 string service_id = 1; 270 271 // An error message describing why the service could not be enabled. 272 string error_message = 2; 273 } 274 275 // The new state of the services after enabling. 276 repeated Service services = 1; 277 278 // If allow_partial_success is true, and one or more services could not be 279 // enabled, this field contains the details about each failure. 280 repeated EnableFailure failures = 2; 281} 282 283// Request message for the `BatchGetServices` method. 284message BatchGetServicesRequest { 285 // Parent to retrieve services from. 286 // If this is set, the parent of all of the services specified in `names` must 287 // match this field. An example name would be: `projects/123` where `123` is 288 // the project number. The `BatchGetServices` method currently only supports 289 // projects. 290 string parent = 1; 291 292 // Names of the services to retrieve. 293 // 294 // An example name would be: 295 // `projects/123/services/serviceusage.googleapis.com` where `123` is the 296 // project number. 297 // A single request can get a maximum of 30 services at a time. 298 repeated string names = 2; 299} 300 301// Response message for the `BatchGetServices` method. 302message BatchGetServicesResponse { 303 // The requested Service states. 304 repeated Service services = 1; 305} 306