google-apis-policysimulator_v1beta 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,6 +22,331 @@ module Google
22
22
  module Apis
23
23
  module PolicysimulatorV1beta
24
24
 
25
+ # Similar to PolicySpec but with an extra 'launch' field for launch reference.
26
+ # The PolicySpec here is specific for dry-run/darklaunch.
27
+ class GoogleCloudOrgpolicyV2AlternatePolicySpec
28
+ include Google::Apis::Core::Hashable
29
+
30
+ # Reference to the launch that will be used while audit logging and to control
31
+ # the launch. Should be set only in the alternate policy.
32
+ # Corresponds to the JSON property `launch`
33
+ # @return [String]
34
+ attr_accessor :launch
35
+
36
+ # Defines a Google Cloud policy specification which is used to specify
37
+ # constraints for configurations of Google Cloud resources.
38
+ # Corresponds to the JSON property `spec`
39
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2PolicySpec]
40
+ attr_accessor :spec
41
+
42
+ def initialize(**args)
43
+ update!(**args)
44
+ end
45
+
46
+ # Update properties of this object
47
+ def update!(**args)
48
+ @launch = args[:launch] if args.key?(:launch)
49
+ @spec = args[:spec] if args.key?(:spec)
50
+ end
51
+ end
52
+
53
+ # A custom constraint defined by customers which can *only* be applied to the
54
+ # given resource types and organization. By creating a custom constraint,
55
+ # customers can apply policies of this custom constraint. *Creating a custom
56
+ # constraint itself does NOT apply any policy enforcement*.
57
+ class GoogleCloudOrgpolicyV2CustomConstraint
58
+ include Google::Apis::Core::Hashable
59
+
60
+ # Allow or deny type.
61
+ # Corresponds to the JSON property `actionType`
62
+ # @return [String]
63
+ attr_accessor :action_type
64
+
65
+ # Org policy condition/expression. For example: `resource.instanceName.matches("[
66
+ # production|test]_.*_(\d)+")` or, `resource.management.auto_upgrade == true`
67
+ # The max length of the condition is 1000 characters.
68
+ # Corresponds to the JSON property `condition`
69
+ # @return [String]
70
+ attr_accessor :condition
71
+
72
+ # Detailed information about this custom policy constraint. The max length of
73
+ # the description is 2000 characters.
74
+ # Corresponds to the JSON property `description`
75
+ # @return [String]
76
+ attr_accessor :description
77
+
78
+ # One line display name for the UI. The max length of the display_name is 200
79
+ # characters.
80
+ # Corresponds to the JSON property `displayName`
81
+ # @return [String]
82
+ attr_accessor :display_name
83
+
84
+ # All the operations being applied for this constraint.
85
+ # Corresponds to the JSON property `methodTypes`
86
+ # @return [Array<String>]
87
+ attr_accessor :method_types
88
+
89
+ # Immutable. Name of the constraint. This is unique within the organization.
90
+ # Format of the name should be * `organizations/`organization_id`/
91
+ # customConstraints/`custom_constraint_id`` Example: `organizations/123/
92
+ # customConstraints/custom.createOnlyE2TypeVms` The max length is 70 characters
93
+ # and the minimum length is 1. Note that the prefix `organizations/`
94
+ # organization_id`/customConstraints/` is not counted.
95
+ # Corresponds to the JSON property `name`
96
+ # @return [String]
97
+ attr_accessor :name
98
+
99
+ # Immutable. The resource instance type on which this policy applies. Format
100
+ # will be of the form : `/` Example: * `compute.googleapis.com/Instance`.
101
+ # Corresponds to the JSON property `resourceTypes`
102
+ # @return [Array<String>]
103
+ attr_accessor :resource_types
104
+
105
+ # Output only. The last time this custom constraint was updated. This represents
106
+ # the last time that the `CreateCustomConstraint` or `UpdateCustomConstraint`
107
+ # RPC was called
108
+ # Corresponds to the JSON property `updateTime`
109
+ # @return [String]
110
+ attr_accessor :update_time
111
+
112
+ def initialize(**args)
113
+ update!(**args)
114
+ end
115
+
116
+ # Update properties of this object
117
+ def update!(**args)
118
+ @action_type = args[:action_type] if args.key?(:action_type)
119
+ @condition = args[:condition] if args.key?(:condition)
120
+ @description = args[:description] if args.key?(:description)
121
+ @display_name = args[:display_name] if args.key?(:display_name)
122
+ @method_types = args[:method_types] if args.key?(:method_types)
123
+ @name = args[:name] if args.key?(:name)
124
+ @resource_types = args[:resource_types] if args.key?(:resource_types)
125
+ @update_time = args[:update_time] if args.key?(:update_time)
126
+ end
127
+ end
128
+
129
+ # Defines an organization policy which is used to specify constraints for
130
+ # configurations of Google Cloud resources.
131
+ class GoogleCloudOrgpolicyV2Policy
132
+ include Google::Apis::Core::Hashable
133
+
134
+ # Similar to PolicySpec but with an extra 'launch' field for launch reference.
135
+ # The PolicySpec here is specific for dry-run/darklaunch.
136
+ # Corresponds to the JSON property `alternate`
137
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2AlternatePolicySpec]
138
+ attr_accessor :alternate
139
+
140
+ # Defines a Google Cloud policy specification which is used to specify
141
+ # constraints for configurations of Google Cloud resources.
142
+ # Corresponds to the JSON property `dryRunSpec`
143
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2PolicySpec]
144
+ attr_accessor :dry_run_spec
145
+
146
+ # Immutable. The resource name of the policy. Must be one of the following forms,
147
+ # where `constraint_name` is the name of the constraint which this policy
148
+ # configures: * `projects/`project_number`/policies/`constraint_name`` * `
149
+ # folders/`folder_id`/policies/`constraint_name`` * `organizations/`
150
+ # organization_id`/policies/`constraint_name`` For example, `projects/123/
151
+ # policies/compute.disableSerialPortAccess`. Note: `projects/`project_id`/
152
+ # policies/`constraint_name`` is also an acceptable name for API requests, but
153
+ # responses will return the name using the equivalent project number.
154
+ # Corresponds to the JSON property `name`
155
+ # @return [String]
156
+ attr_accessor :name
157
+
158
+ # Defines a Google Cloud policy specification which is used to specify
159
+ # constraints for configurations of Google Cloud resources.
160
+ # Corresponds to the JSON property `spec`
161
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2PolicySpec]
162
+ attr_accessor :spec
163
+
164
+ def initialize(**args)
165
+ update!(**args)
166
+ end
167
+
168
+ # Update properties of this object
169
+ def update!(**args)
170
+ @alternate = args[:alternate] if args.key?(:alternate)
171
+ @dry_run_spec = args[:dry_run_spec] if args.key?(:dry_run_spec)
172
+ @name = args[:name] if args.key?(:name)
173
+ @spec = args[:spec] if args.key?(:spec)
174
+ end
175
+ end
176
+
177
+ # Defines a Google Cloud policy specification which is used to specify
178
+ # constraints for configurations of Google Cloud resources.
179
+ class GoogleCloudOrgpolicyV2PolicySpec
180
+ include Google::Apis::Core::Hashable
181
+
182
+ # An opaque tag indicating the current version of the policy, used for
183
+ # concurrency control. This field is ignored if used in a `CreatePolicy` request.
184
+ # When the policy` is returned from either a `GetPolicy` or a `ListPolicies`
185
+ # request, this `etag` indicates the version of the current policy to use when
186
+ # executing a read-modify-write loop. When the policy is returned from a `
187
+ # GetEffectivePolicy` request, the `etag` will be unset.
188
+ # Corresponds to the JSON property `etag`
189
+ # @return [String]
190
+ attr_accessor :etag
191
+
192
+ # Determines the inheritance behavior for this policy. If `inherit_from_parent`
193
+ # is true, policy rules set higher up in the hierarchy (up to the closest root)
194
+ # are inherited and present in the effective policy. If it is false, then no
195
+ # rules are inherited, and this policy becomes the new root for evaluation. This
196
+ # field can be set only for policies which configure list constraints.
197
+ # Corresponds to the JSON property `inheritFromParent`
198
+ # @return [Boolean]
199
+ attr_accessor :inherit_from_parent
200
+ alias_method :inherit_from_parent?, :inherit_from_parent
201
+
202
+ # Ignores policies set above this resource and restores the `constraint_default`
203
+ # enforcement behavior of the specific constraint at this resource. This field
204
+ # can be set in policies for either list or boolean constraints. If set, `rules`
205
+ # must be empty and `inherit_from_parent` must be set to false.
206
+ # Corresponds to the JSON property `reset`
207
+ # @return [Boolean]
208
+ attr_accessor :reset
209
+ alias_method :reset?, :reset
210
+
211
+ # In policies for boolean constraints, the following requirements apply: - There
212
+ # must be one and only one policy rule where condition is unset. - Boolean
213
+ # policy rules with conditions must set `enforced` to the opposite of the policy
214
+ # rule without a condition. - During policy evaluation, policy rules with
215
+ # conditions that are true for a target resource take precedence.
216
+ # Corresponds to the JSON property `rules`
217
+ # @return [Array<Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2PolicySpecPolicyRule>]
218
+ attr_accessor :rules
219
+
220
+ # Output only. The time stamp this was previously updated. This represents the
221
+ # last time a call to `CreatePolicy` or `UpdatePolicy` was made for that policy.
222
+ # Corresponds to the JSON property `updateTime`
223
+ # @return [String]
224
+ attr_accessor :update_time
225
+
226
+ def initialize(**args)
227
+ update!(**args)
228
+ end
229
+
230
+ # Update properties of this object
231
+ def update!(**args)
232
+ @etag = args[:etag] if args.key?(:etag)
233
+ @inherit_from_parent = args[:inherit_from_parent] if args.key?(:inherit_from_parent)
234
+ @reset = args[:reset] if args.key?(:reset)
235
+ @rules = args[:rules] if args.key?(:rules)
236
+ @update_time = args[:update_time] if args.key?(:update_time)
237
+ end
238
+ end
239
+
240
+ # A rule used to express this policy.
241
+ class GoogleCloudOrgpolicyV2PolicySpecPolicyRule
242
+ include Google::Apis::Core::Hashable
243
+
244
+ # Setting this to true means that all values are allowed. This field can be set
245
+ # only in policies for list constraints.
246
+ # Corresponds to the JSON property `allowAll`
247
+ # @return [Boolean]
248
+ attr_accessor :allow_all
249
+ alias_method :allow_all?, :allow_all
250
+
251
+ # Represents a textual expression in the Common Expression Language (CEL) syntax.
252
+ # CEL is a C-like expression language. The syntax and semantics of CEL are
253
+ # documented at https://github.com/google/cel-spec. Example (Comparison): title:
254
+ # "Summary size limit" description: "Determines if a summary is less than 100
255
+ # chars" expression: "document.summary.size() < 100" Example (Equality): title: "
256
+ # Requestor is owner" description: "Determines if requestor is the document
257
+ # owner" expression: "document.owner == request.auth.claims.email" Example (
258
+ # Logic): title: "Public documents" description: "Determine whether the document
259
+ # should be publicly visible" expression: "document.type != 'private' &&
260
+ # document.type != 'internal'" Example (Data Manipulation): title: "Notification
261
+ # string" description: "Create a notification string with a timestamp."
262
+ # expression: "'New message received at ' + string(document.create_time)" The
263
+ # exact variables and functions that may be referenced within an expression are
264
+ # determined by the service that evaluates it. See the service documentation for
265
+ # additional information.
266
+ # Corresponds to the JSON property `condition`
267
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleTypeExpr]
268
+ attr_accessor :condition
269
+
270
+ # Setting this to true means that all values are denied. This field can be set
271
+ # only in policies for list constraints.
272
+ # Corresponds to the JSON property `denyAll`
273
+ # @return [Boolean]
274
+ attr_accessor :deny_all
275
+ alias_method :deny_all?, :deny_all
276
+
277
+ # If `true`, then the policy is enforced. If `false`, then any configuration is
278
+ # acceptable. This field can be set only in policies for boolean constraints.
279
+ # Corresponds to the JSON property `enforce`
280
+ # @return [Boolean]
281
+ attr_accessor :enforce
282
+ alias_method :enforce?, :enforce
283
+
284
+ # A message that holds specific allowed and denied values. This message can
285
+ # define specific values and subtrees of the Resource Manager resource hierarchy
286
+ # (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is
287
+ # achieved by using the `under:` and optional `is:` prefixes. The `under:`
288
+ # prefix is used to denote resource subtree values. The `is:` prefix is used to
289
+ # denote specific values, and is required only if the value contains a ":".
290
+ # Values prefixed with "is:" are treated the same as values with no prefix.
291
+ # Ancestry subtrees must be in one of the following formats: - `projects/` (for
292
+ # example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`)
293
+ # - `organizations/` (for example, `organizations/1234`) The `supports_under`
294
+ # field of the associated `Constraint` defines whether ancestry prefixes can be
295
+ # used.
296
+ # Corresponds to the JSON property `values`
297
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2PolicySpecPolicyRuleStringValues]
298
+ attr_accessor :values
299
+
300
+ def initialize(**args)
301
+ update!(**args)
302
+ end
303
+
304
+ # Update properties of this object
305
+ def update!(**args)
306
+ @allow_all = args[:allow_all] if args.key?(:allow_all)
307
+ @condition = args[:condition] if args.key?(:condition)
308
+ @deny_all = args[:deny_all] if args.key?(:deny_all)
309
+ @enforce = args[:enforce] if args.key?(:enforce)
310
+ @values = args[:values] if args.key?(:values)
311
+ end
312
+ end
313
+
314
+ # A message that holds specific allowed and denied values. This message can
315
+ # define specific values and subtrees of the Resource Manager resource hierarchy
316
+ # (`Organizations`, `Folders`, `Projects`) that are allowed or denied. This is
317
+ # achieved by using the `under:` and optional `is:` prefixes. The `under:`
318
+ # prefix is used to denote resource subtree values. The `is:` prefix is used to
319
+ # denote specific values, and is required only if the value contains a ":".
320
+ # Values prefixed with "is:" are treated the same as values with no prefix.
321
+ # Ancestry subtrees must be in one of the following formats: - `projects/` (for
322
+ # example, `projects/tokyo-rain-123`) - `folders/` (for example, `folders/1234`)
323
+ # - `organizations/` (for example, `organizations/1234`) The `supports_under`
324
+ # field of the associated `Constraint` defines whether ancestry prefixes can be
325
+ # used.
326
+ class GoogleCloudOrgpolicyV2PolicySpecPolicyRuleStringValues
327
+ include Google::Apis::Core::Hashable
328
+
329
+ # List of values allowed at this resource.
330
+ # Corresponds to the JSON property `allowedValues`
331
+ # @return [Array<String>]
332
+ attr_accessor :allowed_values
333
+
334
+ # List of values denied at this resource.
335
+ # Corresponds to the JSON property `deniedValues`
336
+ # @return [Array<String>]
337
+ attr_accessor :denied_values
338
+
339
+ def initialize(**args)
340
+ update!(**args)
341
+ end
342
+
343
+ # Update properties of this object
344
+ def update!(**args)
345
+ @allowed_values = args[:allowed_values] if args.key?(:allowed_values)
346
+ @denied_values = args[:denied_values] if args.key?(:denied_values)
347
+ end
348
+ end
349
+
25
350
  # A resource describing a `Replay`, or simulation.
