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