google-apis-auditmanager_v1 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,1191 @@
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 AuditmanagerV1
24
+
25
+ # An audit report.
26
+ class AuditReport
27
+ include Google::Apis::Core::Hashable
28
+
29
+ # Output only. Compliance framework to use for the audit report. For example, `
30
+ # CIS_GCP_FOUNDATIONS_V1_2_0`.
31
+ # Corresponds to the JSON property `complianceFramework`
32
+ # @return [String]
33
+ attr_accessor :compliance_framework
34
+
35
+ # Output only. Deprecated. Compliance standard to be audited against. Use the `
36
+ # compliance_framework` field instead.
37
+ # Corresponds to the JSON property `complianceStandard`
38
+ # @return [String]
39
+ attr_accessor :compliance_standard
40
+
41
+ # Output only. Overall status of the controls.
42
+ # Corresponds to the JSON property `controlDetails`
43
+ # @return [Array<Google::Apis::AuditmanagerV1::ControlDetails>]
44
+ attr_accessor :control_details
45
+
46
+ # Output only. Creation time of the audit report.
47
+ # Corresponds to the JSON property `createTime`
48
+ # @return [String]
49
+ attr_accessor :create_time
50
+
51
+ # Cloud Storage bucket where the audit report is uploaded to.
52
+ # Corresponds to the JSON property `destinationDetails`
53
+ # @return [Google::Apis::AuditmanagerV1::DestinationDetails]
54
+ attr_accessor :destination_details
55
+
56
+ # Identifier. Name of the audit report, in one of the following formats: * `
57
+ # projects/`project`/locations/`location`/auditReports/`audit_report`` * `
58
+ # folders/`folder`/locations/`location`/auditReports/`audit_report`` * `
59
+ # organizations/`organization`/locations/`location`/auditReports/`audit_report``
60
+ # Corresponds to the JSON property `name`
61
+ # @return [String]
62
+ attr_accessor :name
63
+
64
+ # Output only. Client operation ID for the audit report.
65
+ # Corresponds to the JSON property `operationId`
66
+ # @return [String]
67
+ attr_accessor :operation_id
68
+
69
+ # Output only. State of audit report generation.
70
+ # Corresponds to the JSON property `reportGenerationState`
71
+ # @return [String]
72
+ attr_accessor :report_generation_state
73
+
74
+ # Additional information about the number of checks that were made during an
75
+ # audit operation.
76
+ # Corresponds to the JSON property `reportSummary`
77
+ # @return [Google::Apis::AuditmanagerV1::ReportSummary]
78
+ attr_accessor :report_summary
79
+
80
+ # Output only. Organization, folder, or project that the report is generated for,
81
+ # in one of the following formats: * `projects/`project`/locations/`location`` *
82
+ # `folders/`folder`/locations/`location`` * `organizations/`organization`/
83
+ # locations/`location``
84
+ # Corresponds to the JSON property `scope`
85
+ # @return [String]
86
+ attr_accessor :scope
87
+
88
+ # Output only. Project number, folder ID, or organization ID that the audit
89
+ # report was generated for.
90
+ # Corresponds to the JSON property `scopeId`
91
+ # @return [String]
92
+ attr_accessor :scope_id
93
+
94
+ def initialize(**args)
95
+ update!(**args)
96
+ end
97
+
98
+ # Update properties of this object
99
+ def update!(**args)
100
+ @compliance_framework = args[:compliance_framework] if args.key?(:compliance_framework)
101
+ @compliance_standard = args[:compliance_standard] if args.key?(:compliance_standard)
102
+ @control_details = args[:control_details] if args.key?(:control_details)
103
+ @create_time = args[:create_time] if args.key?(:create_time)
104
+ @destination_details = args[:destination_details] if args.key?(:destination_details)
105
+ @name = args[:name] if args.key?(:name)
106
+ @operation_id = args[:operation_id] if args.key?(:operation_id)
107
+ @report_generation_state = args[:report_generation_state] if args.key?(:report_generation_state)
108
+ @report_summary = args[:report_summary] if args.key?(:report_summary)
109
+ @scope = args[:scope] if args.key?(:scope)
110
+ @scope_id = args[:scope_id] if args.key?(:scope_id)
111
+ end
112
+ end
113
+
114
+ # An audit schedule, in one of the following formats: * `projects/`project`/
115
+ # locations/`location`/auditSchedules/`audit_schedule`` * `folders/`folder`/
116
+ # locations/`location`/auditSchedules/`audit_schedule``
117
+ class AuditSchedule
118
+ include Google::Apis::Core::Hashable
119
+
120
+ # Required. Framework (set of controls) that the audit scope report is generated
121
+ # against. For example, `NIST_800_53`.
122
+ # Corresponds to the JSON property `complianceFramework`
123
+ # @return [String]
124
+ attr_accessor :compliance_framework
125
+
126
+ # Output only. Timestamp when the schedule was created.
127
+ # Corresponds to the JSON property `createTime`
128
+ # @return [String]
129
+ attr_accessor :create_time
130
+
131
+ # Optional. Display name for the audit schedule.
132
+ # Corresponds to the JSON property `displayName`
133
+ # @return [String]
134
+ attr_accessor :display_name
135
+
136
+ # Output only. Describes the error if the schedule is in an error state.
137
+ # Corresponds to the JSON property `errorMessage`
138
+ # @return [String]
139
+ attr_accessor :error_message
140
+
141
+ # Required. Cloud Storage bucket where Audit Manager can upload the audit report
142
+ # and evidence. The format is `gs://`bucket_name``.
143
+ # Corresponds to the JSON property `gcsUri`
144
+ # @return [String]
145
+ attr_accessor :gcs_uri
146
+
147
+ # Output only. Timestamp when the audit run was last triggered.
148
+ # Corresponds to the JSON property `lastTriggerTime`
149
+ # @return [String]
150
+ attr_accessor :last_trigger_time
151
+
152
+ # Identifier. Unique identifier for the audit schedule. Format: projects/`
153
+ # project`/locations/`location`/auditSchedules/`audit_schedule` folders/`folder`/
154
+ # locations/`location`/auditSchedules/`audit_schedule` organizations/`
155
+ # organization`/locations/`location`/auditSchedules/`audit_schedule`
156
+ # Corresponds to the JSON property `name`
157
+ # @return [String]
158
+ attr_accessor :name
159
+
160
+ # Output only. Calculated timestamp for the next scheduled run.
161
+ # Corresponds to the JSON property `nextRunTime`
162
+ # @return [String]
163
+ attr_accessor :next_run_time
164
+
165
+ # Required. Format for the audit report.
166
+ # Corresponds to the JSON property `reportFormat`
167
+ # @return [String]
168
+ attr_accessor :report_format
169
+
170
+ # Timing and frequency parameters for recurring audit runs.
171
+ # Corresponds to the JSON property `scheduleConfig`
172
+ # @return [Google::Apis::AuditmanagerV1::ScheduleConfig]
173
+ attr_accessor :schedule_config
174
+
175
+ # Optional. State of the audit schedule. While most states are managed by the
176
+ # system, you can use UpdateAuditSchedule to start, pause, or delete the
177
+ # schedule.
178
+ # Corresponds to the JSON property `state`
179
+ # @return [String]
180
+ attr_accessor :state
181
+
182
+ # Output only. Timestamp when the schedule was last updated.
183
+ # Corresponds to the JSON property `updateTime`
184
+ # @return [String]
185
+ attr_accessor :update_time
186
+
187
+ def initialize(**args)
188
+ update!(**args)
189
+ end
190
+
191
+ # Update properties of this object
192
+ def update!(**args)
193
+ @compliance_framework = args[:compliance_framework] if args.key?(:compliance_framework)
194
+ @create_time = args[:create_time] if args.key?(:create_time)
195
+ @display_name = args[:display_name] if args.key?(:display_name)
196
+ @error_message = args[:error_message] if args.key?(:error_message)
197
+ @gcs_uri = args[:gcs_uri] if args.key?(:gcs_uri)
198
+ @last_trigger_time = args[:last_trigger_time] if args.key?(:last_trigger_time)
199
+ @name = args[:name] if args.key?(:name)
200
+ @next_run_time = args[:next_run_time] if args.key?(:next_run_time)
201
+ @report_format = args[:report_format] if args.key?(:report_format)
202
+ @schedule_config = args[:schedule_config] if args.key?(:schedule_config)
203
+ @state = args[:state] if args.key?(:state)
204
+ @update_time = args[:update_time] if args.key?(:update_time)
205
+ end
206
+ end
207
+
208
+ # Audit scope report.
209
+ class AuditScopeReport
210
+ include Google::Apis::Core::Hashable
211
+
212
+ # Identifier. Name for the audit scope report, in one of the following formats: *
213
+ # `projects/`project`/locations/`location`/auditScopeReports/`
214
+ # audit_scope_report`` * `folders/`folder`/locations/`location`/
215
+ # auditScopeReports/`audit_scope_report`` * `organizations/`organization`/
216
+ # locations/`location`/auditScopeReports/`audit_scope_report``
217
+ # Corresponds to the JSON property `name`
218
+ # @return [String]
219
+ attr_accessor :name
220
+
221
+ # Audit scope report content in byte format.
222
+ # Corresponds to the JSON property `scopeReportContents`
223
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
224
+ # @return [String]
225
+ attr_accessor :scope_report_contents
226
+
227
+ def initialize(**args)
228
+ update!(**args)
229
+ end
230
+
231
+ # Update properties of this object
232
+ def update!(**args)
233
+ @name = args[:name] if args.key?(:name)
234
+ @scope_report_contents = args[:scope_report_contents] if args.key?(:scope_report_contents)
235
+ end
236
+ end
237
+
238
+ # The request message for Operations.CancelOperation.
239
+ class CancelOperationRequest
240
+ include Google::Apis::Core::Hashable
241
+
242
+ def initialize(**args)
243
+ update!(**args)
244
+ end
245
+
246
+ # Update properties of this object
247
+ def update!(**args)
248
+ end
249
+ end
250
+
251
+ # A control.
252
+ class Control
253
+ include Google::Apis::Core::Hashable
254
+
255
+ # Regulatory family of the control.
256
+ # Corresponds to the JSON property `controlFamily`
257
+ # @return [Google::Apis::AuditmanagerV1::ControlFamily]
258
+ attr_accessor :control_family
259
+
260
+ # Output only. A description of your responsibility for this control.
261
+ # Corresponds to the JSON property `customerResponsibilityDescription`
262
+ # @return [String]
263
+ attr_accessor :customer_responsibility_description
264
+
265
+ # Output only. A description of how you can implement your responsibility for
266
+ # this control.
267
+ # Corresponds to the JSON property `customerResponsibilityImplementation`
268
+ # @return [String]
269
+ attr_accessor :customer_responsibility_implementation
270
+
271
+ # Output only. Description of the control.
272
+ # Corresponds to the JSON property `description`
273
+ # @return [String]
274
+ attr_accessor :description
275
+
276
+ # Output only. Display name of the control.
277
+ # Corresponds to the JSON property `displayName`
278
+ # @return [String]
279
+ attr_accessor :display_name
280
+
281
+ # Output only. Category that the control belongs to.
282
+ # Corresponds to the JSON property `family`
283
+ # @return [String]
284
+ attr_accessor :family
285
+
286
+ # Output only. A description of Google's responsibility for this control.
287
+ # Corresponds to the JSON property `googleResponsibilityDescription`
288
+ # @return [String]
289
+ attr_accessor :google_responsibility_description
290
+
291
+ # Output only. A description of how Google implements its responsibility for
292
+ # this control.
293
+ # Corresponds to the JSON property `googleResponsibilityImplementation`
294
+ # @return [String]
295
+ attr_accessor :google_responsibility_implementation
296
+
297
+ # Output only. Control identifier that's used to fetch the findings. The
298
+ # identifier is the same as the control report name.
299
+ # Corresponds to the JSON property `id`
300
+ # @return [String]
301
+ attr_accessor :id
302
+
303
+ # Output only. Who is responsible for implementing this control. Set to one of
304
+ # the following values: `GOOGLE`, `CUSTOMER`, or `SHARED`.
305
+ # Corresponds to the JSON property `responsibilityType`
306
+ # @return [String]
307
+ attr_accessor :responsibility_type
308
+
309
+ def initialize(**args)
310
+ update!(**args)
311
+ end
312
+
313
+ # Update properties of this object
314
+ def update!(**args)
315
+ @control_family = args[:control_family] if args.key?(:control_family)
316
+ @customer_responsibility_description = args[:customer_responsibility_description] if args.key?(:customer_responsibility_description)
317
+ @customer_responsibility_implementation = args[:customer_responsibility_implementation] if args.key?(:customer_responsibility_implementation)
318
+ @description = args[:description] if args.key?(:description)
319
+ @display_name = args[:display_name] if args.key?(:display_name)
320
+ @family = args[:family] if args.key?(:family)
321
+ @google_responsibility_description = args[:google_responsibility_description] if args.key?(:google_responsibility_description)
322
+ @google_responsibility_implementation = args[:google_responsibility_implementation] if args.key?(:google_responsibility_implementation)
323
+ @id = args[:id] if args.key?(:id)
324
+ @responsibility_type = args[:responsibility_type] if args.key?(:responsibility_type)
325
+ end
326
+ end
327
+
328
+ # Evaluation details for a control.
329
+ class ControlDetails
330
+ include Google::Apis::Core::Hashable
331
+
332
+ # Output only. Overall status of the findings for the control.
333
+ # Corresponds to the JSON property `complianceState`
334
+ # @return [String]
335
+ attr_accessor :compliance_state
336
+
337
+ # A control.
338
+ # Corresponds to the JSON property `control`
339
+ # @return [Google::Apis::AuditmanagerV1::Control]
340
+ attr_accessor :control
341
+
342
+ # Additional information about the number of checks that were made during an
343
+ # audit operation.
344
+ # Corresponds to the JSON property `controlReportSummary`
345
+ # @return [Google::Apis::AuditmanagerV1::ReportSummary]
346
+ attr_accessor :control_report_summary
347
+
348
+ def initialize(**args)
349
+ update!(**args)
350
+ end
351
+
352
+ # Update properties of this object
353
+ def update!(**args)
354
+ @compliance_state = args[:compliance_state] if args.key?(:compliance_state)
355
+ @control = args[:control] if args.key?(:control)
356
+ @control_report_summary = args[:control_report_summary] if args.key?(:control_report_summary)
357
+ end
358
+ end
359
+
360
+ # Regulatory family of the control.
361
+ class ControlFamily
362
+ include Google::Apis::Core::Hashable
363
+
364
+ # Display name of the regulatory control family.
365
+ # Corresponds to the JSON property `displayName`
366
+ # @return [String]
367
+ attr_accessor :display_name
368
+
369
+ # ID of the regulatory control family. To find the list of supported control
370
+ # families, use the ListControls method and review the `control_family` field in
371
+ # the response.
372
+ # Corresponds to the JSON property `familyId`
373
+ # @return [String]
374
+ attr_accessor :family_id
375
+
376
+ def initialize(**args)
377
+ update!(**args)
378
+ end
379
+
380
+ # Update properties of this object
381
+ def update!(**args)
382
+ @display_name = args[:display_name] if args.key?(:display_name)
383
+ @family_id = args[:family_id] if args.key?(:family_id)
384
+ end
385
+ end
386
+
387
+ # Cloud Storage bucket where the audit report is uploaded to.
388
+ class DestinationDetails
389
+ include Google::Apis::Core::Hashable
390
+
391
+ # URI for the Cloud Storage bucket, in the format `gs://`bucket_name``.
392
+ # Corresponds to the JSON property `gcsBucketUri`
393
+ # @return [String]
394
+ attr_accessor :gcs_bucket_uri
395
+
396
+ def initialize(**args)
397
+ update!(**args)
398
+ end
399
+
400
+ # Update properties of this object
401
+ def update!(**args)
402
+ @gcs_bucket_uri = args[:gcs_bucket_uri] if args.key?(:gcs_bucket_uri)
403
+ end
404
+ end
405
+
406
+ # Details about the bucket where you want to upload the audit report.
407
+ class EligibleDestination
408
+ include Google::Apis::Core::Hashable
409
+
410
+ # The location of the Cloud Storage bucket where you want to upload the audit
411
+ # report and evidence during the GenerateAuditReport API call.
412
+ # Corresponds to the JSON property `eligibleGcsBucket`
413
+ # @return [String]
414
+ attr_accessor :eligible_gcs_bucket
415
+
416
+ def initialize(**args)
417
+ update!(**args)
418
+ end
419
+
420
+ # Update properties of this object
421
+ def update!(**args)
422
+ @eligible_gcs_bucket = args[:eligible_gcs_bucket] if args.key?(:eligible_gcs_bucket)
423
+ end
424
+ end
425
+
426
+ # A generic empty message that you can re-use to avoid defining duplicated empty
427
+ # messages in your APIs. A typical example is to use it as the request or the
428
+ # response type of an API method. For instance: service Foo ` rpc Bar(google.
429
+ # protobuf.Empty) returns (google.protobuf.Empty); `
430
+ class Empty
431
+ include Google::Apis::Core::Hashable
432
+
433
+ def initialize(**args)
434
+ update!(**args)
435
+ end
436
+
437
+ # Update properties of this object
438
+ def update!(**args)
439
+ end
440
+ end
441
+
442
+ # Request message for EnrollResource.
443
+ class EnrollResourceRequest
444
+ include Google::Apis::Core::Hashable
445
+
446
+ # Required. Cloud Storage buckets that you can upload your audit reports to
447
+ # during the audit process. When you enroll an organization or folder, you can
448
+ # choose a Cloud Storage bucket from any project in the organization or folder.
449
+ # If you run an audit at the project level using the service agent at the
450
+ # organization or folder level, all the buckets that are associated with the
451
+ # service agent are available.
452
+ # Corresponds to the JSON property `destinations`
453
+ # @return [Array<Google::Apis::AuditmanagerV1::EligibleDestination>]
454
+ attr_accessor :destinations
455
+
456
+ # Optional. If `true`, only validates the request and does not enroll the
457
+ # resource. This executes standard request validation (such as schema, IAM, and
458
+ # destination checks) and skips the apply phase. Use this field for the
459
+ # following purposes: * **Infrastructure as Code (IaC)**: Allow tools like
460
+ # Terraform to run dry-run mutations (e.g., `terraform plan`) without creating
461
+ # real resources or incurring costs. * **User Interface Validation**: Enable
462
+ # real-time form and permission validation in custom UIs before submitting
463
+ # requests. * **CI/CD & Automation**: Test your scripts, permissions, and
464
+ # parameters safely without consuming resource quotas.
465
+ # Corresponds to the JSON property `validateOnly`
466
+ # @return [Boolean]
467
+ attr_accessor :validate_only
468
+ alias_method :validate_only?, :validate_only
469
+
470
+ def initialize(**args)
471
+ update!(**args)
472
+ end
473
+
474
+ # Update properties of this object
475
+ def update!(**args)
476
+ @destinations = args[:destinations] if args.key?(:destinations)
477
+ @validate_only = args[:validate_only] if args.key?(:validate_only)
478
+ end
479
+ end
480
+
481
+ # Organization, folder, or project to enroll for audit reports.
482
+ class Enrollment
483
+ include Google::Apis::Core::Hashable
484
+
485
+ # Output only. Cloud Storage buckets where you want to upload the audit reports.
486
+ # Corresponds to the JSON property `destinationDetails`
487
+ # @return [Array<Google::Apis::AuditmanagerV1::DestinationDetails>]
488
+ attr_accessor :destination_details
489
+
490
+ # Identifier. Name of the enrollment, in one of the following formats: * `
491
+ # projects/`project`/locations/`location`/enrollments/`enrollment`` * `folders/`
492
+ # folder`/locations/`location`/enrollments/`enrollment`` * `organizations/`
493
+ # organization`/locations/`location`/enrollments/`enrollment``
494
+ # Corresponds to the JSON property `name`
495
+ # @return [String]
496
+ attr_accessor :name
497
+
498
+ def initialize(**args)
499
+ update!(**args)
500
+ end
501
+
502
+ # Update properties of this object
503
+ def update!(**args)
504
+ @destination_details = args[:destination_details] if args.key?(:destination_details)
505
+ @name = args[:name] if args.key?(:name)
506
+ end
507
+ end
508
+
509
+ # Request message for GenerateAuditReport.
510
+ class GenerateAuditReportRequest
511
+ include Google::Apis::Core::Hashable
512
+
513
+ # Required. The framework that's used for the audit report. For example, `
514
+ # NIST_800_53`.
515
+ # Corresponds to the JSON property `complianceFramework`
516
+ # @return [String]
517
+ attr_accessor :compliance_framework
518
+
519
+ # Optional. Deprecated. Compliance standard for the audit report. Use the `
520
+ # compliance_framework` field instead.
521
+ # Corresponds to the JSON property `complianceStandard`
522
+ # @return [String]
523
+ attr_accessor :compliance_standard
524
+
525
+ # URL for the Cloud Storage bucket where the report and evidence is uploaded.
526
+ # You must select a bucket that was provided during the enrollment process.
527
+ # Corresponds to the JSON property `gcsUri`
528
+ # @return [String]
529
+ attr_accessor :gcs_uri
530
+
531
+ # Required. Format for the audit report.
532
+ # Corresponds to the JSON property `reportFormat`
533
+ # @return [String]
534
+ attr_accessor :report_format
535
+
536
+ # Optional. If `true`, only validates the request and does not generate the
537
+ # audit report. This executes standard request validation (such as schema,
538
+ # framework existence, scope, and IAM checks) and skips the apply phase. Use
539
+ # this field for the following purposes: * **Infrastructure as Code (IaC)**:
540
+ # Allow tools like Terraform to run dry-run mutations (e.g., `terraform plan`)
541
+ # without creating real resources or incurring costs. * **User Interface
542
+ # Validation**: Enable real-time form and permission validation in custom UIs
543
+ # before submitting requests. * **CI/CD & Automation**: Test your scripts,
544
+ # permissions, and parameters safely without triggering expensive Long-Running
545
+ # Operations (LROs) or consuming resource quotas.
546
+ # Corresponds to the JSON property `validateOnly`
547
+ # @return [Boolean]
548
+ attr_accessor :validate_only
549
+ alias_method :validate_only?, :validate_only
550
+
551
+ def initialize(**args)
552
+ update!(**args)
553
+ end
554
+
555
+ # Update properties of this object
556
+ def update!(**args)
557
+ @compliance_framework = args[:compliance_framework] if args.key?(:compliance_framework)
558
+ @compliance_standard = args[:compliance_standard] if args.key?(:compliance_standard)
559
+ @gcs_uri = args[:gcs_uri] if args.key?(:gcs_uri)
560
+ @report_format = args[:report_format] if args.key?(:report_format)
561
+ @validate_only = args[:validate_only] if args.key?(:validate_only)
562
+ end
563
+ end
564
+
565
+ # Request message for GenerateAuditScopeReport.
566
+ class GenerateAuditScopeReportRequest
567
+ include Google::Apis::Core::Hashable
568
+
569
+ # Required. Framework (set of controls) that the audit scope report is generated
570
+ # against. For example, `NIST_800_53`.
571
+ # Corresponds to the JSON property `complianceFramework`
572
+ # @return [String]
573
+ attr_accessor :compliance_framework
574
+
575
+ # Optional. Deprecated. The standard (industry or regulatory requirements) that
576
+ # the audit scope report is run against. Use the `compliance_framework` field
577
+ # instead.
578
+ # Corresponds to the JSON property `complianceStandard`
579
+ # @return [String]
580
+ attr_accessor :compliance_standard
581
+
582
+ # Required. Format for the audit scope report.
583
+ # Corresponds to the JSON property `reportFormat`
584
+ # @return [String]
585
+ attr_accessor :report_format
586
+
587
+ # Optional. If `true`, only validates the request and does not generate the
588
+ # audit scope report. This executes standard request validation (such as schema,
589
+ # framework existence, scope, and IAM checks) and skips the apply phase. Use
590
+ # this field for the following purposes: * **Infrastructure as Code (IaC)**:
591
+ # Allow tools like Terraform to run dry-run mutations (e.g., `terraform plan`)
592
+ # without creating real resources or incurring costs. * **User Interface
593
+ # Validation**: Enable real-time form and permission validation in custom UIs
594
+ # before submitting requests. * **CI/CD & Automation**: Test your scripts,
595
+ # permissions, and parameters safely without consuming resource quotas.
596
+ # Corresponds to the JSON property `validateOnly`
597
+ # @return [Boolean]
598
+ attr_accessor :validate_only
599
+ alias_method :validate_only?, :validate_only
600
+
601
+ def initialize(**args)
602
+ update!(**args)
603
+ end
604
+
605
+ # Update properties of this object
606
+ def update!(**args)
607
+ @compliance_framework = args[:compliance_framework] if args.key?(:compliance_framework)
608
+ @compliance_standard = args[:compliance_standard] if args.key?(:compliance_standard)
609
+ @report_format = args[:report_format] if args.key?(:report_format)
610
+ @validate_only = args[:validate_only] if args.key?(:validate_only)
611
+ end
612
+ end
613
+
614
+ # Response message for ListAuditReports.
615
+ class ListAuditReportsResponse
616
+ include Google::Apis::Core::Hashable
617
+
618
+ # Output only. Audit reports.
619
+ # Corresponds to the JSON property `auditReports`
620
+ # @return [Array<Google::Apis::AuditmanagerV1::AuditReport>]
621
+ attr_accessor :audit_reports
622
+
623
+ # Output only. A token that you can send as the `page_token` in a subsequent
624
+ # request to retrieve the next page of results. If this field is empty, there
625
+ # are no subsequent pages.
626
+ # Corresponds to the JSON property `nextPageToken`
627
+ # @return [String]
628
+ attr_accessor :next_page_token
629
+
630
+ def initialize(**args)
631
+ update!(**args)
632
+ end
633
+
634
+ # Update properties of this object
635
+ def update!(**args)
636
+ @audit_reports = args[:audit_reports] if args.key?(:audit_reports)
637
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
638
+ end
639
+ end
640
+
641
+ # Response message for ListAuditSchedules.
642
+ class ListAuditSchedulesResponse
643
+ include Google::Apis::Core::Hashable
644
+
645
+ # List of audit schedules.
646
+ # Corresponds to the JSON property `auditSchedules`
647
+ # @return [Array<Google::Apis::AuditmanagerV1::AuditSchedule>]
648
+ attr_accessor :audit_schedules
649
+
650
+ # A token that you can send as the `page_token` in a subsequent request to
651
+ # retrieve the next page of results. If this field is empty, there are no
652
+ # subsequent pages.
653
+ # Corresponds to the JSON property `nextPageToken`
654
+ # @return [String]
655
+ attr_accessor :next_page_token
656
+
657
+ # Locations that can't be reached.
658
+ # Corresponds to the JSON property `unreachable`
659
+ # @return [Array<String>]
660
+ attr_accessor :unreachable
661
+
662
+ def initialize(**args)
663
+ update!(**args)
664
+ end
665
+
666
+ # Update properties of this object
667
+ def update!(**args)
668
+ @audit_schedules = args[:audit_schedules] if args.key?(:audit_schedules)
669
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
670
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
671
+ end
672
+ end
673
+
674
+ # Response message for ListControls.
675
+ class ListControlsResponse
676
+ include Google::Apis::Core::Hashable
677
+
678
+ # Output only. Controls for a given regulatory standard.
679
+ # Corresponds to the JSON property `controls`
680
+ # @return [Array<Google::Apis::AuditmanagerV1::Control>]
681
+ attr_accessor :controls
682
+
683
+ # Output only. A token that you can send as the `page_token` in a subsequent
684
+ # request to retrieve the next page of results. If this field is empty, there
685
+ # are no subsequent pages.
686
+ # Corresponds to the JSON property `nextPageToken`
687
+ # @return [String]
688
+ attr_accessor :next_page_token
689
+
690
+ def initialize(**args)
691
+ update!(**args)
692
+ end
693
+
694
+ # Update properties of this object
695
+ def update!(**args)
696
+ @controls = args[:controls] if args.key?(:controls)
697
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
698
+ end
699
+ end
700
+
701
+ # The response message for Locations.ListLocations.
702
+ class ListLocationsResponse
703
+ include Google::Apis::Core::Hashable
704
+
705
+ # A list of locations that matches the specified filter in the request.
706
+ # Corresponds to the JSON property `locations`
707
+ # @return [Array<Google::Apis::AuditmanagerV1::Location>]
708
+ attr_accessor :locations
709
+
710
+ # The standard List next-page token.
711
+ # Corresponds to the JSON property `nextPageToken`
712
+ # @return [String]
713
+ attr_accessor :next_page_token
714
+
715
+ def initialize(**args)
716
+ update!(**args)
717
+ end
718
+
719
+ # Update properties of this object
720
+ def update!(**args)
721
+ @locations = args[:locations] if args.key?(:locations)
722
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
723
+ end
724
+ end
725
+
726
+ # The response message for Operations.ListOperations.
727
+ class ListOperationsResponse
728
+ include Google::Apis::Core::Hashable
729
+
730
+ # The standard List next-page token.
731
+ # Corresponds to the JSON property `nextPageToken`
732
+ # @return [String]
733
+ attr_accessor :next_page_token
734
+
735
+ # A list of operations that matches the specified filter in the request.
736
+ # Corresponds to the JSON property `operations`
737
+ # @return [Array<Google::Apis::AuditmanagerV1::Operation>]
738
+ attr_accessor :operations
739
+
740
+ # Unordered list. Unreachable resources. Populated when the request sets `
741
+ # ListOperationsRequest.return_partial_success` and reads across collections.
742
+ # For example, when attempting to list all resources across all supported
743
+ # locations.
744
+ # Corresponds to the JSON property `unreachable`
745
+ # @return [Array<String>]
746
+ attr_accessor :unreachable
747
+
748
+ def initialize(**args)
749
+ update!(**args)
750
+ end
751
+
752
+ # Update properties of this object
753
+ def update!(**args)
754
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
755
+ @operations = args[:operations] if args.key?(:operations)
756
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
757
+ end
758
+ end
759
+
760
+ # Response message for ListResourceEnrollmentStatuses.
761
+ class ListResourceEnrollmentStatusesResponse
762
+ include Google::Apis::Core::Hashable
763
+
764
+ # Output only. A token that you can send as the `page_token` in a subsequent
765
+ # request to retrieve the next page of results. If this field is empty, there
766
+ # are no subsequent pages.
767
+ # Corresponds to the JSON property `nextPageToken`
768
+ # @return [String]
769
+ attr_accessor :next_page_token
770
+
771
+ # Resources with their enrollment status.
772
+ # Corresponds to the JSON property `resourceEnrollmentStatuses`
773
+ # @return [Array<Google::Apis::AuditmanagerV1::ResourceEnrollmentStatus>]
774
+ attr_accessor :resource_enrollment_statuses
775
+
776
+ def initialize(**args)
777
+ update!(**args)
778
+ end
779
+
780
+ # Update properties of this object
781
+ def update!(**args)
782
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
783
+ @resource_enrollment_statuses = args[:resource_enrollment_statuses] if args.key?(:resource_enrollment_statuses)
784
+ end
785
+ end
786
+
787
+ # A resource that represents a Google Cloud location.
788
+ class Location
789
+ include Google::Apis::Core::Hashable
790
+
791
+ # The friendly name for this location, typically a nearby city name. For example,
792
+ # "Tokyo".
793
+ # Corresponds to the JSON property `displayName`
794
+ # @return [String]
795
+ attr_accessor :display_name
796
+
797
+ # Cross-service attributes for the location. For example `"cloud.googleapis.com/
798
+ # region": "us-east1"`
799
+ # Corresponds to the JSON property `labels`
800
+ # @return [Hash<String,String>]
801
+ attr_accessor :labels
802
+
803
+ # The canonical id for this location. For example: `"us-east1"`.
804
+ # Corresponds to the JSON property `locationId`
805
+ # @return [String]
806
+ attr_accessor :location_id
807
+
808
+ # Service-specific metadata. For example the available capacity at the given
809
+ # location.
810
+ # Corresponds to the JSON property `metadata`
811
+ # @return [Hash<String,Object>]
812
+ attr_accessor :metadata
813
+
814
+ # Resource name for the location, which may vary between implementations. For
815
+ # example: `"projects/example-project/locations/us-east1"`
816
+ # Corresponds to the JSON property `name`
817
+ # @return [String]
818
+ attr_accessor :name
819
+
820
+ def initialize(**args)
821
+ update!(**args)
822
+ end
823
+
824
+ # Update properties of this object
825
+ def update!(**args)
826
+ @display_name = args[:display_name] if args.key?(:display_name)
827
+ @labels = args[:labels] if args.key?(:labels)
828
+ @location_id = args[:location_id] if args.key?(:location_id)
829
+ @metadata = args[:metadata] if args.key?(:metadata)
830
+ @name = args[:name] if args.key?(:name)
831
+ end
832
+ end
833
+
834
+ # This resource represents a long-running operation that is the result of a
835
+ # network API call.
836
+ class Operation
837
+ include Google::Apis::Core::Hashable
838
+
839
+ # If the value is `false`, it means the operation is still in progress. If `true`
840
+ # , the operation is completed, and either `error` or `response` is available.
841
+ # Corresponds to the JSON property `done`
842
+ # @return [Boolean]
843
+ attr_accessor :done
844
+ alias_method :done?, :done
845
+
846
+ # The `Status` type defines a logical error model that is suitable for different
847
+ # programming environments, including REST APIs and RPC APIs. It is used by [
848
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
849
+ # data: error code, error message, and error details. You can find out more
850
+ # about this error model and how to work with it in the [API Design Guide](https:
851
+ # //cloud.google.com/apis/design/errors).
852
+ # Corresponds to the JSON property `error`
853
+ # @return [Google::Apis::AuditmanagerV1::Status]
854
+ attr_accessor :error
855
+
856
+ # Service-specific metadata associated with the operation. It typically contains
857
+ # progress information and common metadata such as create time. Some services
858
+ # might not provide such metadata. Any method that returns a long-running
859
+ # operation should document the metadata type, if any.
860
+ # Corresponds to the JSON property `metadata`
861
+ # @return [Hash<String,Object>]
862
+ attr_accessor :metadata
863
+
864
+ # The server-assigned name, which is only unique within the same service that
865
+ # originally returns it. If you use the default HTTP mapping, the `name` should
866
+ # be a resource name ending with `operations/`unique_id``.
867
+ # Corresponds to the JSON property `name`
868
+ # @return [String]
869
+ attr_accessor :name
870
+
871
+ # The normal, successful response of the operation. If the original method
872
+ # returns no data on success, such as `Delete`, the response is `google.protobuf.
873
+ # Empty`. If the original method is standard `Get`/`Create`/`Update`, the
874
+ # response should be the resource. For other methods, the response should have
875
+ # the type `XxxResponse`, where `Xxx` is the original method name. For example,
876
+ # if the original method name is `TakeSnapshot()`, the inferred response type is
877
+ # `TakeSnapshotResponse`.
878
+ # Corresponds to the JSON property `response`
879
+ # @return [Hash<String,Object>]
880
+ attr_accessor :response
881
+
882
+ def initialize(**args)
883
+ update!(**args)
884
+ end
885
+
886
+ # Update properties of this object
887
+ def update!(**args)
888
+ @done = args[:done] if args.key?(:done)
889
+ @error = args[:error] if args.key?(:error)
890
+ @metadata = args[:metadata] if args.key?(:metadata)
891
+ @name = args[:name] if args.key?(:name)
892
+ @response = args[:response] if args.key?(:response)
893
+ end
894
+ end
895
+
896
+ # Metadata for the long-running operation.
897
+ class OperationMetadata
898
+ include Google::Apis::Core::Hashable
899
+
900
+ # Output only. The API version used to start the operation. For example, `v1`.
901
+ # Corresponds to the JSON property `apiVersion`
902
+ # @return [String]
903
+ attr_accessor :api_version
904
+
905
+ # Output only. Time that the operation was created.
906
+ # Corresponds to the JSON property `createTime`
907
+ # @return [String]
908
+ attr_accessor :create_time
909
+
910
+ # Output only. Time that the operation finished running.
911
+ # Corresponds to the JSON property `endTime`
912
+ # @return [String]
913
+ attr_accessor :end_time
914
+
915
+ # Output only. Whether you requested that the operation be cancelled. Operations
916
+ # that were cancelled successfully have an Operation.error value with a status
917
+ # code Code.CANCELLED.
918
+ # Corresponds to the JSON property `requestedCancellation`
919
+ # @return [Boolean]
920
+ attr_accessor :requested_cancellation
921
+ alias_method :requested_cancellation?, :requested_cancellation
922
+
923
+ # Output only. A human-readable status of the operation, if any.
924
+ # Corresponds to the JSON property `statusMessage`
925
+ # @return [String]
926
+ attr_accessor :status_message
927
+
928
+ # Output only. A server-defined resource path for the target of the operation.
929
+ # Corresponds to the JSON property `target`
930
+ # @return [String]
931
+ attr_accessor :target
932
+
933
+ # Output only. The name of the verb that was executed by the operation.
934
+ # Corresponds to the JSON property `verb`
935
+ # @return [String]
936
+ attr_accessor :verb
937
+
938
+ def initialize(**args)
939
+ update!(**args)
940
+ end
941
+
942
+ # Update properties of this object
943
+ def update!(**args)
944
+ @api_version = args[:api_version] if args.key?(:api_version)
945
+ @create_time = args[:create_time] if args.key?(:create_time)
946
+ @end_time = args[:end_time] if args.key?(:end_time)
947
+ @requested_cancellation = args[:requested_cancellation] if args.key?(:requested_cancellation)
948
+ @status_message = args[:status_message] if args.key?(:status_message)
949
+ @target = args[:target] if args.key?(:target)
950
+ @verb = args[:verb] if args.key?(:verb)
951
+ end
952
+ end
953
+
954
+ # Details about the current status of the report-generation process.
955
+ class ReportGenerationProgress
956
+ include Google::Apis::Core::Hashable
957
+
958
+ # Output only. Name of the audit report.
959
+ # Corresponds to the JSON property `auditReport`
960
+ # @return [String]
961
+ attr_accessor :audit_report
962
+
963
+ # Output only. Cloud Storage bucket where the audit report is uploaded to after
964
+ # the evaluation process is completed.
965
+ # Corresponds to the JSON property `destinationGcsBucket`
966
+ # @return [String]
967
+ attr_accessor :destination_gcs_bucket
968
+
969
+ # Progress of the evaluation process. The progress is defined in terms of
970
+ # percentage complete.
971
+ # Corresponds to the JSON property `evaluationPercentComplete`
972
+ # @return [Float]
973
+ attr_accessor :evaluation_percent_complete
974
+
975
+ # Output only. Reason for failure during the audit report generation process.
976
+ # This field is set only if the `OperationState` attribute is `
977
+ # OPERATION_STATE_FAILED`.
978
+ # Corresponds to the JSON property `failureReason`
979
+ # @return [String]
980
+ attr_accessor :failure_reason
981
+
982
+ # Report generation progress, defined in terms of percentage complete. Until
983
+ # evaluation is complete, this value is always `0`.
984
+ # Corresponds to the JSON property `reportGenerationPercentComplete`
985
+ # @return [Float]
986
+ attr_accessor :report_generation_percent_complete
987
+
988
+ # Report uploading progress, defined in terms of percentage complete. Until
989
+ # evaluation and report generation are complete, this value is always `0`.
990
+ # Corresponds to the JSON property `reportUploadingPercentComplete`
991
+ # @return [Float]
992
+ attr_accessor :report_uploading_percent_complete
993
+
994
+ # Output only. Current state of execution for report generation.
995
+ # Corresponds to the JSON property `state`
996
+ # @return [String]
997
+ attr_accessor :state
998
+
999
+ def initialize(**args)
1000
+ update!(**args)
1001
+ end
1002
+
1003
+ # Update properties of this object
1004
+ def update!(**args)
1005
+ @audit_report = args[:audit_report] if args.key?(:audit_report)
1006
+ @destination_gcs_bucket = args[:destination_gcs_bucket] if args.key?(:destination_gcs_bucket)
1007
+ @evaluation_percent_complete = args[:evaluation_percent_complete] if args.key?(:evaluation_percent_complete)
1008
+ @failure_reason = args[:failure_reason] if args.key?(:failure_reason)
1009
+ @report_generation_percent_complete = args[:report_generation_percent_complete] if args.key?(:report_generation_percent_complete)
1010
+ @report_uploading_percent_complete = args[:report_uploading_percent_complete] if args.key?(:report_uploading_percent_complete)
1011
+ @state = args[:state] if args.key?(:state)
1012
+ end
1013
+ end
1014
+
1015
+ # Additional information about the number of checks that were made during an
1016
+ # audit operation.
1017
+ class ReportSummary
1018
+ include Google::Apis::Core::Hashable
1019
+
1020
+ # Number of compliant checks.
1021
+ # Corresponds to the JSON property `compliantCount`
1022
+ # @return [Fixnum]
1023
+ attr_accessor :compliant_count
1024
+
1025
+ # Number of checks that can't be performed due to errors.
1026
+ # Corresponds to the JSON property `errorCount`
1027
+ # @return [Fixnum]
1028
+ attr_accessor :error_count
1029
+
1030
+ # Number of checks that require a manual review.
1031
+ # Corresponds to the JSON property `manualReviewNeededCount`
1032
+ # @return [Fixnum]
1033
+ attr_accessor :manual_review_needed_count
1034
+
1035
+ # Total number of evaluated checks.
1036
+ # Corresponds to the JSON property `totalCount`
1037
+ # @return [Fixnum]
1038
+ attr_accessor :total_count
1039
+
1040
+ # Number of checks with violations.
1041
+ # Corresponds to the JSON property `violationCount`
1042
+ # @return [Fixnum]
1043
+ attr_accessor :violation_count
1044
+
1045
+ def initialize(**args)
1046
+ update!(**args)
1047
+ end
1048
+
1049
+ # Update properties of this object
1050
+ def update!(**args)
1051
+ @compliant_count = args[:compliant_count] if args.key?(:compliant_count)
1052
+ @error_count = args[:error_count] if args.key?(:error_count)
1053
+ @manual_review_needed_count = args[:manual_review_needed_count] if args.key?(:manual_review_needed_count)
1054
+ @total_count = args[:total_count] if args.key?(:total_count)
1055
+ @violation_count = args[:violation_count] if args.key?(:violation_count)
1056
+ end
1057
+ end
1058
+
1059
+ # An organization, folder, or project with its enrollment status.
1060
+ class ResourceEnrollmentStatus
1061
+ include Google::Apis::Core::Hashable
1062
+
1063
+ # Output only. Display name for the organization, folder, or project.
1064
+ # Corresponds to the JSON property `displayName`
1065
+ # @return [String]
1066
+ attr_accessor :display_name
1067
+
1068
+ # Output only. Deprecated. Whether the organization, folder, or project is
1069
+ # enrolled. Use `enrollment_state` instead.
1070
+ # Corresponds to the JSON property `enrolled`
1071
+ # @return [Boolean]
1072
+ attr_accessor :enrolled
1073
+ alias_method :enrolled?, :enrolled
1074
+
1075
+ # Organization, folder, or project to enroll for audit reports.
1076
+ # Corresponds to the JSON property `enrollment`
1077
+ # @return [Google::Apis::AuditmanagerV1::Enrollment]
1078
+ attr_accessor :enrollment
1079
+
1080
+ # Output only. Enrollment state of the organization, folder, or project.
1081
+ # Corresponds to the JSON property `enrollmentState`
1082
+ # @return [String]
1083
+ attr_accessor :enrollment_state
1084
+
1085
+ # Identifier. Name of the resource enrollment status, in one of the following
1086
+ # formats: * `folders/`folder`/locations/`location`/resourceEnrollmentStatuses/`
1087
+ # resource_enrollment_status`` * `projects/`project`/locations/`location`/
1088
+ # resourceEnrollmentStatuses/`resource_enrollment_status`` * `organizations/`
1089
+ # organization`/locations/`location`/resourceEnrollmentStatuses/`
1090
+ # resource_enrollment_status``
1091
+ # Corresponds to the JSON property `name`
1092
+ # @return [String]
1093
+ attr_accessor :name
1094
+
1095
+ def initialize(**args)
1096
+ update!(**args)
1097
+ end
1098
+
1099
+ # Update properties of this object
1100
+ def update!(**args)
1101
+ @display_name = args[:display_name] if args.key?(:display_name)
1102
+ @enrolled = args[:enrolled] if args.key?(:enrolled)
1103
+ @enrollment = args[:enrollment] if args.key?(:enrollment)
1104
+ @enrollment_state = args[:enrollment_state] if args.key?(:enrollment_state)
1105
+ @name = args[:name] if args.key?(:name)
1106
+ end
1107
+ end
1108
+
1109
+ # Timing and frequency parameters for recurring audit runs.
1110
+ class ScheduleConfig
1111
+ include Google::Apis::Core::Hashable
1112
+
1113
+ # Optional. Date that the schedule stops. If not specified, the schedule runs
1114
+ # indefinitely.
1115
+ # Corresponds to the JSON property `endTime`
1116
+ # @return [String]
1117
+ attr_accessor :end_time
1118
+
1119
+ # Required. Frequency of audit runs.
1120
+ # Corresponds to the JSON property `frequency`
1121
+ # @return [String]
1122
+ attr_accessor :frequency
1123
+
1124
+ # Required. Date and time when the first audit run is triggered. Subsequent runs
1125
+ # are based on this time and the chosen frequency.
1126
+ # Corresponds to the JSON property `startTime`
1127
+ # @return [String]
1128
+ attr_accessor :start_time
1129
+
1130
+ # Optional. Time zone for the audit schedule in IANA format (for example, `
1131
+ # America/New_York`). The time zone is used to interpret the `start_time` and
1132
+ # the `end_time`, and to calculate subsequent run dates. If not specified, the
1133
+ # time zone default is UTC.
1134
+ # Corresponds to the JSON property `timeZone`
1135
+ # @return [String]
1136
+ attr_accessor :time_zone
1137
+
1138
+ def initialize(**args)
1139
+ update!(**args)
1140
+ end
1141
+
1142
+ # Update properties of this object
1143
+ def update!(**args)
1144
+ @end_time = args[:end_time] if args.key?(:end_time)
1145
+ @frequency = args[:frequency] if args.key?(:frequency)
1146
+ @start_time = args[:start_time] if args.key?(:start_time)
1147
+ @time_zone = args[:time_zone] if args.key?(:time_zone)
1148
+ end
1149
+ end
1150
+
1151
+ # The `Status` type defines a logical error model that is suitable for different
1152
+ # programming environments, including REST APIs and RPC APIs. It is used by [
1153
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
1154
+ # data: error code, error message, and error details. You can find out more
1155
+ # about this error model and how to work with it in the [API Design Guide](https:
1156
+ # //cloud.google.com/apis/design/errors).
1157
+ class Status
1158
+ include Google::Apis::Core::Hashable
1159
+
1160
+ # The status code, which should be an enum value of google.rpc.Code.
1161
+ # Corresponds to the JSON property `code`
1162
+ # @return [Fixnum]
1163
+ attr_accessor :code
1164
+
1165
+ # A list of messages that carry the error details. There is a common set of
1166
+ # message types for APIs to use.
1167
+ # Corresponds to the JSON property `details`
1168
+ # @return [Array<Hash<String,Object>>]
1169
+ attr_accessor :details
1170
+
1171
+ # A developer-facing error message, which should be in English. Any user-facing
1172
+ # error message should be localized and sent in the google.rpc.Status.details
1173
+ # field, or localized by the client.
1174
+ # Corresponds to the JSON property `message`
1175
+ # @return [String]
1176
+ attr_accessor :message
1177
+
1178
+ def initialize(**args)
1179
+ update!(**args)
1180
+ end
1181
+
1182
+ # Update properties of this object
1183
+ def update!(**args)
1184
+ @code = args[:code] if args.key?(:code)
1185
+ @details = args[:details] if args.key?(:details)
1186
+ @message = args[:message] if args.key?(:message)
1187
+ end
1188
+ end
1189
+ end
1190
+ end
1191
+ end