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