google-apis-backupdr_v1 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -143,6 +143,50 @@ module Google
143
143
  end
144
144
  end
145
145
 
146
+ # Specifies options for controlling advanced machine features.
147
+ class AdvancedMachineFeatures
148
+ include Google::Apis::Core::Hashable
149
+
150
+ # Optional. Whether to enable nested virtualization or not (default is false).
151
+ # Corresponds to the JSON property `enableNestedVirtualization`
152
+ # @return [Boolean]
153
+ attr_accessor :enable_nested_virtualization
154
+ alias_method :enable_nested_virtualization?, :enable_nested_virtualization
155
+
156
+ # Optional. Whether to enable UEFI networking for instance creation.
157
+ # Corresponds to the JSON property `enableUefiNetworking`
158
+ # @return [Boolean]
159
+ attr_accessor :enable_uefi_networking
160
+ alias_method :enable_uefi_networking?, :enable_uefi_networking
161
+
162
+ # Optional. The number of threads per physical core. To disable simultaneous
163
+ # multithreading (SMT) set this to 1. If unset, the maximum number of threads
164
+ # supported per core by the underlying processor is assumed.
165
+ # Corresponds to the JSON property `threadsPerCore`
166
+ # @return [Fixnum]
167
+ attr_accessor :threads_per_core
168
+
169
+ # Optional. The number of physical cores to expose to an instance. Multiply by
170
+ # the number of threads per core to compute the total number of virtual CPUs to
171
+ # expose to the instance. If unset, the number of cores is inferred from the
172
+ # instance's nominal CPU count and the underlying platform's SMT width.
173
+ # Corresponds to the JSON property `visibleCoreCount`
174
+ # @return [Fixnum]
175
+ attr_accessor :visible_core_count
176
+
177
+ def initialize(**args)
178
+ update!(**args)
179
+ end
180
+
181
+ # Update properties of this object
182
+ def update!(**args)
183
+ @enable_nested_virtualization = args[:enable_nested_virtualization] if args.key?(:enable_nested_virtualization)
184
+ @enable_uefi_networking = args[:enable_uefi_networking] if args.key?(:enable_uefi_networking)
185
+ @threads_per_core = args[:threads_per_core] if args.key?(:threads_per_core)
186
+ @visible_core_count = args[:visible_core_count] if args.key?(:visible_core_count)
187
+ end
188
+ end
189
+
146
190
  # An alias IP range attached to an instance's network interface.
147
191
  class AliasIpRange
148
192
  include Google::Apis::Core::Hashable
@@ -170,6 +214,85 @@ module Google
170
214
  end
171
215
  end
172
216
 
217
+ # Specifies the reservations that this instance can consume from.
218
+ class AllocationAffinity
219
+ include Google::Apis::Core::Hashable
220
+
221
+ # Optional. Specifies the type of reservation from which this instance can
222
+ # consume
223
+ # Corresponds to the JSON property `consumeReservationType`
224
+ # @return [String]
225
+ attr_accessor :consume_reservation_type
226
+
227
+ # Optional. Corresponds to the label key of a reservation resource.
228
+ # Corresponds to the JSON property `key`
229
+ # @return [String]
230
+ attr_accessor :key
231
+
232
+ # Optional. Corresponds to the label values of a reservation resource.
233
+ # Corresponds to the JSON property `values`
234
+ # @return [Array<String>]
235
+ attr_accessor :values
236
+
237
+ def initialize(**args)
238
+ update!(**args)
239
+ end
240
+
241
+ # Update properties of this object
242
+ def update!(**args)
243
+ @consume_reservation_type = args[:consume_reservation_type] if args.key?(:consume_reservation_type)
244
+ @key = args[:key] if args.key?(:key)
245
+ @values = args[:values] if args.key?(:values)
246
+ end
247
+ end
248
+
249
+ # Provides the mapping of a cloud asset to a direct physical location or to a
250
+ # proxy that defines the location on its behalf.
251
+ class AssetLocation
252
+ include Google::Apis::Core::Hashable
253
+
254
+ # Spanner path of the CCFE RMS database. It is only applicable for CCFE tenants
255
+ # that use CCFE RMS for storing resource metadata.
256
+ # Corresponds to the JSON property `ccfeRmsPath`
257
+ # @return [String]
258
+ attr_accessor :ccfe_rms_path
259
+
260
+ # Defines the customer expectation around ZI/ZS for this asset and ZI/ZS state
261
+ # of the region at the time of asset creation.
262
+ # Corresponds to the JSON property `expected`
263
+ # @return [Google::Apis::BackupdrV1::IsolationExpectations]
264
+ attr_accessor :expected
265
+
266
+ # Defines extra parameters required for specific asset types.
267
+ # Corresponds to the JSON property `extraParameters`
268
+ # @return [Array<Google::Apis::BackupdrV1::ExtraParameter>]
269
+ attr_accessor :extra_parameters
270
+
271
+ # Contains all kinds of physical location definitions for this asset.
272
+ # Corresponds to the JSON property `locationData`
273
+ # @return [Array<Google::Apis::BackupdrV1::LocationData>]
274
+ attr_accessor :location_data
275
+
276
+ # Defines parents assets if any in order to allow later generation of
277
+ # child_asset_location data via child assets.
278
+ # Corresponds to the JSON property `parentAsset`
279
+ # @return [Array<Google::Apis::BackupdrV1::CloudAsset>]
280
+ attr_accessor :parent_asset
281
+
282
+ def initialize(**args)
283
+ update!(**args)
284
+ end
285
+
286
+ # Update properties of this object
287
+ def update!(**args)
288
+ @ccfe_rms_path = args[:ccfe_rms_path] if args.key?(:ccfe_rms_path)
289
+ @expected = args[:expected] if args.key?(:expected)
290
+ @extra_parameters = args[:extra_parameters] if args.key?(:extra_parameters)
291
+ @location_data = args[:location_data] if args.key?(:location_data)
292
+ @parent_asset = args[:parent_asset] if args.key?(:parent_asset)
293
+ end
294
+ end
295
+
173
296
  # An instance-attached disk resource.
174
297
  class AttachedDisk
175
298
  include Google::Apis::Core::Hashable
@@ -210,16 +333,16 @@ module Google
210
333
  # @return [Fixnum]
211
334
  attr_accessor :disk_size_gb
212
335
 
213
- # Optional. Specifies the type of the disk.
336
+ # Optional. Output only. The URI of the disk type resource. For example:
337
+ # projects/project/zones/zone/diskTypes/pd-standard or pd-ssd
214
338
  # Corresponds to the JSON property `diskType`
215
339
  # @return [String]
216
340
  attr_accessor :disk_type
217
341
 
218
- # Optional. Output only. The URI of the disk type resource. For example:
219
- # projects/project/zones/zone/diskTypes/pd-standard or pd-ssd
220
- # Corresponds to the JSON property `diskTypeUri`
342
+ # Specifies the type of the disk.
343
+ # Corresponds to the JSON property `diskTypeDeprecated`
221
344
  # @return [String]
222
- attr_accessor :disk_type_uri
345
+ attr_accessor :disk_type_deprecated
223
346
 
224
347
  # Optional. A list of features to enable on the guest operating system.
225
348
  # Applicable only for bootable images.
@@ -264,6 +387,11 @@ module Google
264
387
  # @return [String]
265
388
  attr_accessor :source
266
389
 
390
+ # Optional. Specifies the type of the disk.
391
+ # Corresponds to the JSON property `type`
392
+ # @return [String]
393
+ attr_accessor :type
394
+
267
395
  def initialize(**args)
268
396
  update!(**args)
269
397
  end
@@ -277,7 +405,7 @@ module Google
277
405
  @disk_interface = args[:disk_interface] if args.key?(:disk_interface)
278
406
  @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
279
407
  @disk_type = args[:disk_type] if args.key?(:disk_type)
280
- @disk_type_uri = args[:disk_type_uri] if args.key?(:disk_type_uri)
408
+ @disk_type_deprecated = args[:disk_type_deprecated] if args.key?(:disk_type_deprecated)
281
409
  @guest_os_feature = args[:guest_os_feature] if args.key?(:guest_os_feature)
282
410
  @index = args[:index] if args.key?(:index)
283
411
  @initialize_params = args[:initialize_params] if args.key?(:initialize_params)
@@ -286,6 +414,7 @@ module Google
286
414
  @mode = args[:mode] if args.key?(:mode)
287
415
  @saved_state = args[:saved_state] if args.key?(:saved_state)
288
416
  @source = args[:source] if args.key?(:source)
417
+ @type = args[:type] if args.key?(:type)
289
418
  end
290
419
  end
291
420
 
@@ -375,7 +504,7 @@ module Google
375
504
  # @return [Array<Google::Apis::BackupdrV1::BackupLock>]
376
505
  attr_accessor :backup_appliance_locks
377
506
 
378
- #
507
+ # Output only. Type of the backup, unspecified, scheduled or ondemand.
379
508
  # Corresponds to the JSON property `backupType`
380
509
  # @return [String]
381
510
  attr_accessor :backup_type
@@ -428,7 +557,7 @@ module Google
428
557
  # @return [Hash<String,String>]
429
558
  attr_accessor :labels
430
559
 
431
- # Output only. Name of the resource.
560
+ # Output only. Identifier. Name of the resource.
432
561
  # Corresponds to the JSON property `name`
433
562
  # @return [String]
434
563
  attr_accessor :name