26
351
  class GoogleCloudPolicysimulatorV1Replay
27
352
  include Google::Apis::Core::Hashable
@@ -180,6 +505,630 @@ module Google
180
505
  end
181
506
  end
182
507
 
508
+ # GenerateOrgPolicyViolationsPreviewOperationMetadata is metadata about an
509
+ # OrgPolicyViolationsPreview generations operation.
510
+ class GoogleCloudPolicysimulatorV1alphaGenerateOrgPolicyViolationsPreviewOperationMetadata
511
+ include Google::Apis::Core::Hashable
512
+
513
+ # Time when the request was received.
514
+ # Corresponds to the JSON property `requestTime`
515
+ # @return [String]
516
+ attr_accessor :request_time
517
+
518
+ # Total number of resources that need scanning. Should equal resource_scanned +
519
+ # resources_pending
520
+ # Corresponds to the JSON property `resourcesFound`
521
+ # @return [Fixnum]
522
+ attr_accessor :resources_found
523
+
524
+ # Number of resources still to scan.
525
+ # Corresponds to the JSON property `resourcesPending`
526
+ # @return [Fixnum]
527
+ attr_accessor :resources_pending
528
+
529
+ # Number of resources already scanned.
530
+ # Corresponds to the JSON property `resourcesScanned`
531
+ # @return [Fixnum]
532
+ attr_accessor :resources_scanned
533
+
534
+ # Time when the request started processing, i.e. when the state was set to
535
+ # RUNNING.
536
+ # Corresponds to the JSON property `startTime`
537
+ # @return [String]
538
+ attr_accessor :start_time
539
+
540
+ # The current state of the operation.
541
+ # Corresponds to the JSON property `state`
542
+ # @return [String]
543
+ attr_accessor :state
544
+
545
+ def initialize(**args)
546
+ update!(**args)
547
+ end
548
+
549
+ # Update properties of this object
550
+ def update!(**args)
551
+ @request_time = args[:request_time] if args.key?(:request_time)
552
+ @resources_found = args[:resources_found] if args.key?(:resources_found)
553
+ @resources_pending = args[:resources_pending] if args.key?(:resources_pending)
554
+ @resources_scanned = args[:resources_scanned] if args.key?(:resources_scanned)
555
+ @start_time = args[:start_time] if args.key?(:start_time)
556
+ @state = args[:state] if args.key?(:state)
557
+ end
558
+ end
559
+
560
+ # The proposed changes to OrgPolicy.
561
+ class GoogleCloudPolicysimulatorV1alphaOrgPolicyOverlay
562
+ include Google::Apis::Core::Hashable
563
+
564
+ # The OrgPolicy CustomConstraint changes to preview violations for. Any existing
565
+ # CustomConstraints with the same name will be overridden in the simulation.
566
+ # That is, violations will be determined as if all custom constraints in the
567
+ # overlay were instantiated.
568
+ # Corresponds to the JSON property `customConstraints`
569
+ # @return [Array<Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1alphaOrgPolicyOverlayCustomConstraintOverlay>]
570
+ attr_accessor :custom_constraints
571
+
572
+ # The OrgPolicy changes to preview violations for. Any existing OrgPolicies with
573
+ # the same name will be overridden in the simulation. That is, violations will
574
+ # be determined as if all policies in the overlay were created or updated.
575
+ # Corresponds to the JSON property `policies`
576
+ # @return [Array<Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1alphaOrgPolicyOverlayPolicyOverlay>]
577
+ attr_accessor :policies
578
+
579
+ def initialize(**args)
580
+ update!(**args)
581
+ end
582
+
583
+ # Update properties of this object
584
+ def update!(**args)
585
+ @custom_constraints = args[:custom_constraints] if args.key?(:custom_constraints)
586
+ @policies = args[:policies] if args.key?(:policies)
587
+ end
588
+ end
589
+
590
+ # A change to an OrgPolicy custom constraint.
591
+ class GoogleCloudPolicysimulatorV1alphaOrgPolicyOverlayCustomConstraintOverlay
592
+ include Google::Apis::Core::Hashable
593
+
594
+ # A custom constraint defined by customers which can *only* be applied to the
595
+ # given resource types and organization. By creating a custom constraint,
596
+ # customers can apply policies of this custom constraint. *Creating a custom
597
+ # constraint itself does NOT apply any policy enforcement*.
598
+ # Corresponds to the JSON property `customConstraint`
599
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2CustomConstraint]
600
+ attr_accessor :custom_constraint
601
+
602
+ # Resource the constraint is attached to. Example: "organization/987654"
603
+ # Corresponds to the JSON property `customConstraintParent`
604
+ # @return [String]
605
+ attr_accessor :custom_constraint_parent
606
+
607
+ def initialize(**args)
608
+ update!(**args)
609
+ end
610
+
611
+ # Update properties of this object
612
+ def update!(**args)
613
+ @custom_constraint = args[:custom_constraint] if args.key?(:custom_constraint)
614
+ @custom_constraint_parent = args[:custom_constraint_parent] if args.key?(:custom_constraint_parent)
615
+ end
616
+ end
617
+
618
+ # A change to an OrgPolicy.
619
+ class GoogleCloudPolicysimulatorV1alphaOrgPolicyOverlayPolicyOverlay
620
+ include Google::Apis::Core::Hashable
621
+
622
+ # Defines an organization policy which is used to specify constraints for
623
+ # configurations of Google Cloud resources.
624
+ # Corresponds to the JSON property `policy`
625
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2Policy]
626
+ attr_accessor :policy
627
+
628
+ # The parent of the policy we are attaching to. Example: "projects/123456"
629
+ # Corresponds to the JSON property `policyParent`
630
+ # @return [String]
631
+ attr_accessor :policy_parent
632
+
633
+ def initialize(**args)
634
+ update!(**args)
635
+ end
636
+
637
+ # Update properties of this object
638
+ def update!(**args)
639
+ @policy = args[:policy] if args.key?(:policy)
640
+ @policy_parent = args[:policy_parent] if args.key?(:policy_parent)
641
+ end
642
+ end
643
+
644
+ # OrgPolicyViolationsPreview is a resource providing a preview of the violations
645
+ # that will exist if an OrgPolicy change is made. The list of violations are
646
+ # modeled as child resources and retrieved via a ListOrgPolicyViolations API
647
+ # call. There are potentially more OrgPolicyViolations than could fit in an
648
+ # embedded field. Thus, the use of a child resource instead of a field.
649
+ class GoogleCloudPolicysimulatorV1alphaOrgPolicyViolationsPreview
650
+ include Google::Apis::Core::Hashable
651
+
652
+ # Output only. The resource name of the `OrgPolicyViolationsPreview`. It has the
653
+ # following format: `organizations/`organization`/locations/`location`/
654
+ # orgPolicyViolationsPreviews/`orgPolicyViolationsPreview`` Example: `
655
+ # organizations/my-example-org/locations/global/orgPolicyViolationsPreviews/
656
+ # 506a5f7f`
657
+ # Corresponds to the JSON property `name`
658
+ # @return [String]
659
+ attr_accessor :name
660
+
661
+ # The proposed changes to OrgPolicy.
662
+ # Corresponds to the JSON property `overlay`
663
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1alphaOrgPolicyOverlay]
664
+ attr_accessor :overlay
665
+
666
+ # A summary of the state of all resources scanned for compliance with the
667
+ # changed OrgPolicy.
668
+ # Corresponds to the JSON property `resourceCounts`
669
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1alphaOrgPolicyViolationsPreviewResourceCounts]
670
+ attr_accessor :resource_counts
671
+
672
+ # Output only. The state of the `OrgPolicyViolationsPreview`.
673
+ # Corresponds to the JSON property `state`
674
+ # @return [String]
675
+ attr_accessor :state
676
+
677
+ # Output only. The number of OrgPolicyViolations in this `
678
+ # OrgPolicyViolationsPreview`. This count may differ from `resource_summary.
679
+ # noncompliant_count` because each OrgPolicyViolation is specific to a resource *
680
+ # *and** constraint. If there are multiple constraints being evaluated (i.e.
681
+ # multiple policies in the overlay), a single resource may violate multiple
682
+ # constraints.
683
+ # Corresponds to the JSON property `violationsCount`
684
+ # @return [Fixnum]
685
+ attr_accessor :violations_count
686
+
687
+ def initialize(**args)
688
+ update!(**args)
689
+ end
690
+
691
+ # Update properties of this object
692
+ def update!(**args)
693
+ @name = args[:name] if args.key?(:name)
694
+ @overlay = args[:overlay] if args.key?(:overlay)
695
+ @resource_counts = args[:resource_counts] if args.key?(:resource_counts)
696
+ @state = args[:state] if args.key?(:state)
697
+ @violations_count = args[:violations_count] if args.key?(:violations_count)
698
+ end
699
+ end
700
+
701
+ # A summary of the state of all resources scanned for compliance with the
702
+ # changed OrgPolicy.
703
+ class GoogleCloudPolicysimulatorV1alphaOrgPolicyViolationsPreviewResourceCounts
704
+ include Google::Apis::Core::Hashable
705
+
706
+ # Number of scanned resources with zero violations.
707
+ # Corresponds to the JSON property `compliant`
708
+ # @return [Fixnum]
709
+ attr_accessor :compliant
710
+
711
+ # Number of resources that returned an error when scanned.
712
+ # Corresponds to the JSON property `errors`
713
+ # @return [Fixnum]
714
+ attr_accessor :errors
715
+
716
+ # Number of scanned resources with at least one violation.
717
+ # Corresponds to the JSON property `noncompliant`
718
+ # @return [Fixnum]
719
+ attr_accessor :noncompliant
720
+
721
+ # Number of resources checked for compliance. Must equal: unenforced +
722
+ # noncompliant + compliant + error
723
+ # Corresponds to the JSON property `scanned`
724
+ # @return [Fixnum]
725
+ attr_accessor :scanned
726
+
727
+ # Number of resources where the constraint was not enforced, i.e. the Policy set
728
+ # `enforced: false` for that resource.
729
+ # Corresponds to the JSON property `unenforced`
730
+ # @return [Fixnum]
731
+ attr_accessor :unenforced
732
+
733
+ def initialize(**args)
734
+ update!(**args)
735
+ end
736
+
737
+ # Update properties of this object
738
+ def update!(**args)
739
+ @compliant = args[:compliant] if args.key?(:compliant)
740
+ @errors = args[:errors] if args.key?(:errors)
741
+ @noncompliant = args[:noncompliant] if args.key?(:noncompliant)
742
+ @scanned = args[:scanned] if args.key?(:scanned)
743
+ @unenforced = args[:unenforced] if args.key?(:unenforced)
744
+ end
745
+ end
746
+
747
+ # GenerateOrgPolicyViolationsPreviewOperationMetadata is metadata about an
748
+ # OrgPolicyViolationsPreview generations operation.
749
+ class GoogleCloudPolicysimulatorV1betaGenerateOrgPolicyViolationsPreviewOperationMetadata
750
+ include Google::Apis::Core::Hashable
751
+
752
+ # Time when the request was received.
753
+ # Corresponds to the JSON property `requestTime`
754
+ # @return [String]
755
+ attr_accessor :request_time
756
+
757
+ # Total number of resources that need scanning. Should equal resource_scanned +
758
+ # resources_pending
759
+ # Corresponds to the JSON property `resourcesFound`
760
+ # @return [Fixnum]
761
+ attr_accessor :resources_found
762
+
763
+ # Number of resources still to scan.
764
+ # Corresponds to the JSON property `resourcesPending`
765
+ # @return [Fixnum]
766
+ attr_accessor :resources_pending
767
+
768
+ # Number of resources already scanned.
769
+ # Corresponds to the JSON property `resourcesScanned`
770
+ # @return [Fixnum]
771
+ attr_accessor :resources_scanned
772
+
773
+ # Time when the request started processing, i.e. when the state was set to
774
+ # RUNNING.
775
+ # Corresponds to the JSON property `startTime`
776
+ # @return [String]
777
+ attr_accessor :start_time
778
+
779
+ # The current state of the operation.
780
+ # Corresponds to the JSON property `state`
781
+ # @return [String]
782
+ attr_accessor :state
783
+
784
+ def initialize(**args)
785
+ update!(**args)
786
+ end
787
+
788
+ # Update properties of this object
789
+ def update!(**args)
790
+ @request_time = args[:request_time] if args.key?(:request_time)
791
+ @resources_found = args[:resources_found] if args.key?(:resources_found)
792
+ @resources_pending = args[:resources_pending] if args.key?(:resources_pending)
793
+ @resources_scanned = args[:resources_scanned] if args.key?(:resources_scanned)
794
+ @start_time = args[:start_time] if args.key?(:start_time)
795
+ @state = args[:state] if args.key?(:state)
796
+ end
797
+ end
798
+
799
+ # ListOrgPolicyViolationsPreviewsResponse is the response message for
800
+ # OrgPolicyViolationsPreviewService.ListOrgPolicyViolationsPreviews.
801
+ class GoogleCloudPolicysimulatorV1betaListOrgPolicyViolationsPreviewsResponse
802
+ include Google::Apis::Core::Hashable
803
+
804
+ # A token that you can use to retrieve the next page of results. If this field
805
+ # is omitted, there are no subsequent pages.
806
+ # Corresponds to the JSON property `nextPageToken`
807
+ # @return [String]
808
+ attr_accessor :next_page_token
809
+
810
+ # The list of OrgPolicyViolationsPreview
811
+ # Corresponds to the JSON property `orgPolicyViolationsPreviews`
812
+ # @return [Array<Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1betaOrgPolicyViolationsPreview>]
813
+ attr_accessor :org_policy_violations_previews
814
+
815
+ def initialize(**args)
816
+ update!(**args)
817
+ end
818
+
819
+ # Update properties of this object
820
+ def update!(**args)
821
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
822
+ @org_policy_violations_previews = args[:org_policy_violations_previews] if args.key?(:org_policy_violations_previews)
823
+ end
824
+ end
825
+
826
+ # ListOrgPolicyViolationsResponse is the response message for
827
+ # OrgPolicyViolationsPreviewService.ListOrgPolicyViolations
828
+ class GoogleCloudPolicysimulatorV1betaListOrgPolicyViolationsResponse
829
+ include Google::Apis::Core::Hashable
830
+
831
+ # A token that you can use to retrieve the next page of results. If this field
832
+ # is omitted, there are no subsequent pages.
833
+ # Corresponds to the JSON property `nextPageToken`
834
+ # @return [String]
835
+ attr_accessor :next_page_token
836
+
837
+ # The list of OrgPolicyViolations
838
+ # Corresponds to the JSON property `orgPolicyViolations`
839
+ # @return [Array<Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1betaOrgPolicyViolation>]
840
+ attr_accessor :org_policy_violations
841
+
842
+ def initialize(**args)
843
+ update!(**args)
844
+ end
845
+
846
+ # Update properties of this object
847
+ def update!(**args)
848
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
849
+ @org_policy_violations = args[:org_policy_violations] if args.key?(:org_policy_violations)
850
+ end
851
+ end
852
+
853
+ # The proposed changes to OrgPolicy.
854
+ class GoogleCloudPolicysimulatorV1betaOrgPolicyOverlay
855
+ include Google::Apis::Core::Hashable
856
+
857
+ # The OrgPolicy CustomConstraint changes to preview violations for. Any existing
858
+ # CustomConstraints with the same name will be overridden in the simulation.
859
+ # That is, violations will be determined as if all custom constraints in the
860
+ # overlay were instantiated.
861
+ # Corresponds to the JSON property `customConstraints`
862
+ # @return [Array<Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1betaOrgPolicyOverlayCustomConstraintOverlay>]
863
+ attr_accessor :custom_constraints
864
+
865
+ # The OrgPolicy changes to preview violations for. Any existing OrgPolicies with
866
+ # the same name will be overridden in the simulation. That is, violations will
867
+ # be determined as if all policies in the overlay were created or updated.
868
+ # Corresponds to the JSON property `policies`
869
+ # @return [Array<Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1betaOrgPolicyOverlayPolicyOverlay>]
870
+ attr_accessor :policies
871
+
872
+ def initialize(**args)
873
+ update!(**args)
874
+ end
875
+
876
+ # Update properties of this object
877
+ def update!(**args)
878
+ @custom_constraints = args[:custom_constraints] if args.key?(:custom_constraints)
879
+ @policies = args[:policies] if args.key?(:policies)
880
+ end
881
+ end
882
+
883
+ # A change to an OrgPolicy custom constraint.
884
+ class GoogleCloudPolicysimulatorV1betaOrgPolicyOverlayCustomConstraintOverlay
885
+ include Google::Apis::Core::Hashable
886
+
887
+ # A custom constraint defined by customers which can *only* be applied to the
888
+ # given resource types and organization. By creating a custom constraint,
889
+ # customers can apply policies of this custom constraint. *Creating a custom
890
+ # constraint itself does NOT apply any policy enforcement*.
891
+ # Corresponds to the JSON property `customConstraint`
892
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2CustomConstraint]
893
+ attr_accessor :custom_constraint
894
+
895
+ # Resource the constraint is attached to. Example: "organization/987654"
896
+ # Corresponds to the JSON property `customConstraintParent`
897
+ # @return [String]
898
+ attr_accessor :custom_constraint_parent
899
+
900
+ def initialize(**args)
901
+ update!(**args)
902
+ end
903
+
904
+ # Update properties of this object
905
+ def update!(**args)
906
+ @custom_constraint = args[:custom_constraint] if args.key?(:custom_constraint)
907
+ @custom_constraint_parent = args[:custom_constraint_parent] if args.key?(:custom_constraint_parent)
908
+ end
909
+ end
910
+
911
+ # A change to an OrgPolicy.
912
+ class GoogleCloudPolicysimulatorV1betaOrgPolicyOverlayPolicyOverlay
913
+ include Google::Apis::Core::Hashable
914
+
915
+ # Defines an organization policy which is used to specify constraints for
916
+ # configurations of Google Cloud resources.
917
+ # Corresponds to the JSON property `policy`
918
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2Policy]
919
+ attr_accessor :policy
920
+
921
+ # The parent of the policy we are attaching to. Example: "projects/123456"
922
+ # Corresponds to the JSON property `policyParent`
923
+ # @return [String]
924
+ attr_accessor :policy_parent
925
+
926
+ def initialize(**args)
927
+ update!(**args)
928
+ end
929
+
930
+ # Update properties of this object
931
+ def update!(**args)
932
+ @policy = args[:policy] if args.key?(:policy)
933
+ @policy_parent = args[:policy_parent] if args.key?(:policy_parent)
934
+ end
935
+ end
936
+
937
+ # OrgPolicyViolation is a resource representing a single resource violating a
938
+ # single OrgPolicy constraint.
939
+ class GoogleCloudPolicysimulatorV1betaOrgPolicyViolation
940
+ include Google::Apis::Core::Hashable
941
+
942
+ # A custom constraint defined by customers which can *only* be applied to the
943
+ # given resource types and organization. By creating a custom constraint,
944
+ # customers can apply policies of this custom constraint. *Creating a custom
945
+ # constraint itself does NOT apply any policy enforcement*.
946
+ # Corresponds to the JSON property `customConstraint`
947
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudOrgpolicyV2CustomConstraint]
948
+ attr_accessor :custom_constraint
949
+
950
+ # The `Status` type defines a logical error model that is suitable for different
951
+ # programming environments, including REST APIs and RPC APIs. It is used by [
952
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
953
+ # data: error code, error message, and error details. You can find out more
954
+ # about this error model and how to work with it in the [API Design Guide](https:
955
+ # //cloud.google.com/apis/design/errors).
956
+ # Corresponds to the JSON property `error`
957
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleRpcStatus]
958
+ attr_accessor :error
959
+
960
+ # The name of the `OrgPolicyViolation`. Example: organizations/my-example-org/
961
+ # locations/global/orgPolicyViolationsPreviews/506a5f7f/orgPolicyViolations/38ce`
962
+ # Corresponds to the JSON property `name`
963
+ # @return [String]
964
+ attr_accessor :name
965
+
966
+ # ResourceContext provides the context we know about a resource. It is similar
967
+ # in concept to google.cloud.asset.v1.Resource, but focuses on the information
968
+ # specifically used by Simulator.
969
+ # Corresponds to the JSON property `resource`
970
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1betaResourceContext]
971
+ attr_accessor :resource
972
+
973
+ def initialize(**args)
974
+ update!(**args)
975
+ end
976
+
977
+ # Update properties of this object
978
+ def update!(**args)
979
+ @custom_constraint = args[:custom_constraint] if args.key?(:custom_constraint)
980
+ @error = args[:error] if args.key?(:error)
981
+ @name = args[:name] if args.key?(:name)
982
+ @resource = args[:resource] if args.key?(:resource)
983
+ end
984
+ end
985
+
986
+ # OrgPolicyViolationsPreview is a resource providing a preview of the violations
987
+ # that will exist if an OrgPolicy change is made. The list of violations are
988
+ # modeled as child resources and retrieved via a ListOrgPolicyViolations API
989
+ # call. There are potentially more OrgPolicyViolations than could fit in an
990
+ # embedded field. Thus, the use of a child resource instead of a field.
991
+ class GoogleCloudPolicysimulatorV1betaOrgPolicyViolationsPreview
992
+ include Google::Apis::Core::Hashable
993
+
994
+ # Output only. The resource name of the `OrgPolicyViolationsPreview`. It has the
995
+ # following format: `organizations/`organization`/locations/`location`/
996
+ # orgPolicyViolationsPreviews/`orgPolicyViolationsPreview`` Example: `
997
+ # organizations/my-example-org/locations/global/orgPolicyViolationsPreviews/
998
+ # 506a5f7f`
999
+ # Corresponds to the JSON property `name`
1000
+ # @return [String]
1001
+ attr_accessor :name
1002
+
1003
+ # The proposed changes to OrgPolicy.
1004
+ # Corresponds to the JSON property `overlay`
1005
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1betaOrgPolicyOverlay]
1006
+ attr_accessor :overlay
1007
+
1008
+ # A summary of the state of all resources scanned for compliance with the
1009
+ # changed OrgPolicy.
1010
+ # Corresponds to the JSON property `resourceCounts`
1011
+ # @return [Google::Apis::PolicysimulatorV1beta::GoogleCloudPolicysimulatorV1betaOrgPolicyViolationsPreviewResourceCounts]
1012
+ attr_accessor :resource_counts
1013
+
1014
+ # Output only. The state of the `OrgPolicyViolationsPreview`.
1015
+ # Corresponds to the JSON property `state`
1016
+ # @return [String]
1017
+ attr_accessor :state
1018
+
1019
+ # Output only. The number of OrgPolicyViolations in this `
1020
+ # OrgPolicyViolationsPreview`. This count may differ from `resource_summary.
1021
+ # noncompliant_count` because each OrgPolicyViolation is specific to a resource *
1022
+ # *and** constraint. If there are multiple constraints being evaluated (i.e.
1023
+ # multiple policies in the overlay), a single resource may violate multiple
1024
+ # constraints.
1025
+ # Corresponds to the JSON property `violationsCount`
1026
+ # @return [Fixnum]
1027
+ attr_accessor :violations_count
1028
+
1029
+ def initialize(**args)
1030
+ update!(**args)
1031
+ end
1032
+
1033
+ # Update properties of this object
1034
+ def update!(**args)
1035
+ @name = args[:name] if args.key?(:name)
1036
+ @overlay = args[:overlay] if args.key?(:overlay)
1037
+ @resource_counts = args[:resource_counts] if args.key?(:resource_counts)
1038
+ @state = args[:state] if args.key?(:state)
1039
+ @violations_count = args[:violations_count] if args.key?(:violations_count)
1040
+ end
1041
+ end
1042
+
1043
+ # A summary of the state of all resources scanned for compliance with the
1044
+ # changed OrgPolicy.
1045
+ class GoogleCloudPolicysimulatorV1betaOrgPolicyViolationsPreviewResourceCounts
1046
+ include Google::Apis::Core::Hashable
1047
+
1048
+ # Number of scanned resources with zero violations.
1049
+ # Corresponds to the JSON property `compliant`
1050
+ # @return [Fixnum]
1051
+ attr_accessor :compliant
1052
+
1053
+ # Number of resources that returned an error when scanned.
1054
+ # Corresponds to the JSON property `errors`
1055
+ # @return [Fixnum]
1056
+ attr_accessor :errors
1057
+
1058
+ # Number of scanned resources with at least one violation.
1059
+ # Corresponds to the JSON property `noncompliant`
1060
+ # @return [Fixnum]
1061
+ attr_accessor :noncompliant
1062
+
1063
+ # Number of resources checked for compliance. Must equal: unenforced +
1064
+ # noncompliant + compliant + error
1065
+ # Corresponds to the JSON property `scanned`
1066
+ # @return [Fixnum]
1067
+ attr_accessor :scanned
1068
+
1069
+ # Number of resources where the constraint was not enforced, i.e. the Policy set
1070
+ # `enforced: false` for that resource.
1071
+ # Corresponds to the JSON property `unenforced`
1072
+ # @return [Fixnum]
1073
+ attr_accessor :unenforced
1074
+
1075
+ def initialize(**args)
1076
+ update!(**args)
1077
+ end
1078
+
1079
+ # Update properties of this object
1080
+ def update!(**args)
1081
+ @compliant = args[:compliant] if args.key?(:compliant)
1082
+ @errors = args[:errors] if args.key?(:errors)
1083
+ @noncompliant = args[:noncompliant] if args.key?(:noncompliant)
1084
+ @scanned = args[:scanned] if args.key?(:scanned)
1085
+ @unenforced = args[:unenforced] if args.key?(:unenforced)
1086
+ end
1087
+ end
1088
+
1089
+ # ResourceContext provides the context we know about a resource. It is similar
1090
+ # in concept to google.cloud.asset.v1.Resource, but focuses on the information
1091
+ # specifically used by Simulator.
1092
+ class GoogleCloudPolicysimulatorV1betaResourceContext
1093
+ include Google::Apis::Core::Hashable
1094
+
1095
+ # The ancestry path of the resource in Google Cloud [resource hierarchy](https://
1096
+ # cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy),
1097
+ # represented as a list of relative resource names. An ancestry path starts with
1098
+ # the closest ancestor in the hierarchy and ends at root. If the resource is a
1099
+ # project, folder, or organization, the ancestry path starts from the resource
1100
+ # itself. Example: `["projects/123456789", "folders/5432", "organizations/1234"]`
1101
+ # Corresponds to the JSON property `ancestors`
1102
+ # @return [Array<String>]
1103
+ attr_accessor :ancestors
1104
+
1105
+ # The asset type of the resource as defined by CAIS. Example: `compute.
1106
+ # googleapis.com/Firewall` See [Supported asset types](https://cloud.google.com/
1107
+ # asset-inventory/docs/supported-asset-types) for more information.
1108
+ # Corresponds to the JSON property `assetType`
1109
+ # @return [String]
1110
+ attr_accessor :asset_type
1111
+
1112
+ # The full name of the resource. Example: `//compute.googleapis.com/projects/
1113
+ # my_project_123/zones/zone1/instances/instance1` See [Resource names](https://
1114
+ # cloud.google.com/apis/design/resource_names#full_resource_name) for more
1115
+ # information.
1116
+ # Corresponds to the JSON property `resource`
1117
+ # @return [String]
1118
+ attr_accessor :resource
1119
+
1120
+ def initialize(**args)
1121
+ update!(**args)
1122
+ end
1123
+
1124
+ # Update properties of this object
1125
+ def update!(**args)
1126
+ @ancestors = args[:ancestors] if args.key?(:ancestors)
1127
+ @asset_type = args[:asset_type] if args.key?(:asset_type)
1128
+ @resource = args[:resource] if args.key?(:resource)
1129
+ end
1130
+ end
1131
+
183
1132
  # Specifies the audit configuration for a service. The configuration determines
