File: describe_change_set.rb

package info (click to toggle)
ruby-fog-aws 3.3.0-5
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 7,816 kB
  • sloc: ruby: 68,587; makefile: 6
file content (135 lines) | stat: -rw-r--r-- 4,407 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
124
125
126
127
128
129
130
131
132
133
134
135
module Fog
  module Parsers
    module AWS
      module CloudFormation
        class DescribeChangeSet < Fog::Parsers::Base
          def reset
            @response = fresh_change_set
            reset_parameter
            reset_change
            reset_resource_change
            reset_resource_change_detail
            reset_resource_target_definition
          end

          def reset_parameter
            @parameter = {}
          end

          def reset_change
            @change = {}
          end

          def reset_resource_change
            @resource_change = {'Details' => [], 'Scope' => [] }
          end

          def reset_resource_change_detail
            @resource_change_detail = {}
          end

          def reset_resource_target_definition
            @resource_target_definition = {}
          end

          def fresh_change_set
            {'Capabilities' => [], 'Changes' => [], 'NotificationARNs' => [], 'Parameters' => [], 'Tags' => []}
          end

          def start_element(name, attrs=[])
            super
            case name
            when 'Capabilities'
              @in_capabilities = true
            when 'Changes'
              @in_changes = true
            when 'ResourceChange'
              @in_resource_change = true
            when 'Scope'
              @in_scope = true
            when 'Details'
              @in_details = true
            when 'Target'
              @in_target = true
            when 'NotificationARNs'
              @in_notification_arns = true
            when 'Parameters'
              @in_parameters = true
            when 'Tags'
              @in_tags = true
            end
          end

          def end_element(name)
            case name
            when 'ChangeSetId', 'ChangeSetName', 'Description', 'ExecutionStatus', 'StackId', 'StackName', 'StatusReason', 'Status'
              @response[name] = value
            when 'CreationTime'
              @response[name] = Time.parse(value)
            when 'member'
              if @in_capabilities
                @response['Capabilities'] << value
              elsif @in_scope
                @resource_change['Scope'] << value
              elsif @in_notification_arns
                @response['NotificationARNs'] << value
              elsif @in_parameters
                @response['Parameters'] << @parameter
                reset_parameter
              elsif @in_tags
                @response['Tags'] << @tag
                reset_tag
              elsif @in_details
                @resource_change['Details'] << @resource_change_detail
                reset_resource_change_detail
              elsif @in_changes
                @response['Changes'] << @change
                reset_change
              end
            when 'ParameterValue', 'ParameterKey'
              @parameter[name] = value if @in_parameters
            when 'Parameters'
              @in_parameters = false
            when 'Value', 'Key'
              @tag[name] = value if @in_tags
            when 'Tags'
              @in_tags = false
            when 'Capabilities'
              @in_capabilities = false
            when 'Scope'
              @in_scope = false
            when 'NotificationARNs'
              @in_notification_arns = false
            when 'Type'
              @change[name] = value if @in_changes
            when 'Changes'
              @in_changes = false
            when 'ResourceChange'
              if @in_resource_change
                @change[name] = @resource_change
                @in_resource_change = false
              end
            when 'Action','LogicalResourceId','PhysicalResourceId','Replacement','ResourceType'
              @resource_change[name] = value  if @in_resource_change
            when 'Details'
              @in_details = false
            when 'CausingEntity','ChangeSource','Evaluation'
              if @in_details
                @resource_change_detail[name] = value
              end
            when 'Attribute','Name','RequiresRecreation'
              if @in_target
                @resource_target_definition[name] = value
              end
            when 'Target'
              if @in_target
                @resource_change_detail[name] = @resource_target_definition
                @in_target = false
              end
            end
          end
        end
      end
    end
  end
end