@@ -716,6 +845,232 @@ module Google
716
845
  end
717
846
  end
718
847
 
848
+ # A `BackupPlan` specifies some common fields, such as `display_name` as well as
849
+ # one or more `BackupRule` messages. Each `BackupRule` has a retention policy
850
+ # and defines a schedule by which the system is to perform backup workloads.
851
+ class BackupPlan
852
+ include Google::Apis::Core::Hashable
853
+
854
+ # Required. The backup rules for this `BackupPlan`. There must be at least one `
855
+ # BackupRule` message.
856
+ # Corresponds to the JSON property `backupRules`
857
+ # @return [Array<Google::Apis::BackupdrV1::BackupRule>]
858
+ attr_accessor :backup_rules
859
+
860
+ # Required. Resource name of backup vault which will be used as storage location
861
+ # for backups. Format: projects/`project`/locations/`location`/backupVaults/`
862
+ # backupvault`
863
+ # Corresponds to the JSON property `backupVault`
864
+ # @return [String]
865
+ attr_accessor :backup_vault
866
+
867
+ # Output only. The Google Cloud Platform Service Account to be used by the
868
+ # BackupVault for taking backups. Specify the email address of the Backup Vault
869
+ # Service Account.
870
+ # Corresponds to the JSON property `backupVaultServiceAccount`
871
+ # @return [String]
872
+ attr_accessor :backup_vault_service_account
873
+
874
+ # Output only. When the `BackupPlan` was created.
875
+ # Corresponds to the JSON property `createTime`
876
+ # @return [String]
877
+ attr_accessor :create_time
878
+
879
+ # Optional. The description of the `BackupPlan` resource. The description allows
880
+ # for additional details about `BackupPlan` and its use cases to be provided. An
881
+ # example description is the following: "This is a backup plan that performs a
882
+ # daily backup at 6pm and retains data for 3 months". The description must be at
883
+ # most 2048 characters.
884
+ # Corresponds to the JSON property `description`
885
+ # @return [String]
886
+ attr_accessor :description
887
+
888
+ # Optional. `etag` is returned from the service in the response. As a user of
889
+ # the service, you may provide an etag value in this field to prevent stale
890
+ # resources.
891
+ # Corresponds to the JSON property `etag`
892
+ # @return [String]
893
+ attr_accessor :etag
894
+
895
+ # Optional. This collection of key/value pairs allows for custom labels to be
896
+ # supplied by the user. Example, `"tag": "Weekly"`.
897
+ # Corresponds to the JSON property `labels`
898
+ # @return [Hash<String,String>]
899
+ attr_accessor :labels
900
+
901
+ # Output only. Identifier. The resource name of the `BackupPlan`. Format: `
902
+ # projects/`project`/locations/`location`/backupPlans/`backup_plan``
903
+ # Corresponds to the JSON property `name`
904
+ # @return [String]
905
+ attr_accessor :name
906
+
907
+ # Required. The resource type to which the `BackupPlan` will be applied.
908
+ # Examples include, "compute.googleapis.com/Instance" and "storage.googleapis.
909
+ # com/Bucket".
910
+ # Corresponds to the JSON property `resourceType`
911
+ # @return [String]
912
+ attr_accessor :resource_type
913
+
914
+ # Output only. The `State` for the `BackupPlan`.
915
+ # Corresponds to the JSON property `state`
916
+ # @return [String]
917
+ attr_accessor :state
918
+
919
+ # Output only. When the `BackupPlan` was last updated.
920
+ # Corresponds to the JSON property `updateTime`
921
+ # @return [String]
922
+ attr_accessor :update_time
923
+
924
+ def initialize(**args)
925
+ update!(**args)
926
+ end
927
+
928
+ # Update properties of this object
929
+ def update!(**args)
930
+ @backup_rules = args[:backup_rules] if args.key?(:backup_rules)
931
+ @backup_vault = args[:backup_vault] if args.key?(:backup_vault)
932
+ @backup_vault_service_account = args[:backup_vault_service_account] if args.key?(:backup_vault_service_account)
933
+ @create_time = args[:create_time] if args.key?(:create_time)
934
+ @description = args[:description] if args.key?(:description)
935
+ @etag = args[:etag] if args.key?(:etag)
936
+ @labels = args[:labels] if args.key?(:labels)
937
+ @name = args[:name] if args.key?(:name)
938
+ @resource_type = args[:resource_type] if args.key?(:resource_type)
939
+ @state = args[:state] if args.key?(:state)
940
+ @update_time = args[:update_time] if args.key?(:update_time)
941
+ end
942
+ end
943
+
944
+ # A BackupPlanAssociation represents a single BackupPlanAssociation which
945
+ # contains details like workload, backup plan etc
946
+ class BackupPlanAssociation
947
+ include Google::Apis::Core::Hashable
948
+
949
+ # Required. Resource name of backup plan which needs to be applied on workload.
950
+ # Format: projects/`project`/locations/`location`/backupPlans/`backupPlanId`
951
+ # Corresponds to the JSON property `backupPlan`
952
+ # @return [String]
953
+ attr_accessor :backup_plan
954
+
955
+ # Output only. The time when the instance was created.
956
+ # Corresponds to the JSON property `createTime`
957
+ # @return [String]
958
+ attr_accessor :create_time
959
+
960
+ # Output only. Output Only. Resource name of data source which will be used as
961
+ # storage location for backups taken. Format : projects/`project`/locations/`
962
+ # location`/backupVaults/`backupvault`/dataSources/`datasource`
963
+ # Corresponds to the JSON property `dataSource`
964
+ # @return [String]
965
+ attr_accessor :data_source
966
+
967
+ # Output only. Identifier. The resource name of BackupPlanAssociation in below
968
+ # format Format : projects/`project`/locations/`location`/backupPlanAssociations/
969
+ # `backupPlanAssociationId`
970
+ # Corresponds to the JSON property `name`
971
+ # @return [String]
972
+ attr_accessor :name
973
+
974
+ # Required. Immutable. Resource name of workload on which backupplan is applied
975
+ # Corresponds to the JSON property `resource`
976
+ # @return [String]
977
+ attr_accessor :resource
978
+
979
+ # Output only. Output Only. Resource type of workload on which backupplan is
980
+ # applied
981
+ # Corresponds to the JSON property `resourceType`
982
+ # @return [String]
983
+ attr_accessor :resource_type
984
+
985
+ # Output only. The config info related to backup rules.
986
+ # Corresponds to the JSON property `rulesConfigInfo`
987
+ # @return [Array<Google::Apis::BackupdrV1::RuleConfigInfo>]
988
+ attr_accessor :rules_config_info
989
+
990
+ # Output only. The BackupPlanAssociation resource state.
991
+ # Corresponds to the JSON property `state`
992
+ # @return [String]
993
+ attr_accessor :state
994
+
995
+ # Output only. The time when the instance was updated.
996
+ # Corresponds to the JSON property `updateTime`
997
+ # @return [String]
998
+ attr_accessor :update_time
999
+
1000
+ def initialize(**args)
1001
+ update!(**args)
1002
+ end
1003
+
1004
+ # Update properties of this object
1005
+ def update!(**args)
1006
+ @backup_plan = args[:backup_plan] if args.key?(:backup_plan)
1007
+ @create_time = args[:create_time] if args.key?(:create_time)
1008
+ @data_source = args[:data_source] if args.key?(:data_source)
1009
+ @name = args[:name] if args.key?(:name)
1010
+ @resource = args[:resource] if args.key?(:resource)
1011
+ @resource_type = args[:resource_type] if args.key?(:resource_type)
1012
+ @rules_config_info = args[:rules_config_info] if args.key?(:rules_config_info)
1013
+ @state = args[:state] if args.key?(:state)
1014
+ @update_time = args[:update_time] if args.key?(:update_time)
1015
+ end
1016
+ end
1017
+
1018
+ # `BackupRule` binds the backup schedule to a retention policy.
1019
+ class BackupRule
1020
+ include Google::Apis::Core::Hashable
1021
+
1022
+ # Required. Configures the duration for which backup data will be kept. It is
1023
+ # defined in “days”. The value should be greater than or equal to minimum
1024
+ # enforced retention of the backup vault.
1025
+ # Corresponds to the JSON property `backupRetentionDays`
1026
+ # @return [Fixnum]
1027
+ attr_accessor :backup_retention_days
1028
+
1029
+ # Optional. TODO b/341576760: Remove deprecated BV and Datasource field form BP
1030
+ # and BPA once UI removed all dependencies on them Required. Resource name of
1031
+ # backup vault which will be used as storage location for backups. Format:
1032
+ # projects/`project`/locations/`location`/backupVaults/`backupvault`
1033
+ # Corresponds to the JSON property `backupVault`
1034
+ # @return [String]
1035
+ attr_accessor :backup_vault
1036
+
1037
+ # Output only. TODO b/341576760: Remove deprecated BV and Datasource field form
1038
+ # BP and BPA once UI removed all dependencies on them Output only. The Google
1039
+ # Cloud Platform Service Account to be used by the BackupVault for taking
1040
+ # backups. Specify the email address of the Backup Vault Service Account.
1041
+ # Corresponds to the JSON property `backupVaultServiceAccount`
1042
+ # @return [String]
1043
+ attr_accessor :backup_vault_service_account
1044
+
1045
+ # Required. Immutable. The unique id of this `BackupRule`. The `rule_id` is
1046
+ # unique per `BackupPlan`.The `rule_id` must start with a lowercase letter
1047
+ # followed by up to 62 lowercase letters, numbers, or hyphens. Pattern, /a-z`,62`
1048
+ # /.
1049
+ # Corresponds to the JSON property `ruleId`
1050
+ # @return [String]
1051
+ attr_accessor :rule_id
1052
+
1053
+ # `StandardSchedule` defines a schedule that run within the confines of a
1054
+ # defined window of days. We can define recurrence type for schedule as HOURLY,
1055
+ # DAILY, WEEKLY, MONTHLY or YEARLY.
1056
+ # Corresponds to the JSON property `standardSchedule`
1057
+ # @return [Google::Apis::BackupdrV1::StandardSchedule]
1058
+ attr_accessor :standard_schedule
1059
+
1060
+ def initialize(**args)
1061
+ update!(**args)
1062
+ end
1063
+
1064
+ # Update properties of this object
1065
+ def update!(**args)
1066
+ @backup_retention_days = args[:backup_retention_days] if args.key?(:backup_retention_days)
1067
+ @backup_vault = args[:backup_vault] if args.key?(:backup_vault)
1068
+ @backup_vault_service_account = args[:backup_vault_service_account] if args.key?(:backup_vault_service_account)
1069
+ @rule_id = args[:rule_id] if args.key?(:rule_id)
1070
+ @standard_schedule = args[:standard_schedule] if args.key?(:standard_schedule)
1071
+ end
1072
+ end
1073
+
719
1074
  # Message describing a BackupVault object.