184
1133
  # which permission types are logged, and what identities, if any, are exempted
185
1134
  # from logging. An AuditConfig must have one or more AuditLogConfigs. If there
@@ -338,22 +1287,22 @@ module Google
338
1287
  # evaluates to `true`. A condition can add constraints based on attributes of
339
1288
  # the request, the resource, or both. To learn which resources support
340
1289
  # conditions in their IAM policies, see the [IAM documentation](https://cloud.
341
- # google.com/iam/help/conditions/resource-policies). **JSON example:** ` "
1290
+ # google.com/iam/help/conditions/resource-policies). **JSON example:** ``` ` "
342
1291
  # bindings": [ ` "role": "roles/resourcemanager.organizationAdmin", "members": [
343
1292
  # "user:mike@example.com", "group:admins@example.com", "domain:google.com", "
344
1293
  # serviceAccount:my-project-id@appspot.gserviceaccount.com" ] `, ` "role": "
345
1294
  # roles/resourcemanager.organizationViewer", "members": [ "user:eve@example.com"
346
1295
  # ], "condition": ` "title": "expirable access", "description": "Does not grant
347
1296
  # access after Sep 2020", "expression": "request.time < timestamp('2020-10-01T00:
348
- # 00:00.000Z')", ` ` ], "etag": "BwWWja0YfJA=", "version": 3 ` **YAML example:**
349
- # bindings: - members: - user:mike@example.com - group:admins@example.com -
350
- # domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com
351
- # role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.
352
- # com role: roles/resourcemanager.organizationViewer condition: title: expirable
353
- # access description: Does not grant access after Sep 2020 expression: request.
354
- # time < timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= version: 3 For
355
- # a description of IAM and its features, see the [IAM documentation](https://
356
- # cloud.google.com/iam/docs/).
1297
+ # 00:00.000Z')", ` ` ], "etag": "BwWWja0YfJA=", "version": 3 ` ``` **YAML
1298
+ # example:** ``` bindings: - members: - user:mike@example.com - group:admins@
1299
+ # example.com - domain:google.com - serviceAccount:my-project-id@appspot.
1300
+ # gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: -
1301
+ # user:eve@example.com role: roles/resourcemanager.organizationViewer condition:
1302
+ # title: expirable access description: Does not grant access after Sep 2020
1303
+ # expression: request.time < timestamp('2020-10-01T00:00:00.000Z') etag:
1304
+ # BwWWja0YfJA= version: 3 ``` For a description of IAM and its features, see the
1305
+ # [IAM documentation](https://cloud.google.com/iam/docs/).
357
1306
  class GoogleIamV1Policy
358
1307
  include Google::Apis::Core::Hashable
359
1308
 
@@ -484,13 +1433,13 @@ module Google
484
1433
  # @return [String]
485
1434
  attr_accessor :name
486
1435
 
487
- # The normal response of the operation in case of success. If the original
488
- # method returns no data on success, such as `Delete`, the response is `google.
489
- # protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`,
490
- # the response should be the resource. For other methods, the response should
491
- # have the type `XxxResponse`, where `Xxx` is the original method name. For
492
- # example, if the original method name is `TakeSnapshot()`, the inferred
493
- # response type is `TakeSnapshotResponse`.
1436
+ # The normal, successful response of the operation. If the original method
1437
+ # returns no data on success, such as `Delete`, the response is `google.protobuf.
1438
+ # Empty`. If the original method is standard `Get`/`Create`/`Update`, the
1439
+ # response should be the resource. For other methods, the response should have
1440
+ # the type `XxxResponse`, where `Xxx` is the original method name. For example,
1441
+ # if the original method name is `TakeSnapshot()`, the inferred response type is
1442
+ # `TakeSnapshotResponse`.
494
1443
  # Corresponds to the JSON property `response`
495
1444
  # @return [Hash<String,Object>]
496
1445
  attr_accessor :response