aws-sdk-cloudformation 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,712 @@
1
+ # WARNING ABOUT GENERATED CODE
2
+ #
3
+ # This file is generated. See the contributing for info on making contributions:
4
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
5
+ #
6
+ # WARNING ABOUT GENERATED CODE
7
+
8
+ module Aws
9
+ module CloudFormation
10
+ class Stack
11
+
12
+ extend Aws::Deprecations
13
+
14
+ # @overload def initialize(name, options = {})
15
+ # @param [String] name
16
+ # @option options [Client] :client
17
+ # @overload def initialize(options = {})
18
+ # @option options [required, String] :name
19
+ # @option options [Client] :client
20
+ def initialize(*args)
21
+ options = Hash === args.last ? args.pop.dup : {}
22
+ @name = extract_name(args, options)
23
+ @data = options.delete(:data)
24
+ @client = options.delete(:client) || Client.new(options)
25
+ end
26
+
27
+ # @!group Read-Only Attributes
28
+
29
+ # @return [String]
30
+ def name
31
+ @name
32
+ end
33
+ alias :stack_name :name
34
+
35
+ # Unique identifier of the stack.
36
+ # @return [String]
37
+ def stack_id
38
+ data.stack_id
39
+ end
40
+
41
+ # The unique ID of the change set.
42
+ # @return [String]
43
+ def change_set_id
44
+ data.change_set_id
45
+ end
46
+
47
+ # A user-defined description associated with the stack.
48
+ # @return [String]
49
+ def description
50
+ data.description
51
+ end
52
+
53
+ # A list of `Parameter` structures.
54
+ # @return [Array<Types::Parameter>]
55
+ def parameters
56
+ data.parameters
57
+ end
58
+
59
+ # The time at which the stack was created.
60
+ # @return [Time]
61
+ def creation_time
62
+ data.creation_time
63
+ end
64
+
65
+ # The time the stack was last updated. This field will only be returned
66
+ # if the stack has been updated at least once.
67
+ # @return [Time]
68
+ def last_updated_time
69
+ data.last_updated_time
70
+ end
71
+
72
+ # Current status of the stack.
73
+ # @return [String]
74
+ def stack_status
75
+ data.stack_status
76
+ end
77
+
78
+ # Success/failure message associated with the stack status.
79
+ # @return [String]
80
+ def stack_status_reason
81
+ data.stack_status_reason
82
+ end
83
+
84
+ # Boolean to enable or disable rollback on stack creation failures:
85
+ #
86
+ # * `true`\: disable rollback
87
+ #
88
+ # * `false`\: enable rollback
89
+ # @return [Boolean]
90
+ def disable_rollback
91
+ data.disable_rollback
92
+ end
93
+
94
+ # SNS topic ARNs to which stack related events are published.
95
+ # @return [Array<String>]
96
+ def notification_arns
97
+ data.notification_arns
98
+ end
99
+
100
+ # The amount of time within which stack creation should complete.
101
+ # @return [Integer]
102
+ def timeout_in_minutes
103
+ data.timeout_in_minutes
104
+ end
105
+
106
+ # The capabilities allowed in the stack.
107
+ # @return [Array<String>]
108
+ def capabilities
109
+ data.capabilities
110
+ end
111
+
112
+ # A list of output structures.
113
+ # @return [Array<Types::Output>]
114
+ def outputs
115
+ data.outputs
116
+ end
117
+
118
+ # The Amazon Resource Name (ARN) of an AWS Identity and Access
119
+ # Management (IAM) role that is associated with the stack. During a
120
+ # stack operation, AWS CloudFormation uses this role's credentials to
121
+ # make calls on your behalf.
122
+ # @return [String]
123
+ def role_arn
124
+ data.role_arn
125
+ end
126
+
127
+ # A list of `Tag`s that specify information about the stack.
128
+ # @return [Array<Types::Tag>]
129
+ def tags
130
+ data.tags
131
+ end
132
+
133
+ # @!endgroup
134
+
135
+ # @return [Client]
136
+ def client
137
+ @client
138
+ end
139
+
140
+ # Loads, or reloads {#data} for the current {Stack}.
141
+ # Returns `self` making it possible to chain methods.
142
+ #
143
+ # stack.reload.data
144
+ #
145
+ # @return [self]
146
+ def load
147
+ resp = @client.describe_stacks(stack_name: @name)
148
+ @data = resp.stacks[0]
149
+ self
150
+ end
151
+ alias :reload :load
152
+
153
+ # @return [Types::Stack]
154
+ # Returns the data for this {Stack}. Calls
155
+ # {Client#describe_stacks} if {#data_loaded?} is `false`.
156
+ def data
157
+ load unless @data
158
+ @data
159
+ end
160
+
161
+ # @return [Boolean]
162
+ # Returns `true` if this resource is loaded. Accessing attributes or
163
+ # {#data} on an unloaded resource will trigger a call to {#load}.
164
+ def data_loaded?
165
+ !!@data
166
+ end
167
+
168
+ # @param [Hash] options ({})
169
+ # @return [Boolean]
170
+ # Returns `true` if the Stack exists.
171
+ def exists?(options = {})
172
+ begin
173
+ wait_until_exists(options.merge(max_attempts: 1))
174
+ true
175
+ rescue Aws::Waiters::Errors::UnexpectedError => e
176
+ raise e.error
177
+ rescue Aws::Waiters::Errors::WaiterFailed
178
+ false
179
+ end
180
+ end
181
+
182
+ # @param [Hash] options ({})
183
+ # @option options [Integer] :max_attempts (20)
184
+ # @option options [Float] :delay (5)
185
+ # @option options [Proc] :before_attempt
186
+ # @option options [Proc] :before_wait
187
+ # @return [Stack]
188
+ def wait_until_exists(options = {})
189
+ options, params = separate_params_and_options(options)
190
+ waiter = Waiters::StackExists.new(options)
191
+ yield_waiter_and_warn(waiter, &Proc.new) if block_given?
192
+ waiter.wait(params.merge(stack_name: @name))
193
+ Stack.new({
194
+ name: @name,
195
+ client: @client
196
+ })
197
+ end
198
+
199
+ # @!group Actions
200
+
201
+ # @example Request syntax with placeholder values
202
+ #
203
+ # stack.cancel_update()
204
+ # @param [Hash] options ({})
205
+ # @return [EmptyStructure]
206
+ def cancel_update(options = {})
207
+ options = options.merge(stack_name: @name)
208
+ resp = @client.cancel_update_stack(options)
209
+ resp.data
210
+ end
211
+
212
+ # @example Request syntax with placeholder values
213
+ #
214
+ # stack.create({
215
+ # template_body: "TemplateBody",
216
+ # template_url: "TemplateURL",
217
+ # parameters: [
218
+ # {
219
+ # parameter_key: "ParameterKey",
220
+ # parameter_value: "ParameterValue",
221
+ # use_previous_value: false,
222
+ # },
223
+ # ],
224
+ # disable_rollback: false,
225
+ # timeout_in_minutes: 1,
226
+ # notification_arns: ["NotificationARN"],
227
+ # capabilities: ["CAPABILITY_IAM"], # accepts CAPABILITY_IAM, CAPABILITY_NAMED_IAM
228
+ # resource_types: ["ResourceType"],
229
+ # role_arn: "RoleARN",
230
+ # on_failure: "DO_NOTHING", # accepts DO_NOTHING, ROLLBACK, DELETE
231
+ # stack_policy_body: "StackPolicyBody",
232
+ # stack_policy_url: "StackPolicyURL",
233
+ # tags: [
234
+ # {
235
+ # key: "TagKey",
236
+ # value: "TagValue",
237
+ # },
238
+ # ],
239
+ # })
240
+ # @param [Hash] options ({})
241
+ # @option options [String] :template_body
242
+ # Structure containing the template body with a minimum length of 1 byte
243
+ # and a maximum length of 51,200 bytes. For more information, go to
244
+ # [Template Anatomy][1] in the AWS CloudFormation User Guide.
245
+ #
246
+ # Conditional: You must specify either the `TemplateBody` or the
247
+ # `TemplateURL` parameter, but not both.
248
+ #
249
+ #
250
+ #
251
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html
252
+ # @option options [String] :template_url
253
+ # Location of file containing the template body. The URL must point to a
254
+ # template (max size: 460,800 bytes) that is located in an Amazon S3
255
+ # bucket. For more information, go to the [Template Anatomy][1] in the
256
+ # AWS CloudFormation User Guide.
257
+ #
258
+ # Conditional: You must specify either the `TemplateBody` or the
259
+ # `TemplateURL` parameter, but not both.
260
+ #
261
+ #
262
+ #
263
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html
264
+ # @option options [Array<Types::Parameter>] :parameters
265
+ # A list of `Parameter` structures that specify input parameters for the
266
+ # stack. For more information, see the [Parameter][1] data type.
267
+ #
268
+ #
269
+ #
270
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html
271
+ # @option options [Boolean] :disable_rollback
272
+ # Set to `true` to disable rollback of the stack if stack creation
273
+ # failed. You can specify either `DisableRollback` or `OnFailure`, but
274
+ # not both.
275
+ #
276
+ # Default: `false`
277
+ # @option options [Integer] :timeout_in_minutes
278
+ # The amount of time that can pass before the stack status becomes
279
+ # CREATE\_FAILED; if `DisableRollback` is not set or is set to `false`,
280
+ # the stack will be rolled back.
281
+ # @option options [Array<String>] :notification_arns
282
+ # The Simple Notification Service (SNS) topic ARNs to publish stack
283
+ # related events. You can find your SNS topic ARNs using the [SNS
284
+ # console][1] or your Command Line Interface (CLI).
285
+ #
286
+ #
287
+ #
288
+ # [1]: https://console.aws.amazon.com/sns
289
+ # @option options [Array<String>] :capabilities
290
+ # A list of values that you must specify before AWS CloudFormation can
291
+ # create certain stacks. Some stack templates might include resources
292
+ # that can affect permissions in your AWS account, for example, by
293
+ # creating new AWS Identity and Access Management (IAM) users. For those
294
+ # stacks, you must explicitly acknowledge their capabilities by
295
+ # specifying this parameter.
296
+ #
297
+ # The only valid values are `CAPABILITY_IAM` and `CAPABILITY_NAMED_IAM`.
298
+ # The following resources require you to specify this parameter: [
299
+ # AWS::IAM::AccessKey][1], [ AWS::IAM::Group][2], [
300
+ # AWS::IAM::InstanceProfile][3], [ AWS::IAM::Policy][4], [
301
+ # AWS::IAM::Role][5], [ AWS::IAM::User][6], and [
302
+ # AWS::IAM::UserToGroupAddition][7]. If your stack template contains
303
+ # these resources, we recommend that you review all permissions
304
+ # associated with them and edit their permissions if necessary.
305
+ #
306
+ # If you have IAM resources, you can specify either capability. If you
307
+ # have IAM resources with custom names, you must specify
308
+ # `CAPABILITY_NAMED_IAM`. If you don't specify this parameter, this
309
+ # action returns an `InsufficientCapabilities` error.
310
+ #
311
+ # For more information, see [Acknowledging IAM Resources in AWS
312
+ # CloudFormation Templates][8].
313
+ #
314
+ #
315
+ #
316
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html
317
+ # [2]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html
318
+ # [3]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html
319
+ # [4]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
320
+ # [5]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html
321
+ # [6]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html
322
+ # [7]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html
323
+ # [8]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities
324
+ # @option options [Array<String>] :resource_types
325
+ # The template resource types that you have permissions to work with for
326
+ # this create stack action, such as `AWS::EC2::Instance`, `AWS::EC2::*`,
327
+ # or `Custom::MyCustomInstance`. Use the following syntax to describe
328
+ # template resource types: `AWS::*` (for all AWS resource), `Custom::*`
329
+ # (for all custom resources), `Custom::logical_ID ` (for a specific
330
+ # custom resource), `AWS::service_name::*` (for all resources of a
331
+ # particular AWS service), and `AWS::service_name::resource_logical_ID `
332
+ # (for a specific AWS resource).
333
+ #
334
+ # If the list of resource types doesn't include a resource that you're
335
+ # creating, the stack creation fails. By default, AWS CloudFormation
336
+ # grants permissions to all resource types. AWS Identity and Access
337
+ # Management (IAM) uses this parameter for AWS CloudFormation-specific
338
+ # condition keys in IAM policies. For more information, see [Controlling
339
+ # Access with AWS Identity and Access Management][1].
340
+ #
341
+ #
342
+ #
343
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html
344
+ # @option options [String] :role_arn
345
+ # The Amazon Resource Name (ARN) of an AWS Identity and Access
346
+ # Management (IAM) role that AWS CloudFormation assumes to create the
347
+ # stack. AWS CloudFormation uses the role's credentials to make calls
348
+ # on your behalf. AWS CloudFormation always uses this role for all
349
+ # future operations on the stack. As long as users have permission to
350
+ # operate on the stack, AWS CloudFormation uses this role even if the
351
+ # users don't have permission to pass it. Ensure that the role grants
352
+ # least privilege.
353
+ #
354
+ # If you don't specify a value, AWS CloudFormation uses the role that
355
+ # was previously associated with the stack. If no role is available, AWS
356
+ # CloudFormation uses a temporary session that is generated from your
357
+ # user credentials.
358
+ # @option options [String] :on_failure
359
+ # Determines what action will be taken if stack creation fails. This
360
+ # must be one of: DO\_NOTHING, ROLLBACK, or DELETE. You can specify
361
+ # either `OnFailure` or `DisableRollback`, but not both.
362
+ #
363
+ # Default: `ROLLBACK`
364
+ # @option options [String] :stack_policy_body
365
+ # Structure containing the stack policy body. For more information, go
366
+ # to [ Prevent Updates to Stack Resources][1] in the *AWS CloudFormation
367
+ # User Guide*. You can specify either the `StackPolicyBody` or the
368
+ # `StackPolicyURL` parameter, but not both.
369
+ #
370
+ #
371
+ #
372
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html
373
+ # @option options [String] :stack_policy_url
374
+ # Location of a file containing the stack policy. The URL must point to
375
+ # a policy (maximum size: 16 KB) located in an S3 bucket in the same
376
+ # region as the stack. You can specify either the `StackPolicyBody` or
377
+ # the `StackPolicyURL` parameter, but not both.
378
+ # @option options [Array<Types::Tag>] :tags
379
+ # Key-value pairs to associate with this stack. AWS CloudFormation also
380
+ # propagates these tags to the resources created in the stack. A maximum
381
+ # number of 10 tags can be specified.
382
+ # @return [Types::CreateStackOutput]
383
+ def create(options = {})
384
+ options = options.merge(stack_name: @name)
385
+ resp = @client.create_stack(options)
386
+ resp.data
387
+ end
388
+
389
+ # @example Request syntax with placeholder values
390
+ #
391
+ # stack.delete({
392
+ # retain_resources: ["LogicalResourceId"],
393
+ # role_arn: "RoleARN",
394
+ # })
395
+ # @param [Hash] options ({})
396
+ # @option options [Array<String>] :retain_resources
397
+ # For stacks in the `DELETE_FAILED` state, a list of resource logical
398
+ # IDs that are associated with the resources you want to retain. During
399
+ # deletion, AWS CloudFormation deletes the stack but does not delete the
400
+ # retained resources.
401
+ #
402
+ # Retaining resources is useful when you cannot delete a resource, such
403
+ # as a non-empty S3 bucket, but you want to delete the stack.
404
+ # @option options [String] :role_arn
405
+ # The Amazon Resource Name (ARN) of an AWS Identity and Access
406
+ # Management (IAM) role that AWS CloudFormation assumes to delete the
407
+ # stack. AWS CloudFormation uses the role's credentials to make calls
408
+ # on your behalf.
409
+ #
410
+ # If you don't specify a value, AWS CloudFormation uses the role that
411
+ # was previously associated with the stack. If no role is available, AWS
412
+ # CloudFormation uses a temporary session that is generated from your
413
+ # user credentials.
414
+ # @return [EmptyStructure]
415
+ def delete(options = {})
416
+ options = options.merge(stack_name: @name)
417
+ resp = @client.delete_stack(options)
418
+ resp.data
419
+ end
420
+
421
+ # @example Request syntax with placeholder values
422
+ #
423
+ # stack.update({
424
+ # template_body: "TemplateBody",
425
+ # template_url: "TemplateURL",
426
+ # use_previous_template: false,
427
+ # stack_policy_during_update_body: "StackPolicyDuringUpdateBody",
428
+ # stack_policy_during_update_url: "StackPolicyDuringUpdateURL",
429
+ # parameters: [
430
+ # {
431
+ # parameter_key: "ParameterKey",
432
+ # parameter_value: "ParameterValue",
433
+ # use_previous_value: false,
434
+ # },
435
+ # ],
436
+ # capabilities: ["CAPABILITY_IAM"], # accepts CAPABILITY_IAM, CAPABILITY_NAMED_IAM
437
+ # resource_types: ["ResourceType"],
438
+ # role_arn: "RoleARN",
439
+ # stack_policy_body: "StackPolicyBody",
440
+ # stack_policy_url: "StackPolicyURL",
441
+ # notification_arns: ["NotificationARN"],
442
+ # tags: [
443
+ # {
444
+ # key: "TagKey",
445
+ # value: "TagValue",
446
+ # },
447
+ # ],
448
+ # })
449
+ # @param [Hash] options ({})
450
+ # @option options [String] :template_body
451
+ # Structure containing the template body with a minimum length of 1 byte
452
+ # and a maximum length of 51,200 bytes. (For more information, go to
453
+ # [Template Anatomy][1] in the AWS CloudFormation User Guide.)
454
+ #
455
+ # Conditional: You must specify either the `TemplateBody` or the
456
+ # `TemplateURL` parameter, but not both.
457
+ #
458
+ #
459
+ #
460
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html
461
+ # @option options [String] :template_url
462
+ # Location of file containing the template body. The URL must point to a
463
+ # template that is located in an Amazon S3 bucket. For more information,
464
+ # go to [Template Anatomy][1] in the AWS CloudFormation User Guide.
465
+ #
466
+ # Conditional: You must specify either the `TemplateBody` or the
467
+ # `TemplateURL` parameter, but not both.
468
+ #
469
+ #
470
+ #
471
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html
472
+ # @option options [Boolean] :use_previous_template
473
+ # Reuse the existing template that is associated with the stack that you
474
+ # are updating.
475
+ # @option options [String] :stack_policy_during_update_body
476
+ # Structure containing the temporary overriding stack policy body. You
477
+ # can specify either the `StackPolicyDuringUpdateBody` or the
478
+ # `StackPolicyDuringUpdateURL` parameter, but not both.
479
+ #
480
+ # If you want to update protected resources, specify a temporary
481
+ # overriding stack policy during this update. If you do not specify a
482
+ # stack policy, the current policy that is associated with the stack
483
+ # will be used.
484
+ # @option options [String] :stack_policy_during_update_url
485
+ # Location of a file containing the temporary overriding stack policy.
486
+ # The URL must point to a policy (max size: 16KB) located in an S3
487
+ # bucket in the same region as the stack. You can specify either the
488
+ # `StackPolicyDuringUpdateBody` or the `StackPolicyDuringUpdateURL`
489
+ # parameter, but not both.
490
+ #
491
+ # If you want to update protected resources, specify a temporary
492
+ # overriding stack policy during this update. If you do not specify a
493
+ # stack policy, the current policy that is associated with the stack
494
+ # will be used.
495
+ # @option options [Array<Types::Parameter>] :parameters
496
+ # A list of `Parameter` structures that specify input parameters for the
497
+ # stack. For more information, see the [Parameter][1] data type.
498
+ #
499
+ #
500
+ #
501
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html
502
+ # @option options [Array<String>] :capabilities
503
+ # A list of values that you must specify before AWS CloudFormation can
504
+ # update certain stacks. Some stack templates might include resources
505
+ # that can affect permissions in your AWS account, for example, by
506
+ # creating new AWS Identity and Access Management (IAM) users. For those
507
+ # stacks, you must explicitly acknowledge their capabilities by
508
+ # specifying this parameter.
509
+ #
510
+ # The only valid values are `CAPABILITY_IAM` and `CAPABILITY_NAMED_IAM`.
511
+ # The following resources require you to specify this parameter: [
512
+ # AWS::IAM::AccessKey][1], [ AWS::IAM::Group][2], [
513
+ # AWS::IAM::InstanceProfile][3], [ AWS::IAM::Policy][4], [
514
+ # AWS::IAM::Role][5], [ AWS::IAM::User][6], and [
515
+ # AWS::IAM::UserToGroupAddition][7]. If your stack template contains
516
+ # these resources, we recommend that you review all permissions
517
+ # associated with them and edit their permissions if necessary.
518
+ #
519
+ # If you have IAM resources, you can specify either capability. If you
520
+ # have IAM resources with custom names, you must specify
521
+ # `CAPABILITY_NAMED_IAM`. If you don't specify this parameter, this
522
+ # action returns an `InsufficientCapabilities` error.
523
+ #
524
+ # For more information, see [Acknowledging IAM Resources in AWS
525
+ # CloudFormation Templates][8].
526
+ #
527
+ #
528
+ #
529
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html
530
+ # [2]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html
531
+ # [3]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html
532
+ # [4]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html
533
+ # [5]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html
534
+ # [6]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html
535
+ # [7]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html
536
+ # [8]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities
537
+ # @option options [Array<String>] :resource_types
538
+ # The template resource types that you have permissions to work with for
539
+ # this update stack action, such as `AWS::EC2::Instance`, `AWS::EC2::*`,
540
+ # or `Custom::MyCustomInstance`.
541
+ #
542
+ # If the list of resource types doesn't include a resource that you're
543
+ # updating, the stack update fails. By default, AWS CloudFormation
544
+ # grants permissions to all resource types. AWS Identity and Access
545
+ # Management (IAM) uses this parameter for AWS CloudFormation-specific
546
+ # condition keys in IAM policies. For more information, see [Controlling
547
+ # Access with AWS Identity and Access Management][1].
548
+ #
549
+ #
550
+ #
551
+ # [1]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html
552
+ # @option options [String] :role_arn
553
+ # The Amazon Resource Name (ARN) of an AWS Identity and Access
554
+ # Management (IAM) role that AWS CloudFormation assumes to update the
555
+ # stack. AWS CloudFormation uses the role's credentials to make calls
556
+ # on your behalf. AWS CloudFormation always uses this role for all
557
+ # future operations on the stack. As long as users have permission to
558
+ # operate on the stack, AWS CloudFormation uses this role even if the
559
+ # users don't have permission to pass it. Ensure that the role grants
560
+ # least privilege.
561
+ #
562
+ # If you don't specify a value, AWS CloudFormation uses the role that
563
+ # was previously associated with the stack. If no role is available, AWS
564
+ # CloudFormation uses a temporary session that is generated from your
565
+ # user credentials.
566
+ # @option options [String] :stack_policy_body
567
+ # Structure containing a new stack policy body. You can specify either
568
+ # the `StackPolicyBody` or the `StackPolicyURL` parameter, but not both.
569
+ #
570
+ # You might update the stack policy, for example, in order to protect a
571
+ # new resource that you created during a stack update. If you do not
572
+ # specify a stack policy, the current policy that is associated with the
573
+ # stack is unchanged.
574
+ # @option options [String] :stack_policy_url
575
+ # Location of a file containing the updated stack policy. The URL must
576
+ # point to a policy (max size: 16KB) located in an S3 bucket in the same
577
+ # region as the stack. You can specify either the `StackPolicyBody` or
578
+ # the `StackPolicyURL` parameter, but not both.
579
+ #
580
+ # You might update the stack policy, for example, in order to protect a
581
+ # new resource that you created during a stack update. If you do not
582
+ # specify a stack policy, the current policy that is associated with the
583
+ # stack is unchanged.
584
+ # @option options [Array<String>] :notification_arns
585
+ # Amazon Simple Notification Service topic Amazon Resource Names (ARNs)
586
+ # that AWS CloudFormation associates with the stack. Specify an empty
587
+ # list to remove all notification topics.
588
+ # @option options [Array<Types::Tag>] :tags
589
+ # Key-value pairs to associate with this stack. AWS CloudFormation also
590
+ # propagates these tags to supported resources in the stack. You can
591
+ # specify a maximum number of 10 tags.
592
+ #
593
+ # If you don't specify this parameter, AWS CloudFormation doesn't
594
+ # modify the stack's tags. If you specify an empty value, AWS
595
+ # CloudFormation removes all associated tags.
596
+ # @return [Types::UpdateStackOutput]
597
+ def update(options = {})
598
+ options = options.merge(stack_name: @name)
599
+ resp = @client.update_stack(options)
600
+ resp.data
601
+ end
602
+
603
+ # @!group Associations
604
+
605
+ # @example Request syntax with placeholder values
606
+ #
607
+ # events = stack.events()
608
+ # @param [Hash] options ({})
609
+ # @return [Event::Collection]
610
+ def events(options = {})
611
+ batches = Enumerator.new do |y|
612
+ options = options.merge(stack_name: @name)
613
+ resp = @client.describe_stack_events(options)
614
+ resp.each_page do |page|
615
+ batch = []
616
+ page.data.stack_events.each do |s|
617
+ batch << Event.new(
618
+ id: s.event_id,
619
+ data: s,
620
+ client: @client
621
+ )
622
+ end
623
+ y.yield(batch)
624
+ end
625
+ end
626
+ Event::Collection.new(batches)
627
+ end
628
+
629
+ # @param [String] logical_id
630
+ # @return [StackResource]
631
+ def resource(logical_id)
632
+ StackResource.new(
633
+ stack_name: @name,
634
+ logical_id: logical_id,
635
+ client: @client
636
+ )
637
+ end
638
+
639
+ # @example Request syntax with placeholder values
640
+ #
641
+ # resourcesummaries = stack.resource_summaries()
642
+ # @param [Hash] options ({})
643
+ # @return [StackResourceSummary::Collection]
644
+ def resource_summaries(options = {})
645
+ batches = Enumerator.new do |y|
646
+ options = options.merge(stack_name: @name)
647
+ resp = @client.list_stack_resources(options)
648
+ resp.each_page do |page|
649
+ batch = []
650
+ page.data.stack_resource_summaries.each do |s|
651
+ batch << StackResourceSummary.new(
652
+ logical_id: s.logical_resource_id,
653
+ stack_name: options[:stack_name],
654
+ data: s,
655
+ client: @client
656
+ )
657
+ end
658
+ y.yield(batch)
659
+ end
660
+ end
661
+ StackResourceSummary::Collection.new(batches)
662
+ end
663
+
664
+ # @deprecated
665
+ # @api private
666
+ def identifiers
667
+ { name: @name }
668
+ end
669
+ deprecated(:identifiers)
670
+
671
+ private
672
+
673
+ def extract_name(args, options)
674
+ value = args[0] || options.delete(:name)
675
+ case value
676
+ when String then value
677
+ when nil then raise ArgumentError, "missing required option :name"
678
+ else
679
+ msg = "expected :name to be a String, got #{value.class}"
680
+ raise ArgumentError, msg
681
+ end
682
+ end
683
+
684
+ def yield_waiter_and_warn(waiter, &block)
685
+ if !@waiter_block_warned
686
+ msg = "pass options to configure the waiter; "
687
+ msg << "yielding the waiter is deprecated"
688
+ warn(msg)
689
+ @waiter_block_warned = true
690
+ end
691
+ yield(waiter.waiter)
692
+ end
693
+
694
+ def separate_params_and_options(options)
695
+ opts = Set.new([:client, :max_attempts, :delay, :before_attempt, :before_wait])
696
+ waiter_opts = {}
697
+ waiter_params = {}
698
+ options.each_pair do |key, value|
699
+ if opts.include?(key)
700
+ waiter_opts[key] = value
701
+ else
702
+ waiter_params[key] = value
703
+ end
704
+ end
705
+ waiter_opts[:client] ||= @client
706
+ [waiter_opts, waiter_params]
707
+ end
708
+
709
+ class Collection < Aws::Resources::Collection; end
710
+ end
711
+ end
712
+ end