720
1075
  class BackupVault
721
1076
  include Google::Apis::Core::Hashable
@@ -777,7 +1132,7 @@ module Google
777
1132
  # @return [Hash<String,String>]
778
1133
  attr_accessor :labels
779
1134
 
780
- # Output only. The resource name.
1135
+ # Output only. Identifier. The resource name.
781
1136
  # Corresponds to the JSON property `name`
782
1137
  # @return [String]
783
1138
  attr_accessor :name
@@ -835,6 +1190,36 @@ module Google
835
1190
  end
836
1191
  end
837
1192
 
1193
+ # `BackupWindow` defines a window of the day during which backup jobs will run.
1194
+ class BackupWindow
1195
+ include Google::Apis::Core::Hashable
1196
+
1197
+ # Required. The hour of day (1-24) when the window end for e.g. if value of end
1198
+ # hour of day is 10 that mean backup window end time is 10:00. End hour of day
1199
+ # should be greater than start hour of day. 0 <= start_hour_of_day <
1200
+ # end_hour_of_day <= 24 End hour of day is not include in backup window that
1201
+ # mean if end_hour_of_day= 10 jobs should start before 10:00.
1202
+ # Corresponds to the JSON property `endHourOfDay`
1203
+ # @return [Fixnum]
1204
+ attr_accessor :end_hour_of_day
1205
+
1206
+ # Required. The hour of day (0-23) when the window starts for e.g. if value of
1207
+ # start hour of day is 6 that mean backup window start at 6:00.
1208
+ # Corresponds to the JSON property `startHourOfDay`
1209
+ # @return [Fixnum]
1210
+ attr_accessor :start_hour_of_day
1211
+
1212
+ def initialize(**args)
1213
+ update!(**args)
1214
+ end
1215
+
1216
+ # Update properties of this object
1217
+ def update!(**args)
1218
+ @end_hour_of_day = args[:end_hour_of_day] if args.key?(:end_hour_of_day)
1219
+ @start_hour_of_day = args[:start_hour_of_day] if args.key?(:start_hour_of_day)
1220
+ end
1221
+ end
1222
+
838
1223
  # Associates `members`, or principals, with a `role`.
839
1224
  class Binding
840
1225
  include Google::Apis::Core::Hashable
@@ -936,6 +1321,26 @@ module Google
936
1321
  end
937
1322
  end
938
1323
 
1324
+ # Policy ID that identified data placement in Blobstore as per go/blobstore-user-
1325
+ # guide#data-metadata-placement-and-failure-domains
1326
+ class BlobstoreLocation
1327
+ include Google::Apis::Core::Hashable
1328
+
1329
+ #
1330
+ # Corresponds to the JSON property `policyId`
1331
+ # @return [Array<String>]
1332
+ attr_accessor :policy_id
1333
+
1334
+ def initialize(**args)
1335
+ update!(**args)
1336
+ end
1337
+
1338
+ # Update properties of this object
1339
+ def update!(**args)
1340
+ @policy_id = args[:policy_id] if args.key?(:policy_id)
1341
+ end
1342
+ end
1343
+
939
1344
  # The request message for Operations.CancelOperation.
940
1345
  class CancelOperationRequest
941
1346
  include Google::Apis::Core::Hashable
@@ -949,6 +1354,50 @@ module Google
949
1354
  end
950
1355
  end
951
1356
 
1357
+ #
1358
+ class CloudAsset
1359
+ include Google::Apis::Core::Hashable
1360
+
1361
+ #
1362
+ # Corresponds to the JSON property `assetName`
1363
+ # @return [String]
1364
+ attr_accessor :asset_name
1365
+
1366
+ #
1367
+ # Corresponds to the JSON property `assetType`
1368
+ # @return [String]
1369
+ attr_accessor :asset_type
1370
+
1371
+ def initialize(**args)
1372
+ update!(**args)
1373
+ end
1374
+
1375
+ # Update properties of this object
1376
+ def update!(**args)
1377
+ @asset_name = args[:asset_name] if args.key?(:asset_name)
1378
+ @asset_type = args[:asset_type] if args.key?(:asset_type)
1379
+ end
1380
+ end
1381
+
1382
+ #
1383
+ class CloudAssetComposition
1384
+ include Google::Apis::Core::Hashable
1385
+
1386
+ #
1387
+ # Corresponds to the JSON property `childAsset`
1388
+ # @return [Array<Google::Apis::BackupdrV1::CloudAsset>]
1389
+ attr_accessor :child_asset
1390
+
1391
+ def initialize(**args)
1392
+ update!(**args)
1393
+ end
1394
+
1395
+ # Update properties of this object
1396
+ def update!(**args)
1397
+ @child_asset = args[:child_asset] if args.key?(:child_asset)
1398
+ end
1399
+ end
1400
+
952
1401
  # ComputeInstanceBackupProperties represents Compute Engine instance backup
953
1402
  # properties.
954
1403
  class ComputeInstanceBackupProperties
@@ -1105,16 +1554,241 @@ module Google
1105
1554
  end
1106
1555
  end
1107
1556
 
1108
- # A customer-supplied encryption key.
1109
- class CustomerEncryptionKey
1557
+ # ComputeInstanceRestoreProperties represents Compute Engine instance properties
1558
+ # to be overridden during restore.
1559
+ class ComputeInstanceRestoreProperties
1110
1560
  include Google::Apis::Core::Hashable
1111
1561
 
1112
- # Optional. The name of the encryption key that is stored in Google Cloud KMS.
1113
- # Corresponds to the JSON property `kmsKeyName`
1114
- # @return [String]
1115
- attr_accessor :kms_key_name
1562
+ # Specifies options for controlling advanced machine features.
1563
+ # Corresponds to the JSON property `advancedMachineFeatures`
1564
+ # @return [Google::Apis::BackupdrV1::AdvancedMachineFeatures]
1565
+ attr_accessor :advanced_machine_features
1116
1566
 
