1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
module AWS
class CloudFormation
# # Stack Summaries
#
# Stack summaries contain information about CloudFormation
# stacks. You can filter the stacks you want summary information
# for by one or more statuses. You can even get information
# about deleted stacks for up to 90 days.
#
# ## Enumerating Stack Summaries
#
# You can enumerate all available summaries using enumerable
# methods. Yielded summaries are simple hashes.
#
# cfm = AWS::CloudFormation.new
# cfm.stack_summaries.each do |summary|
# puts summary.to_yaml
# end
#
# ## Filtering Stack Summaries
#
# You can optionally provide one or more stack stasus values
# to filter the results by. Only stacks with the given status(es)
# will be enumerated.
#
# cfm.stack_summaries.with_status(:create_failed).each do |summary|
# # ...
# end
#
# # enumerate stacks with various delete statuses
# statuses = %w(delete_in_progress delete_failed delete_complete)
# cf.stack_summaries.with_status(statuses).each do |summary|
# # ...
# end
class StackSummaryCollection
include Core::Collection::WithNextToken
# @api private
def initialize options = {}
@filters = options[:filters]
super
end
# Limits the stacks summaries that are enumerated.
#
# cfm.stack_summaries.with_status(:create_complete).each do |summary|
# puts summary[:stack_name]
# end
#
# You can provide multiple statuses:
#
# statuses = [:create_failed, :rollback_failed]
# cfm.stack_summaries.with_status(statuses).each do |summary|
# puts summary[:stack_name]
# end
#
# Status names may be symbolized (snake-cased) or upper-cased strings
# (e.g. :create_in_progress, 'CREATE_IN_PROGRESS').
#
# @param [Symbol,String] status_filters One or more statuses to filter
# stacks with. Valid values include:
#
# * `:create_in_progress`
# * `:create_failed`
# * `:create_complete`
# * `:rollback_in_progress`
# * `:rollback_failed`
# * `:rollback_complete`
# * `:delete_in_progress`
# * `:delete_failed`
# * `:delete_complete`
# * `:update_in_progress`
# * `:update_complete_cleanup_in_progress`
# * `:update_complete`
# * `:update_rollback_in_progress`
# * `:update_rollback_failed`
# * `:update_rollback_complete_cleanup_in_progress`
# * `:update_rollback_complete`
#
# @return [StackSummaryCollection] Returns a new stack summary
# collection that restricts what stack summariess will be
# enumerated.
#
def with_status *status_filters
StackSummaryCollection.new(
:filters => status_filters.flatten.map(&:to_s).map(&:upcase),
:config => config)
end
protected
def _each_item next_token, options = {}, &block
options[:next_token] = next_token if next_token
options[:stack_status_filter] = @filters if @filters
resp = client.list_stacks(options)
resp.data[:stack_summaries].each do |summary|
yield(summary)
end
resp.data[:next_token]
end
end
end
end
|