xref: /aosp_15_r20/external/googleapis/google/api/serviceusage/v1/serviceusage.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
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