1117
- # Optional. The service account being used for the encryption request for the
1567
+ # Optional. Allows this instance to send and receive packets with non-matching
1568
+ # destination or source IPs.
1569
+ # Corresponds to the JSON property `canIpForward`
1570
+ # @return [Boolean]
1571
+ attr_accessor :can_ip_forward
1572
+ alias_method :can_ip_forward?, :can_ip_forward
1573
+
1574
+ # A set of Confidential Instance options.
1575
+ # Corresponds to the JSON property `confidentialInstanceConfig`
1576
+ # @return [Google::Apis::BackupdrV1::ConfidentialInstanceConfig]
1577
+ attr_accessor :confidential_instance_config
1578
+
1579
+ # Optional. Whether the resource should be protected against deletion.
1580
+ # Corresponds to the JSON property `deletionProtection`
1581
+ # @return [Boolean]
1582
+ attr_accessor :deletion_protection
1583
+ alias_method :deletion_protection?, :deletion_protection
1584
+
1585
+ # Optional. An optional description of this resource. Provide this property when
1586
+ # you create the resource.
1587
+ # Corresponds to the JSON property `description`
1588
+ # @return [String]
1589
+ attr_accessor :description
1590
+
1591
+ # Optional. Array of disks associated with this instance. Persistent disks must
1592
+ # be created before you can assign them.
1593
+ # Corresponds to the JSON property `disks`
1594
+ # @return [Array<Google::Apis::BackupdrV1::AttachedDisk>]
1595
+ attr_accessor :disks
1596
+
1597
+ # A set of Display Device options
1598
+ # Corresponds to the JSON property `displayDevice`
1599
+ # @return [Google::Apis::BackupdrV1::DisplayDevice]
1600
+ attr_accessor :display_device
1601
+
1602
+ # Optional. A list of the type and count of accelerator cards attached to the
1603
+ # instance.
1604
+ # Corresponds to the JSON property `guestAccelerators`
1605
+ # @return [Array<Google::Apis::BackupdrV1::AcceleratorConfig>]
1606
+ attr_accessor :guest_accelerators
1607
+
1608
+ # Optional. Specifies the hostname of the instance. The specified hostname must
1609
+ # be RFC1035 compliant. If hostname is not specified, the default hostname is [
1610
+ # INSTANCE_NAME].c.[PROJECT_ID].internal when using the global DNS, and [
1611
+ # INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal when using zonal DNS.
1612
+ # Corresponds to the JSON property `hostname`
1613
+ # @return [String]
1614
+ attr_accessor :hostname
1615
+
1616
+ # A customer-supplied encryption key.
1617
+ # Corresponds to the JSON property `instanceEncryptionKey`
1618
+ # @return [Google::Apis::BackupdrV1::CustomerEncryptionKey]
1619
+ attr_accessor :instance_encryption_key
1620
+
1621
+ # Optional. KeyRevocationActionType of the instance.
1622
+ # Corresponds to the JSON property `keyRevocationActionType`
1623
+ # @return [String]
1624
+ attr_accessor :key_revocation_action_type
1625
+
1626
+ # Optional. Labels to apply to this instance.
1627
+ # Corresponds to the JSON property `labels`
1628
+ # @return [Hash<String,String>]
1629
+ attr_accessor :labels
1630
+
1631
+ # Optional. Full or partial URL of the machine type resource to use for this
1632
+ # instance.
1633
+ # Corresponds to the JSON property `machineType`
1634
+ # @return [String]
1635
+ attr_accessor :machine_type
1636
+
1637
+ # A metadata key/value entry.
1638
+ # Corresponds to the JSON property `metadata`
1639
+ # @return [Google::Apis::BackupdrV1::Metadata]
1640
+ attr_accessor :metadata
1641
+
1642
+ # Optional. Minimum CPU platform to use for this instance.
1643
+ # Corresponds to the JSON property `minCpuPlatform`
1644
+ # @return [String]
1645
+ attr_accessor :min_cpu_platform
1646
+
1647
+ # Required. Name of the compute instance.
1648
+ # Corresponds to the JSON property `name`
1649
+ # @return [String]
1650
+ attr_accessor :name
1651
+
1652
+ # Optional. An array of network configurations for this instance. These specify
1653
+ # how interfaces are configured to interact with other network services, such as
1654
+ # connecting to the internet. Multiple interfaces are supported per instance.
1655
+ # Corresponds to the JSON property `networkInterfaces`
1656
+ # @return [Array<Google::Apis::BackupdrV1::NetworkInterface>]
1657
+ attr_accessor :network_interfaces
1658
+
1659
+ # Network performance configuration.
1660
+ # Corresponds to the JSON property `networkPerformanceConfig`
1661
+ # @return [Google::Apis::BackupdrV1::NetworkPerformanceConfig]
1662
+ attr_accessor :network_performance_config
1663
+
1664
+ # Additional instance params.
1665
+ # Corresponds to the JSON property `params`
1666
+ # @return [Google::Apis::BackupdrV1::InstanceParams]
1667
+ attr_accessor :params
1668
+
1669
+ # Optional. The private IPv6 google access type for the VM. If not specified,
1670
+ # use INHERIT_FROM_SUBNETWORK as default.
1671
+ # Corresponds to the JSON property `privateIpv6GoogleAccess`
1672
+ # @return [String]
1673
+ attr_accessor :private_ipv6_google_access
1674
+
1675
+ # Specifies the reservations that this instance can consume from.
1676
+ # Corresponds to the JSON property `reservationAffinity`
1677
+ # @return [Google::Apis::BackupdrV1::AllocationAffinity]
1678
+ attr_accessor :reservation_affinity
1679
+
1680
+ # Optional. Resource policies applied to this instance.
1681
+ # Corresponds to the JSON property `resourcePolicies`
1682
+ # @return [Array<String>]
1683
+ attr_accessor :resource_policies
1684
+
1685
+ # Sets the scheduling options for an Instance.
1686
+ # Corresponds to the JSON property `scheduling`
1687
+ # @return [Google::Apis::BackupdrV1::Scheduling]
1688
+ attr_accessor :scheduling
1689
+
1690
+ # Optional. A list of service accounts, with their specified scopes, authorized
1691
+ # for this instance. Only one service account per VM instance is supported.
1692
+ # Corresponds to the JSON property `serviceAccounts`
1693
+ # @return [Array<Google::Apis::BackupdrV1::ServiceAccount>]
1694
+ attr_accessor :service_accounts
1695
+
1696
+ # A set of instance tags.
1697
+ # Corresponds to the JSON property `tags`
1698
+ # @return [Google::Apis::BackupdrV1::Tags]
1699
+ attr_accessor :tags
1700
+
1701
+ def initialize(**args)
1702
+ update!(**args)
1703
+ end
1704
+
1705
+ # Update properties of this object
1706
+ def update!(**args)
1707
+ @advanced_machine_features = args[:advanced_machine_features] if args.key?(:advanced_machine_features)
1708
+ @can_ip_forward = args[:can_ip_forward] if args.key?(:can_ip_forward)
1709
+ @confidential_instance_config = args[:confidential_instance_config] if args.key?(:confidential_instance_config)
1710
+ @deletion_protection = args[:deletion_protection] if args.key?(:deletion_protection)
1711
+ @description = args[:description] if args.key?(:description)
1712
+ @disks = args[:disks] if args.key?(:disks)
1713
+ @display_device = args[:display_device] if args.key?(:display_device)
1714
+ @guest_accelerators = args[:guest_accelerators] if args.key?(:guest_accelerators)
1715
+ @hostname = args[:hostname] if args.key?(:hostname)
1716
+ @instance_encryption_key = args[:instance_encryption_key] if args.key?(:instance_encryption_key)
1717
+ @key_revocation_action_type = args[:key_revocation_action_type] if args.key?(:key_revocation_action_type)
1718
+ @labels = args[:labels] if args.key?(:labels)
1719
+ @machine_type = args[:machine_type] if args.key?(:machine_type)
1720
+ @metadata = args[:metadata] if args.key?(:metadata)
1721
+ @min_cpu_platform = args[:min_cpu_platform] if args.key?(:min_cpu_platform)
1722
+ @name = args[:name] if args.key?(:name)
1723
+ @network_interfaces = args[:network_interfaces] if args.key?(:network_interfaces)
1724
+ @network_performance_config = args[:network_performance_config] if args.key?(:network_performance_config)
1725
+ @params = args[:params] if args.key?(:params)
1726
+ @private_ipv6_google_access = args[:private_ipv6_google_access] if args.key?(:private_ipv6_google_access)
1727
+ @reservation_affinity = args[:reservation_affinity] if args.key?(:reservation_affinity)
1728
+ @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
1729
+ @scheduling = args[:scheduling] if args.key?(:scheduling)
1730
+ @service_accounts = args[:service_accounts] if args.key?(:service_accounts)
1731
+ @tags = args[:tags] if args.key?(:tags)
1732
+ end
1733
+ end
1734
+
1735
+ # ComputeInstanceTargetEnvironment represents Compute Engine target environment
1736
+ # to be used during restore.
1737
+ class ComputeInstanceTargetEnvironment
1738
+ include Google::Apis::Core::Hashable
1739
+
1740
+ # Required. Target project for the Compute Engine instance.
1741
+ # Corresponds to the JSON property `project`
1742
+ # @return [String]
1743
+ attr_accessor :project
1744
+
1745
+ # Required. The zone of the Compute Engine instance.
1746
+ # Corresponds to the JSON property `zone`
1747
+ # @return [String]
1748
+ attr_accessor :zone
1749
+
1750
+ def initialize(**args)
1751
+ update!(**args)
1752
+ end
1753
+
1754
+ # Update properties of this object
1755
+ def update!(**args)
1756
+ @project = args[:project] if args.key?(:project)
1757
+ @zone = args[:zone] if args.key?(:zone)
1758
+ end
1759
+ end
1760
+
1761
+ # A set of Confidential Instance options.
1762
+ class ConfidentialInstanceConfig
1763
+ include Google::Apis::Core::Hashable
1764
+
1765
+ # Optional. Defines whether the instance should have confidential compute
1766
+ # enabled.
1767
+ # Corresponds to the JSON property `enableConfidentialCompute`
1768
+ # @return [Boolean]
1769
+ attr_accessor :enable_confidential_compute
1770
+ alias_method :enable_confidential_compute?, :enable_confidential_compute
1771
+
1772
+ def initialize(**args)
1773
+ update!(**args)
1774
+ end
1775
+
1776
+ # Update properties of this object
1777
+ def update!(**args)
1778
+ @enable_confidential_compute = args[:enable_confidential_compute] if args.key?(:enable_confidential_compute)
1779
+ end
1780
+ end
1781
+
1782
+ # A customer-supplied encryption key.
1783
+ class CustomerEncryptionKey
1784
+ include Google::Apis::Core::Hashable
1785
+
1786
+ # Optional. The name of the encryption key that is stored in Google Cloud KMS.
1787
+ # Corresponds to the JSON property `kmsKeyName`
1788
+ # @return [String]
1789
+ attr_accessor :kms_key_name
1790
+
1791
+ # Optional. The service account being used for the encryption request for the
1118
1792
  # given KMS key. If absent, the Compute Engine default service account is used.
1119
1793
  # Corresponds to the JSON property `kmsKeyServiceAccount`
1120
1794
  # @return [String]
