google-apis-vmmigration_v1alpha1 0.1.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.
@@ -0,0 +1,2347 @@
1
+ # Copyright 2020 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
+
15
+ require 'date'
16
+ require 'google/apis/core/base_service'
17
+ require 'google/apis/core/json_representation'
18
+ require 'google/apis/core/hashable'
19
+ require 'google/apis/errors'
20
+
21
+ module Google
22
+ module Apis
23
+ module VmmigrationV1alpha1
24
+
25
+ # Request message for 'AddGroupMigration' request.
26
+ class AddGroupMigrationRequest
27
+ include Google::Apis::Core::Hashable
28
+
29
+ # The full path name of the MigratingVm to add.
30
+ # Corresponds to the JSON property `migratingVm`
31
+ # @return [String]
32
+ attr_accessor :migrating_vm
33
+
34
+ def initialize(**args)
35
+ update!(**args)
36
+ end
37
+
38
+ # Update properties of this object
39
+ def update!(**args)
40
+ @migrating_vm = args[:migrating_vm] if args.key?(:migrating_vm)
41
+ end
42
+ end
43
+
44
+ # AppliedLicense holds the license data returned by adaptation module report.
45
+ class AppliedLicense
46
+ include Google::Apis::Core::Hashable
47
+
48
+ # The OS license returned from the adaptation module's report.
49
+ # Corresponds to the JSON property `osLicense`
50
+ # @return [String]
51
+ attr_accessor :os_license
52
+
53
+ # The license type that was used in OS adaptation.
54
+ # Corresponds to the JSON property `type`
55
+ # @return [String]
56
+ attr_accessor :type
57
+
58
+ def initialize(**args)
59
+ update!(**args)
60
+ end
61
+
62
+ # Update properties of this object
63
+ def update!(**args)
64
+ @os_license = args[:os_license] if args.key?(:os_license)
65
+ @type = args[:type] if args.key?(:type)
66
+ end
67
+ end
68
+
69
+ # Request message for 'CancelCloneJob' request.
70
+ class CancelCloneJobRequest
71
+ include Google::Apis::Core::Hashable
72
+
73
+ def initialize(**args)
74
+ update!(**args)
75
+ end
76
+
77
+ # Update properties of this object
78
+ def update!(**args)
79
+ end
80
+ end
81
+
82
+ # Request message for 'CancelCutoverJob' request.
83
+ class CancelCutoverJobRequest
84
+ include Google::Apis::Core::Hashable
85
+
86
+ def initialize(**args)
87
+ update!(**args)
88
+ end
89
+
90
+ # Update properties of this object
91
+ def update!(**args)
92
+ end
93
+ end
94
+
95
+ # The request message for Operations.CancelOperation.
96
+ class CancelOperationRequest
97
+ include Google::Apis::Core::Hashable
98
+
99
+ def initialize(**args)
100
+ update!(**args)
101
+ end
102
+
103
+ # Update properties of this object
104
+ def update!(**args)
105
+ end
106
+ end
107
+
108
+ # CloneJob describes the process of creating a clone of a MigratingVM to the
109
+ # requested target based on the latest successful uploaded snapshots. While the
110
+ # migration cycles of a MigratingVm take place, it is possible to verify the
111
+ # uploaded VM can be started in the cloud, by creating a clone. The clone can be
112
+ # created without any downtime, and it is created using the latest snapshots
113
+ # which are already in the cloud. The cloneJob is only responsible for its work,
114
+ # not its products, which means once it is finished, it will never touch the
115
+ # instance it created. It will only delete it in case of the CloneJob being
116
+ # cancelled or upon failure to clone.
117
+ class CloneJob
118
+ include Google::Apis::Core::Hashable
119
+
120
+ # ComputeEngineTargetDetails is a collection of details for creating a VM in a
121
+ # target Compute Engine project.
122
+ # Corresponds to the JSON property `computeEngineTargetDetails`
123
+ # @return [Google::Apis::VmmigrationV1alpha1::ComputeEngineTargetDetails]
124
+ attr_accessor :compute_engine_target_details
125
+
126
+ # TargetVMDetails is a collection of details for creating a VM in a target
127
+ # Compute Engine project.
128
+ # Corresponds to the JSON property `computeEngineVmDetails`
129
+ # @return [Google::Apis::VmmigrationV1alpha1::TargetVmDetails]
130
+ attr_accessor :compute_engine_vm_details
131
+
132
+ # Output only. The time the clone job was created (as an API call, not when it
133
+ # was actually created in the target).
134
+ # Corresponds to the JSON property `createTime`
135
+ # @return [String]
136
+ attr_accessor :create_time
137
+
138
+ # The `Status` type defines a logical error model that is suitable for different
139
+ # programming environments, including REST APIs and RPC APIs. It is used by [
140
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
141
+ # data: error code, error message, and error details. You can find out more
142
+ # about this error model and how to work with it in the [API Design Guide](https:
143
+ # //cloud.google.com/apis/design/errors).
144
+ # Corresponds to the JSON property `error`
145
+ # @return [Google::Apis::VmmigrationV1alpha1::Status]
146
+ attr_accessor :error
147
+
148
+ # The name of the clone.
149
+ # Corresponds to the JSON property `name`
150
+ # @return [String]
151
+ attr_accessor :name
152
+
153
+ # Output only. State of the clone job.
154
+ # Corresponds to the JSON property `state`
155
+ # @return [String]
156
+ attr_accessor :state
157
+
158
+ # Output only. The time the state was last updated.
159
+ # Corresponds to the JSON property `stateTime`
160
+ # @return [String]
161
+ attr_accessor :state_time
162
+
163
+ # TargetVMDetails is a collection of details for creating a VM in a target
164
+ # Compute Engine project.
165
+ # Corresponds to the JSON property `targetDetails`
166
+ # @return [Google::Apis::VmmigrationV1alpha1::TargetVmDetails]
167
+ attr_accessor :target_details
168
+
169
+ def initialize(**args)
170
+ update!(**args)
171
+ end
172
+
173
+ # Update properties of this object
174
+ def update!(**args)
175
+ @compute_engine_target_details = args[:compute_engine_target_details] if args.key?(:compute_engine_target_details)
176
+ @compute_engine_vm_details = args[:compute_engine_vm_details] if args.key?(:compute_engine_vm_details)
177
+ @create_time = args[:create_time] if args.key?(:create_time)
178
+ @error = args[:error] if args.key?(:error)
179
+ @name = args[:name] if args.key?(:name)
180
+ @state = args[:state] if args.key?(:state)
181
+ @state_time = args[:state_time] if args.key?(:state_time)
182
+ @target_details = args[:target_details] if args.key?(:target_details)
183
+ end
184
+ end
185
+
186
+ # ComputeEngineTargetDefaults is a collection of details for creating a VM in a
187
+ # target Compute Engine project.
188
+ class ComputeEngineTargetDefaults
189
+ include Google::Apis::Core::Hashable
190
+
191
+ # AppliedLicense holds the license data returned by adaptation module report.
192
+ # Corresponds to the JSON property `appliedLicense`
193
+ # @return [Google::Apis::VmmigrationV1alpha1::AppliedLicense]
194
+ attr_accessor :applied_license
195
+
196
+ # Output only. The VM Boot Option, as set in the source vm.
197
+ # Corresponds to the JSON property `bootOption`
198
+ # @return [String]
199
+ attr_accessor :boot_option
200
+
201
+ # Scheduling information for VM on maintenance/restart behaviour and node
202
+ # allocation in sole tenant nodes.
203
+ # Corresponds to the JSON property `computeScheduling`
204
+ # @return [Google::Apis::VmmigrationV1alpha1::ComputeScheduling]
205
+ attr_accessor :compute_scheduling
206
+
207
+ # The disk type to use in the VM.
208
+ # Corresponds to the JSON property `diskType`
209
+ # @return [String]
210
+ attr_accessor :disk_type
211
+
212
+ # A map of labels to associate with the VM.
213
+ # Corresponds to the JSON property `labels`
214
+ # @return [Hash<String,String>]
215
+ attr_accessor :labels
216
+
217
+ # The license type to use in OS adaptation.
218
+ # Corresponds to the JSON property `licenseType`
219
+ # @return [String]
220
+ attr_accessor :license_type
221
+
222
+ # The machine type to create the VM with.
223
+ # Corresponds to the JSON property `machineType`
224
+ # @return [String]
225
+ attr_accessor :machine_type
226
+
227
+ # The machine type series to create the VM with.
228
+ # Corresponds to the JSON property `machineTypeSeries`
229
+ # @return [String]
230
+ attr_accessor :machine_type_series
231
+
232
+ # The metadata key/value pairs to assign to the VM.
233
+ # Corresponds to the JSON property `metadata`
234
+ # @return [Hash<String,String>]
235
+ attr_accessor :metadata
236
+
237
+ # List of NICs connected to this VM.
238
+ # Corresponds to the JSON property `networkInterfaces`
239
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::NetworkInterface>]
240
+ attr_accessor :network_interfaces
241
+
242
+ # A map of network tags to associate with the VM.
243
+ # Corresponds to the JSON property `networkTags`
244
+ # @return [Array<String>]
245
+ attr_accessor :network_tags
246
+
247
+ # Defines whether the instance has Secure Boot enabled. This can be set to true
248
+ # only if the vm boot option is EFI.
249
+ # Corresponds to the JSON property `secureBoot`
250
+ # @return [Boolean]
251
+ attr_accessor :secure_boot
252
+ alias_method :secure_boot?, :secure_boot
253
+
254
+ # The service account to associate the VM with.
255
+ # Corresponds to the JSON property `serviceAccount`
256
+ # @return [String]
257
+ attr_accessor :service_account
258
+
259
+ # The full path of the resource of type TargetProject which represents the
260
+ # Compute Engine project in which to create this VM.
261
+ # Corresponds to the JSON property `targetProject`
262
+ # @return [String]
263
+ attr_accessor :target_project
264
+
265
+ # The name of the VM to create.
266
+ # Corresponds to the JSON property `vmName`
267
+ # @return [String]
268
+ attr_accessor :vm_name
269
+
270
+ # The zone in which to create the VM.
271
+ # Corresponds to the JSON property `zone`
272
+ # @return [String]
273
+ attr_accessor :zone
274
+
275
+ def initialize(**args)
276
+ update!(**args)
277
+ end
278
+
279
+ # Update properties of this object
280
+ def update!(**args)
281
+ @applied_license = args[:applied_license] if args.key?(:applied_license)
282
+ @boot_option = args[:boot_option] if args.key?(:boot_option)
283
+ @compute_scheduling = args[:compute_scheduling] if args.key?(:compute_scheduling)
284
+ @disk_type = args[:disk_type] if args.key?(:disk_type)
285
+ @labels = args[:labels] if args.key?(:labels)
286
+ @license_type = args[:license_type] if args.key?(:license_type)
287
+ @machine_type = args[:machine_type] if args.key?(:machine_type)
288
+ @machine_type_series = args[:machine_type_series] if args.key?(:machine_type_series)
289
+ @metadata = args[:metadata] if args.key?(:metadata)
290
+ @network_interfaces = args[:network_interfaces] if args.key?(:network_interfaces)
291
+ @network_tags = args[:network_tags] if args.key?(:network_tags)
292
+ @secure_boot = args[:secure_boot] if args.key?(:secure_boot)
293
+ @service_account = args[:service_account] if args.key?(:service_account)
294
+ @target_project = args[:target_project] if args.key?(:target_project)
295
+ @vm_name = args[:vm_name] if args.key?(:vm_name)
296
+ @zone = args[:zone] if args.key?(:zone)
297
+ end
298
+ end
299
+
300
+ # ComputeEngineTargetDetails is a collection of details for creating a VM in a
301
+ # target Compute Engine project.
302
+ class ComputeEngineTargetDetails
303
+ include Google::Apis::Core::Hashable
304
+
305
+ # AppliedLicense holds the license data returned by adaptation module report.
306
+ # Corresponds to the JSON property `appliedLicense`
307
+ # @return [Google::Apis::VmmigrationV1alpha1::AppliedLicense]
308
+ attr_accessor :applied_license
309
+
310
+ # The VM Boot Option, as set in the source vm.
311
+ # Corresponds to the JSON property `bootOption`
312
+ # @return [String]
313
+ attr_accessor :boot_option
314
+
315
+ # Scheduling information for VM on maintenance/restart behaviour and node
316
+ # allocation in sole tenant nodes.
317
+ # Corresponds to the JSON property `computeScheduling`
318
+ # @return [Google::Apis::VmmigrationV1alpha1::ComputeScheduling]
319
+ attr_accessor :compute_scheduling
320
+
321
+ # The disk type to use in the VM.
322
+ # Corresponds to the JSON property `diskType`
323
+ # @return [String]
324
+ attr_accessor :disk_type
325
+
326
+ # A map of labels to associate with the VM.
327
+ # Corresponds to the JSON property `labels`
328
+ # @return [Hash<String,String>]
329
+ attr_accessor :labels
330
+
331
+ # The license type to use in OS adaptation.
332
+ # Corresponds to the JSON property `licenseType`
333
+ # @return [String]
334
+ attr_accessor :license_type
335
+
336
+ # The machine type to create the VM with.
337
+ # Corresponds to the JSON property `machineType`
338
+ # @return [String]
339
+ attr_accessor :machine_type
340
+
341
+ # The machine type series to create the VM with.
342
+ # Corresponds to the JSON property `machineTypeSeries`
343
+ # @return [String]
344
+ attr_accessor :machine_type_series
345
+
346
+ # The metadata key/value pairs to assign to the VM.
347
+ # Corresponds to the JSON property `metadata`
348
+ # @return [Hash<String,String>]
349
+ attr_accessor :metadata
350
+
351
+ # List of NICs connected to this VM.
352
+ # Corresponds to the JSON property `networkInterfaces`
353
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::NetworkInterface>]
354
+ attr_accessor :network_interfaces
355
+
356
+ # A map of network tags to associate with the VM.
357
+ # Corresponds to the JSON property `networkTags`
358
+ # @return [Array<String>]
359
+ attr_accessor :network_tags
360
+
361
+ # The GCP target project ID or project name.
362
+ # Corresponds to the JSON property `project`
363
+ # @return [String]
364
+ attr_accessor :project
365
+
366
+ # Defines whether the instance has Secure Boot enabled. This can be set to true
367
+ # only if the vm boot option is EFI.
368
+ # Corresponds to the JSON property `secureBoot`
369
+ # @return [Boolean]
370
+ attr_accessor :secure_boot
371
+ alias_method :secure_boot?, :secure_boot
372
+
373
+ # The service account to associate the VM with.
374
+ # Corresponds to the JSON property `serviceAccount`
375
+ # @return [String]
376
+ attr_accessor :service_account
377
+
378
+ # The name of the VM to create.
379
+ # Corresponds to the JSON property `vmName`
380
+ # @return [String]
381
+ attr_accessor :vm_name
382
+
383
+ # The zone in which to create the VM.
384
+ # Corresponds to the JSON property `zone`
385
+ # @return [String]
386
+ attr_accessor :zone
387
+
388
+ def initialize(**args)
389
+ update!(**args)
390
+ end
391
+
392
+ # Update properties of this object
393
+ def update!(**args)
394
+ @applied_license = args[:applied_license] if args.key?(:applied_license)
395
+ @boot_option = args[:boot_option] if args.key?(:boot_option)
396
+ @compute_scheduling = args[:compute_scheduling] if args.key?(:compute_scheduling)
397
+ @disk_type = args[:disk_type] if args.key?(:disk_type)
398
+ @labels = args[:labels] if args.key?(:labels)
399
+ @license_type = args[:license_type] if args.key?(:license_type)
400
+ @machine_type = args[:machine_type] if args.key?(:machine_type)
401
+ @machine_type_series = args[:machine_type_series] if args.key?(:machine_type_series)
402
+ @metadata = args[:metadata] if args.key?(:metadata)
403
+ @network_interfaces = args[:network_interfaces] if args.key?(:network_interfaces)
404
+ @network_tags = args[:network_tags] if args.key?(:network_tags)
405
+ @project = args[:project] if args.key?(:project)
406
+ @secure_boot = args[:secure_boot] if args.key?(:secure_boot)
407
+ @service_account = args[:service_account] if args.key?(:service_account)
408
+ @vm_name = args[:vm_name] if args.key?(:vm_name)
409
+ @zone = args[:zone] if args.key?(:zone)
410
+ end
411
+ end
412
+
413
+ # Scheduling information for VM on maintenance/restart behaviour and node
414
+ # allocation in sole tenant nodes.
415
+ class ComputeScheduling
416
+ include Google::Apis::Core::Hashable
417
+
418
+ #
419
+ # Corresponds to the JSON property `automaticRestart`
420
+ # @return [Boolean]
421
+ attr_accessor :automatic_restart
422
+ alias_method :automatic_restart?, :automatic_restart
423
+
424
+ # The minimum number of virtual CPUs this instance will consume when running on
425
+ # a sole-tenant node. Ignored if no node_affinites are configured.
426
+ # Corresponds to the JSON property `minNodeCpus`
427
+ # @return [Fixnum]
428
+ attr_accessor :min_node_cpus
429
+
430
+ # A set of node affinity and anti-affinity configurations for sole tenant nodes.
431
+ # Corresponds to the JSON property `nodeAffinities`
432
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::SchedulingNodeAffinity>]
433
+ attr_accessor :node_affinities
434
+
435
+ # How the instance should behave when the host machine undergoes maintenance
436
+ # that may temporarily impact instance performance.
437
+ # Corresponds to the JSON property `onHostMaintenance`
438
+ # @return [String]
439
+ attr_accessor :on_host_maintenance
440
+
441
+ # Whether the Instance should be automatically restarted whenever it is
442
+ # terminated by Compute Engine (not terminated by user). This configuration is
443
+ # identical to `automaticRestart` field in Compute Engine create instance under
444
+ # scheduling. It was changed to an enum (instead of a boolean) to match the
445
+ # default value in Compute Engine which is automatic restart.
446
+ # Corresponds to the JSON property `restartType`
447
+ # @return [String]
448
+ attr_accessor :restart_type
449
+
450
+ def initialize(**args)
451
+ update!(**args)
452
+ end
453
+
454
+ # Update properties of this object
455
+ def update!(**args)
456
+ @automatic_restart = args[:automatic_restart] if args.key?(:automatic_restart)
457
+ @min_node_cpus = args[:min_node_cpus] if args.key?(:min_node_cpus)
458
+ @node_affinities = args[:node_affinities] if args.key?(:node_affinities)
459
+ @on_host_maintenance = args[:on_host_maintenance] if args.key?(:on_host_maintenance)
460
+ @restart_type = args[:restart_type] if args.key?(:restart_type)
461
+ end
462
+ end
463
+
464
+ # CutoverJob message describes a cutover of a migrating VM. The CutoverJob is
465
+ # the operation of shutting down the VM, creating a snapshot and clonning the VM
466
+ # using the replicated snapshot.
467
+ class CutoverJob
468
+ include Google::Apis::Core::Hashable
469
+
470
+ # ComputeEngineTargetDetails is a collection of details for creating a VM in a
471
+ # target Compute Engine project.
472
+ # Corresponds to the JSON property `computeEngineTargetDetails`
473
+ # @return [Google::Apis::VmmigrationV1alpha1::ComputeEngineTargetDetails]
474
+ attr_accessor :compute_engine_target_details
475
+
476
+ # TargetVMDetails is a collection of details for creating a VM in a target
477
+ # Compute Engine project.
478
+ # Corresponds to the JSON property `computeEngineVmDetails`
479
+ # @return [Google::Apis::VmmigrationV1alpha1::TargetVmDetails]
480
+ attr_accessor :compute_engine_vm_details
481
+
482
+ # Output only. The time the cutover job was created (as an API call, not when it
483
+ # was actually created in the target).
484
+ # Corresponds to the JSON property `createTime`
485
+ # @return [String]
486
+ attr_accessor :create_time
487
+
488
+ # The `Status` type defines a logical error model that is suitable for different
489
+ # programming environments, including REST APIs and RPC APIs. It is used by [
490
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
491
+ # data: error code, error message, and error details. You can find out more
492
+ # about this error model and how to work with it in the [API Design Guide](https:
493
+ # //cloud.google.com/apis/design/errors).
494
+ # Corresponds to the JSON property `error`
495
+ # @return [Google::Apis::VmmigrationV1alpha1::Status]
496
+ attr_accessor :error
497
+
498
+ # Output only. The name of the cutover job.
499
+ # Corresponds to the JSON property `name`
500
+ # @return [String]
501
+ attr_accessor :name
502
+
503
+ # Output only. The current progress in percentage of the cutover job.
504
+ # Corresponds to the JSON property `progress`
505
+ # @return [Fixnum]
506
+ attr_accessor :progress
507
+
508
+ # Output only. The current progress in percentage of the cutover job.
509
+ # Corresponds to the JSON property `progressPercent`
510
+ # @return [Fixnum]
511
+ attr_accessor :progress_percent
512
+
513
+ # Output only. State of the cutover job.
514
+ # Corresponds to the JSON property `state`
515
+ # @return [String]
516
+ attr_accessor :state
517
+
518
+ # Output only. A message providing possible extra details about the current
519
+ # state.
520
+ # Corresponds to the JSON property `stateMessage`
521
+ # @return [String]
522
+ attr_accessor :state_message
523
+
524
+ # Output only. The time the state was last updated.
525
+ # Corresponds to the JSON property `stateTime`
526
+ # @return [String]
527
+ attr_accessor :state_time
528
+
529
+ # TargetVMDetails is a collection of details for creating a VM in a target
530
+ # Compute Engine project.
531
+ # Corresponds to the JSON property `targetDetails`
532
+ # @return [Google::Apis::VmmigrationV1alpha1::TargetVmDetails]
533
+ attr_accessor :target_details
534
+
535
+ def initialize(**args)
536
+ update!(**args)
537
+ end
538
+
539
+ # Update properties of this object
540
+ def update!(**args)
541
+ @compute_engine_target_details = args[:compute_engine_target_details] if args.key?(:compute_engine_target_details)
542
+ @compute_engine_vm_details = args[:compute_engine_vm_details] if args.key?(:compute_engine_vm_details)
543
+ @create_time = args[:create_time] if args.key?(:create_time)
544
+ @error = args[:error] if args.key?(:error)
545
+ @name = args[:name] if args.key?(:name)
546
+ @progress = args[:progress] if args.key?(:progress)
547
+ @progress_percent = args[:progress_percent] if args.key?(:progress_percent)
548
+ @state = args[:state] if args.key?(:state)
549
+ @state_message = args[:state_message] if args.key?(:state_message)
550
+ @state_time = args[:state_time] if args.key?(:state_time)
551
+ @target_details = args[:target_details] if args.key?(:target_details)
552
+ end
553
+ end
554
+
555
+ # DatacenterConnector message describes a connector between the Source and GCP,
556
+ # which is installed on a vmware datacenter (an OVA vm installed by the user) to
557
+ # connect the Datacenter to GCP and support vm migration data transfer.
558
+ class DatacenterConnector
559
+ include Google::Apis::Core::Hashable
560
+
561
+ # Output only. The communication channel between the datacenter connector and
562
+ # GCP.
563
+ # Corresponds to the JSON property `bucket`
564
+ # @return [String]
565
+ attr_accessor :bucket
566
+
567
+ # Output only. The time the connector was created (as an API call, not when it
568
+ # was actually installed).
569
+ # Corresponds to the JSON property `createTime`
570
+ # @return [String]
571
+ attr_accessor :create_time
572
+
573
+ # The `Status` type defines a logical error model that is suitable for different
574
+ # programming environments, including REST APIs and RPC APIs. It is used by [
575
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
576
+ # data: error code, error message, and error details. You can find out more
577
+ # about this error model and how to work with it in the [API Design Guide](https:
578
+ # //cloud.google.com/apis/design/errors).
579
+ # Corresponds to the JSON property `error`
580
+ # @return [Google::Apis::VmmigrationV1alpha1::Status]
581
+ attr_accessor :error
582
+
583
+ # Output only. The connector's name.
584
+ # Corresponds to the JSON property `name`
585
+ # @return [String]
586
+ attr_accessor :name
587
+
588
+ # Immutable. A unique key for this connector. This key is internal to the OVA
589
+ # connector and is supplied with its creation during the registration process
590
+ # and can not be modified.
591
+ # Corresponds to the JSON property `registrationId`
592
+ # @return [String]
593
+ attr_accessor :registration_id
594
+
595
+ # The service account to use in the connector when communicating with the cloud.
596
+ # Corresponds to the JSON property `serviceAccount`
597
+ # @return [String]
598
+ attr_accessor :service_account
599
+
600
+ # Output only. State of the DatacenterConnector, as determined by the health
601
+ # checks.
602
+ # Corresponds to the JSON property `state`
603
+ # @return [String]
604
+ attr_accessor :state
605
+
606
+ # Output only. The time the state was last set.
607
+ # Corresponds to the JSON property `stateTime`
608
+ # @return [String]
609
+ attr_accessor :state_time
610
+
611
+ # Output only. The last time the connector was updated with an API call.
612
+ # Corresponds to the JSON property `updateTime`
613
+ # @return [String]
614
+ attr_accessor :update_time
615
+
616
+ # The version running in the DatacenterConnector. This is supplied by the OVA
617
+ # connector during the registration process and can not be modified.
618
+ # Corresponds to the JSON property `version`
619
+ # @return [String]
620
+ attr_accessor :version
621
+
622
+ def initialize(**args)
623
+ update!(**args)
624
+ end
625
+
626
+ # Update properties of this object
627
+ def update!(**args)
628
+ @bucket = args[:bucket] if args.key?(:bucket)
629
+ @create_time = args[:create_time] if args.key?(:create_time)
630
+ @error = args[:error] if args.key?(:error)
631
+ @name = args[:name] if args.key?(:name)
632
+ @registration_id = args[:registration_id] if args.key?(:registration_id)
633
+ @service_account = args[:service_account] if args.key?(:service_account)
634
+ @state = args[:state] if args.key?(:state)
635
+ @state_time = args[:state_time] if args.key?(:state_time)
636
+ @update_time = args[:update_time] if args.key?(:update_time)
637
+ @version = args[:version] if args.key?(:version)
638
+ end
639
+ end
640
+
641
+ # A generic empty message that you can re-use to avoid defining duplicated empty
642
+ # messages in your APIs. A typical example is to use it as the request or the
643
+ # response type of an API method. For instance: service Foo ` rpc Bar(google.
644
+ # protobuf.Empty) returns (google.protobuf.Empty); ` The JSON representation for
645
+ # `Empty` is empty JSON object ````.
646
+ class Empty
647
+ include Google::Apis::Core::Hashable
648
+
649
+ def initialize(**args)
650
+ update!(**args)
651
+ end
652
+
653
+ # Update properties of this object
654
+ def update!(**args)
655
+ end
656
+ end
657
+
658
+ # Response message for fetchInventory.
659
+ class FetchInventoryResponse
660
+ include Google::Apis::Core::Hashable
661
+
662
+ # Output only. The timestamp when the source was last queried (if the result is
663
+ # from the cache).
664
+ # Corresponds to the JSON property `updateTime`
665
+ # @return [String]
666
+ attr_accessor :update_time
667
+
668
+ # VmwareVmsDetails describes VMs in vCenter.
669
+ # Corresponds to the JSON property `vmwareVms`
670
+ # @return [Google::Apis::VmmigrationV1alpha1::VmwareVmsDetails]
671
+ attr_accessor :vmware_vms
672
+
673
+ def initialize(**args)
674
+ update!(**args)
675
+ end
676
+
677
+ # Update properties of this object
678
+ def update!(**args)
679
+ @update_time = args[:update_time] if args.key?(:update_time)
680
+ @vmware_vms = args[:vmware_vms] if args.key?(:vmware_vms)
681
+ end
682
+ end
683
+
684
+ # Request message for 'FinalizeMigration' request.
685
+ class FinalizeMigrationRequest
686
+ include Google::Apis::Core::Hashable
687
+
688
+ def initialize(**args)
689
+ update!(**args)
690
+ end
691
+
692
+ # Update properties of this object
693
+ def update!(**args)
694
+ end
695
+ end
696
+
697
+ # Describes message for 'Group' resource. The Group is a collections of several
698
+ # MigratingVms.
699
+ class Group
700
+ include Google::Apis::Core::Hashable
701
+
702
+ # Output only. The create time timestamp.
703
+ # Corresponds to the JSON property `createTime`
704
+ # @return [String]
705
+ attr_accessor :create_time
706
+
707
+ # User-provided description of the group.
708
+ # Corresponds to the JSON property `description`
709
+ # @return [String]
710
+ attr_accessor :description
711
+
712
+ # Display name is a user defined name for this group which can be updated.
713
+ # Corresponds to the JSON property `displayName`
714
+ # @return [String]
715
+ attr_accessor :display_name
716
+
717
+ # The Group name.
718
+ # Corresponds to the JSON property `name`
719
+ # @return [String]
720
+ attr_accessor :name
721
+
722
+ # Output only. The update time timestamp.
723
+ # Corresponds to the JSON property `updateTime`
724
+ # @return [String]
725
+ attr_accessor :update_time
726
+
727
+ def initialize(**args)
728
+ update!(**args)
729
+ end
730
+
731
+ # Update properties of this object
732
+ def update!(**args)
733
+ @create_time = args[:create_time] if args.key?(:create_time)
734
+ @description = args[:description] if args.key?(:description)
735
+ @display_name = args[:display_name] if args.key?(:display_name)
736
+ @name = args[:name] if args.key?(:name)
737
+ @update_time = args[:update_time] if args.key?(:update_time)
738
+ end
739
+ end
740
+
741
+ # Describes a URL link.
742
+ class Link
743
+ include Google::Apis::Core::Hashable
744
+
745
+ # Describes what the link offers.
746
+ # Corresponds to the JSON property `description`
747
+ # @return [String]
748
+ attr_accessor :description
749
+
750
+ # The URL of the link.
751
+ # Corresponds to the JSON property `url`
752
+ # @return [String]
753
+ attr_accessor :url
754
+
755
+ def initialize(**args)
756
+ update!(**args)
757
+ end
758
+
759
+ # Update properties of this object
760
+ def update!(**args)
761
+ @description = args[:description] if args.key?(:description)
762
+ @url = args[:url] if args.key?(:url)
763
+ end
764
+ end
765
+
766
+ # Response message for 'ListCloneJobs' request.
767
+ class ListCloneJobsResponse
768
+ include Google::Apis::Core::Hashable
769
+
770
+ # Output only. The list of clone jobs response.
771
+ # Corresponds to the JSON property `cloneJobs`
772
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::CloneJob>]
773
+ attr_accessor :clone_jobs
774
+
775
+ # Output only. A token, which can be sent as `page_token` to retrieve the next
776
+ # page. If this field is omitted, there are no subsequent pages.
777
+ # Corresponds to the JSON property `nextPageToken`
778
+ # @return [String]
779
+ attr_accessor :next_page_token
780
+
781
+ # Output only. Locations that could not be reached.
782
+ # Corresponds to the JSON property `unreachable`
783
+ # @return [Array<String>]
784
+ attr_accessor :unreachable
785
+
786
+ def initialize(**args)
787
+ update!(**args)
788
+ end
789
+
790
+ # Update properties of this object
791
+ def update!(**args)
792
+ @clone_jobs = args[:clone_jobs] if args.key?(:clone_jobs)
793
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
794
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
795
+ end
796
+ end
797
+
798
+ # Response message for 'ListCutoverJobs' request.
799
+ class ListCutoverJobsResponse
800
+ include Google::Apis::Core::Hashable
801
+
802
+ # Output only. The list of cutover jobs response.
803
+ # Corresponds to the JSON property `cutoverJobs`
804
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::CutoverJob>]
805
+ attr_accessor :cutover_jobs
806
+
807
+ # Output only. A token, which can be sent as `page_token` to retrieve the next
808
+ # page. If this field is omitted, there are no subsequent pages.
809
+ # Corresponds to the JSON property `nextPageToken`
810
+ # @return [String]
811
+ attr_accessor :next_page_token
812
+
813
+ # Output only. Locations that could not be reached.
814
+ # Corresponds to the JSON property `unreachable`
815
+ # @return [Array<String>]
816
+ attr_accessor :unreachable
817
+
818
+ def initialize(**args)
819
+ update!(**args)
820
+ end
821
+
822
+ # Update properties of this object
823
+ def update!(**args)
824
+ @cutover_jobs = args[:cutover_jobs] if args.key?(:cutover_jobs)
825
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
826
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
827
+ end
828
+ end
829
+
830
+ # Response message for 'ListDatacenterConnectors' request.
831
+ class ListDatacenterConnectorsResponse
832
+ include Google::Apis::Core::Hashable
833
+
834
+ # Output only. The list of sources response.
835
+ # Corresponds to the JSON property `datacenterConnectors`
836
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::DatacenterConnector>]
837
+ attr_accessor :datacenter_connectors
838
+
839
+ # Output only. A token, which can be sent as `page_token` to retrieve the next
840
+ # page. If this field is omitted, there are no subsequent pages.
841
+ # Corresponds to the JSON property `nextPageToken`
842
+ # @return [String]
843
+ attr_accessor :next_page_token
844
+
845
+ # Output only. Locations that could not be reached.
846
+ # Corresponds to the JSON property `unreachable`
847
+ # @return [Array<String>]
848
+ attr_accessor :unreachable
849
+
850
+ def initialize(**args)
851
+ update!(**args)
852
+ end
853
+
854
+ # Update properties of this object
855
+ def update!(**args)
856
+ @datacenter_connectors = args[:datacenter_connectors] if args.key?(:datacenter_connectors)
857
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
858
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
859
+ end
860
+ end
861
+
862
+ # Response message for 'ListGroups' request.
863
+ class ListGroupsResponse
864
+ include Google::Apis::Core::Hashable
865
+
866
+ # Output only. The list of groups response.
867
+ # Corresponds to the JSON property `groups`
868
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::Group>]
869
+ attr_accessor :groups
870
+
871
+ # Output only. A token, which can be sent as `page_token` to retrieve the next
872
+ # page. If this field is omitted, there are no subsequent pages.
873
+ # Corresponds to the JSON property `nextPageToken`
874
+ # @return [String]
875
+ attr_accessor :next_page_token
876
+
877
+ # Output only. Locations that could not be reached.
878
+ # Corresponds to the JSON property `unreachable`
879
+ # @return [Array<String>]
880
+ attr_accessor :unreachable
881
+
882
+ def initialize(**args)
883
+ update!(**args)
884
+ end
885
+
886
+ # Update properties of this object
887
+ def update!(**args)
888
+ @groups = args[:groups] if args.key?(:groups)
889
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
890
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
891
+ end
892
+ end
893
+
894
+ # The response message for Locations.ListLocations.
895
+ class ListLocationsResponse
896
+ include Google::Apis::Core::Hashable
897
+
898
+ # A list of locations that matches the specified filter in the request.
899
+ # Corresponds to the JSON property `locations`
900
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::Location>]
901
+ attr_accessor :locations
902
+
903
+ # The standard List next-page token.
904
+ # Corresponds to the JSON property `nextPageToken`
905
+ # @return [String]
906
+ attr_accessor :next_page_token
907
+
908
+ def initialize(**args)
909
+ update!(**args)
910
+ end
911
+
912
+ # Update properties of this object
913
+ def update!(**args)
914
+ @locations = args[:locations] if args.key?(:locations)
915
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
916
+ end
917
+ end
918
+
919
+ # Response message for 'ListMigratingVms' request.
920
+ class ListMigratingVmsResponse
921
+ include Google::Apis::Core::Hashable
922
+
923
+ # Output only. The list of Migrating VMs response.
924
+ # Corresponds to the JSON property `migratingVms`
925
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::MigratingVm>]
926
+ attr_accessor :migrating_vms
927
+
928
+ # Output only. A token, which can be sent as `page_token` to retrieve the next
929
+ # page. If this field is omitted, there are no subsequent pages.
930
+ # Corresponds to the JSON property `nextPageToken`
931
+ # @return [String]
932
+ attr_accessor :next_page_token
933
+
934
+ # Output only. Locations that could not be reached.
935
+ # Corresponds to the JSON property `unreachable`
936
+ # @return [Array<String>]
937
+ attr_accessor :unreachable
938
+
939
+ def initialize(**args)
940
+ update!(**args)
941
+ end
942
+
943
+ # Update properties of this object
944
+ def update!(**args)
945
+ @migrating_vms = args[:migrating_vms] if args.key?(:migrating_vms)
946
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
947
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
948
+ end
949
+ end
950
+
951
+ # The response message for Operations.ListOperations.
952
+ class ListOperationsResponse
953
+ include Google::Apis::Core::Hashable
954
+
955
+ # The standard List next-page token.
956
+ # Corresponds to the JSON property `nextPageToken`
957
+ # @return [String]
958
+ attr_accessor :next_page_token
959
+
960
+ # A list of operations that matches the specified filter in the request.
961
+ # Corresponds to the JSON property `operations`
962
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::Operation>]
963
+ attr_accessor :operations
964
+
965
+ def initialize(**args)
966
+ update!(**args)
967
+ end
968
+
969
+ # Update properties of this object
970
+ def update!(**args)
971
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
972
+ @operations = args[:operations] if args.key?(:operations)
973
+ end
974
+ end
975
+
976
+ # Response message for 'ListSources' request.
977
+ class ListSourcesResponse
978
+ include Google::Apis::Core::Hashable
979
+
980
+ # Output only. A token, which can be sent as `page_token` to retrieve the next
981
+ # page. If this field is omitted, there are no subsequent pages.
982
+ # Corresponds to the JSON property `nextPageToken`
983
+ # @return [String]
984
+ attr_accessor :next_page_token
985
+
986
+ # Output only. The list of sources response.
987
+ # Corresponds to the JSON property `sources`
988
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::Source>]
989
+ attr_accessor :sources
990
+
991
+ # Output only. Locations that could not be reached.
992
+ # Corresponds to the JSON property `unreachable`
993
+ # @return [Array<String>]
994
+ attr_accessor :unreachable
995
+
996
+ def initialize(**args)
997
+ update!(**args)
998
+ end
999
+
1000
+ # Update properties of this object
1001
+ def update!(**args)
1002
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
1003
+ @sources = args[:sources] if args.key?(:sources)
1004
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
1005
+ end
1006
+ end
1007
+
1008
+ # Response message for 'ListTargetProjects' call.
1009
+ class ListTargetProjectsResponse
1010
+ include Google::Apis::Core::Hashable
1011
+
1012
+ # Output only. A token, which can be sent as `page_token` to retrieve the next
1013
+ # page. If this field is omitted, there are no subsequent pages.
1014
+ # Corresponds to the JSON property `nextPageToken`
1015
+ # @return [String]
1016
+ attr_accessor :next_page_token
1017
+
1018
+ # Output only. The list of target response.
1019
+ # Corresponds to the JSON property `targetProjects`
1020
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::TargetProject>]
1021
+ attr_accessor :target_projects
1022
+
1023
+ # Output only. Locations that could not be reached.
1024
+ # Corresponds to the JSON property `unreachable`
1025
+ # @return [Array<String>]
1026
+ attr_accessor :unreachable
1027
+
1028
+ def initialize(**args)
1029
+ update!(**args)
1030
+ end
1031
+
1032
+ # Update properties of this object
1033
+ def update!(**args)
1034
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
1035
+ @target_projects = args[:target_projects] if args.key?(:target_projects)
1036
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
1037
+ end
1038
+ end
1039
+
1040
+ # Response message for 'ListUtilizationReports' request.
1041
+ class ListUtilizationReportsResponse
1042
+ include Google::Apis::Core::Hashable
1043
+
1044
+ # Output only. A token, which can be sent as `page_token` to retrieve the next
1045
+ # page. If this field is omitted, there are no subsequent pages.
1046
+ # Corresponds to the JSON property `nextPageToken`
1047
+ # @return [String]
1048
+ attr_accessor :next_page_token
1049
+
1050
+ # Output only. Locations that could not be reached.
1051
+ # Corresponds to the JSON property `unreachable`
1052
+ # @return [Array<String>]
1053
+ attr_accessor :unreachable
1054
+
1055
+ # Output only. The list of reports.
1056
+ # Corresponds to the JSON property `utilizationReports`
1057
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::UtilizationReport>]
1058
+ attr_accessor :utilization_reports
1059
+
1060
+ def initialize(**args)
1061
+ update!(**args)
1062
+ end
1063
+
1064
+ # Update properties of this object
1065
+ def update!(**args)
1066
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
1067
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
1068
+ @utilization_reports = args[:utilization_reports] if args.key?(:utilization_reports)
1069
+ end
1070
+ end
1071
+
1072
+ # Provides a localized error message that is safe to return to the user which
1073
+ # can be attached to an RPC error.
1074
+ class LocalizedMessage
1075
+ include Google::Apis::Core::Hashable
1076
+
1077
+ # The locale used following the specification defined at http://www.rfc-editor.
1078
+ # org/rfc/bcp/bcp47.txt. Examples are: "en-US", "fr-CH", "es-MX"
1079
+ # Corresponds to the JSON property `locale`
1080
+ # @return [String]
1081
+ attr_accessor :locale
1082
+
1083
+ # The localized error message in the above locale.
1084
+ # Corresponds to the JSON property `message`
1085
+ # @return [String]
1086
+ attr_accessor :message
1087
+
1088
+ def initialize(**args)
1089
+ update!(**args)
1090
+ end
1091
+
1092
+ # Update properties of this object
1093
+ def update!(**args)
1094
+ @locale = args[:locale] if args.key?(:locale)
1095
+ @message = args[:message] if args.key?(:message)
1096
+ end
1097
+ end
1098
+
1099
+ # A resource that represents Google Cloud Platform location.
1100
+ class Location
1101
+ include Google::Apis::Core::Hashable
1102
+
1103
+ # The friendly name for this location, typically a nearby city name. For example,
1104
+ # "Tokyo".
1105
+ # Corresponds to the JSON property `displayName`
1106
+ # @return [String]
1107
+ attr_accessor :display_name
1108
+
1109
+ # Cross-service attributes for the location. For example `"cloud.googleapis.com/
1110
+ # region": "us-east1"`
1111
+ # Corresponds to the JSON property `labels`
1112
+ # @return [Hash<String,String>]
1113
+ attr_accessor :labels
1114
+
1115
+ # The canonical id for this location. For example: `"us-east1"`.
1116
+ # Corresponds to the JSON property `locationId`
1117
+ # @return [String]
1118
+ attr_accessor :location_id
1119
+
1120
+ # Service-specific metadata. For example the available capacity at the given
1121
+ # location.
1122
+ # Corresponds to the JSON property `metadata`
1123
+ # @return [Hash<String,Object>]
1124
+ attr_accessor :metadata
1125
+
1126
+ # Resource name for the location, which may vary between implementations. For
1127
+ # example: `"projects/example-project/locations/us-east1"`
1128
+ # Corresponds to the JSON property `name`
1129
+ # @return [String]
1130
+ attr_accessor :name
1131
+
1132
+ def initialize(**args)
1133
+ update!(**args)
1134
+ end
1135
+
1136
+ # Update properties of this object
1137
+ def update!(**args)
1138
+ @display_name = args[:display_name] if args.key?(:display_name)
1139
+ @labels = args[:labels] if args.key?(:labels)
1140
+ @location_id = args[:location_id] if args.key?(:location_id)
1141
+ @metadata = args[:metadata] if args.key?(:metadata)
1142
+ @name = args[:name] if args.key?(:name)
1143
+ end
1144
+ end
1145
+
1146
+ # MigratingVm describes the VM that will be migrated from a Source environment
1147
+ # and its replication state.
1148
+ class MigratingVm
1149
+ include Google::Apis::Core::Hashable
1150
+
1151
+ # ComputeEngineTargetDefaults is a collection of details for creating a VM in a
1152
+ # target Compute Engine project.
1153
+ # Corresponds to the JSON property `computeEngineTargetDefaults`
1154
+ # @return [Google::Apis::VmmigrationV1alpha1::ComputeEngineTargetDefaults]
1155
+ attr_accessor :compute_engine_target_defaults
1156
+
1157
+ # TargetVMDetails is a collection of details for creating a VM in a target
1158
+ # Compute Engine project.
1159
+ # Corresponds to the JSON property `computeEngineVmDefaults`
1160
+ # @return [Google::Apis::VmmigrationV1alpha1::TargetVmDetails]
1161
+ attr_accessor :compute_engine_vm_defaults
1162
+
1163
+ # Output only. The time the migrating VM was created (this refers to this
1164
+ # resource and not to the time it was installed in the source).
1165
+ # Corresponds to the JSON property `createTime`
1166
+ # @return [String]
1167
+ attr_accessor :create_time
1168
+
1169
+ # ReplicationCycle contains information about the current replication cycle
1170
+ # status.
1171
+ # Corresponds to the JSON property `currentSyncInfo`
1172
+ # @return [Google::Apis::VmmigrationV1alpha1::ReplicationCycle]
1173
+ attr_accessor :current_sync_info
1174
+
1175
+ # The description attached to the migrating VM by the user.
1176
+ # Corresponds to the JSON property `description`
1177
+ # @return [String]
1178
+ attr_accessor :description
1179
+
1180
+ # The display name attached to the MigratingVm by the user.
1181
+ # Corresponds to the JSON property `displayName`
1182
+ # @return [String]
1183
+ attr_accessor :display_name
1184
+
1185
+ # The `Status` type defines a logical error model that is suitable for different
1186
+ # programming environments, including REST APIs and RPC APIs. It is used by [
1187
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
1188
+ # data: error code, error message, and error details. You can find out more
1189
+ # about this error model and how to work with it in the [API Design Guide](https:
1190
+ # //cloud.google.com/apis/design/errors).
1191
+ # Corresponds to the JSON property `error`
1192
+ # @return [Google::Apis::VmmigrationV1alpha1::Status]
1193
+ attr_accessor :error
1194
+
1195
+ # Output only. The group this migrating vm is included in, if any. The group is
1196
+ # represented by the full path of the appropriate Group resource.
1197
+ # Corresponds to the JSON property `group`
1198
+ # @return [String]
1199
+ attr_accessor :group
1200
+
1201
+ # The labels of the migrating VM.
1202
+ # Corresponds to the JSON property `labels`
1203
+ # @return [Hash<String,String>]
1204
+ attr_accessor :labels
1205
+
1206
+ # ReplicationSync contain information about the last replica sync to the cloud.
1207
+ # Corresponds to the JSON property `lastSync`
1208
+ # @return [Google::Apis::VmmigrationV1alpha1::ReplicationSync]
1209
+ attr_accessor :last_sync
1210
+
1211
+ # Output only. The identifier of the MigratingVm.
1212
+ # Corresponds to the JSON property `name`
1213
+ # @return [String]
1214
+ attr_accessor :name
1215
+
1216
+ # A policy for scheduling replications.
1217
+ # Corresponds to the JSON property `policy`
1218
+ # @return [Google::Apis::VmmigrationV1alpha1::SchedulePolicy]
1219
+ attr_accessor :policy
1220
+
1221
+ # Output only. The recent clone jobs performed on the migrating VM. This field
1222
+ # holds the vm's last completed clone job and the vm's running clone job, if one
1223
+ # exists.
1224
+ # Corresponds to the JSON property `recentCloneJobs`
1225
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::CloneJob>]
1226
+ attr_accessor :recent_clone_jobs
1227
+
1228
+ # Output only. The recent cutover jobs performed on the migrating VM. This field
1229
+ # holds the vm's last completed cutover job and the vm's running cutover job, if
1230
+ # one exists.
1231
+ # Corresponds to the JSON property `recentCutoverJobs`
1232
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::CutoverJob>]
1233
+ attr_accessor :recent_cutover_jobs
1234
+
1235
+ # The unique ID of the VM in the source. The VM's name in vSphere can be changed,
1236
+ # so this is not the VM's name but rather its moRef id. This id is of the form
1237
+ # vm-.
1238
+ # Corresponds to the JSON property `sourceVmId`
1239
+ # @return [String]
1240
+ attr_accessor :source_vm_id
1241
+
1242
+ # Output only. State of the MigratingVm.
1243
+ # Corresponds to the JSON property `state`
1244
+ # @return [String]
1245
+ attr_accessor :state
1246
+
1247
+ # Output only. The last time the migrating VM state was updated.
1248
+ # Corresponds to the JSON property `stateTime`
1249
+ # @return [String]
1250
+ attr_accessor :state_time
1251
+
1252
+ # TargetVMDetails is a collection of details for creating a VM in a target
1253
+ # Compute Engine project.
1254
+ # Corresponds to the JSON property `targetDefaults`
1255
+ # @return [Google::Apis::VmmigrationV1alpha1::TargetVmDetails]
1256
+ attr_accessor :target_defaults
1257
+
1258
+ # Output only. The last time the migrating VM resource was updated.
1259
+ # Corresponds to the JSON property `updateTime`
1260
+ # @return [String]
1261
+ attr_accessor :update_time
1262
+
1263
+ def initialize(**args)
1264
+ update!(**args)
1265
+ end
1266
+
1267
+ # Update properties of this object
1268
+ def update!(**args)
1269
+ @compute_engine_target_defaults = args[:compute_engine_target_defaults] if args.key?(:compute_engine_target_defaults)
1270
+ @compute_engine_vm_defaults = args[:compute_engine_vm_defaults] if args.key?(:compute_engine_vm_defaults)
1271
+ @create_time = args[:create_time] if args.key?(:create_time)
1272
+ @current_sync_info = args[:current_sync_info] if args.key?(:current_sync_info)
1273
+ @description = args[:description] if args.key?(:description)
1274
+ @display_name = args[:display_name] if args.key?(:display_name)
1275
+ @error = args[:error] if args.key?(:error)
1276
+ @group = args[:group] if args.key?(:group)
1277
+ @labels = args[:labels] if args.key?(:labels)
1278
+ @last_sync = args[:last_sync] if args.key?(:last_sync)
1279
+ @name = args[:name] if args.key?(:name)
1280
+ @policy = args[:policy] if args.key?(:policy)
1281
+ @recent_clone_jobs = args[:recent_clone_jobs] if args.key?(:recent_clone_jobs)
1282
+ @recent_cutover_jobs = args[:recent_cutover_jobs] if args.key?(:recent_cutover_jobs)
1283
+ @source_vm_id = args[:source_vm_id] if args.key?(:source_vm_id)
1284
+ @state = args[:state] if args.key?(:state)
1285
+ @state_time = args[:state_time] if args.key?(:state_time)
1286
+ @target_defaults = args[:target_defaults] if args.key?(:target_defaults)
1287
+ @update_time = args[:update_time] if args.key?(:update_time)
1288
+ end
1289
+ end
1290
+
1291
+ # Represents migration resource error information that can be used with google.
1292
+ # rpc.Status message. MigrationError is used to present the user with error
1293
+ # information in migration operations.
1294
+ class MigrationError
1295
+ include Google::Apis::Core::Hashable
1296
+
1297
+ # Provides a localized error message that is safe to return to the user which
1298
+ # can be attached to an RPC error.
1299
+ # Corresponds to the JSON property `actionItem`
1300
+ # @return [Google::Apis::VmmigrationV1alpha1::LocalizedMessage]
1301
+ attr_accessor :action_item
1302
+
1303
+ # Output only. The error code.
1304
+ # Corresponds to the JSON property `code`
1305
+ # @return [String]
1306
+ attr_accessor :code
1307
+
1308
+ # Provides a localized error message that is safe to return to the user which
1309
+ # can be attached to an RPC error.
1310
+ # Corresponds to the JSON property `errorMessage`
1311
+ # @return [Google::Apis::VmmigrationV1alpha1::LocalizedMessage]
1312
+ attr_accessor :error_message
1313
+
1314
+ # Output only. The time the error occurred.
1315
+ # Corresponds to the JSON property `errorTime`
1316
+ # @return [String]
1317
+ attr_accessor :error_time
1318
+
1319
+ # Output only. URL(s) pointing to additional information on handling the current
1320
+ # error.
1321
+ # Corresponds to the JSON property `helpLinks`
1322
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::Link>]
1323
+ attr_accessor :help_links
1324
+
1325
+ def initialize(**args)
1326
+ update!(**args)
1327
+ end
1328
+
1329
+ # Update properties of this object
1330
+ def update!(**args)
1331
+ @action_item = args[:action_item] if args.key?(:action_item)
1332
+ @code = args[:code] if args.key?(:code)
1333
+ @error_message = args[:error_message] if args.key?(:error_message)
1334
+ @error_time = args[:error_time] if args.key?(:error_time)
1335
+ @help_links = args[:help_links] if args.key?(:help_links)
1336
+ end
1337
+ end
1338
+
1339
+ # NetworkInterface represents a NIC of a VM.
1340
+ class NetworkInterface
1341
+ include Google::Apis::Core::Hashable
1342
+
1343
+ # The external IP to define in the NIC.
1344
+ # Corresponds to the JSON property `externalIp`
1345
+ # @return [String]
1346
+ attr_accessor :external_ip
1347
+
1348
+ # The internal IP to define in the NIC. The formats accepted are: `ephemeral` \
1349
+ # ipv4 address \ a named address resource full path.
1350
+ # Corresponds to the JSON property `internalIp`
1351
+ # @return [String]
1352
+ attr_accessor :internal_ip
1353
+
1354
+ # The network to connect the NIC to.
1355
+ # Corresponds to the JSON property `network`
1356
+ # @return [String]
1357
+ attr_accessor :network
1358
+
1359
+ # The subnetwork to connect the NIC to.
1360
+ # Corresponds to the JSON property `subnetwork`
1361
+ # @return [String]
1362
+ attr_accessor :subnetwork
1363
+
1364
+ def initialize(**args)
1365
+ update!(**args)
1366
+ end
1367
+
1368
+ # Update properties of this object
1369
+ def update!(**args)
1370
+ @external_ip = args[:external_ip] if args.key?(:external_ip)
1371
+ @internal_ip = args[:internal_ip] if args.key?(:internal_ip)
1372
+ @network = args[:network] if args.key?(:network)
1373
+ @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
1374
+ end
1375
+ end
1376
+
1377
+ # This resource represents a long-running operation that is the result of a
1378
+ # network API call.
1379
+ class Operation
1380
+ include Google::Apis::Core::Hashable
1381
+
1382
+ # If the value is `false`, it means the operation is still in progress. If `true`
1383
+ # , the operation is completed, and either `error` or `response` is available.
1384
+ # Corresponds to the JSON property `done`
1385
+ # @return [Boolean]
1386
+ attr_accessor :done
1387
+ alias_method :done?, :done
1388
+
1389
+ # The `Status` type defines a logical error model that is suitable for different
1390
+ # programming environments, including REST APIs and RPC APIs. It is used by [
1391
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
1392
+ # data: error code, error message, and error details. You can find out more
1393
+ # about this error model and how to work with it in the [API Design Guide](https:
1394
+ # //cloud.google.com/apis/design/errors).
1395
+ # Corresponds to the JSON property `error`
1396
+ # @return [Google::Apis::VmmigrationV1alpha1::Status]
1397
+ attr_accessor :error
1398
+
1399
+ # Service-specific metadata associated with the operation. It typically contains
1400
+ # progress information and common metadata such as create time. Some services
1401
+ # might not provide such metadata. Any method that returns a long-running
1402
+ # operation should document the metadata type, if any.
1403
+ # Corresponds to the JSON property `metadata`
1404
+ # @return [Hash<String,Object>]
1405
+ attr_accessor :metadata
1406
+
1407
+ # The server-assigned name, which is only unique within the same service that
1408
+ # originally returns it. If you use the default HTTP mapping, the `name` should
1409
+ # be a resource name ending with `operations/`unique_id``.
1410
+ # Corresponds to the JSON property `name`
1411
+ # @return [String]
1412
+ attr_accessor :name
1413
+
1414
+ # The normal response of the operation in case of success. If the original
1415
+ # method returns no data on success, such as `Delete`, the response is `google.
1416
+ # protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`,
1417
+ # the response should be the resource. For other methods, the response should
1418
+ # have the type `XxxResponse`, where `Xxx` is the original method name. For
1419
+ # example, if the original method name is `TakeSnapshot()`, the inferred
1420
+ # response type is `TakeSnapshotResponse`.
1421
+ # Corresponds to the JSON property `response`
1422
+ # @return [Hash<String,Object>]
1423
+ attr_accessor :response
1424
+
1425
+ def initialize(**args)
1426
+ update!(**args)
1427
+ end
1428
+
1429
+ # Update properties of this object
1430
+ def update!(**args)
1431
+ @done = args[:done] if args.key?(:done)
1432
+ @error = args[:error] if args.key?(:error)
1433
+ @metadata = args[:metadata] if args.key?(:metadata)
1434
+ @name = args[:name] if args.key?(:name)
1435
+ @response = args[:response] if args.key?(:response)
1436
+ end
1437
+ end
1438
+
1439
+ # Represents the metadata of the long-running operation.
1440
+ class OperationMetadata
1441
+ include Google::Apis::Core::Hashable
1442
+
1443
+ # Output only. API version used to start the operation.
1444
+ # Corresponds to the JSON property `apiVersion`
1445
+ # @return [String]
1446
+ attr_accessor :api_version
1447
+
1448
+ # Output only. The time the operation was created.
1449
+ # Corresponds to the JSON property `createTime`
1450
+ # @return [String]
1451
+ attr_accessor :create_time
1452
+
1453
+ # Output only. The time the operation finished running.
1454
+ # Corresponds to the JSON property `endTime`
1455
+ # @return [String]
1456
+ attr_accessor :end_time
1457
+
1458
+ # Output only. Identifies whether the user has requested cancellation of the
1459
+ # operation. Operations that have successfully been cancelled have Operation.
1460
+ # error value with a google.rpc.Status.code of 1, corresponding to `Code.
1461
+ # CANCELLED`.
1462
+ # Corresponds to the JSON property `requestedCancellation`
1463
+ # @return [Boolean]
1464
+ attr_accessor :requested_cancellation
1465
+ alias_method :requested_cancellation?, :requested_cancellation
1466
+
1467
+ # Output only. Human-readable status of the operation, if any.
1468
+ # Corresponds to the JSON property `statusMessage`
1469
+ # @return [String]
1470
+ attr_accessor :status_message
1471
+
1472
+ # Output only. Server-defined resource path for the target of the operation.
1473
+ # Corresponds to the JSON property `target`
1474
+ # @return [String]
1475
+ attr_accessor :target
1476
+
1477
+ # Output only. Name of the verb executed by the operation.
1478
+ # Corresponds to the JSON property `verb`
1479
+ # @return [String]
1480
+ attr_accessor :verb
1481
+
1482
+ def initialize(**args)
1483
+ update!(**args)
1484
+ end
1485
+
1486
+ # Update properties of this object
1487
+ def update!(**args)
1488
+ @api_version = args[:api_version] if args.key?(:api_version)
1489
+ @create_time = args[:create_time] if args.key?(:create_time)
1490
+ @end_time = args[:end_time] if args.key?(:end_time)
1491
+ @requested_cancellation = args[:requested_cancellation] if args.key?(:requested_cancellation)
1492
+ @status_message = args[:status_message] if args.key?(:status_message)
1493
+ @target = args[:target] if args.key?(:target)
1494
+ @verb = args[:verb] if args.key?(:verb)
1495
+ end
1496
+ end
1497
+
1498
+ # Request message for 'PauseMigration' request.
1499
+ class PauseMigrationRequest
1500
+ include Google::Apis::Core::Hashable
1501
+
1502
+ def initialize(**args)
1503
+ update!(**args)
1504
+ end
1505
+
1506
+ # Update properties of this object
1507
+ def update!(**args)
1508
+ end
1509
+ end
1510
+
1511
+ # Request message for 'RemoveMigration' request.
1512
+ class RemoveGroupMigrationRequest
1513
+ include Google::Apis::Core::Hashable
1514
+
1515
+ # The MigratingVm to remove.
1516
+ # Corresponds to the JSON property `migratingVm`
1517
+ # @return [String]
1518
+ attr_accessor :migrating_vm
1519
+
1520
+ def initialize(**args)
1521
+ update!(**args)
1522
+ end
1523
+
1524
+ # Update properties of this object
1525
+ def update!(**args)
1526
+ @migrating_vm = args[:migrating_vm] if args.key?(:migrating_vm)
1527
+ end
1528
+ end
1529
+
1530
+ # ReplicationCycle contains information about the current replication cycle
1531
+ # status.
1532
+ class ReplicationCycle
1533
+ include Google::Apis::Core::Hashable
1534
+
1535
+ # The current progress in percentage of this cycle.
1536
+ # Corresponds to the JSON property `progress`
1537
+ # @return [Fixnum]
1538
+ attr_accessor :progress
1539
+
1540
+ # The current progress in percentage of this cycle.
1541
+ # Corresponds to the JSON property `progressPercent`
1542
+ # @return [Fixnum]
1543
+ attr_accessor :progress_percent
1544
+
1545
+ # The time the replication cycle has started.
1546
+ # Corresponds to the JSON property `startTime`
1547
+ # @return [String]
1548
+ attr_accessor :start_time
1549
+
1550
+ def initialize(**args)
1551
+ update!(**args)
1552
+ end
1553
+
1554
+ # Update properties of this object
1555
+ def update!(**args)
1556
+ @progress = args[:progress] if args.key?(:progress)
1557
+ @progress_percent = args[:progress_percent] if args.key?(:progress_percent)
1558
+ @start_time = args[:start_time] if args.key?(:start_time)
1559
+ end
1560
+ end
1561
+
1562
+ # ReplicationSync contain information about the last replica sync to the cloud.
1563
+ class ReplicationSync
1564
+ include Google::Apis::Core::Hashable
1565
+
1566
+ # The most updated snapshot created time in the source that finished replication.
1567
+ # Corresponds to the JSON property `lastSyncTime`
1568
+ # @return [String]
1569
+ attr_accessor :last_sync_time
1570
+
1571
+ def initialize(**args)
1572
+ update!(**args)
1573
+ end
1574
+
1575
+ # Update properties of this object
1576
+ def update!(**args)
1577
+ @last_sync_time = args[:last_sync_time] if args.key?(:last_sync_time)
1578
+ end
1579
+ end
1580
+
1581
+ # Request message for 'ResumeMigration' request.
1582
+ class ResumeMigrationRequest
1583
+ include Google::Apis::Core::Hashable
1584
+
1585
+ def initialize(**args)
1586
+ update!(**args)
1587
+ end
1588
+
1589
+ # Update properties of this object
1590
+ def update!(**args)
1591
+ end
1592
+ end
1593
+
1594
+ # A policy for scheduling replications.
1595
+ class SchedulePolicy
1596
+ include Google::Apis::Core::Hashable
1597
+
1598
+ # The idle duration between replication stages.
1599
+ # Corresponds to the JSON property `idleDuration`
1600
+ # @return [String]
1601
+ attr_accessor :idle_duration
1602
+
1603
+ # A flag to indicate whether to skip OS adaptation during the replication sync.
1604
+ # OS adaptation is a process where the VM's operating system undergoes changes
1605
+ # and adaptations to fully function on Compute Engine.
1606
+ # Corresponds to the JSON property `skipOsAdaptation`
1607
+ # @return [Boolean]
1608
+ attr_accessor :skip_os_adaptation
1609
+ alias_method :skip_os_adaptation?, :skip_os_adaptation
1610
+
1611
+ def initialize(**args)
1612
+ update!(**args)
1613
+ end
1614
+
1615
+ # Update properties of this object
1616
+ def update!(**args)
1617
+ @idle_duration = args[:idle_duration] if args.key?(:idle_duration)
1618
+ @skip_os_adaptation = args[:skip_os_adaptation] if args.key?(:skip_os_adaptation)
1619
+ end
1620
+ end
1621
+
1622
+ # Node Affinity: the configuration of desired nodes onto which this Instance
1623
+ # could be scheduled. Based on https://cloud.google.com/compute/docs/reference/
1624
+ # rest/v1/instances/setScheduling
1625
+ class SchedulingNodeAffinity
1626
+ include Google::Apis::Core::Hashable
1627
+
1628
+ # The label key of Node resource to reference.
1629
+ # Corresponds to the JSON property `key`
1630
+ # @return [String]
1631
+ attr_accessor :key
1632
+
1633
+ # The operator to use for the node resources specified in the `values` parameter.
1634
+ # Corresponds to the JSON property `operator`
1635
+ # @return [String]
1636
+ attr_accessor :operator
1637
+
1638
+ # Corresponds to the label values of Node resource.
1639
+ # Corresponds to the JSON property `values`
1640
+ # @return [Array<String>]
1641
+ attr_accessor :values
1642
+
1643
+ def initialize(**args)
1644
+ update!(**args)
1645
+ end
1646
+
1647
+ # Update properties of this object
1648
+ def update!(**args)
1649
+ @key = args[:key] if args.key?(:key)
1650
+ @operator = args[:operator] if args.key?(:operator)
1651
+ @values = args[:values] if args.key?(:values)
1652
+ end
1653
+ end
1654
+
1655
+ # Source message describes a specific vm migration Source resource. It contains
1656
+ # the source environment information.
1657
+ class Source
1658
+ include Google::Apis::Core::Hashable
1659
+
1660
+ # Output only. The create time timestamp.
1661
+ # Corresponds to the JSON property `createTime`
1662
+ # @return [String]
1663
+ attr_accessor :create_time
1664
+
1665
+ # User-provided description of the source.
1666
+ # Corresponds to the JSON property `description`
1667
+ # @return [String]
1668
+ attr_accessor :description
1669
+
1670
+ # The `Status` type defines a logical error model that is suitable for different
1671
+ # programming environments, including REST APIs and RPC APIs. It is used by [
1672
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
1673
+ # data: error code, error message, and error details. You can find out more
1674
+ # about this error model and how to work with it in the [API Design Guide](https:
1675
+ # //cloud.google.com/apis/design/errors).
1676
+ # Corresponds to the JSON property `error`
1677
+ # @return [Google::Apis::VmmigrationV1alpha1::Status]
1678
+ attr_accessor :error
1679
+
1680
+ # The labels of the source.
1681
+ # Corresponds to the JSON property `labels`
1682
+ # @return [Hash<String,String>]
1683
+ attr_accessor :labels
1684
+
1685
+ # Output only. The Source name.
1686
+ # Corresponds to the JSON property `name`
1687
+ # @return [String]
1688
+ attr_accessor :name
1689
+
1690
+ # Output only. The update time timestamp.
1691
+ # Corresponds to the JSON property `updateTime`
1692
+ # @return [String]
1693
+ attr_accessor :update_time
1694
+
1695
+ # VmwareSourceDetails message describes a specific source details for the vmware
1696
+ # source type.
1697
+ # Corresponds to the JSON property `vmware`
1698
+ # @return [Google::Apis::VmmigrationV1alpha1::VmwareSourceDetails]
1699
+ attr_accessor :vmware
1700
+
1701
+ def initialize(**args)
1702
+ update!(**args)
1703
+ end
1704
+
1705
+ # Update properties of this object
1706
+ def update!(**args)
1707
+ @create_time = args[:create_time] if args.key?(:create_time)
1708
+ @description = args[:description] if args.key?(:description)
1709
+ @error = args[:error] if args.key?(:error)
1710
+ @labels = args[:labels] if args.key?(:labels)
1711
+ @name = args[:name] if args.key?(:name)
1712
+ @update_time = args[:update_time] if args.key?(:update_time)
1713
+ @vmware = args[:vmware] if args.key?(:vmware)
1714
+ end
1715
+ end
1716
+
1717
+ # Request message for 'StartMigrationRequest' request.
1718
+ class StartMigrationRequest
1719
+ include Google::Apis::Core::Hashable
1720
+
1721
+ def initialize(**args)
1722
+ update!(**args)
1723
+ end
1724
+
1725
+ # Update properties of this object
1726
+ def update!(**args)
1727
+ end
1728
+ end
1729
+
1730
+ # The `Status` type defines a logical error model that is suitable for different
1731
+ # programming environments, including REST APIs and RPC APIs. It is used by [
1732
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
1733
+ # data: error code, error message, and error details. You can find out more
1734
+ # about this error model and how to work with it in the [API Design Guide](https:
1735
+ # //cloud.google.com/apis/design/errors).
1736
+ class Status
1737
+ include Google::Apis::Core::Hashable
1738
+
1739
+ # The status code, which should be an enum value of google.rpc.Code.
1740
+ # Corresponds to the JSON property `code`
1741
+ # @return [Fixnum]
1742
+ attr_accessor :code
1743
+
1744
+ # A list of messages that carry the error details. There is a common set of
1745
+ # message types for APIs to use.
1746
+ # Corresponds to the JSON property `details`
1747
+ # @return [Array<Hash<String,Object>>]
1748
+ attr_accessor :details
1749
+
1750
+ # A developer-facing error message, which should be in English. Any user-facing
1751
+ # error message should be localized and sent in the google.rpc.Status.details
1752
+ # field, or localized by the client.
1753
+ # Corresponds to the JSON property `message`
1754
+ # @return [String]
1755
+ attr_accessor :message
1756
+
1757
+ def initialize(**args)
1758
+ update!(**args)
1759
+ end
1760
+
1761
+ # Update properties of this object
1762
+ def update!(**args)
1763
+ @code = args[:code] if args.key?(:code)
1764
+ @details = args[:details] if args.key?(:details)
1765
+ @message = args[:message] if args.key?(:message)
1766
+ end
1767
+ end
1768
+
1769
+ # TargetProject message represents a target Compute Engine project for a
1770
+ # migration or a clone.
1771
+ class TargetProject
1772
+ include Google::Apis::Core::Hashable
1773
+
1774
+ # Output only. The time this target project resource was created (not related to
1775
+ # when the Compute Engine project it points to was created).
1776
+ # Corresponds to the JSON property `createTime`
1777
+ # @return [String]
1778
+ attr_accessor :create_time
1779
+
1780
+ # The target project's description.
1781
+ # Corresponds to the JSON property `description`
1782
+ # @return [String]
1783
+ attr_accessor :description
1784
+
1785
+ # The name of the target project.
1786
+ # Corresponds to the JSON property `name`
1787
+ # @return [String]
1788
+ attr_accessor :name
1789
+
1790
+ # The target project ID (number) or project name.
1791
+ # Corresponds to the JSON property `project`
1792
+ # @return [String]
1793
+ attr_accessor :project
1794
+
1795
+ # Output only. The last time the target project resource was updated.
1796
+ # Corresponds to the JSON property `updateTime`
1797
+ # @return [String]
1798
+ attr_accessor :update_time
1799
+
1800
+ def initialize(**args)
1801
+ update!(**args)
1802
+ end
1803
+
1804
+ # Update properties of this object
1805
+ def update!(**args)
1806
+ @create_time = args[:create_time] if args.key?(:create_time)
1807
+ @description = args[:description] if args.key?(:description)
1808
+ @name = args[:name] if args.key?(:name)
1809
+ @project = args[:project] if args.key?(:project)
1810
+ @update_time = args[:update_time] if args.key?(:update_time)
1811
+ end
1812
+ end
1813
+
1814
+ # TargetVMDetails is a collection of details for creating a VM in a target
1815
+ # Compute Engine project.
1816
+ class TargetVmDetails
1817
+ include Google::Apis::Core::Hashable
1818
+
1819
+ # AppliedLicense holds the license data returned by adaptation module report.
1820
+ # Corresponds to the JSON property `appliedLicense`
1821
+ # @return [Google::Apis::VmmigrationV1alpha1::AppliedLicense]
1822
+ attr_accessor :applied_license
1823
+
1824
+ # Output only. The VM Boot Option, as set in the source vm.
1825
+ # Corresponds to the JSON property `bootOption`
1826
+ # @return [String]
1827
+ attr_accessor :boot_option
1828
+
1829
+ # Scheduling information for VM on maintenance/restart behaviour and node
1830
+ # allocation in sole tenant nodes.
1831
+ # Corresponds to the JSON property `computeScheduling`
1832
+ # @return [Google::Apis::VmmigrationV1alpha1::ComputeScheduling]
1833
+ attr_accessor :compute_scheduling
1834
+
1835
+ # The disk type to use in the VM.
1836
+ # Corresponds to the JSON property `diskType`
1837
+ # @return [String]
1838
+ attr_accessor :disk_type
1839
+
1840
+ # The external IP to define in the VM.
1841
+ # Corresponds to the JSON property `externalIp`
1842
+ # @return [String]
1843
+ attr_accessor :external_ip
1844
+
1845
+ # The internal IP to define in the VM. The formats accepted are: `ephemeral` \
1846
+ # ipv4 address \ a named address resource full path.
1847
+ # Corresponds to the JSON property `internalIp`
1848
+ # @return [String]
1849
+ attr_accessor :internal_ip
1850
+
1851
+ # A map of labels to associate with the VM.
1852
+ # Corresponds to the JSON property `labels`
1853
+ # @return [Hash<String,String>]
1854
+ attr_accessor :labels
1855
+
1856
+ # The license type to use in OS adaptation.
1857
+ # Corresponds to the JSON property `licenseType`
1858
+ # @return [String]
1859
+ attr_accessor :license_type
1860
+
1861
+ # The machine type to create the VM with.
1862
+ # Corresponds to the JSON property `machineType`
1863
+ # @return [String]
1864
+ attr_accessor :machine_type
1865
+
1866
+ # The machine type series to create the VM with.
1867
+ # Corresponds to the JSON property `machineTypeSeries`
1868
+ # @return [String]
1869
+ attr_accessor :machine_type_series
1870
+
1871
+ # The metadata key/value pairs to assign to the VM.
1872
+ # Corresponds to the JSON property `metadata`
1873
+ # @return [Hash<String,String>]
1874
+ attr_accessor :metadata
1875
+
1876
+ # The name of the VM to create.
1877
+ # Corresponds to the JSON property `name`
1878
+ # @return [String]
1879
+ attr_accessor :name
1880
+
1881
+ # The network to connect the VM to.
1882
+ # Corresponds to the JSON property `network`
1883
+ # @return [String]
1884
+ attr_accessor :network
1885
+
1886
+ # List of NICs connected to this VM.
1887
+ # Corresponds to the JSON property `networkInterfaces`
1888
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::NetworkInterface>]
1889
+ attr_accessor :network_interfaces
1890
+
1891
+ # A map of network tags to associate with the VM.
1892
+ # Corresponds to the JSON property `networkTags`
1893
+ # @return [Array<String>]
1894
+ attr_accessor :network_tags
1895
+
1896
+ # The project in which to create the VM.
1897
+ # Corresponds to the JSON property `project`
1898
+ # @return [String]
1899
+ attr_accessor :project
1900
+
1901
+ # Defines whether the instance has Secure Boot enabled. This can be set to true
1902
+ # only if the vm boot option is EFI.
1903
+ # Corresponds to the JSON property `secureBoot`
1904
+ # @return [Boolean]
1905
+ attr_accessor :secure_boot
1906
+ alias_method :secure_boot?, :secure_boot
1907
+
1908
+ # The service account to associate the VM with.
1909
+ # Corresponds to the JSON property `serviceAccount`
1910
+ # @return [String]
1911
+ attr_accessor :service_account
1912
+
1913
+ # The subnetwork to connect the VM to.
1914
+ # Corresponds to the JSON property `subnetwork`
1915
+ # @return [String]
1916
+ attr_accessor :subnetwork
1917
+
1918
+ # The full path of the resource of type TargetProject which represents the
1919
+ # Compute Engine project in which to create this VM.
1920
+ # Corresponds to the JSON property `targetProject`
1921
+ # @return [String]
1922
+ attr_accessor :target_project
1923
+
1924
+ # The zone in which to create the VM.
1925
+ # Corresponds to the JSON property `zone`
1926
+ # @return [String]
1927
+ attr_accessor :zone
1928
+
1929
+ def initialize(**args)
1930
+ update!(**args)
1931
+ end
1932
+
1933
+ # Update properties of this object
1934
+ def update!(**args)
1935
+ @applied_license = args[:applied_license] if args.key?(:applied_license)
1936
+ @boot_option = args[:boot_option] if args.key?(:boot_option)
1937
+ @compute_scheduling = args[:compute_scheduling] if args.key?(:compute_scheduling)
1938
+ @disk_type = args[:disk_type] if args.key?(:disk_type)
1939
+ @external_ip = args[:external_ip] if args.key?(:external_ip)
1940
+ @internal_ip = args[:internal_ip] if args.key?(:internal_ip)
1941
+ @labels = args[:labels] if args.key?(:labels)
1942
+ @license_type = args[:license_type] if args.key?(:license_type)
1943
+ @machine_type = args[:machine_type] if args.key?(:machine_type)
1944
+ @machine_type_series = args[:machine_type_series] if args.key?(:machine_type_series)
1945
+ @metadata = args[:metadata] if args.key?(:metadata)
1946
+ @name = args[:name] if args.key?(:name)
1947
+ @network = args[:network] if args.key?(:network)
1948
+ @network_interfaces = args[:network_interfaces] if args.key?(:network_interfaces)
1949
+ @network_tags = args[:network_tags] if args.key?(:network_tags)
1950
+ @project = args[:project] if args.key?(:project)
1951
+ @secure_boot = args[:secure_boot] if args.key?(:secure_boot)
1952
+ @service_account = args[:service_account] if args.key?(:service_account)
1953
+ @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
1954
+ @target_project = args[:target_project] if args.key?(:target_project)
1955
+ @zone = args[:zone] if args.key?(:zone)
1956
+ end
1957
+ end
1958
+
1959
+ # Utilization report details the utilization (CPU, memory, etc.) of selected
1960
+ # source VMs.
1961
+ class UtilizationReport
1962
+ include Google::Apis::Core::Hashable
1963
+
1964
+ # Output only. The time the report was created (this refers to the time of the
1965
+ # request, not the time the report creation completed).
1966
+ # Corresponds to the JSON property `createTime`
1967
+ # @return [String]
1968
+ attr_accessor :create_time
1969
+
1970
+ # The report display name, as assigned by the user.
1971
+ # Corresponds to the JSON property `displayName`
1972
+ # @return [String]
1973
+ attr_accessor :display_name
1974
+
1975
+ # The `Status` type defines a logical error model that is suitable for different
1976
+ # programming environments, including REST APIs and RPC APIs. It is used by [
1977
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
1978
+ # data: error code, error message, and error details. You can find out more
1979
+ # about this error model and how to work with it in the [API Design Guide](https:
1980
+ # //cloud.google.com/apis/design/errors).
1981
+ # Corresponds to the JSON property `error`
1982
+ # @return [Google::Apis::VmmigrationV1alpha1::Status]
1983
+ attr_accessor :error
1984
+
1985
+ # Output only. The point in time when the time frame ends. Notice that the time
1986
+ # frame is counted backwards. For instance if the "frame_end_time" value is 2021/
1987
+ # 01/20 and the time frame is WEEK then the report covers the week between 2021/
1988
+ # 01/20 and 2021/01/14.
1989
+ # Corresponds to the JSON property `frameEndTime`
1990
+ # @return [String]
1991
+ attr_accessor :frame_end_time
1992
+
1993
+ # Output only. The report unique name.
1994
+ # Corresponds to the JSON property `name`
1995
+ # @return [String]
1996
+ attr_accessor :name
1997
+
1998
+ # Output only. Current state of the report.
1999
+ # Corresponds to the JSON property `state`
2000
+ # @return [String]
2001
+ attr_accessor :state
2002
+
2003
+ # Output only. The time the state was last set.
2004
+ # Corresponds to the JSON property `stateTime`
2005
+ # @return [String]
2006
+ attr_accessor :state_time
2007
+
2008
+ # Time frame of the report.
2009
+ # Corresponds to the JSON property `timeFrame`
2010
+ # @return [String]
2011
+ attr_accessor :time_frame
2012
+
2013
+ # Output only. Total number of VMs included in the report.
2014
+ # Corresponds to the JSON property `vmCount`
2015
+ # @return [Fixnum]
2016
+ attr_accessor :vm_count
2017
+
2018
+ # List of utilization information per VM. When sent as part of the request, the "
2019
+ # vm_id" field is used in order to specify which VMs to include in the report.
2020
+ # In that case all other fields are ignored.
2021
+ # Corresponds to the JSON property `vms`
2022
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::VmUtilizationInfo>]
2023
+ attr_accessor :vms
2024
+
2025
+ # Output only. Total number of VMs included in the report.
2026
+ # Corresponds to the JSON property `vmsCount`
2027
+ # @return [Fixnum]
2028
+ attr_accessor :vms_count
2029
+
2030
+ def initialize(**args)
2031
+ update!(**args)
2032
+ end
2033
+
2034
+ # Update properties of this object
2035
+ def update!(**args)
2036
+ @create_time = args[:create_time] if args.key?(:create_time)
2037
+ @display_name = args[:display_name] if args.key?(:display_name)
2038
+ @error = args[:error] if args.key?(:error)
2039
+ @frame_end_time = args[:frame_end_time] if args.key?(:frame_end_time)
2040
+ @name = args[:name] if args.key?(:name)
2041
+ @state = args[:state] if args.key?(:state)
2042
+ @state_time = args[:state_time] if args.key?(:state_time)
2043
+ @time_frame = args[:time_frame] if args.key?(:time_frame)
2044
+ @vm_count = args[:vm_count] if args.key?(:vm_count)
2045
+ @vms = args[:vms] if args.key?(:vms)
2046
+ @vms_count = args[:vms_count] if args.key?(:vms_count)
2047
+ end
2048
+ end
2049
+
2050
+ # Utilization information of a single VM.
2051
+ class VmUtilizationInfo
2052
+ include Google::Apis::Core::Hashable
2053
+
2054
+ # Utilization metrics values for a single VM.
2055
+ # Corresponds to the JSON property `utilization`
2056
+ # @return [Google::Apis::VmmigrationV1alpha1::VmUtilizationMetrics]
2057
+ attr_accessor :utilization
2058
+
2059
+ # The VM's ID in the source.
2060
+ # Corresponds to the JSON property `vmId`
2061
+ # @return [String]
2062
+ attr_accessor :vm_id
2063
+
2064
+ # VmwareVmDetails describes a VM in vCenter.
2065
+ # Corresponds to the JSON property `vmwareVmDetails`
2066
+ # @return [Google::Apis::VmmigrationV1alpha1::VmwareVmDetails]
2067
+ attr_accessor :vmware_vm_details
2068
+
2069
+ def initialize(**args)
2070
+ update!(**args)
2071
+ end
2072
+
2073
+ # Update properties of this object
2074
+ def update!(**args)
2075
+ @utilization = args[:utilization] if args.key?(:utilization)
2076
+ @vm_id = args[:vm_id] if args.key?(:vm_id)
2077
+ @vmware_vm_details = args[:vmware_vm_details] if args.key?(:vmware_vm_details)
2078
+ end
2079
+ end
2080
+
2081
+ # Utilization metrics values for a single VM.
2082
+ class VmUtilizationMetrics
2083
+ include Google::Apis::Core::Hashable
2084
+
2085
+ # Average CPU usage, percent.
2086
+ # Corresponds to the JSON property `cpuAverage`
2087
+ # @return [Fixnum]
2088
+ attr_accessor :cpu_average
2089
+
2090
+ # Average CPU usage, percent.
2091
+ # Corresponds to the JSON property `cpuAveragePercent`
2092
+ # @return [Fixnum]
2093
+ attr_accessor :cpu_average_percent
2094
+
2095
+ # Max CPU usage, percent.
2096
+ # Corresponds to the JSON property `cpuMax`
2097
+ # @return [Fixnum]
2098
+ attr_accessor :cpu_max
2099
+
2100
+ # Max CPU usage, percent.
2101
+ # Corresponds to the JSON property `cpuMaxPercent`
2102
+ # @return [Fixnum]
2103
+ attr_accessor :cpu_max_percent
2104
+
2105
+ # Average disk IO rate, in kilobytes per second.
2106
+ # Corresponds to the JSON property `diskIoRateAverage`
2107
+ # @return [Fixnum]
2108
+ attr_accessor :disk_io_rate_average
2109
+
2110
+ # Average disk IO rate, in kilobytes per second.
2111
+ # Corresponds to the JSON property `diskIoRateAverageKbps`
2112
+ # @return [Fixnum]
2113
+ attr_accessor :disk_io_rate_average_kbps
2114
+
2115
+ # Max disk IO rate, in kilobytes per second.
2116
+ # Corresponds to the JSON property `diskIoRateMax`
2117
+ # @return [Fixnum]
2118
+ attr_accessor :disk_io_rate_max
2119
+
2120
+ # Max disk IO rate, in kilobytes per second.
2121
+ # Corresponds to the JSON property `diskIoRateMaxKbps`
2122
+ # @return [Fixnum]
2123
+ attr_accessor :disk_io_rate_max_kbps
2124
+
2125
+ # Average memory usage, percent.
2126
+ # Corresponds to the JSON property `memoryAverage`
2127
+ # @return [Fixnum]
2128
+ attr_accessor :memory_average
2129
+
2130
+ # Average memory usage, percent.
2131
+ # Corresponds to the JSON property `memoryAveragePercent`
2132
+ # @return [Fixnum]
2133
+ attr_accessor :memory_average_percent
2134
+
2135
+ # Max memory usage, percent.
2136
+ # Corresponds to the JSON property `memoryMax`
2137
+ # @return [Fixnum]
2138
+ attr_accessor :memory_max
2139
+
2140
+ # Max memory usage, percent.
2141
+ # Corresponds to the JSON property `memoryMaxPercent`
2142
+ # @return [Fixnum]
2143
+ attr_accessor :memory_max_percent
2144
+
2145
+ # Average network throughput (combined transmit-rates and receive-rates), in
2146
+ # kilobytes per second.
2147
+ # Corresponds to the JSON property `networkThroughputAverage`
2148
+ # @return [Fixnum]
2149
+ attr_accessor :network_throughput_average
2150
+
2151
+ # Average network throughput (combined transmit-rates and receive-rates), in
2152
+ # kilobytes per second.
2153
+ # Corresponds to the JSON property `networkThroughputAverageKbps`
2154
+ # @return [Fixnum]
2155
+ attr_accessor :network_throughput_average_kbps
2156
+
2157
+ # Max network throughput (combined transmit-rates and receive-rates), in
2158
+ # kilobytes per second.
2159
+ # Corresponds to the JSON property `networkThroughputMax`
2160
+ # @return [Fixnum]
2161
+ attr_accessor :network_throughput_max
2162
+
2163
+ # Max network throughput (combined transmit-rates and receive-rates), in
2164
+ # kilobytes per second.
2165
+ # Corresponds to the JSON property `networkThroughputMaxKbps`
2166
+ # @return [Fixnum]
2167
+ attr_accessor :network_throughput_max_kbps
2168
+
2169
+ def initialize(**args)
2170
+ update!(**args)
2171
+ end
2172
+
2173
+ # Update properties of this object
2174
+ def update!(**args)
2175
+ @cpu_average = args[:cpu_average] if args.key?(:cpu_average)
2176
+ @cpu_average_percent = args[:cpu_average_percent] if args.key?(:cpu_average_percent)
2177
+ @cpu_max = args[:cpu_max] if args.key?(:cpu_max)
2178
+ @cpu_max_percent = args[:cpu_max_percent] if args.key?(:cpu_max_percent)
2179
+ @disk_io_rate_average = args[:disk_io_rate_average] if args.key?(:disk_io_rate_average)
2180
+ @disk_io_rate_average_kbps = args[:disk_io_rate_average_kbps] if args.key?(:disk_io_rate_average_kbps)
2181
+ @disk_io_rate_max = args[:disk_io_rate_max] if args.key?(:disk_io_rate_max)
2182
+ @disk_io_rate_max_kbps = args[:disk_io_rate_max_kbps] if args.key?(:disk_io_rate_max_kbps)
2183
+ @memory_average = args[:memory_average] if args.key?(:memory_average)
2184
+ @memory_average_percent = args[:memory_average_percent] if args.key?(:memory_average_percent)
2185
+ @memory_max = args[:memory_max] if args.key?(:memory_max)
2186
+ @memory_max_percent = args[:memory_max_percent] if args.key?(:memory_max_percent)
2187
+ @network_throughput_average = args[:network_throughput_average] if args.key?(:network_throughput_average)
2188
+ @network_throughput_average_kbps = args[:network_throughput_average_kbps] if args.key?(:network_throughput_average_kbps)
2189
+ @network_throughput_max = args[:network_throughput_max] if args.key?(:network_throughput_max)
2190
+ @network_throughput_max_kbps = args[:network_throughput_max_kbps] if args.key?(:network_throughput_max_kbps)
2191
+ end
2192
+ end
2193
+
2194
+ # VmwareSourceDetails message describes a specific source details for the vmware
2195
+ # source type.
2196
+ class VmwareSourceDetails
2197
+ include Google::Apis::Core::Hashable
2198
+
2199
+ # Input only. The credentials password. This is write only and can not be read
2200
+ # in a GET operation.
2201
+ # Corresponds to the JSON property `password`
2202
+ # @return [String]
2203
+ attr_accessor :password
2204
+
2205
+ # The thumbprint representing the certificate for the vcenter.
2206
+ # Corresponds to the JSON property `thumbprint`
2207
+ # @return [String]
2208
+ attr_accessor :thumbprint
2209
+
2210
+ # The credentials username.
2211
+ # Corresponds to the JSON property `username`
2212
+ # @return [String]
2213
+ attr_accessor :username
2214
+
2215
+ # The ip address of the vcenter this Source represents.
2216
+ # Corresponds to the JSON property `vcenterIp`
2217
+ # @return [String]
2218
+ attr_accessor :vcenter_ip
2219
+
2220
+ def initialize(**args)
2221
+ update!(**args)
2222
+ end
2223
+
2224
+ # Update properties of this object
2225
+ def update!(**args)
2226
+ @password = args[:password] if args.key?(:password)
2227
+ @thumbprint = args[:thumbprint] if args.key?(:thumbprint)
2228
+ @username = args[:username] if args.key?(:username)
2229
+ @vcenter_ip = args[:vcenter_ip] if args.key?(:vcenter_ip)
2230
+ end
2231
+ end
2232
+
2233
+ # VmwareVmDetails describes a VM in vCenter.
2234
+ class VmwareVmDetails
2235
+ include Google::Apis::Core::Hashable
2236
+
2237
+ # Output only. The VM Boot Option.
2238
+ # Corresponds to the JSON property `bootOption`
2239
+ # @return [String]
2240
+ attr_accessor :boot_option
2241
+
2242
+ # The total size of the storage allocated to the VM in MB.
2243
+ # Corresponds to the JSON property `committedStorage`
2244
+ # @return [Fixnum]
2245
+ attr_accessor :committed_storage
2246
+
2247
+ # The total size of the storage allocated to the VM in MB.
2248
+ # Corresponds to the JSON property `committedStorageMb`
2249
+ # @return [Fixnum]
2250
+ attr_accessor :committed_storage_mb
2251
+
2252
+ # The number of cpus in the VM.
2253
+ # Corresponds to the JSON property `cpuCount`
2254
+ # @return [Fixnum]
2255
+ attr_accessor :cpu_count
2256
+
2257
+ # The descriptive name of the vCenter's datacenter this VM is contained in.
2258
+ # Corresponds to the JSON property `datacenterDescription`
2259
+ # @return [String]
2260
+ attr_accessor :datacenter_description
2261
+
2262
+ # The id of the vCenter's datacenter this VM is contained in.
2263
+ # Corresponds to the JSON property `datacenterId`
2264
+ # @return [String]
2265
+ attr_accessor :datacenter_id
2266
+
2267
+ # The number of disks the VM has.
2268
+ # Corresponds to the JSON property `diskCount`
2269
+ # @return [Fixnum]
2270
+ attr_accessor :disk_count
2271
+
2272
+ # The display name of the VM. Note that this is not necessarily unique.
2273
+ # Corresponds to the JSON property `displayName`
2274
+ # @return [String]
2275
+ attr_accessor :display_name
2276
+
2277
+ # The VM's OS. See for example https://pubs.vmware.com/vi-sdk/visdk250/
2278
+ # ReferenceGuide/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html for types of
2279
+ # strings this might hold.
2280
+ # Corresponds to the JSON property `guestDescription`
2281
+ # @return [String]
2282
+ attr_accessor :guest_description
2283
+
2284
+ # The size of the memory of the VM in MB.
2285
+ # Corresponds to the JSON property `memoryMb`
2286
+ # @return [Fixnum]
2287
+ attr_accessor :memory_mb
2288
+
2289
+ # The power state of the VM at the moment list was taken.
2290
+ # Corresponds to the JSON property `powerState`
2291
+ # @return [String]
2292
+ attr_accessor :power_state
2293
+
2294
+ # The unique identifier of the VM in vCenter.
2295
+ # Corresponds to the JSON property `uuid`
2296
+ # @return [String]
2297
+ attr_accessor :uuid
2298
+
2299
+ # The VM's id in the source (note that this is not the MigratingVm's id). This
2300
+ # is the moref id of the VM.
2301
+ # Corresponds to the JSON property `vmId`
2302
+ # @return [String]
2303
+ attr_accessor :vm_id
2304
+
2305
+ def initialize(**args)
2306
+ update!(**args)
2307
+ end
2308
+
2309
+ # Update properties of this object
2310
+ def update!(**args)
2311
+ @boot_option = args[:boot_option] if args.key?(:boot_option)
2312
+ @committed_storage = args[:committed_storage] if args.key?(:committed_storage)
2313
+ @committed_storage_mb = args[:committed_storage_mb] if args.key?(:committed_storage_mb)
2314
+ @cpu_count = args[:cpu_count] if args.key?(:cpu_count)
2315
+ @datacenter_description = args[:datacenter_description] if args.key?(:datacenter_description)
2316
+ @datacenter_id = args[:datacenter_id] if args.key?(:datacenter_id)
2317
+ @disk_count = args[:disk_count] if args.key?(:disk_count)
2318
+ @display_name = args[:display_name] if args.key?(:display_name)
2319
+ @guest_description = args[:guest_description] if args.key?(:guest_description)
2320
+ @memory_mb = args[:memory_mb] if args.key?(:memory_mb)
2321
+ @power_state = args[:power_state] if args.key?(:power_state)
2322
+ @uuid = args[:uuid] if args.key?(:uuid)
2323
+ @vm_id = args[:vm_id] if args.key?(:vm_id)
2324
+ end
2325
+ end
2326
+
2327
+ # VmwareVmsDetails describes VMs in vCenter.
2328
+ class VmwareVmsDetails
2329
+ include Google::Apis::Core::Hashable
2330
+
2331
+ # The details of the vmware VMs.
2332
+ # Corresponds to the JSON property `details`
2333
+ # @return [Array<Google::Apis::VmmigrationV1alpha1::VmwareVmDetails>]
2334
+ attr_accessor :details
2335
+
2336
+ def initialize(**args)
2337
+ update!(**args)
2338
+ end
2339
+
2340
+ # Update properties of this object
2341
+ def update!(**args)
2342
+ @details = args[:details] if args.key?(:details)
2343
+ end
2344
+ end
2345
+ end
2346
+ end
2347
+ end