@@ -112,6 +112,47 @@ service StorageControl {
112112 };
113113 option (google.api.method_signature ) = "name" ;
114114 }
115+
116+ // Creates a new managed folder.
117+ rpc CreateManagedFolder (CreateManagedFolderRequest ) returns (ManagedFolder ) {
118+ option (google.api.routing ) = {
119+ routing_parameters { field : "parent" path_template : "{bucket=**}" }
120+ };
121+ option (google.api.method_signature ) =
122+ "parent,managed_folder,managed_folder_id" ;
123+ }
124+
125+ // Permanently deletes an empty managed folder.
126+ rpc DeleteManagedFolder (DeleteManagedFolderRequest )
127+ returns (google.protobuf.Empty ) {
128+ option (google.api.routing ) = {
129+ routing_parameters {
130+ field : "name"
131+ path_template : "{bucket=projects/*/buckets/*}/**"
132+ }
133+ };
134+ option (google.api.method_signature ) = "name" ;
135+ }
136+
137+ // Returns metadata for the specified managed folder.
138+ rpc GetManagedFolder (GetManagedFolderRequest ) returns (ManagedFolder ) {
139+ option (google.api.routing ) = {
140+ routing_parameters {
141+ field : "name"
142+ path_template : "{bucket=projects/*/buckets/*}/**"
143+ }
144+ };
145+ option (google.api.method_signature ) = "name" ;
146+ }
147+
148+ // Retrieves a list of managed folders for a given bucket.
149+ rpc ListManagedFolders (ListManagedFoldersRequest )
150+ returns (ListManagedFoldersResponse ) {
151+ option (google.api.routing ) = {
152+ routing_parameters { field : "parent" path_template : "{bucket=**}" }
153+ };
154+ option (google.api.method_signature ) = "parent" ;
155+ }
115156}
116157
117158// Contains information about a pending rename operation.
@@ -195,7 +236,11 @@ message CreateFolderRequest {
195236 // error.
196237 Folder folder = 2 [(google.api.field_behavior ) = REQUIRED ];
197238
198- // Required. The absolute path of the folder, using a single `/` as delimiter.
239+ // Required. The full name of a folder, including all its parent folders.
240+ // Folders use single '/' characters as a delimiter.
241+ // The folder_id must end with a slash.
242+ // For example, the folder_id of "books/biographies/" would create a new
243+ // "biographies/" folder under the "books/" folder.
199244 string folder_id = 3 [(google.api.field_behavior ) = REQUIRED ];
200245
201246 // Optional. If true, parent folder doesn't have to be present and all missing
@@ -428,3 +473,161 @@ message GetStorageLayoutRequest {
428473 (google.api.field_behavior ) = OPTIONAL
429474 ];
430475}
476+
477+ // A managed folder.
478+ message ManagedFolder {
479+ option (google.api.resource ) = {
480+ type : "storage.googleapis.com/ManagedFolder"
481+ pattern : "projects/{project}/buckets/{bucket}/managedFolders/{managedFolder=**}"
482+ plural : "managedFolders"
483+ singular : "managedFolder"
484+ };
485+
486+ // Identifier. The name of this managed folder.
487+ // Format:
488+ // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}`
489+ string name = 1 [(google.api.field_behavior ) = IDENTIFIER ];
490+
491+ // Output only. The metadata version of this managed folder. It increases
492+ // whenever the metadata is updated. Used for preconditions and for detecting
493+ // changes in metadata. Managed folders don't have a generation number.
494+ int64 metageneration = 3 [(google.api.field_behavior ) = OUTPUT_ONLY ];
495+
496+ // Output only. The creation time of the managed folder.
497+ google.protobuf.Timestamp create_time = 4
498+ [(google.api.field_behavior ) = OUTPUT_ONLY ];
499+
500+ // Output only. The modification time of the managed folder.
501+ google.protobuf.Timestamp update_time = 5
502+ [(google.api.field_behavior ) = OUTPUT_ONLY ];
503+ }
504+
505+ // Request message for GetManagedFolder.
506+ message GetManagedFolderRequest {
507+ // Required. Name of the managed folder.
508+ // Format:
509+ // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}`
510+ string name = 6 [
511+ (google.api.field_behavior ) = REQUIRED ,
512+ (google.api.resource_reference ) = {
513+ type : "storage.googleapis.com/ManagedFolder"
514+ }
515+ ];
516+
517+ // The operation succeeds conditional on the managed folder's current
518+ // metageneration matching the value here specified.
519+ optional int64 if_metageneration_match = 3 ;
520+
521+ // The operation succeeds conditional on the managed folder's current
522+ // metageneration NOT matching the value here specified.
523+ optional int64 if_metageneration_not_match = 4 ;
524+
525+ // Optional. A unique identifier for this request. UUID is the recommended
526+ // format, but other formats are still accepted.
527+ string request_id = 5 [
528+ (google.api.field_info ).format = UUID4 ,
529+ (google.api.field_behavior ) = OPTIONAL
530+ ];
531+ }
532+
533+ // Request message for CreateManagedFolder.
534+ message CreateManagedFolderRequest {
535+ // Required. Name of the bucket this managed folder belongs to.
536+ string parent = 1 [
537+ (google.api.field_behavior ) = REQUIRED ,
538+ (google.api.resource_reference ) = {
539+ child_type : "storage.googleapis.com/ManagedFolder"
540+ }
541+ ];
542+
543+ // Required. Properties of the managed folder being created.
544+ // The bucket and managed folder names are specified in the `parent` and
545+ // `managed_folder_id` fields. Populating these fields in `managed_folder`
546+ // will result in an error.
547+ ManagedFolder managed_folder = 2 [(google.api.field_behavior ) = REQUIRED ];
548+
549+ // Required. The name of the managed folder. It uses a single `/` as delimiter
550+ // and leading and trailing `/` are allowed.
551+ string managed_folder_id = 3 [(google.api.field_behavior ) = REQUIRED ];
552+
553+ // Optional. A unique identifier for this request. UUID is the recommended
554+ // format, but other formats are still accepted.
555+ string request_id = 4 [
556+ (google.api.field_info ).format = UUID4 ,
557+ (google.api.field_behavior ) = OPTIONAL
558+ ];
559+ }
560+
561+ // DeleteManagedFolder RPC request message.
562+ message DeleteManagedFolderRequest {
563+ // Required. Name of the managed folder.
564+ // Format:
565+ // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}`
566+ string name = 7 [
567+ (google.api.field_behavior ) = REQUIRED ,
568+ (google.api.resource_reference ) = {
569+ type : "storage.googleapis.com/ManagedFolder"
570+ }
571+ ];
572+
573+ // The operation succeeds conditional on the managed folder's current
574+ // metageneration matching the value here specified.
575+ optional int64 if_metageneration_match = 3 ;
576+
577+ // The operation succeeds conditional on the managed folder's current
578+ // metageneration NOT matching the value here specified.
579+ optional int64 if_metageneration_not_match = 4 ;
580+
581+ // Allows deletion of a managed folder even if it is not empty.
582+ // A managed folder is empty if it manages no child managed folders or
583+ // objects. Caller must have permission for
584+ // storage.managedFolders.setIamPolicy.
585+ bool allow_non_empty = 5 ;
586+
587+ // Optional. A unique identifier for this request. UUID is the recommended
588+ // format, but other formats are still accepted.
589+ string request_id = 6 [
590+ (google.api.field_info ).format = UUID4 ,
591+ (google.api.field_behavior ) = OPTIONAL
592+ ];
593+ }
594+
595+ // Request message for ListManagedFolders.
596+ message ListManagedFoldersRequest {
597+ // Required. Name of the bucket this managed folder belongs to.
598+ string parent = 1 [
599+ (google.api.field_behavior ) = REQUIRED ,
600+ (google.api.resource_reference ) = {
601+ child_type : "storage.googleapis.com/ManagedFolder"
602+ }
603+ ];
604+
605+ // Optional. Maximum number of managed folders to return in a single response.
606+ // The service will use this parameter or 1,000 items, whichever is smaller.
607+ int32 page_size = 2 [(google.api.field_behavior ) = OPTIONAL ];
608+
609+ // Optional. A previously-returned page token representing part of the larger
610+ // set of results to view.
611+ string page_token = 3 [(google.api.field_behavior ) = OPTIONAL ];
612+
613+ // Optional. Filter results to match managed folders with name starting with
614+ // this prefix.
615+ string prefix = 4 [(google.api.field_behavior ) = OPTIONAL ];
616+
617+ // Optional. A unique identifier for this request. UUID is the recommended
618+ // format, but other formats are still accepted.
619+ string request_id = 5 [
620+ (google.api.field_info ).format = UUID4 ,
621+ (google.api.field_behavior ) = OPTIONAL
622+ ];
623+ }
624+
625+ // Response message for ListManagedFolders.
626+ message ListManagedFoldersResponse {
627+ // The list of matching managed folders
628+ repeated ManagedFolder managed_folders = 1 ;
629+
630+ // The continuation token, used to page through large result sets. Provide
631+ // this value in a subsequent request to return the next page of results.
632+ string next_page_token = 2 ;
633+ }
0 commit comments