@@ -1160,7 +1834,7 @@ module Google
1160
1834
  # @return [Fixnum]
1161
1835
  attr_accessor :backup_count
1162
1836
 
1163
- # The backup configuration state.
1837
+ # Output only. The backup configuration state.
1164
1838
  # Corresponds to the JSON property `configState`
1165
1839
  # @return [String]
1166
1840
  attr_accessor :config_state
@@ -1195,7 +1869,7 @@ module Google
1195
1869
  # @return [Hash<String,String>]
1196
1870
  attr_accessor :labels
1197
1871
 
1198
- # Output only. The resource name.
1872
+ # Output only. Identifier. The resource name.
1199
1873
  # Corresponds to the JSON property `name`
1200
1874
  # @return [String]
1201
1875
  attr_accessor :name
@@ -1333,6 +2007,45 @@ module Google
1333
2007
  end
1334
2008
  end
1335
2009
 
2010
+ #
2011
+ class DirectLocationAssignment
2012
+ include Google::Apis::Core::Hashable
2013
+
2014
+ #
2015
+ # Corresponds to the JSON property `location`
2016
+ # @return [Array<Google::Apis::BackupdrV1::LocationAssignment>]
2017
+ attr_accessor :location
2018
+
2019
+ def initialize(**args)
2020
+ update!(**args)
2021
+ end
2022
+
2023
+ # Update properties of this object
2024
+ def update!(**args)
2025
+ @location = args[:location] if args.key?(:location)
2026
+ end
2027
+ end
2028
+
2029
+ # A set of Display Device options
2030
+ class DisplayDevice
2031
+ include Google::Apis::Core::Hashable
2032
+
2033
+ # Optional. Enables display for the Compute Engine VM
2034
+ # Corresponds to the JSON property `enableDisplay`
2035
+ # @return [Boolean]
2036
+ attr_accessor :enable_display
2037
+ alias_method :enable_display?, :enable_display
2038
+
2039
+ def initialize(**args)
2040
+ update!(**args)
2041
+ end
2042
+
2043
+ # Update properties of this object
2044
+ def update!(**args)
2045
+ @enable_display = args[:enable_display] if args.key?(:enable_display)
2046
+ end
2047
+ end
2048
+
1336
2049
  # A generic empty message that you can re-use to avoid defining duplicated empty
1337
2050
  # messages in your APIs. A typical example is to use it as the request or the
1338
2051
  # response type of an API method. For instance: service Foo ` rpc Bar(google.
@@ -1431,6 +2144,26 @@ module Google
1431
2144
  end
1432
2145
  end
1433
2146
 
2147
+ # Defines parameters that should only be used for specific asset types.
2148
+ class ExtraParameter
2149
+ include Google::Apis::Core::Hashable
2150
+
2151
+ # To be used for specifying the intended distribution of regional compute.
2152
+ # googleapis.com/InstanceGroupManager instances
2153
+ # Corresponds to the JSON property `regionalMigDistributionPolicy`
2154
+ # @return [Google::Apis::BackupdrV1::RegionalMigDistributionPolicy]
2155
+ attr_accessor :regional_mig_distribution_policy
2156
+
2157
+ def initialize(**args)
2158
+ update!(**args)
2159
+ end
2160
+
2161
+ # Update properties of this object
2162
+ def update!(**args)
2163
+ @regional_mig_distribution_policy = args[:regional_mig_distribution_policy] if args.key?(:regional_mig_distribution_policy)
2164
+ end
2165
+ end
2166
+
1434
2167
  # Request message for FetchAccessToken.
1435
2168
  class FetchAccessTokenRequest
1436
2169
  include Google::Apis::Core::Hashable
@@ -1771,6 +2504,162 @@ module Google
1771
2504
  end
1772
2505
  end
1773
2506
 
2507
+ # Additional instance params.
2508
+ class InstanceParams
2509
+ include Google::Apis::Core::Hashable
2510
+
2511
+ # Optional. Resource manager tags to be bound to the instance.
2512
+ # Corresponds to the JSON property `resourceManagerTags`
2513
+ # @return [Hash<String,String>]
2514
+ attr_accessor :resource_manager_tags
2515
+
2516
+ def initialize(**args)
2517
+ update!(**args)
2518
+ end
2519
+
2520
+ # Update properties of this object
2521
+ def update!(**args)
2522
+ @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
2523
+ end
2524
+ end
2525
+
2526
+ #
2527
+ class IsolationExpectations
2528
+ include Google::Apis::Core::Hashable
2529
+
2530
+ # Explicit overrides for ZI and ZS requirements to be used for resources that
2531
+ # should be excluded from ZI/ZS verification logic.
2532
+ # Corresponds to the JSON property `requirementOverride`
2533
+ # @return [Google::Apis::BackupdrV1::RequirementOverride]
2534
+ attr_accessor :requirement_override
2535
+
2536
+ #
2537
+ # Corresponds to the JSON property `ziOrgPolicy`
2538
+ # @return [String]
2539
+ attr_accessor :zi_org_policy
2540
+
2541
+ #
2542
+ # Corresponds to the JSON property `ziRegionPolicy`
2543
+ # @return [String]
2544
+ attr_accessor :zi_region_policy
2545
+
2546
+ #
2547
+ # Corresponds to the JSON property `ziRegionState`
2548
+ # @return [String]
2549
+ attr_accessor :zi_region_state
2550
+
2551
+ # Deprecated: use zi_org_policy, zi_region_policy and zi_region_state instead
2552
+ # for setting ZI expectations as per go/zicy-publish-physical-location.
2553
+ # Corresponds to the JSON property `zoneIsolation`
2554
+ # @return [String]
2555
+ attr_accessor :zone_isolation
2556
+
2557
+ # Deprecated: use zs_org_policy, and zs_region_stateinstead for setting Zs
2558
+ # expectations as per go/zicy-publish-physical-location.
2559
+ # Corresponds to the JSON property `zoneSeparation`
2560
+ # @return [String]
2561
+ attr_accessor :zone_separation
2562
+
2563
+ #
2564
+ # Corresponds to the JSON property `zsOrgPolicy`
2565
+ # @return [String]
2566
+ attr_accessor :zs_org_policy
2567
+
2568
+ #
2569
+ # Corresponds to the JSON property `zsRegionState`
2570
+ # @return [String]
2571
+ attr_accessor :zs_region_state
2572
+
2573
+ def initialize(**args)
2574
+ update!(**args)
2575
+ end
2576
+
2577
+ # Update properties of this object
2578
+ def update!(**args)
2579
+ @requirement_override = args[:requirement_override] if args.key?(:requirement_override)
2580
+ @zi_org_policy = args[:zi_org_policy] if args.key?(:zi_org_policy)
2581
+ @zi_region_policy = args[:zi_region_policy] if args.key?(:zi_region_policy)
2582
+ @zi_region_state = args[:zi_region_state] if args.key?(:zi_region_state)
2583
+ @zone_isolation = args[:zone_isolation] if args.key?(:zone_isolation)
2584
+ @zone_separation = args[:zone_separation] if args.key?(:zone_separation)
2585
+ @zs_org_policy = args[:zs_org_policy] if args.key?(:zs_org_policy)
2586
+ @zs_region_state = args[:zs_region_state] if args.key?(:zs_region_state)
2587
+ end
2588
+ end
2589
+
2590
+ # Response message for List BackupPlanAssociation
2591
+ class ListBackupPlanAssociationsResponse
2592
+ include Google::Apis::Core::Hashable
2593
+
2594
+ # The list of Backup Plan Associations in the project for the specified location.
2595
+ # If the ``location`` value in the request is "-", the response contains a list
2596
+ # of instances from all locations. In case any location is unreachable, the
2597
+ # response will only return backup plan associations in reachable locations and
2598
+ # the 'unreachable' field will be populated with a list of unreachable locations.
2599
+ # Corresponds to the JSON property `backupPlanAssociations`
2600
+ # @return [Array<Google::Apis::BackupdrV1::BackupPlanAssociation>]
2601
+ attr_accessor :backup_plan_associations
2602
+
2603
+ # A token identifying a page of results the server should return.
2604
+ # Corresponds to the JSON property `nextPageToken`
2605
+ # @return [String]
2606
+ attr_accessor :next_page_token
2607
+
2608
+ # Locations that could not be reached.
2609
+ # Corresponds to the JSON property `unreachable`
2610
+ # @return [Array<String>]
2611
+ attr_accessor :unreachable
2612
+
2613
+ def initialize(**args)
2614
+ update!(**args)
2615
+ end
2616
+
2617
+ # Update properties of this object
2618
+ def update!(**args)
2619
+ @backup_plan_associations = args[:backup_plan_associations] if args.key?(:backup_plan_associations)
2620
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
2621
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
2622
+ end
2623
+ end
2624
+
2625
+ # The response message for getting a list of `BackupPlan`.
2626
+ class ListBackupPlansResponse
2627
+ include Google::Apis::Core::Hashable
2628
+
2629
+ # The list of `BackupPlans` in the project for the specified location. If the ``
2630
+ # location`` value in the request is "-", the response contains a list of
2631
+ # resources from all locations. In case any location is unreachable, the
2632
+ # response will only return backup plans in reachable locations and the '
2633
+ # unreachable' field will be populated with a list of unreachable locations.
2634
+ # BackupPlan
2635
+ # Corresponds to the JSON property `backupPlans`
2636
+ # @return [Array<Google::Apis::BackupdrV1::BackupPlan>]
2637
+ attr_accessor :backup_plans
2638
+
2639
+ # A token which may be sent as page_token in a subsequent `ListBackupPlans` call
2640
+ # to retrieve the next page of results. If this field is omitted or empty, then
2641
+ # there are no more results to return.
2642
+ # Corresponds to the JSON property `nextPageToken`
2643
+ # @return [String]
2644
+ attr_accessor :next_page_token
2645
+
2646
+ # Locations that could not be reached.
2647
+ # Corresponds to the JSON property `unreachable`
2648
+ # @return [Array<String>]
2649
+ attr_accessor :unreachable
2650
+
2651
+ def initialize(**args)
2652
+ update!(**args)
2653
+ end
2654
+
2655
+ # Update properties of this object
2656
+ def update!(**args)
2657
+ @backup_plans = args[:backup_plans] if args.key?(:backup_plans)
2658
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
2659
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
2660
+ end
2661
+ end
2662
+
1774
2663
  # Response message for listing BackupVaults.
