xref: /aosp_15_r20/external/googleapis/google/cloud/resourcemanager/v2/folders.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1*d5c09012SAndroid Build Coastguard Worker// Copyright 2019 Google LLC.
2*d5c09012SAndroid Build Coastguard Worker//
3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*d5c09012SAndroid Build Coastguard Worker//
7*d5c09012SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*d5c09012SAndroid Build Coastguard Worker//
9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*d5c09012SAndroid Build Coastguard Worker// limitations under the License.
14*d5c09012SAndroid Build Coastguard Worker//
15*d5c09012SAndroid Build Coastguard Worker
16*d5c09012SAndroid Build Coastguard Workersyntax = "proto3";
17*d5c09012SAndroid Build Coastguard Worker
18*d5c09012SAndroid Build Coastguard Workerpackage google.cloud.resourcemanager.v2;
19*d5c09012SAndroid Build Coastguard Worker
20*d5c09012SAndroid Build Coastguard Workerimport "google/api/annotations.proto";
21*d5c09012SAndroid Build Coastguard Workerimport "google/api/client.proto";
22*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto";
23*d5c09012SAndroid Build Coastguard Workerimport "google/api/resource.proto";
24*d5c09012SAndroid Build Coastguard Workerimport "google/iam/v1/iam_policy.proto";
25*d5c09012SAndroid Build Coastguard Workerimport "google/iam/v1/policy.proto";
26*d5c09012SAndroid Build Coastguard Workerimport "google/longrunning/operations.proto";
27*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/field_mask.proto";
28*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto";
29*d5c09012SAndroid Build Coastguard Worker
30*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.ResourceManager.V2";
31*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/resourcemanager/apiv2/resourcemanagerpb;resourcemanagerpb";
32*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true;
33*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "FoldersProto";
34*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.cloud.resourcemanager.v2";
35*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\ResourceManager\\V2";
36*d5c09012SAndroid Build Coastguard Worker
37*d5c09012SAndroid Build Coastguard Worker// Manages Cloud Resource Folders.
38*d5c09012SAndroid Build Coastguard Worker// Cloud Resource Folders can be used to organize the resources under an
39*d5c09012SAndroid Build Coastguard Worker// organization and to control the IAM policies applied to groups of resources.
40*d5c09012SAndroid Build Coastguard Workerservice Folders {
41*d5c09012SAndroid Build Coastguard Worker  option (google.api.default_host) = "cloudresourcemanager.googleapis.com";
42*d5c09012SAndroid Build Coastguard Worker  option (google.api.oauth_scopes) =
43*d5c09012SAndroid Build Coastguard Worker      "https://www.googleapis.com/auth/cloud-platform,"
44*d5c09012SAndroid Build Coastguard Worker      "https://www.googleapis.com/auth/cloud-platform.read-only";
45*d5c09012SAndroid Build Coastguard Worker
46*d5c09012SAndroid Build Coastguard Worker  // Lists the Folders that are direct descendants of supplied parent resource.
47*d5c09012SAndroid Build Coastguard Worker  // List provides a strongly consistent view of the Folders underneath
48*d5c09012SAndroid Build Coastguard Worker  // the specified parent resource.
49*d5c09012SAndroid Build Coastguard Worker  // List returns Folders sorted based upon the (ascending) lexical ordering
50*d5c09012SAndroid Build Coastguard Worker  // of their display_name.
51*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.list` permission on the
52*d5c09012SAndroid Build Coastguard Worker  // identified parent.
53*d5c09012SAndroid Build Coastguard Worker  rpc ListFolders(ListFoldersRequest) returns (ListFoldersResponse) {
54*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
55*d5c09012SAndroid Build Coastguard Worker      get: "/v2/folders"
56*d5c09012SAndroid Build Coastguard Worker    };
57*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "parent,show_deleted";
58*d5c09012SAndroid Build Coastguard Worker  }
59*d5c09012SAndroid Build Coastguard Worker
60*d5c09012SAndroid Build Coastguard Worker  // Search for folders that match specific filter criteria.
61*d5c09012SAndroid Build Coastguard Worker  // Search provides an eventually consistent view of the folders a user has
62*d5c09012SAndroid Build Coastguard Worker  // access to which meet the specified filter criteria.
63*d5c09012SAndroid Build Coastguard Worker  //
64*d5c09012SAndroid Build Coastguard Worker  // This will only return folders on which the caller has the
65*d5c09012SAndroid Build Coastguard Worker  // permission `resourcemanager.folders.get`.
66*d5c09012SAndroid Build Coastguard Worker  rpc SearchFolders(SearchFoldersRequest) returns (SearchFoldersResponse) {
67*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
68*d5c09012SAndroid Build Coastguard Worker      post: "/v2/folders:search"
69*d5c09012SAndroid Build Coastguard Worker      body: "*"
70*d5c09012SAndroid Build Coastguard Worker    };
71*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "query";
72*d5c09012SAndroid Build Coastguard Worker  }
73*d5c09012SAndroid Build Coastguard Worker
74*d5c09012SAndroid Build Coastguard Worker  // Retrieves a Folder identified by the supplied resource name.
75*d5c09012SAndroid Build Coastguard Worker  // Valid Folder resource names have the format `folders/{folder_id}`
76*d5c09012SAndroid Build Coastguard Worker  // (for example, `folders/1234`).
77*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.get` permission on the
78*d5c09012SAndroid Build Coastguard Worker  // identified folder.
79*d5c09012SAndroid Build Coastguard Worker  rpc GetFolder(GetFolderRequest) returns (Folder) {
80*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
81*d5c09012SAndroid Build Coastguard Worker      get: "/v2/{name=folders/*}"
82*d5c09012SAndroid Build Coastguard Worker    };
83*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "name";
84*d5c09012SAndroid Build Coastguard Worker  }
85*d5c09012SAndroid Build Coastguard Worker
86*d5c09012SAndroid Build Coastguard Worker  // Creates a Folder in the resource hierarchy.
87*d5c09012SAndroid Build Coastguard Worker  // Returns an Operation which can be used to track the progress of the
88*d5c09012SAndroid Build Coastguard Worker  // folder creation workflow.
89*d5c09012SAndroid Build Coastguard Worker  // Upon success the Operation.response field will be populated with the
90*d5c09012SAndroid Build Coastguard Worker  // created Folder.
91*d5c09012SAndroid Build Coastguard Worker  //
92*d5c09012SAndroid Build Coastguard Worker  // In order to succeed, the addition of this new Folder must not violate
93*d5c09012SAndroid Build Coastguard Worker  // the Folder naming, height or fanout constraints.
94*d5c09012SAndroid Build Coastguard Worker  //
95*d5c09012SAndroid Build Coastguard Worker  // + The Folder's display_name must be distinct from all other Folder's that
96*d5c09012SAndroid Build Coastguard Worker  // share its parent.
97*d5c09012SAndroid Build Coastguard Worker  // + The addition of the Folder must not cause the active Folder hierarchy
98*d5c09012SAndroid Build Coastguard Worker  // to exceed a height of 4. Note, the full active + deleted Folder hierarchy
99*d5c09012SAndroid Build Coastguard Worker  // is allowed to reach a height of 8; this provides additional headroom when
100*d5c09012SAndroid Build Coastguard Worker  // moving folders that contain deleted folders.
101*d5c09012SAndroid Build Coastguard Worker  // + The addition of the Folder must not cause the total number of Folders
102*d5c09012SAndroid Build Coastguard Worker  // under its parent to exceed 100.
103*d5c09012SAndroid Build Coastguard Worker  //
104*d5c09012SAndroid Build Coastguard Worker  // If the operation fails due to a folder constraint violation, some errors
105*d5c09012SAndroid Build Coastguard Worker  // may be returned by the CreateFolder request, with status code
106*d5c09012SAndroid Build Coastguard Worker  // FAILED_PRECONDITION and an error description. Other folder constraint
107*d5c09012SAndroid Build Coastguard Worker  // violations will be communicated in the Operation, with the specific
108*d5c09012SAndroid Build Coastguard Worker  // PreconditionFailure returned via the details list in the Operation.error
109*d5c09012SAndroid Build Coastguard Worker  // field.
110*d5c09012SAndroid Build Coastguard Worker  //
111*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.create` permission on the
112*d5c09012SAndroid Build Coastguard Worker  // identified parent.
113*d5c09012SAndroid Build Coastguard Worker  rpc CreateFolder(CreateFolderRequest) returns (google.longrunning.Operation) {
114*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
115*d5c09012SAndroid Build Coastguard Worker      post: "/v2/folders"
116*d5c09012SAndroid Build Coastguard Worker      body: "folder"
117*d5c09012SAndroid Build Coastguard Worker    };
118*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "parent,folder";
119*d5c09012SAndroid Build Coastguard Worker    option (google.longrunning.operation_info) = {
120*d5c09012SAndroid Build Coastguard Worker      response_type: "Folder"
121*d5c09012SAndroid Build Coastguard Worker      metadata_type: "FolderOperation"
122*d5c09012SAndroid Build Coastguard Worker    };
123*d5c09012SAndroid Build Coastguard Worker  }
124*d5c09012SAndroid Build Coastguard Worker
125*d5c09012SAndroid Build Coastguard Worker  // Updates a Folder, changing its display_name.
126*d5c09012SAndroid Build Coastguard Worker  // Changes to the folder display_name will be rejected if they violate either
127*d5c09012SAndroid Build Coastguard Worker  // the display_name formatting rules or naming constraints described in
128*d5c09012SAndroid Build Coastguard Worker  // the [CreateFolder][google.cloud.resourcemanager.v2.Folders.CreateFolder] documentation.
129*d5c09012SAndroid Build Coastguard Worker  //
130*d5c09012SAndroid Build Coastguard Worker  // The Folder's display name must start and end with a letter or digit,
131*d5c09012SAndroid Build Coastguard Worker  // may contain letters, digits, spaces, hyphens and underscores and can be
132*d5c09012SAndroid Build Coastguard Worker  // no longer than 30 characters. This is captured by the regular expression:
133*d5c09012SAndroid Build Coastguard Worker  // [\p{L}\p{N}]([\p{L}\p{N}_- ]{0,28}[\p{L}\p{N}])?.
134*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.update` permission on the
135*d5c09012SAndroid Build Coastguard Worker  // identified folder.
136*d5c09012SAndroid Build Coastguard Worker  //
137*d5c09012SAndroid Build Coastguard Worker  // If the update fails due to the unique name constraint then a
138*d5c09012SAndroid Build Coastguard Worker  // PreconditionFailure explaining this violation will be returned
139*d5c09012SAndroid Build Coastguard Worker  // in the Status.details field.
140*d5c09012SAndroid Build Coastguard Worker  rpc UpdateFolder(UpdateFolderRequest) returns (Folder) {
141*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
142*d5c09012SAndroid Build Coastguard Worker      patch: "/v2/{folder.name=folders/*}"
143*d5c09012SAndroid Build Coastguard Worker      body: "folder"
144*d5c09012SAndroid Build Coastguard Worker    };
145*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "folder,update_mask";
146*d5c09012SAndroid Build Coastguard Worker  }
147*d5c09012SAndroid Build Coastguard Worker
148*d5c09012SAndroid Build Coastguard Worker  // Moves a Folder under a new resource parent.
149*d5c09012SAndroid Build Coastguard Worker  // Returns an Operation which can be used to track the progress of the
150*d5c09012SAndroid Build Coastguard Worker  // folder move workflow.
151*d5c09012SAndroid Build Coastguard Worker  // Upon success the Operation.response field will be populated with the
152*d5c09012SAndroid Build Coastguard Worker  // moved Folder.
153*d5c09012SAndroid Build Coastguard Worker  // Upon failure, a FolderOperationError categorizing the failure cause will
154*d5c09012SAndroid Build Coastguard Worker  // be returned - if the failure occurs synchronously then the
155*d5c09012SAndroid Build Coastguard Worker  // FolderOperationError will be returned via the Status.details field
156*d5c09012SAndroid Build Coastguard Worker  // and if it occurs asynchronously then the FolderOperation will be returned
157*d5c09012SAndroid Build Coastguard Worker  // via the Operation.error field.
158*d5c09012SAndroid Build Coastguard Worker  // In addition, the Operation.metadata field will be populated with a
159*d5c09012SAndroid Build Coastguard Worker  // FolderOperation message as an aid to stateless clients.
160*d5c09012SAndroid Build Coastguard Worker  // Folder moves will be rejected if they violate either the naming, height
161*d5c09012SAndroid Build Coastguard Worker  // or fanout constraints described in the
162*d5c09012SAndroid Build Coastguard Worker  // [CreateFolder][google.cloud.resourcemanager.v2.Folders.CreateFolder] documentation.
163*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.move` permission on the
164*d5c09012SAndroid Build Coastguard Worker  // folder's current and proposed new parent.
165*d5c09012SAndroid Build Coastguard Worker  rpc MoveFolder(MoveFolderRequest) returns (google.longrunning.Operation) {
166*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
167*d5c09012SAndroid Build Coastguard Worker      post: "/v2/{name=folders/*}:move"
168*d5c09012SAndroid Build Coastguard Worker      body: "*"
169*d5c09012SAndroid Build Coastguard Worker    };
170*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "name,destination_parent";
171*d5c09012SAndroid Build Coastguard Worker    option (google.longrunning.operation_info) = {
172*d5c09012SAndroid Build Coastguard Worker      response_type: "Folder"
173*d5c09012SAndroid Build Coastguard Worker      metadata_type: "FolderOperation"
174*d5c09012SAndroid Build Coastguard Worker    };
175*d5c09012SAndroid Build Coastguard Worker  }
176*d5c09012SAndroid Build Coastguard Worker
177*d5c09012SAndroid Build Coastguard Worker  // Requests deletion of a Folder. The Folder is moved into the
178*d5c09012SAndroid Build Coastguard Worker  // [DELETE_REQUESTED][google.cloud.resourcemanager.v2.Folder.LifecycleState.DELETE_REQUESTED] state
179*d5c09012SAndroid Build Coastguard Worker  // immediately, and is deleted approximately 30 days later. This method may
180*d5c09012SAndroid Build Coastguard Worker  // only be called on an empty Folder in the
181*d5c09012SAndroid Build Coastguard Worker  // [ACTIVE][google.cloud.resourcemanager.v2.Folder.LifecycleState.ACTIVE] state, where a Folder is empty if
182*d5c09012SAndroid Build Coastguard Worker  // it doesn't contain any Folders or Projects in the
183*d5c09012SAndroid Build Coastguard Worker  // [ACTIVE][google.cloud.resourcemanager.v2.Folder.LifecycleState.ACTIVE] state.
184*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.delete` permission on the
185*d5c09012SAndroid Build Coastguard Worker  // identified folder.
186*d5c09012SAndroid Build Coastguard Worker  rpc DeleteFolder(DeleteFolderRequest) returns (Folder) {
187*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
188*d5c09012SAndroid Build Coastguard Worker      delete: "/v2/{name=folders/*}"
189*d5c09012SAndroid Build Coastguard Worker    };
190*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "name";
191*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "name,recursive_delete";
192*d5c09012SAndroid Build Coastguard Worker  }
193*d5c09012SAndroid Build Coastguard Worker
194*d5c09012SAndroid Build Coastguard Worker  // Cancels the deletion request for a Folder. This method may only be
195*d5c09012SAndroid Build Coastguard Worker  // called on a Folder in the
196*d5c09012SAndroid Build Coastguard Worker  // [DELETE_REQUESTED][google.cloud.resourcemanager.v2.Folder.LifecycleState.DELETE_REQUESTED] state.
197*d5c09012SAndroid Build Coastguard Worker  // In order to succeed, the Folder's parent must be in the
198*d5c09012SAndroid Build Coastguard Worker  // [ACTIVE][google.cloud.resourcemanager.v2.Folder.LifecycleState.ACTIVE] state.
199*d5c09012SAndroid Build Coastguard Worker  // In addition, reintroducing the folder into the tree must not violate
200*d5c09012SAndroid Build Coastguard Worker  // folder naming, height and fanout constraints described in the
201*d5c09012SAndroid Build Coastguard Worker  // [CreateFolder][google.cloud.resourcemanager.v2.Folders.CreateFolder] documentation.
202*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.undelete` permission on the
203*d5c09012SAndroid Build Coastguard Worker  // identified folder.
204*d5c09012SAndroid Build Coastguard Worker  rpc UndeleteFolder(UndeleteFolderRequest) returns (Folder) {
205*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
206*d5c09012SAndroid Build Coastguard Worker      post: "/v2/{name=folders/*}:undelete"
207*d5c09012SAndroid Build Coastguard Worker      body: "*"
208*d5c09012SAndroid Build Coastguard Worker    };
209*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "name";
210*d5c09012SAndroid Build Coastguard Worker  }
211*d5c09012SAndroid Build Coastguard Worker
212*d5c09012SAndroid Build Coastguard Worker  // Gets the access control policy for a Folder. The returned policy may be
213*d5c09012SAndroid Build Coastguard Worker  // empty if no such policy or resource exists. The `resource` field should
214*d5c09012SAndroid Build Coastguard Worker  // be the Folder's resource name, e.g. "folders/1234".
215*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.getIamPolicy` permission
216*d5c09012SAndroid Build Coastguard Worker  // on the identified folder.
217*d5c09012SAndroid Build Coastguard Worker  rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest) returns (google.iam.v1.Policy) {
218*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
219*d5c09012SAndroid Build Coastguard Worker      post: "/v2/{resource=folders/*}:getIamPolicy"
220*d5c09012SAndroid Build Coastguard Worker      body: "*"
221*d5c09012SAndroid Build Coastguard Worker    };
222*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "resource";
223*d5c09012SAndroid Build Coastguard Worker  }
224*d5c09012SAndroid Build Coastguard Worker
225*d5c09012SAndroid Build Coastguard Worker  // Sets the access control policy on a Folder, replacing any existing policy.
226*d5c09012SAndroid Build Coastguard Worker  // The `resource` field should be the Folder's resource name, e.g.
227*d5c09012SAndroid Build Coastguard Worker  // "folders/1234".
228*d5c09012SAndroid Build Coastguard Worker  // The caller must have `resourcemanager.folders.setIamPolicy` permission
229*d5c09012SAndroid Build Coastguard Worker  // on the identified folder.
230*d5c09012SAndroid Build Coastguard Worker  rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest) returns (google.iam.v1.Policy) {
231*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
232*d5c09012SAndroid Build Coastguard Worker      post: "/v2/{resource=folders/*}:setIamPolicy"
233*d5c09012SAndroid Build Coastguard Worker      body: "*"
234*d5c09012SAndroid Build Coastguard Worker    };
235*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "resource,policy";
236*d5c09012SAndroid Build Coastguard Worker  }
237*d5c09012SAndroid Build Coastguard Worker
238*d5c09012SAndroid Build Coastguard Worker  // Returns permissions that a caller has on the specified Folder.
239*d5c09012SAndroid Build Coastguard Worker  // The `resource` field should be the Folder's resource name,
240*d5c09012SAndroid Build Coastguard Worker  // e.g. "folders/1234".
241*d5c09012SAndroid Build Coastguard Worker  //
242*d5c09012SAndroid Build Coastguard Worker  // There are no permissions required for making this API call.
243*d5c09012SAndroid Build Coastguard Worker  rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest) returns (google.iam.v1.TestIamPermissionsResponse) {
244*d5c09012SAndroid Build Coastguard Worker    option (google.api.http) = {
245*d5c09012SAndroid Build Coastguard Worker      post: "/v2/{resource=folders/*}:testIamPermissions"
246*d5c09012SAndroid Build Coastguard Worker      body: "*"
247*d5c09012SAndroid Build Coastguard Worker    };
248*d5c09012SAndroid Build Coastguard Worker    option (google.api.method_signature) = "resource,permissions";
249*d5c09012SAndroid Build Coastguard Worker  }
250*d5c09012SAndroid Build Coastguard Worker}
251*d5c09012SAndroid Build Coastguard Worker
252*d5c09012SAndroid Build Coastguard Worker// A Folder in an Organization's resource hierarchy, used to
253*d5c09012SAndroid Build Coastguard Worker// organize that Organization's resources.
254*d5c09012SAndroid Build Coastguard Workermessage Folder {
255*d5c09012SAndroid Build Coastguard Worker  option (google.api.resource) = {
256*d5c09012SAndroid Build Coastguard Worker    type: "cloudresourcemanager.googleapis.com/Folder"
257*d5c09012SAndroid Build Coastguard Worker    pattern: "folders/{folder}"
258*d5c09012SAndroid Build Coastguard Worker  };
259*d5c09012SAndroid Build Coastguard Worker
260*d5c09012SAndroid Build Coastguard Worker  // Folder lifecycle states.
261*d5c09012SAndroid Build Coastguard Worker  enum LifecycleState {
262*d5c09012SAndroid Build Coastguard Worker    // Unspecified state.
263*d5c09012SAndroid Build Coastguard Worker    LIFECYCLE_STATE_UNSPECIFIED = 0;
264*d5c09012SAndroid Build Coastguard Worker
265*d5c09012SAndroid Build Coastguard Worker    // The normal and active state.
266*d5c09012SAndroid Build Coastguard Worker    ACTIVE = 1;
267*d5c09012SAndroid Build Coastguard Worker
268*d5c09012SAndroid Build Coastguard Worker    // The folder has been marked for deletion by the user.
269*d5c09012SAndroid Build Coastguard Worker    DELETE_REQUESTED = 2;
270*d5c09012SAndroid Build Coastguard Worker  }
271*d5c09012SAndroid Build Coastguard Worker
272*d5c09012SAndroid Build Coastguard Worker  // Output only. The resource name of the Folder.
273*d5c09012SAndroid Build Coastguard Worker  // Its format is `folders/{folder_id}`, for example: "folders/1234".
274*d5c09012SAndroid Build Coastguard Worker  string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
275*d5c09012SAndroid Build Coastguard Worker
276*d5c09012SAndroid Build Coastguard Worker  // Required. The Folder’s parent's resource name.
277*d5c09012SAndroid Build Coastguard Worker  // Updates to the folder's parent must be performed via
278*d5c09012SAndroid Build Coastguard Worker  // [MoveFolder][google.cloud.resourcemanager.v2.Folders.MoveFolder].
279*d5c09012SAndroid Build Coastguard Worker  string parent = 2 [(google.api.field_behavior) = REQUIRED];
280*d5c09012SAndroid Build Coastguard Worker
281*d5c09012SAndroid Build Coastguard Worker  // The folder’s display name.
282*d5c09012SAndroid Build Coastguard Worker  // A folder’s display name must be unique amongst its siblings, e.g.
283*d5c09012SAndroid Build Coastguard Worker  // no two folders with the same parent can share the same display name.
284*d5c09012SAndroid Build Coastguard Worker  // The display name must start and end with a letter or digit, may contain
285*d5c09012SAndroid Build Coastguard Worker  // letters, digits, spaces, hyphens and underscores and can be no longer
286*d5c09012SAndroid Build Coastguard Worker  // than 30 characters. This is captured by the regular expression:
287*d5c09012SAndroid Build Coastguard Worker  // [\p{L}\p{N}]([\p{L}\p{N}_- ]{0,28}[\p{L}\p{N}])?.
288*d5c09012SAndroid Build Coastguard Worker  string display_name = 3;
289*d5c09012SAndroid Build Coastguard Worker
290*d5c09012SAndroid Build Coastguard Worker  // Output only. The lifecycle state of the folder.
291*d5c09012SAndroid Build Coastguard Worker  // Updates to the lifecycle_state must be performed via
292*d5c09012SAndroid Build Coastguard Worker  // [DeleteFolder][google.cloud.resourcemanager.v2.Folders.DeleteFolder] and
293*d5c09012SAndroid Build Coastguard Worker  // [UndeleteFolder][google.cloud.resourcemanager.v2.Folders.UndeleteFolder].
294*d5c09012SAndroid Build Coastguard Worker  LifecycleState lifecycle_state = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
295*d5c09012SAndroid Build Coastguard Worker
296*d5c09012SAndroid Build Coastguard Worker  // Output only. Timestamp when the Folder was created. Assigned by the server.
297*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp create_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
298*d5c09012SAndroid Build Coastguard Worker
299*d5c09012SAndroid Build Coastguard Worker  // Output only. Timestamp when the Folder was last modified.
300*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp update_time = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
301*d5c09012SAndroid Build Coastguard Worker}
302*d5c09012SAndroid Build Coastguard Worker
303*d5c09012SAndroid Build Coastguard Worker// The ListFolders request message.
304*d5c09012SAndroid Build Coastguard Workermessage ListFoldersRequest {
305*d5c09012SAndroid Build Coastguard Worker  // Required. The resource name of the Organization or Folder whose Folders are
306*d5c09012SAndroid Build Coastguard Worker  // being listed.
307*d5c09012SAndroid Build Coastguard Worker  // Must be of the form `folders/{folder_id}` or `organizations/{org_id}`.
308*d5c09012SAndroid Build Coastguard Worker  // Access to this method is controlled by checking the
309*d5c09012SAndroid Build Coastguard Worker  // `resourcemanager.folders.list` permission on the `parent`.
310*d5c09012SAndroid Build Coastguard Worker  string parent = 1 [
311*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = REQUIRED,
312*d5c09012SAndroid Build Coastguard Worker    (google.api.resource_reference) = {
313*d5c09012SAndroid Build Coastguard Worker      child_type: "*"
314*d5c09012SAndroid Build Coastguard Worker    }
315*d5c09012SAndroid Build Coastguard Worker  ];
316*d5c09012SAndroid Build Coastguard Worker
317*d5c09012SAndroid Build Coastguard Worker  // Optional. The maximum number of Folders to return in the response.
318*d5c09012SAndroid Build Coastguard Worker  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
319*d5c09012SAndroid Build Coastguard Worker
320*d5c09012SAndroid Build Coastguard Worker  // Optional. A pagination token returned from a previous call to `ListFolders`
321*d5c09012SAndroid Build Coastguard Worker  // that indicates where this listing should continue from.
322*d5c09012SAndroid Build Coastguard Worker  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
323*d5c09012SAndroid Build Coastguard Worker
324*d5c09012SAndroid Build Coastguard Worker  // Optional. Controls whether Folders in the
325*d5c09012SAndroid Build Coastguard Worker  // [DELETE_REQUESTED][google.cloud.resourcemanager.v2.Folder.LifecycleState.DELETE_REQUESTED]
326*d5c09012SAndroid Build Coastguard Worker  // state should be returned. Defaults to false.
327*d5c09012SAndroid Build Coastguard Worker  bool show_deleted = 4 [(google.api.field_behavior) = OPTIONAL];
328*d5c09012SAndroid Build Coastguard Worker}
329*d5c09012SAndroid Build Coastguard Worker
330*d5c09012SAndroid Build Coastguard Worker// The ListFolders response message.
331*d5c09012SAndroid Build Coastguard Workermessage ListFoldersResponse {
332*d5c09012SAndroid Build Coastguard Worker  // A possibly paginated list of Folders that are direct descendants of
333*d5c09012SAndroid Build Coastguard Worker  // the specified parent resource.
334*d5c09012SAndroid Build Coastguard Worker  repeated Folder folders = 1;
335*d5c09012SAndroid Build Coastguard Worker
336*d5c09012SAndroid Build Coastguard Worker  // A pagination token returned from a previous call to `ListFolders`
337*d5c09012SAndroid Build Coastguard Worker  // that indicates from where listing should continue.
338*d5c09012SAndroid Build Coastguard Worker  string next_page_token = 2;
339*d5c09012SAndroid Build Coastguard Worker}
340*d5c09012SAndroid Build Coastguard Worker
341*d5c09012SAndroid Build Coastguard Worker// The request message for searching folders.
342*d5c09012SAndroid Build Coastguard Workermessage SearchFoldersRequest {
343*d5c09012SAndroid Build Coastguard Worker  // Optional. The maximum number of folders to return in the response.
344*d5c09012SAndroid Build Coastguard Worker  int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL];
345*d5c09012SAndroid Build Coastguard Worker
346*d5c09012SAndroid Build Coastguard Worker  // Optional. A pagination token returned from a previous call to `SearchFolders`
347*d5c09012SAndroid Build Coastguard Worker  // that indicates from where search should continue.
348*d5c09012SAndroid Build Coastguard Worker  string page_token = 2 [(google.api.field_behavior) = OPTIONAL];
349*d5c09012SAndroid Build Coastguard Worker
350*d5c09012SAndroid Build Coastguard Worker  // Search criteria used to select the Folders to return.
351*d5c09012SAndroid Build Coastguard Worker  // If no search criteria is specified then all accessible folders will be
352*d5c09012SAndroid Build Coastguard Worker  // returned.
353*d5c09012SAndroid Build Coastguard Worker  //
354*d5c09012SAndroid Build Coastguard Worker  // Query expressions can be used to restrict results based upon displayName,
355*d5c09012SAndroid Build Coastguard Worker  // lifecycleState and parent, where the operators `=`, `NOT`, `AND` and `OR`
356*d5c09012SAndroid Build Coastguard Worker  // can be used along with the suffix wildcard symbol `*`.
357*d5c09012SAndroid Build Coastguard Worker  //
358*d5c09012SAndroid Build Coastguard Worker  // The displayName field in a query expression should use escaped quotes
359*d5c09012SAndroid Build Coastguard Worker  // for values that include whitespace to prevent unexpected behavior.
360*d5c09012SAndroid Build Coastguard Worker  //
361*d5c09012SAndroid Build Coastguard Worker  // Some example queries are:
362*d5c09012SAndroid Build Coastguard Worker  //
363*d5c09012SAndroid Build Coastguard Worker  // * Query `displayName=Test*` returns Folder resources whose display name
364*d5c09012SAndroid Build Coastguard Worker  // starts with "Test".
365*d5c09012SAndroid Build Coastguard Worker  // * Query `lifecycleState=ACTIVE` returns Folder resources with
366*d5c09012SAndroid Build Coastguard Worker  // `lifecycleState` set to `ACTIVE`.
367*d5c09012SAndroid Build Coastguard Worker  // * Query `parent=folders/123` returns Folder resources that have
368*d5c09012SAndroid Build Coastguard Worker  // `folders/123` as a parent resource.
369*d5c09012SAndroid Build Coastguard Worker  // * Query `parent=folders/123 AND lifecycleState=ACTIVE` returns active
370*d5c09012SAndroid Build Coastguard Worker  // Folder resources that have `folders/123` as a parent resource.
371*d5c09012SAndroid Build Coastguard Worker  // * Query `displayName=\\"Test String\\"` returns Folder resources with
372*d5c09012SAndroid Build Coastguard Worker  // display names that include both "Test" and "String".
373*d5c09012SAndroid Build Coastguard Worker  string query = 3;
374*d5c09012SAndroid Build Coastguard Worker}
375*d5c09012SAndroid Build Coastguard Worker
376*d5c09012SAndroid Build Coastguard Worker// The response message for searching folders.
377*d5c09012SAndroid Build Coastguard Workermessage SearchFoldersResponse {
378*d5c09012SAndroid Build Coastguard Worker  // A possibly paginated folder search results.
379*d5c09012SAndroid Build Coastguard Worker  // the specified parent resource.
380*d5c09012SAndroid Build Coastguard Worker  repeated Folder folders = 1;
381*d5c09012SAndroid Build Coastguard Worker
382*d5c09012SAndroid Build Coastguard Worker  // A pagination token returned from a previous call to `SearchFolders`
383*d5c09012SAndroid Build Coastguard Worker  // that indicates from where searching should continue.
384*d5c09012SAndroid Build Coastguard Worker  string next_page_token = 2;
385*d5c09012SAndroid Build Coastguard Worker}
386*d5c09012SAndroid Build Coastguard Worker
387*d5c09012SAndroid Build Coastguard Worker// The GetFolder request message.
388*d5c09012SAndroid Build Coastguard Workermessage GetFolderRequest {
389*d5c09012SAndroid Build Coastguard Worker  // Required. The resource name of the Folder to retrieve.
390*d5c09012SAndroid Build Coastguard Worker  // Must be of the form `folders/{folder_id}`.
391*d5c09012SAndroid Build Coastguard Worker  string name = 1 [
392*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = REQUIRED,
393*d5c09012SAndroid Build Coastguard Worker    (google.api.resource_reference) = {
394*d5c09012SAndroid Build Coastguard Worker      type: "cloudresourcemanager.googleapis.com/Folder"
395*d5c09012SAndroid Build Coastguard Worker    }
396*d5c09012SAndroid Build Coastguard Worker  ];
397*d5c09012SAndroid Build Coastguard Worker}
398*d5c09012SAndroid Build Coastguard Worker
399*d5c09012SAndroid Build Coastguard Worker// The CreateFolder request message.
400*d5c09012SAndroid Build Coastguard Workermessage CreateFolderRequest {
401*d5c09012SAndroid Build Coastguard Worker  // Required. The resource name of the new Folder's parent.
402*d5c09012SAndroid Build Coastguard Worker  // Must be of the form `folders/{folder_id}` or `organizations/{org_id}`.
403*d5c09012SAndroid Build Coastguard Worker  string parent = 1 [
404*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = REQUIRED,
405*d5c09012SAndroid Build Coastguard Worker    (google.api.resource_reference) = {
406*d5c09012SAndroid Build Coastguard Worker      child_type: "*"
407*d5c09012SAndroid Build Coastguard Worker    }
408*d5c09012SAndroid Build Coastguard Worker  ];
409*d5c09012SAndroid Build Coastguard Worker
410*d5c09012SAndroid Build Coastguard Worker  // Required. The Folder being created, only the display name will be consulted.
411*d5c09012SAndroid Build Coastguard Worker  // All other fields will be ignored.
412*d5c09012SAndroid Build Coastguard Worker  Folder folder = 2 [(google.api.field_behavior) = REQUIRED];
413*d5c09012SAndroid Build Coastguard Worker}
414*d5c09012SAndroid Build Coastguard Worker
415*d5c09012SAndroid Build Coastguard Worker// The MoveFolder request message.
416*d5c09012SAndroid Build Coastguard Workermessage MoveFolderRequest {
417*d5c09012SAndroid Build Coastguard Worker  // Required. The resource name of the Folder to move.
418*d5c09012SAndroid Build Coastguard Worker  // Must be of the form folders/{folder_id}
419*d5c09012SAndroid Build Coastguard Worker  string name = 1 [
420*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = REQUIRED,
421*d5c09012SAndroid Build Coastguard Worker    (google.api.resource_reference) = {
422*d5c09012SAndroid Build Coastguard Worker      type: "cloudresourcemanager.googleapis.com/Folder"
423*d5c09012SAndroid Build Coastguard Worker    }
424*d5c09012SAndroid Build Coastguard Worker  ];
425*d5c09012SAndroid Build Coastguard Worker
426*d5c09012SAndroid Build Coastguard Worker  // Required. The resource name of the Folder or Organization to reparent
427*d5c09012SAndroid Build Coastguard Worker  // the folder under.
428*d5c09012SAndroid Build Coastguard Worker  // Must be of the form `folders/{folder_id}` or `organizations/{org_id}`.
429*d5c09012SAndroid Build Coastguard Worker  string destination_parent = 2 [
430*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = REQUIRED,
431*d5c09012SAndroid Build Coastguard Worker    (google.api.resource_reference) = {
432*d5c09012SAndroid Build Coastguard Worker      child_type: "*"
433*d5c09012SAndroid Build Coastguard Worker    }
434*d5c09012SAndroid Build Coastguard Worker  ];
435*d5c09012SAndroid Build Coastguard Worker}
436*d5c09012SAndroid Build Coastguard Worker
437*d5c09012SAndroid Build Coastguard Worker// The request message for updating a folder's display name.
438*d5c09012SAndroid Build Coastguard Workermessage UpdateFolderRequest {
439*d5c09012SAndroid Build Coastguard Worker  // Required. The new definition of the Folder. It must include a
440*d5c09012SAndroid Build Coastguard Worker  // a `name` and `display_name` field. The other fields
441*d5c09012SAndroid Build Coastguard Worker  // will be ignored.
442*d5c09012SAndroid Build Coastguard Worker  Folder folder = 1 [(google.api.field_behavior) = REQUIRED];
443*d5c09012SAndroid Build Coastguard Worker
444*d5c09012SAndroid Build Coastguard Worker  // Required. Fields to be updated.
445*d5c09012SAndroid Build Coastguard Worker  // Only the `display_name` can be updated.
446*d5c09012SAndroid Build Coastguard Worker  google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED];
447*d5c09012SAndroid Build Coastguard Worker}
448*d5c09012SAndroid Build Coastguard Worker
449*d5c09012SAndroid Build Coastguard Worker// The DeleteFolder request message.
450*d5c09012SAndroid Build Coastguard Workermessage DeleteFolderRequest {
451*d5c09012SAndroid Build Coastguard Worker  // Required. The resource name of the Folder to be deleted.
452*d5c09012SAndroid Build Coastguard Worker  // Must be of the form `folders/{folder_id}`.
453*d5c09012SAndroid Build Coastguard Worker  string name = 1 [
454*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = REQUIRED,
455*d5c09012SAndroid Build Coastguard Worker    (google.api.resource_reference) = {
456*d5c09012SAndroid Build Coastguard Worker      type: "cloudresourcemanager.googleapis.com/Folder"
457*d5c09012SAndroid Build Coastguard Worker    }
458*d5c09012SAndroid Build Coastguard Worker  ];
459*d5c09012SAndroid Build Coastguard Worker
460*d5c09012SAndroid Build Coastguard Worker  // Instructs DeleteFolderAction to delete a folder even when the folder is not
461*d5c09012SAndroid Build Coastguard Worker  // empty.
462*d5c09012SAndroid Build Coastguard Worker  bool recursive_delete = 2;
463*d5c09012SAndroid Build Coastguard Worker}
464*d5c09012SAndroid Build Coastguard Worker
465*d5c09012SAndroid Build Coastguard Worker// The UndeleteFolder request message.
466*d5c09012SAndroid Build Coastguard Workermessage UndeleteFolderRequest {
467*d5c09012SAndroid Build Coastguard Worker  // Required. The resource name of the Folder to undelete.
468*d5c09012SAndroid Build Coastguard Worker  // Must be of the form `folders/{folder_id}`.
469*d5c09012SAndroid Build Coastguard Worker  string name = 1 [
470*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = REQUIRED,
471*d5c09012SAndroid Build Coastguard Worker    (google.api.resource_reference) = {
472*d5c09012SAndroid Build Coastguard Worker      type: "cloudresourcemanager.googleapis.com/Folder"
473*d5c09012SAndroid Build Coastguard Worker    }
474*d5c09012SAndroid Build Coastguard Worker  ];
475*d5c09012SAndroid Build Coastguard Worker}
476*d5c09012SAndroid Build Coastguard Worker
477*d5c09012SAndroid Build Coastguard Worker// Metadata describing a long running folder operation
478*d5c09012SAndroid Build Coastguard Workermessage FolderOperation {
479*d5c09012SAndroid Build Coastguard Worker  // The type of operation that failed.
480*d5c09012SAndroid Build Coastguard Worker  enum OperationType {
481*d5c09012SAndroid Build Coastguard Worker    // Operation type not specified.
482*d5c09012SAndroid Build Coastguard Worker    OPERATION_TYPE_UNSPECIFIED = 0;
483*d5c09012SAndroid Build Coastguard Worker
484*d5c09012SAndroid Build Coastguard Worker    // A create folder operation.
485*d5c09012SAndroid Build Coastguard Worker    CREATE = 1;
486*d5c09012SAndroid Build Coastguard Worker
487*d5c09012SAndroid Build Coastguard Worker    // A move folder operation.
488*d5c09012SAndroid Build Coastguard Worker    MOVE = 2;
489*d5c09012SAndroid Build Coastguard Worker  }
490*d5c09012SAndroid Build Coastguard Worker
491*d5c09012SAndroid Build Coastguard Worker  // The display name of the folder.
492*d5c09012SAndroid Build Coastguard Worker  string display_name = 1;
493*d5c09012SAndroid Build Coastguard Worker
494*d5c09012SAndroid Build Coastguard Worker  // The type of this operation.
495*d5c09012SAndroid Build Coastguard Worker  OperationType operation_type = 2;
496*d5c09012SAndroid Build Coastguard Worker
497*d5c09012SAndroid Build Coastguard Worker  // The resource name of the folder's parent.
498*d5c09012SAndroid Build Coastguard Worker  // Only applicable when the operation_type is MOVE.
499*d5c09012SAndroid Build Coastguard Worker  string source_parent = 3;
500*d5c09012SAndroid Build Coastguard Worker
501*d5c09012SAndroid Build Coastguard Worker  // The resource name of the folder or organization we are either creating
502*d5c09012SAndroid Build Coastguard Worker  // the folder under or moving the folder to.
503*d5c09012SAndroid Build Coastguard Worker  string destination_parent = 4;
504*d5c09012SAndroid Build Coastguard Worker}
505