File: stack_summary_collection.rb

package info (click to toggle)
ruby-aws-sdk 1.67.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,840 kB
  • sloc: ruby: 28,436; makefile: 7
file content (123 lines) | stat: -rw-r--r-- 4,036 bytes parent folder | download | duplicates (4)
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