1775
2664
  class ListBackupVaultsResponse
1776
2665
  include Google::Apis::Core::Hashable
@@ -1972,28 +2861,103 @@ module Google
1972
2861
  # @return [String]
1973
2862
  attr_accessor :display_name
1974
2863
 
1975
- # Cross-service attributes for the location. For example `"cloud.googleapis.com/
1976
- # region": "us-east1"`
1977
- # Corresponds to the JSON property `labels`
1978
- # @return [Hash<String,String>]
1979
- attr_accessor :labels
2864
+ # Cross-service attributes for the location. For example `"cloud.googleapis.com/
2865
+ # region": "us-east1"`
2866
+ # Corresponds to the JSON property `labels`
2867
+ # @return [Hash<String,String>]
2868
+ attr_accessor :labels
2869
+
2870
+ # The canonical id for this location. For example: `"us-east1"`.
2871
+ # Corresponds to the JSON property `locationId`
2872
+ # @return [String]
2873
+ attr_accessor :location_id
2874
+
2875
+ # Service-specific metadata. For example the available capacity at the given
2876
+ # location.
2877
+ # Corresponds to the JSON property `metadata`
2878
+ # @return [Hash<String,Object>]
2879
+ attr_accessor :metadata
2880
+
2881
+ # Resource name for the location, which may vary between implementations. For
2882
+ # example: `"projects/example-project/locations/us-east1"`
2883
+ # Corresponds to the JSON property `name`
2884
+ # @return [String]
2885
+ attr_accessor :name
2886
+
2887
+ def initialize(**args)
2888
+ update!(**args)
2889
+ end
2890
+
2891
+ # Update properties of this object
2892
+ def update!(**args)
2893
+ @display_name = args[:display_name] if args.key?(:display_name)
2894
+ @labels = args[:labels] if args.key?(:labels)
2895
+ @location_id = args[:location_id] if args.key?(:location_id)
2896
+ @metadata = args[:metadata] if args.key?(:metadata)
2897
+ @name = args[:name] if args.key?(:name)
2898
+ end
2899
+ end
2900
+
2901
+ #
2902
+ class LocationAssignment
2903
+ include Google::Apis::Core::Hashable
2904
+
2905
+ #
2906
+ # Corresponds to the JSON property `location`
2907
+ # @return [String]
2908
+ attr_accessor :location
2909
+
2910
+ #
2911
+ # Corresponds to the JSON property `locationType`
2912
+ # @return [String]
2913
+ attr_accessor :location_type
2914
+
2915
+ def initialize(**args)
2916
+ update!(**args)
2917
+ end
2918
+
2919
+ # Update properties of this object
2920
+ def update!(**args)
2921
+ @location = args[:location] if args.key?(:location)
2922
+ @location_type = args[:location_type] if args.key?(:location_type)
2923
+ end
2924
+ end
2925
+
2926
+ #
2927
+ class LocationData
2928
+ include Google::Apis::Core::Hashable
2929
+
2930
+ # Policy ID that identified data placement in Blobstore as per go/blobstore-user-
2931
+ # guide#data-metadata-placement-and-failure-domains
2932
+ # Corresponds to the JSON property `blobstoreLocation`
2933
+ # @return [Google::Apis::BackupdrV1::BlobstoreLocation]
2934
+ attr_accessor :blobstore_location
2935
+
2936
+ #
2937
+ # Corresponds to the JSON property `childAssetLocation`
2938
+ # @return [Google::Apis::BackupdrV1::CloudAssetComposition]
2939
+ attr_accessor :child_asset_location
2940
+
2941
+ #
2942
+ # Corresponds to the JSON property `directLocation`
2943
+ # @return [Google::Apis::BackupdrV1::DirectLocationAssignment]
2944
+ attr_accessor :direct_location
1980
2945
 
1981
- # The canonical id for this location. For example: `"us-east1"`.
1982
- # Corresponds to the JSON property `locationId`
1983
- # @return [String]
1984
- attr_accessor :location_id
2946
+ #
2947
+ # Corresponds to the JSON property `gcpProjectProxy`
2948
+ # @return [Google::Apis::BackupdrV1::TenantProjectProxy]
2949
+ attr_accessor :gcp_project_proxy
1985
2950
 
1986
- # Service-specific metadata. For example the available capacity at the given
1987
- # location.
1988
- # Corresponds to the JSON property `metadata`
1989
- # @return [Hash<String,Object>]
1990
- attr_accessor :metadata
2951
+ # Message describing that the location of the customer resource is tied to
2952
+ # placer allocations
2953
+ # Corresponds to the JSON property `placerLocation`
2954
+ # @return [Google::Apis::BackupdrV1::PlacerLocation]
2955
+ attr_accessor :placer_location
1991
2956
 
1992
- # Resource name for the location, which may vary between implementations. For
1993
- # example: `"projects/example-project/locations/us-east1"`
1994
- # Corresponds to the JSON property `name`
1995
- # @return [String]
1996
- attr_accessor :name
2957
+ #
2958
+ # Corresponds to the JSON property `spannerLocation`
2959
+ # @return [Google::Apis::BackupdrV1::SpannerLocation]
2960
+ attr_accessor :spanner_location
1997
2961
 
1998
2962
  def initialize(**args)
1999
2963
  update!(**args)
@@ -2001,11 +2965,12 @@ module Google
2001
2965
 
2002
2966
  # Update properties of this object
2003
2967
  def update!(**args)
2004
- @display_name = args[:display_name] if args.key?(:display_name)
2005
- @labels = args[:labels] if args.key?(:labels)
2006
- @location_id = args[:location_id] if args.key?(:location_id)
2007
- @metadata = args[:metadata] if args.key?(:metadata)
2008
- @name = args[:name] if args.key?(:name)
2968
+ @blobstore_location = args[:blobstore_location] if args.key?(:blobstore_location)
2969
+ @child_asset_location = args[:child_asset_location] if args.key?(:child_asset_location)
2970
+ @direct_location = args[:direct_location] if args.key?(:direct_location)
2971
+ @gcp_project_proxy = args[:gcp_project_proxy] if args.key?(:gcp_project_proxy)
2972
+ @placer_location = args[:placer_location] if args.key?(:placer_location)
2973
+ @spanner_location = args[:spanner_location] if args.key?(:spanner_location)
2009
2974
  end
2010
2975
  end
2011
2976
 
@@ -2317,6 +3282,25 @@ module Google
2317
3282
  end
2318
3283
  end
2319
3284
 
3285
+ # Network performance configuration.
3286
+ class NetworkPerformanceConfig
3287
+ include Google::Apis::Core::Hashable
3288
+
3289
+ # Optional. The tier of the total egress bandwidth.
3290
+ # Corresponds to the JSON property `totalEgressBandwidthTier`
3291
+ # @return [String]
3292
+ attr_accessor :total_egress_bandwidth_tier
3293
+
3294
+ def initialize(**args)
3295
+ update!(**args)
3296
+ end
3297
+
3298
+ # Update properties of this object
3299
+ def update!(**args)
3300
+ @total_egress_bandwidth_tier = args[:total_egress_bandwidth_tier] if args.key?(:total_egress_bandwidth_tier)
3301
+ end
3302
+ end
3303
+
2320
3304
  # Node Affinity: the configuration of desired nodes onto which this Instance
2321
3305
  # could be scheduled.
2322
3306
  class NodeAffinity
@@ -2477,6 +3461,27 @@ module Google
2477
3461
  end
2478
3462
  end
2479
3463
 
3464
+ # Message describing that the location of the customer resource is tied to
3465
+ # placer allocations
3466
+ class PlacerLocation
3467
+ include Google::Apis::Core::Hashable
3468
+
3469
+ # Directory with a config related to it in placer (e.g. "/placer/prod/home/my-
3470
+ # root/my-dir")
3471
+ # Corresponds to the JSON property `placerConfig`
3472
+ # @return [String]
3473
+ attr_accessor :placer_config
3474
+
3475
+ def initialize(**args)
3476
+ update!(**args)
3477
+ end
3478
+
3479
+ # Update properties of this object
3480
+ def update!(**args)
3481
+ @placer_config = args[:placer_config] if args.key?(:placer_config)
3482
+ end
3483
+ end
3484
+
2480
3485
  # An Identity and Access Management (IAM) policy, which specifies access
2481
3486
  # controls for Google Cloud resources. A `Policy` is a collection of `bindings`.
