xref: /aosp_15_r20/external/googleapis/google/cloud/video/livestream/v1/resources.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1// Copyright 2023 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15syntax = "proto3";
16
17package google.cloud.video.livestream.v1;
18
19import "google/api/field_behavior.proto";
20import "google/api/resource.proto";
21import "google/cloud/video/livestream/v1/outputs.proto";
22import "google/protobuf/duration.proto";
23import "google/protobuf/timestamp.proto";
24import "google/rpc/status.proto";
25
26option csharp_namespace = "Google.Cloud.Video.LiveStream.V1";
27option go_package = "cloud.google.com/go/video/livestream/apiv1/livestreampb;livestreampb";
28option java_multiple_files = true;
29option java_outer_classname = "ResourcesProto";
30option java_package = "com.google.cloud.video.livestream.v1";
31option php_namespace = "Google\\Cloud\\Video\\LiveStream\\V1";
32option ruby_package = "Google::Cloud::Video::LiveStream::V1";
33
34// Input resource represents the endpoint from which the channel ingests
35// the input stream.
36message Input {
37  option (google.api.resource) = {
38    type: "livestream.googleapis.com/Input"
39    pattern: "projects/{project}/locations/{location}/inputs/{input}"
40  };
41
42  // The type of the input.
43  enum Type {
44    // Input type is not specified.
45    TYPE_UNSPECIFIED = 0;
46
47    // Input will take an rtmp input stream.
48    RTMP_PUSH = 1;
49
50    // Input will take an srt (Secure Reliable Transport) input stream.
51    SRT_PUSH = 2;
52  }
53
54  // Tier of the input specification.
55  enum Tier {
56    // Tier is not specified.
57    TIER_UNSPECIFIED = 0;
58
59    // Resolution < 1280x720. Bitrate <= 6 Mbps. FPS <= 60.
60    SD = 1;
61
62    // Resolution <= 1920x1080. Bitrate <= 25 Mbps. FPS <= 60.
63    HD = 2;
64
65    // Resolution <= 4096x2160. Not supported yet.
66    UHD = 3;
67  }
68
69  // Security rules for access control. Each field represents one security rule.
70  // Only when the source of the input stream satisfies all the fields, this
71  // input stream can be accepted.
72  message SecurityRule {
73    // At least one ip range must match unless none specified. The IP range is
74    // defined by CIDR block: for example, `192.0.1.0/24` for a range and
75    // `192.0.1.0/32` for a single IP address.
76    repeated string ip_ranges = 1;
77  }
78
79  // The resource name of the input, in the form of:
80  // `projects/{project}/locations/{location}/inputs/{inputId}`.
81  string name = 1;
82
83  // Output only. The creation time.
84  google.protobuf.Timestamp create_time = 2
85      [(google.api.field_behavior) = OUTPUT_ONLY];
86
87  // Output only. The update time.
88  google.protobuf.Timestamp update_time = 3
89      [(google.api.field_behavior) = OUTPUT_ONLY];
90
91  // User-defined key/value metadata.
92  map<string, string> labels = 4;
93
94  // Source type.
95  Type type = 5;
96
97  // Tier defines the maximum input specification that is accepted by the
98  // video pipeline. The billing is charged based on the tier specified here.
99  // See [Pricing](https://cloud.google.com/livestream/pricing) for more detail.
100  // The default is `HD`.
101  Tier tier = 14;
102
103  // Output only. URI to push the input stream to.
104  // Its format depends on the input
105  // [type][google.cloud.video.livestream.v1.Input.type], for example:
106  //
107  // *  `RTMP_PUSH`: `rtmp://1.2.3.4/live/{STREAM-ID}`
108  // *  `SRT_PUSH`: `srt://1.2.3.4:4201?streamid={STREAM-ID}`
109  string uri = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
110
111  // Preprocessing configurations.
112  PreprocessingConfig preprocessing_config = 9;
113
114  // Security rule for access control.
115  SecurityRule security_rules = 12;
116
117  // Output only. The information for the input stream. This field will be
118  // present only when this input receives the input stream.
119  InputStreamProperty input_stream_property = 15
120      [(google.api.field_behavior) = OUTPUT_ONLY];
121}
122
123// Channel resource represents the processor that does a user-defined
124// "streaming" operation, which includes getting an input stream through an
125// input, transcoding it to multiple renditions, and publishing output live
126// streams in certain formats (for example, HLS or DASH) to the specified
127// location.
128message Channel {
129  option (google.api.resource) = {
130    type: "livestream.googleapis.com/Channel"
131    pattern: "projects/{project}/locations/{location}/channels/{channel}"
132  };
133
134  // Location of output file(s) in a Google Cloud Storage bucket.
135  message Output {
136    // URI for the output file(s). For example, `gs://my-bucket/outputs/`.
137    string uri = 1;
138  }
139
140  // State of streaming operation that the channel is running.
141  enum StreamingState {
142    // Streaming state is not specified.
143    STREAMING_STATE_UNSPECIFIED = 0;
144
145    // Channel is getting the input stream, generating the live streams to the
146    // specified output location.
147    STREAMING = 1;
148
149    // Channel is waiting for the input stream through the input.
150    AWAITING_INPUT = 2;
151
152    // Channel is running, but has trouble publishing the live streams onto the
153    // specified output location (for example, the specified Cloud Storage
154    // bucket is not writable).
155    STREAMING_ERROR = 4;
156
157    // Channel is generating live streams with no input stream. Live streams are
158    // filled out with black screen, while input stream is missing.
159    // Not supported yet.
160    STREAMING_NO_INPUT = 5;
161
162    // Channel is stopped, finishing live streams.
163    STOPPED = 6;
164
165    // Channel is starting.
166    STARTING = 7;
167
168    // Channel is stopping.
169    STOPPING = 8;
170  }
171
172  // The resource name of the channel, in the form of:
173  // `projects/{project}/locations/{location}/channels/{channelId}`.
174  string name = 1;
175
176  // Output only. The creation time.
177  google.protobuf.Timestamp create_time = 2
178      [(google.api.field_behavior) = OUTPUT_ONLY];
179
180  // Output only. The update time.
181  google.protobuf.Timestamp update_time = 3
182      [(google.api.field_behavior) = OUTPUT_ONLY];
183
184  // User-defined key/value metadata.
185  map<string, string> labels = 4;
186
187  // A list of input attachments that this channel uses.
188  // One channel can have multiple inputs as the input sources. Only one
189  // input can be selected as the input source at one time.
190  repeated InputAttachment input_attachments = 16;
191
192  // Output only. The
193  // [InputAttachment.key][google.cloud.video.livestream.v1.InputAttachment.key]
194  // that serves as the current input source. The first input in the
195  // [input_attachments][google.cloud.video.livestream.v1.Channel.input_attachments]
196  // is the initial input source.
197  string active_input = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
198
199  // Required. Information about the output (that is, the Cloud Storage bucket
200  // to store the generated live stream).
201  Output output = 9 [(google.api.field_behavior) = REQUIRED];
202
203  // List of elementary streams.
204  repeated ElementaryStream elementary_streams = 10;
205
206  // List of multiplexing settings for output streams.
207  repeated MuxStream mux_streams = 11;
208
209  // List of output manifests.
210  repeated Manifest manifests = 12;
211
212  // List of output sprite sheets.
213  repeated SpriteSheet sprite_sheets = 13;
214
215  // Output only. State of the streaming operation.
216  StreamingState streaming_state = 14
217      [(google.api.field_behavior) = OUTPUT_ONLY];
218
219  // Output only. A description of the reason for the streaming error. This
220  // property is always present when
221  // [streaming_state][google.cloud.video.livestream.v1.Channel.streaming_state]
222  // is
223  // [STREAMING_ERROR][google.cloud.video.livestream.v1.Channel.StreamingState.STREAMING_ERROR].
224  google.rpc.Status streaming_error = 18
225      [(google.api.field_behavior) = OUTPUT_ONLY];
226
227  // Configuration of platform logs for this channel.
228  LogConfig log_config = 19;
229
230  // Configuration of timecode for this channel.
231  TimecodeConfig timecode_config = 21;
232
233  // Encryption configurations for this channel. Each configuration has an ID
234  // which is referred to by each MuxStream to indicate which configuration is
235  // used for that output.
236  repeated Encryption encryptions = 24;
237
238  // The configuration for input sources defined in
239  // [input_attachments][google.cloud.video.livestream.v1.Channel.input_attachments].
240  InputConfig input_config = 25;
241}
242
243// Configuration for the input sources of a channel.
244message InputConfig {
245  // Input switch mode.
246  enum InputSwitchMode {
247    // The input switch mode is not specified.
248    INPUT_SWITCH_MODE_UNSPECIFIED = 0;
249
250    // Automatic failover is enabled. The primary input stream is always
251    // preferred over its backup input streams configured using the
252    // [AutomaticFailover][google.cloud.video.livestream.v1.InputAttachment.AutomaticFailover]
253    // field.
254    FAILOVER_PREFER_PRIMARY = 1;
255
256    // Automatic failover is disabled. You must use the
257    // [inputSwitch][google.cloud.video.livestream.v1.Event.input_switch] event
258    // to switch the active input source for the channel to stream from. When
259    // this mode is chosen, the
260    // [AutomaticFailover][google.cloud.video.livestream.v1.InputAttachment.AutomaticFailover]
261    // field is ignored.
262    MANUAL = 3;
263  }
264
265  // Input switch mode. Default mode is `FAILOVER_PREFER_PRIMARY`.
266  InputSwitchMode input_switch_mode = 1;
267}
268
269// Configuration of platform logs.
270// See [Using and managing platform
271// logs](https://cloud.google.com/logging/docs/api/platform-logs#managing-logs)
272// for more information about how to view platform logs through Cloud Logging.
273message LogConfig {
274  // The severity level of platform logging for this channel. Logs with a
275  // severity level higher than or equal to the chosen severity level will be
276  // logged and can be viewed through Cloud Logging.
277  // The severity level of a log is ranked as followed from low to high: DEBUG <
278  // INFO < NOTICE < WARNING < ERROR < CRITICAL < ALERT < EMERGENCY.
279  // See
280  // [LogSeverity](https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#logseverity)
281  // for more information.
282  enum LogSeverity {
283    // Log severity is not specified. This is the same as log severity is OFF.
284    LOG_SEVERITY_UNSPECIFIED = 0;
285
286    // Log is turned off.
287    OFF = 1;
288
289    // Log with severity higher than or equal to DEBUG are logged.
290    DEBUG = 100;
291
292    // Logs with severity higher than or equal to INFO are logged.
293    INFO = 200;
294
295    // Logs with severity higher than or equal to WARNING are logged.
296    WARNING = 400;
297
298    // Logs with severity higher than or equal to ERROR are logged.
299    ERROR = 500;
300  }
301
302  // The severity level of platform logging for this resource.
303  LogSeverity log_severity = 1;
304}
305
306// Properties of the input stream.
307message InputStreamProperty {
308  // The time that the current input stream is accepted and the connection is
309  // established.
310  google.protobuf.Timestamp last_establish_time = 1;
311
312  // Properties of the video streams.
313  repeated VideoStreamProperty video_streams = 2;
314
315  // Properties of the audio streams.
316  repeated AudioStreamProperty audio_streams = 3;
317}
318
319// Properties of the video stream.
320message VideoStreamProperty {
321  // Index of this video stream.
322  int32 index = 1;
323
324  // Properties of the video format.
325  VideoFormat video_format = 2;
326}
327
328// Properties of the video format.
329message VideoFormat {
330  // Video codec used in this video stream.
331  string codec = 1;
332
333  // The width of the video stream in pixels.
334  int32 width_pixels = 2;
335
336  // The height of the video stream in pixels.
337  int32 height_pixels = 3;
338
339  // The frame rate of the input video stream.
340  double frame_rate = 4;
341}
342
343// Properties of the audio stream.
344message AudioStreamProperty {
345  // Index of this audio stream.
346  int32 index = 1;
347
348  // Properties of the audio format.
349  AudioFormat audio_format = 2;
350}
351
352// Properties of the audio format.
353message AudioFormat {
354  // Audio codec used in this audio stream.
355  string codec = 1;
356
357  // The number of audio channels.
358  int32 channel_count = 2;
359
360  // A list of channel names specifying the layout of the audio channels.
361  repeated string channel_layout = 3;
362}
363
364// A group of information for attaching an input resource to this channel.
365message InputAttachment {
366  // Configurations to follow when automatic failover happens.
367  message AutomaticFailover {
368    // The
369    // [InputAttachment.key][google.cloud.video.livestream.v1.InputAttachment.key]s
370    // of inputs to failover to when this input is disconnected. Currently, only
371    // up to one backup input is supported.
372    repeated string input_keys = 1;
373  }
374
375  // A unique key for this input attachment.
376  string key = 1;
377
378  // The resource name of an existing input, in the form of:
379  // `projects/{project}/locations/{location}/inputs/{inputId}`.
380  string input = 2 [(google.api.resource_reference) = {
381    type: "livestream.googleapis.com/Input"
382  }];
383
384  // Automatic failover configurations.
385  AutomaticFailover automatic_failover = 3;
386}
387
388// Event is a sub-resource of a channel, which can be scheduled by the user to
389// execute operations on a channel resource without having to stop the channel.
390message Event {
391  option (google.api.resource) = {
392    type: "livestream.googleapis.com/Event"
393    pattern: "projects/{project}/locations/{location}/channels/{channel}/events/{event}"
394  };
395
396  // Switches to another input stream. Automatic failover is then disabled.
397  message InputSwitchTask {
398    // The
399    // [InputAttachment.key][google.cloud.video.livestream.v1.InputAttachment.key]
400    // of the input to switch to.
401    string input_key = 1;
402  }
403
404  // Inserts a new ad opportunity.
405  message AdBreakTask {
406    // Duration of an ad opportunity. Must be greater than 0.
407    google.protobuf.Duration duration = 1;
408  }
409
410  // Inserts a slate.
411  message SlateTask {
412    // Optional. Duration of the slate. Must be greater than 0 if specified.
413    // Omit this field for a long running slate.
414    google.protobuf.Duration duration = 1;
415
416    // Slate asset to use for the duration. If its duration is less than the
417    // duration of the SlateTask, then it will be looped. The slate must be
418    // represented in the form of:
419    // `projects/{project}/locations/{location}/assets/{assetId}`.
420    string asset = 2 [(google.api.resource_reference) = {
421      type: "livestream.googleapis.com/Asset"
422    }];
423  }
424
425  // Stops any events which are currently running. This only applies to events
426  // with a duration.
427  message ReturnToProgramTask {}
428
429  // Mutes the stream.
430  message MuteTask {
431    // Duration for which the stream should be muted. If omitted, the stream
432    // will be muted until an UnmuteTask event is sent.
433    google.protobuf.Duration duration = 1;
434  }
435
436  // Unmutes the stream. The task will fail if the stream is not
437  // currently muted.
438  message UnmuteTask {}
439
440  // State of the event
441  enum State {
442    // Event state is not specified.
443    STATE_UNSPECIFIED = 0;
444
445    // Event is scheduled but not executed yet.
446    SCHEDULED = 1;
447
448    // Event is being executed.
449    RUNNING = 2;
450
451    // Event has been successfully executed.
452    SUCCEEDED = 3;
453
454    // Event fails to be executed.
455    FAILED = 4;
456
457    // Event has been created but not scheduled yet.
458    PENDING = 5;
459
460    // Event was stopped before running for its full duration.
461    STOPPED = 6;
462  }
463
464  // The resource name of the event, in the form of:
465  // `projects/{project}/locations/{location}/channels/{channelId}/events/{eventId}`.
466  string name = 1;
467
468  // Output only. The creation time.
469  google.protobuf.Timestamp create_time = 2
470      [(google.api.field_behavior) = OUTPUT_ONLY];
471
472  // Output only. The update time.
473  google.protobuf.Timestamp update_time = 3
474      [(google.api.field_behavior) = OUTPUT_ONLY];
475
476  // User-defined key/value metadata.
477  map<string, string> labels = 4;
478
479  // Required. Operation to be executed by this event.
480  oneof task {
481    // Switches to another input stream.
482    InputSwitchTask input_switch = 5;
483
484    // Inserts a new ad opportunity.
485    AdBreakTask ad_break = 6;
486
487    // Stops any running ad break.
488    ReturnToProgramTask return_to_program = 13;
489
490    // Inserts a slate.
491    SlateTask slate = 14;
492
493    // Mutes the stream.
494    MuteTask mute = 15;
495
496    // Unmutes the stream.
497    UnmuteTask unmute = 16;
498  }
499
500  // When this field is set to true, the event will be executed at the earliest
501  // time that the server can schedule the event and
502  // [execution_time][google.cloud.video.livestream.v1.Event.execution_time]
503  // will be populated with the time that the server actually schedules the
504  // event.
505  bool execute_now = 9;
506
507  // The time to execute the event. If you set
508  // [execute_now][google.cloud.video.livestream.v1.Event.execute_now] to
509  // `true`, then do not set this field in the `CreateEvent` request. In
510  // this case, the server schedules the event and populates this field. If you
511  // set [execute_now][google.cloud.video.livestream.v1.Event.execute_now] to
512  // `false`, then you must set this field to at least 10 seconds in the future
513  // or else the event can't be created.
514  google.protobuf.Timestamp execution_time = 10;
515
516  // Output only. The state of the event.
517  State state = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
518
519  // Output only. An error object that describes the reason for the failure.
520  // This property is always present when `state` is `FAILED`.
521  google.rpc.Status error = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
522}
523
524// An asset represents a video or an image.
525message Asset {
526  option (google.api.resource) = {
527    type: "livestream.googleapis.com/Asset"
528    pattern: "projects/{project}/locations/{location}/assets/{asset}"
529  };
530
531  // VideoAsset represents a video. The supported formats are MP4, MPEG-TS, and
532  // FLV. The supported video codec is H264. The supported audio codecs are
533  // AAC, AC3, MP2, and MP3.
534  message VideoAsset {
535    // Cloud Storage URI of the video. The format is `gs://my-bucket/my-object`.
536    string uri = 1;
537  }
538
539  // Image represents an image. The supported format is JPEG.
540  message ImageAsset {
541    // Cloud Storage URI of the image. The format is `gs://my-bucket/my-object`.
542    string uri = 1;
543  }
544
545  // State of the asset resource.
546  enum State {
547    // State is not specified.
548    STATE_UNSPECIFIED = 0;
549
550    // The asset is being created.
551    CREATING = 1;
552
553    // The asset is ready for use.
554    ACTIVE = 2;
555
556    // The asset is being deleted.
557    DELETING = 3;
558
559    // The asset has an error.
560    ERROR = 4;
561  }
562
563  // The resource name of the asset, in the form of:
564  // `projects/{project}/locations/{location}/assets/{assetId}`.
565  string name = 1;
566
567  // Output only. The creation time.
568  google.protobuf.Timestamp create_time = 2
569      [(google.api.field_behavior) = OUTPUT_ONLY];
570
571  // Output only. The update time.
572  google.protobuf.Timestamp update_time = 3
573      [(google.api.field_behavior) = OUTPUT_ONLY];
574
575  // User-defined key/value metadata.
576  map<string, string> labels = 4;
577
578  // The reference to the asset.
579  // The maximum size of the resource is 250 MB.
580  oneof resource {
581    // VideoAsset represents a video.
582    VideoAsset video = 5;
583
584    // ImageAsset represents an image.
585    ImageAsset image = 6;
586  }
587
588  // Based64-encoded CRC32c checksum of the asset file. For more information,
589  // see the crc32c checksum of the [Cloud Storage Objects
590  // resource](https://cloud.google.com/storage/docs/json_api/v1/objects).
591  // If crc32c is omitted or left empty when the asset is created, this field is
592  // filled by the crc32c checksum of the Cloud Storage object indicated by
593  // [VideoAsset.uri] or [ImageAsset.uri].
594  // If crc32c is set, the asset can't be created if the crc32c value does not
595  // match with the crc32c checksum of the Cloud Storage object indicated by
596  // [VideoAsset.uri] or [ImageAsset.uri].
597  string crc32c = 7;
598
599  // Output only. The state of the asset resource.
600  State state = 8 [(google.api.field_behavior) = OUTPUT_ONLY];
601
602  // Output only. Only present when `state` is `ERROR`. The reason for the error
603  // state of the asset.
604  google.rpc.Status error = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
605}
606
607// Encryption settings.
608message Encryption {
609  // Configuration for secrets stored in Google Secret Manager.
610  message SecretManagerSource {
611    // Required. The name of the Secret Version containing the encryption key.
612    // `projects/{project}/secrets/{secret_id}/versions/{version_number}`
613    string secret_version = 1 [
614      (google.api.field_behavior) = REQUIRED,
615      (google.api.resource_reference) = {
616        type: "secretmanager.googleapis.com/SecretVersion"
617      }
618    ];
619  }
620
621  // Widevine configuration.
622  message Widevine {}
623
624  // Fairplay configuration.
625  message Fairplay {}
626
627  // Playready configuration.
628  message Playready {}
629
630  // Clearkey configuration.
631  message Clearkey {}
632
633  // Defines configuration for DRM systems in use. If a field is omitted,
634  // that DRM system will be considered to be disabled.
635  message DrmSystems {
636    // Widevine configuration.
637    Widevine widevine = 1;
638
639    // Fairplay configuration.
640    Fairplay fairplay = 2;
641
642    // Playready configuration.
643    Playready playready = 3;
644
645    // Clearkey configuration.
646    Clearkey clearkey = 4;
647  }
648
649  // Configuration for HLS AES-128 encryption.
650  message Aes128Encryption {}
651
652  // Configuration for HLS SAMPLE-AES encryption.
653  message SampleAesEncryption {}
654
655  // Configuration for MPEG-Dash Common Encryption (MPEG-CENC).
656  message MpegCommonEncryption {
657    // Required. Specify the encryption scheme, supported schemes:
658    // - `cenc` - AES-CTR subsample
659    // - `cbcs`- AES-CBC subsample pattern
660    string scheme = 1 [(google.api.field_behavior) = REQUIRED];
661  }
662
663  // Required. Identifier for this set of encryption options.
664  string id = 1 [(google.api.field_behavior) = REQUIRED];
665
666  // Defines where content keys are stored.
667  oneof secret_source {
668    // For keys stored in Google Secret Manager.
669    SecretManagerSource secret_manager_key_source = 7;
670  }
671
672  // Required. Configuration for DRM systems.
673  DrmSystems drm_systems = 3 [(google.api.field_behavior) = REQUIRED];
674
675  // Encryption modes for HLS and MPEG-Dash.
676  oneof encryption_mode {
677    // Configuration for HLS AES-128 encryption.
678    Aes128Encryption aes128 = 4;
679
680    // Configuration for HLS SAMPLE-AES encryption.
681    SampleAesEncryption sample_aes = 5;
682
683    // Configuration for MPEG-Dash Common Encryption (MPEG-CENC).
684    MpegCommonEncryption mpeg_cenc = 6;
685  }
686}
687
688// Pool resource defines the configuration of Live Stream pools for a specific
689// location. Currently we support only one pool resource per project per
690// location. After the creation of the first input, a default pool is created
691// automatically at "projects/{project}/locations/{location}/pools/default".
692message Pool {
693  option (google.api.resource) = {
694    type: "livestream.googleapis.com/Pool"
695    pattern: "projects/{project}/locations/{location}/pools/{pool}"
696  };
697
698  // Defines the network configuration for the pool.
699  message NetworkConfig {
700    // peered_network is the network resource URL of the network that is peered
701    // to the service provider network. Must be of the format
702    // projects/NETWORK_PROJECT_NUMBER/global/networks/NETWORK_NAME, where
703    // NETWORK_PROJECT_NUMBER is the project number of the Cloud project that
704    // holds your VPC network and NETWORK_NAME is the name of your VPC network.
705    // If peered_network is omitted or empty, the pool will use endpoints that
706    // are publicly available.
707    string peered_network = 1 [(google.api.resource_reference) = {
708      type: "compute.googleapis.com/Network"
709    }];
710  }
711
712  // The resource name of the pool, in the form of:
713  // `projects/{project}/locations/{location}/pools/{poolId}`.
714  string name = 1;
715
716  // Output only. The creation time.
717  google.protobuf.Timestamp create_time = 2
718      [(google.api.field_behavior) = OUTPUT_ONLY];
719
720  // Output only. The update time.
721  google.protobuf.Timestamp update_time = 3
722      [(google.api.field_behavior) = OUTPUT_ONLY];
723
724  // User-defined key/value metadata.
725  map<string, string> labels = 4;
726
727  // Network configuration for the pool.
728  NetworkConfig network_config = 5;
729}
730