2482
3487
  # A `binding` binds one or more `members`, or principals, to a single `role`.
@@ -2572,6 +3577,33 @@ module Google
2572
3577
  end
2573
3578
  end
2574
3579
 
3580
+ # To be used for specifying the intended distribution of regional compute.
3581
+ # googleapis.com/InstanceGroupManager instances
3582
+ class RegionalMigDistributionPolicy
3583
+ include Google::Apis::Core::Hashable
3584
+
3585
+ # The shape in which the group converges around distribution of resources.
3586
+ # Instance of proto2 enum
3587
+ # Corresponds to the JSON property `targetShape`
3588
+ # @return [Fixnum]
3589
+ attr_accessor :target_shape
3590
+
3591
+ # Cloud zones used by regional MIG to create instances.
3592
+ # Corresponds to the JSON property `zones`
3593
+ # @return [Array<Google::Apis::BackupdrV1::ZoneConfiguration>]
3594
+ attr_accessor :zones
3595
+
3596
+ def initialize(**args)
3597
+ update!(**args)
3598
+ end
3599
+
3600
+ # Update properties of this object
3601
+ def update!(**args)
3602
+ @target_shape = args[:target_shape] if args.key?(:target_shape)
3603
+ @zones = args[:zones] if args.key?(:zones)
3604
+ end
3605
+ end
3606
+
2575
3607
  # Message for deleting a DataSource.
2576
3608
  class RemoveDataSourceRequest
2577
3609
  include Google::Apis::Core::Hashable
@@ -2600,6 +3632,126 @@ module Google
2600
3632
  end
2601
3633
  end
2602
3634
 
3635
+ #
3636
+ class RequirementOverride
3637
+ include Google::Apis::Core::Hashable
3638
+
3639
+ #
3640
+ # Corresponds to the JSON property `ziOverride`
3641
+ # @return [String]
3642
+ attr_accessor :zi_override
3643
+
3644
+ #
3645
+ # Corresponds to the JSON property `zsOverride`
3646
+ # @return [String]
3647
+ attr_accessor :zs_override
3648
+
3649
+ def initialize(**args)
3650
+ update!(**args)
3651
+ end
3652
+
3653
+ # Update properties of this object
3654
+ def update!(**args)
3655
+ @zi_override = args[:zi_override] if args.key?(:zi_override)
3656
+ @zs_override = args[:zs_override] if args.key?(:zs_override)
3657
+ end
3658
+ end
3659
+
3660
+ # Request message for restoring from a Backup.
3661
+ class RestoreBackupRequest
3662
+ include Google::Apis::Core::Hashable
3663
+
3664
+ # ComputeInstanceRestoreProperties represents Compute Engine instance properties
3665
+ # to be overridden during restore.
3666
+ # Corresponds to the JSON property `computeInstanceRestoreProperties`
3667
+ # @return [Google::Apis::BackupdrV1::ComputeInstanceRestoreProperties]
3668
+ attr_accessor :compute_instance_restore_properties
3669
+
3670
+ # ComputeInstanceTargetEnvironment represents Compute Engine target environment
3671
+ # to be used during restore.
3672
+ # Corresponds to the JSON property `computeInstanceTargetEnvironment`
3673
+ # @return [Google::Apis::BackupdrV1::ComputeInstanceTargetEnvironment]
3674
+ attr_accessor :compute_instance_target_environment
3675
+
3676
+ # Optional. An optional request ID to identify requests. Specify a unique
3677
+ # request ID so that if you must retry your request, the server will know to
3678
+ # ignore the request if it has already been completed. The server will guarantee
3679
+ # that for at least 60 minutes after the first request. For example, consider a
3680
+ # situation where you make an initial request and the request times out. If you
3681
+ # make the request again with the same request ID, the server can check if
3682
+ # original operation with the same request ID was received, and if so, will
3683
+ # ignore the second request. This prevents clients from accidentally creating
3684
+ # duplicate commitments. The request ID must be a valid UUID with the exception
3685
+ # that zero UUID is not supported (00000000-0000-0000-0000-000000000000).
3686
+ # Corresponds to the JSON property `requestId`
3687
+ # @return [String]
3688
+ attr_accessor :request_id
3689
+
3690
+ def initialize(**args)
3691
+ update!(**args)
3692
+ end
3693
+
3694
+ # Update properties of this object
3695
+ def update!(**args)
3696
+ @compute_instance_restore_properties = args[:compute_instance_restore_properties] if args.key?(:compute_instance_restore_properties)
3697
+ @compute_instance_target_environment = args[:compute_instance_target_environment] if args.key?(:compute_instance_target_environment)
3698
+ @request_id = args[:request_id] if args.key?(:request_id)
3699
+ end
3700
+ end
3701
+
3702
+ # Message for rules config info.
3703
+ class RuleConfigInfo
3704
+ include Google::Apis::Core::Hashable
3705
+
3706
+ # Output only. TODO b/341576760: Remove deprecated BV and Datasource field form
3707
+ # BP and BPA once UI removed all dependencies on them Output Only. Resource name
3708
+ # of data source which will be used as storage location for backups taken by
3709
+ # specified rule. Format : projects/`project`/locations/`location`/backupVaults/`
3710
+ # backupvault`/dataSources/`datasource`
3711
+ # Corresponds to the JSON property `dataSource`
3712
+ # @return [String]
3713
+ attr_accessor :data_source
3714
+
3715
+ # The `Status` type defines a logical error model that is suitable for different
3716
+ # programming environments, including REST APIs and RPC APIs. It is used by [
3717
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
3718
+ # data: error code, error message, and error details. You can find out more
3719
+ # about this error model and how to work with it in the [API Design Guide](https:
3720
+ # //cloud.google.com/apis/design/errors).
3721
+ # Corresponds to the JSON property `lastBackupError`
3722
+ # @return [Google::Apis::BackupdrV1::Status]
3723
+ attr_accessor :last_backup_error
3724
+
3725
+ # Output only. The last backup state for rule.
3726
+ # Corresponds to the JSON property `lastBackupState`
3727
+ # @return [String]
3728
+ attr_accessor :last_backup_state
3729
+
3730
+ # Output only. The point in time when the last successful backup was captured
3731
+ # from the source.
3732
+ # Corresponds to the JSON property `lastSuccessfulBackupConsistencyTime`
3733
+ # @return [String]
3734
+ attr_accessor :last_successful_backup_consistency_time
3735
+
3736
+ # Output only. Output Only. Backup Rule id fetched from backup plan.
3737
+ # Corresponds to the JSON property `ruleId`
3738
+ # @return [String]
3739
+ attr_accessor :rule_id
3740
+
3741
+ def initialize(**args)
3742
+ update!(**args)
3743
+ end
3744
+
3745
+ # Update properties of this object
3746
+ def update!(**args)
3747
+ @data_source = args[:data_source] if args.key?(:data_source)
3748
+ @last_backup_error = args[:last_backup_error] if args.key?(:last_backup_error)
3749
+ @last_backup_state = args[:last_backup_state] if args.key?(:last_backup_state)
3750
+ @last_successful_backup_consistency_time = args[:last_successful_backup_consistency_time] if args.key?(:last_successful_backup_consistency_time)
3751
+ @rule_id = args[:rule_id] if args.key?(:rule_id)
3752
+ end
3753
+ end
3754
+
2603
3755
  # Sets the scheduling options for an Instance.
2604
3756
  class Scheduling
2605
3757
  include Google::Apis::Core::Hashable
@@ -2800,7 +3952,7 @@ module Google
2800
3952
  class SetInternalStatusRequest
2801
3953
  include Google::Apis::Core::Hashable
2802
3954
 
2803
- # Required. The new BackupConfigState to set for the DataSource.
3955
+ # Required. Output only. The new BackupConfigState to set for the DataSource.
2804
3956
  # Corresponds to the JSON property `backupConfigState`
2805
3957
  # @return [String]
2806
3958
  attr_accessor :backup_config_state
@@ -2837,6 +3989,115 @@ module Google
2837
3989
  end
2838
3990
  end
2839
3991
 
3992
+ #
3993
+ class SpannerLocation
3994
+ include Google::Apis::Core::Hashable
3995
+
3996
+ # Set of backups used by the resource with name in the same format as what is
3997
+ # available at http://table/spanner_automon.backup_metadata
3998
+ # Corresponds to the JSON property `backupName`
3999
+ # @return [Array<String>]
4000
+ attr_accessor :backup_name
4001
+
4002
+ # Set of databases used by the resource in format /span//
4003
+ # Corresponds to the JSON property `dbName`
4004
+ # @return [Array<String>]
4005
+ attr_accessor :db_name
4006
+
4007
+ def initialize(**args)
4008
+ update!(**args)
4009
+ end
4010
+
4011
+ # Update properties of this object
4012
+ def update!(**args)
4013
+ @backup_name = args[:backup_name] if args.key?(:backup_name)
4014
+ @db_name = args[:db_name] if args.key?(:db_name)
4015
+ end
4016
+ end
4017
+
4018
+ # `StandardSchedule` defines a schedule that run within the confines of a
4019
+ # defined window of days. We can define recurrence type for schedule as HOURLY,
4020
+ # DAILY, WEEKLY, MONTHLY or YEARLY.
4021
+ class StandardSchedule
4022
+ include Google::Apis::Core::Hashable
4023
+
4024
+ # `BackupWindow` defines a window of the day during which backup jobs will run.
4025
+ # Corresponds to the JSON property `backupWindow`
4026
+ # @return [Google::Apis::BackupdrV1::BackupWindow]
4027
+ attr_accessor :backup_window
4028
+
4029
+ # Optional. Specifies days of months like 1, 5, or 14 on which jobs will run.
4030
+ # Values for `days_of_month` are only applicable for `recurrence_type`, `MONTHLY`
4031
+ # and `YEARLY`. A validation error will occur if other values are supplied.
4032
+ # Corresponds to the JSON property `daysOfMonth`
4033
+ # @return [Array<Fixnum>]
4034
+ attr_accessor :days_of_month
4035
+
4036
+ # Optional. Specifies days of week like, MONDAY or TUESDAY, on which jobs will
4037
+ # run. This is required for `recurrence_type`, `WEEKLY` and is not applicable
4038
+ # otherwise. A validation error will occur if a value is supplied and `
4039
+ # recurrence_type` is not `WEEKLY`.
4040
+ # Corresponds to the JSON property `daysOfWeek`
4041
+ # @return [Array<String>]
4042
+ attr_accessor :days_of_week
4043
+
4044
+ # Optional. Specifies frequency for hourly backups. A hourly frequency of 2
4045
+ # means jobs will run every 2 hours from start time till end time defined. This
4046
+ # is required for `recurrence_type`, `HOURLY` and is not applicable otherwise. A
4047
+ # validation error will occur if a value is supplied and `recurrence_type` is
4048
+ # not `HOURLY`. Value of hourly frequency should be between 6 and 23. Reason for
4049
+ # limit : We found that there is bandwidth limitation of 3GB/S for GMI while
4050
+ # taking a backup and 5GB/S while doing a restore. Given the amount of parallel
4051
+ # backups and restore we are targeting, this will potentially take the backup
4052
+ # time to mins and hours (in worst case scenario).
4053
+ # Corresponds to the JSON property `hourlyFrequency`
4054
+ # @return [Fixnum]
4055
+ attr_accessor :hourly_frequency
4056
+
4057
+ # Optional. Specifies the months of year, like `FEBRUARY` and/or `MAY`, on which
4058
+ # jobs will run. This field is only applicable when `recurrence_type` is `YEARLY`
4059
+ # . A validation error will occur if other values are supplied.
4060
+ # Corresponds to the JSON property `months`
4061
+ # @return [Array<String>]
4062
+ attr_accessor :months
4063
+
4064
+ # Required. Specifies the `RecurrenceType` for the schedule.
4065
+ # Corresponds to the JSON property `recurrenceType`
4066
+ # @return [String]
4067
+ attr_accessor :recurrence_type
4068
+
4069
+ # Required. The time zone to be used when interpreting the schedule. The value
4070
+ # of this field must be a time zone name from the IANA tz database. See https://
4071
+ # en.wikipedia.org/wiki/List_of_tz_database_time_zones for the list of valid
4072
+ # timezone names. For e.g., Europe/Paris.
4073
+ # Corresponds to the JSON property `timeZone`
4074
+ # @return [String]
4075
+ attr_accessor :time_zone
4076
+
4077
+ # `WeekDayOfMonth` defines the week day of the month on which the backups will
4078
+ # run. The message combines a `WeekOfMonth` and `DayOfWeek` to produce values
4079
+ # like `FIRST`/`MONDAY` or `LAST`/`FRIDAY`.
4080
+ # Corresponds to the JSON property `weekDayOfMonth`
4081
+ # @return [Google::Apis::BackupdrV1::WeekDayOfMonth]
4082
+ attr_accessor :week_day_of_month
4083
+
4084
+ def initialize(**args)
4085
+ update!(**args)
4086
+ end
4087
+
4088
+ # Update properties of this object
4089
+ def update!(**args)
4090
+ @backup_window = args[:backup_window] if args.key?(:backup_window)
4091
+ @days_of_month = args[:days_of_month] if args.key?(:days_of_month)
4092
+ @days_of_week = args[:days_of_week] if args.key?(:days_of_week)
4093
+ @hourly_frequency = args[:hourly_frequency] if args.key?(:hourly_frequency)
4094
+ @months = args[:months] if args.key?(:months)
4095
+ @recurrence_type = args[:recurrence_type] if args.key?(:recurrence_type)
4096
+ @time_zone = args[:time_zone] if args.key?(:time_zone)
4097
+ @week_day_of_month = args[:week_day_of_month] if args.key?(:week_day_of_month)
4098
+ end
4099
+ end
4100
+
2840
4101
  # The `Status` type defines a logical error model that is suitable for different
2841
4102
  # programming environments, including REST APIs and RPC APIs. It is used by [
2842
4103
  # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
@@ -2896,6 +4157,25 @@ module Google
2896
4157
  end
2897
4158
  end
2898
4159
 
4160
+ #
4161
+ class TenantProjectProxy
4162
+ include Google::Apis::Core::Hashable
4163
+
4164
+ #
4165
+ # Corresponds to the JSON property `projectNumbers`
4166
+ # @return [Array<String>]
4167
+ attr_accessor :project_numbers
4168
+
4169
+ def initialize(**args)
4170
+ update!(**args)
4171
+ end
4172
+
4173
+ # Update properties of this object
4174
+ def update!(**args)
4175
+ @project_numbers = args[:project_numbers] if args.key?(:project_numbers)
4176
+ end
4177
+ end
4178
+
2899
4179
  # Request message for `TestIamPermissions` method.
2900
4180
  class TestIamPermissionsRequest
2901
4181
  include Google::Apis::Core::Hashable
@@ -2936,6 +4216,67 @@ module Google
2936
4216
  end
2937
4217
  end
2938
4218
 
4219
+ # Request message for triggering a backup.
4220
+ class TriggerBackupRequest
4221
+ include Google::Apis::Core::Hashable
4222
+
4223
+ # Optional. An optional request ID to identify requests. Specify a unique
4224
+ # request ID so that if you must retry your request, the server will know to
4225
+ # ignore the request if it has already been completed. The server will guarantee
4226
+ # that for at least 60 minutes after the first request. For example, consider a
4227
+ # situation where you make an initial request and the request times out. If you
4228
+ # make the request again with the same request ID, the server can check if
4229
+ # original operation with the same request ID was received, and if so, will
4230
+ # ignore the second request. This prevents clients from accidentally creating
4231
+ # duplicate commitments. The request ID must be a valid UUID with the exception
4232
+ # that zero UUID is not supported (00000000-0000-0000-0000-000000000000).
4233
+ # Corresponds to the JSON property `requestId`
4234
+ # @return [String]
4235
+ attr_accessor :request_id
4236
+
4237
+ # Required. backup rule_id for which a backup needs to be triggered.
4238
+ # Corresponds to the JSON property `ruleId`
4239
+ # @return [String]
4240
+ attr_accessor :rule_id
4241
+
4242
+ def initialize(**args)
4243
+ update!(**args)
4244
+ end
4245
+
4246
+ # Update properties of this object
4247
+ def update!(**args)
4248
+ @request_id = args[:request_id] if args.key?(:request_id)
4249
+ @rule_id = args[:rule_id] if args.key?(:rule_id)
4250
+ end
4251
+ end
4252
+
4253
+ # `WeekDayOfMonth` defines the week day of the month on which the backups will
4254
+ # run. The message combines a `WeekOfMonth` and `DayOfWeek` to produce values
4255
+ # like `FIRST`/`MONDAY` or `LAST`/`FRIDAY`.
4256
+ class WeekDayOfMonth
4257
+ include Google::Apis::Core::Hashable
4258
+
4259
+ # Required. Specifies the day of the week.
4260
+ # Corresponds to the JSON property `dayOfWeek`
4261
+ # @return [String]
4262
+ attr_accessor :day_of_week
4263
+
4264
+ # Required. Specifies the week of the month.
4265
+ # Corresponds to the JSON property `weekOfMonth`
4266
+ # @return [String]
4267
+ attr_accessor :week_of_month
4268
+
4269
+ def initialize(**args)
4270
+ update!(**args)
4271
+ end
4272
+
4273
+ # Update properties of this object
4274
+ def update!(**args)
4275
+ @day_of_week = args[:day_of_week] if args.key?(:day_of_week)
4276
+ @week_of_month = args[:week_of_month] if args.key?(:week_of_month)
4277
+ end
4278
+ end
4279
+
2939
4280
  # ManagementURI depending on the Workforce Identity i.e. either 1p or 3p.
2940
4281
  class WorkforceIdentityBasedManagementUri
2941
4282
  include Google::Apis::Core::Hashable
@@ -2985,6 +4326,25 @@ module Google
2985
4326
  @third_party_oauth2_client_id = args[:third_party_oauth2_client_id] if args.key?(:third_party_oauth2_client_id)
2986
4327
  end
2987
4328
  end
4329
+
4330
+ #
4331
+ class ZoneConfiguration
4332
+ include Google::Apis::Core::Hashable
4333
+
4334
+ #
4335
+ # Corresponds to the JSON property `zone`
4336
+ # @return [String]
4337
+ attr_accessor :zone
4338
+
4339
+ def initialize(**args)
4340
+ update!(**args)
4341
+ end
4342
+
4343
+ # Update properties of this object
4344
+ def update!(**args)
4345
+ @zone = args[:zone] if args.key?(:zone)
4346
+ end
4347
+ end
2988
4348
  end
2989
4349
  end
2990
4350
  end