Class: StackMaster::TestDriver::CloudFormation

Inherits:
Object
  • Object
show all
Defined in:
lib/stack_master/test_driver/cloud_formation.rb

Instance Method Summary collapse

Constructor Details

#initializeCloudFormation

Returns a new instance of CloudFormation.



67
68
69
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 67

def initialize
  reset
end

Instance Method Details

#add_stack(stack) ⇒ Object



191
192
193
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 191

def add_stack(stack)
  @stacks[stack.fetch(:stack_name)] = Stack.new(stack)
end

#add_stack_event(event) ⇒ Object



204
205
206
207
208
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 204

def add_stack_event(event)
  stack_name = event.fetch(:stack_name)
  @stack_events[stack_name] ||= []
  @stack_events[stack_name] << StackEvent.new(event)
end

#add_stack_resource(options) ⇒ Object



195
196
197
198
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 195

def add_stack_resource(options)
  @stack_resources[options.fetch(:stack_name)] ||= []
  @stack_resources[options.fetch(:stack_name)] << StackResource.new(options)
end

#create_change_set(options) ⇒ Object



88
89
90
91
92
93
94
95
96
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 88

def create_change_set(options)
  id = SecureRandom.uuid
  options.merge!(change_set_id: id)
  @change_sets[id] = options
  @change_sets[options.fetch(:change_set_name)] = options
  stack_name = options.fetch(:stack_name)
  add_stack(stack_name: stack_name, stack_status: 'REVIEW_IN_PROGRESS') unless @stacks[stack_name]
  OpenStruct.new(id: id)
end

#create_stack(options) ⇒ Object



176
177
178
179
180
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 176

def create_stack(options)
  stack_name = options.fetch(:stack_name)
  add_stack(options)
  @stack_policies[stack_name] = options[:stack_policy_body]
end

#delete_change_set(options) ⇒ Object



133
134
135
136
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 133

def delete_change_set(options)
  change_set_id = options.fetch(:change_set_name)
  @change_sets.delete(change_set_id)
end

#delete_stack(options) ⇒ Object



182
183
184
185
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 182

def delete_stack(options)
  stack_name = options.fetch(:stack_name)
  @stacks.delete(stack_name)
end

#describe_change_set(options) ⇒ Object



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
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 98

def describe_change_set(options)
  change_set_id = options.fetch(:change_set_name)
  change_set = @change_sets.fetch(change_set_id)
  change_details = [
    OpenStruct.new(
      evaluation: 'Static',
      change_source: 'ResourceReference',
      target: OpenStruct.new(
        attribute: 'Properties',
        requires_recreation: 'Always',
        name: 'blah'
      )
    )
  ]
  change = OpenStruct.new(
    action: 'Modify',
    replacement: 'True',
    scope: ['Properties'],
    details: change_details
  )
  changes = [
    OpenStruct.new(
      type: 'AWS::Resource',
      resource_change: change
    )
  ]
  OpenStruct.new(change_set.merge(changes: changes, status: 'CREATE_COMPLETE'))
end

#describe_stack_events(options) ⇒ Object



171
172
173
174
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 171

def describe_stack_events(options)
  events = @stack_events[options.fetch(:stack_name)] || []
  OpenStruct.new(stack_events: events, next_token: nil)
end

#describe_stack_resources(options = {}) ⇒ Object



153
154
155
156
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 153

def describe_stack_resources(options = {})
  @stacks.fetch(options.fetch(:stack_name)) { raise Aws::CloudFormation::Errors::ValidationError.new('', 'Stack does not exist') }
  OpenStruct.new(stack_resources: @stack_resources[options.fetch(:stack_name)])
end

#describe_stacks(options = {}) ⇒ Object



138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 138

def describe_stacks(options = {})
  stack_name = options[:stack_name]
  stacks =
    if stack_name
      if @stacks[stack_name]
        [@stacks[stack_name]]
      else
        raise Aws::CloudFormation::Errors::ValidationError.new('', 'Stack does not exist')
      end
    else
      @stacks.values
    end
  OpenStruct.new(stacks: stacks, next_token: nil)
end

#execute_change_set(options) ⇒ Object



127
128
129
130
131
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 127

def execute_change_set(options)
  change_set_id = options.fetch(:change_set_name)
  change_set = @change_sets.fetch(change_set_id)
  @stacks[change_set.fetch(:stack_name)].attributes = change_set
end

#get_stack_policy(options) ⇒ Object



163
164
165
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 163

def get_stack_policy(options)
  OpenStruct.new(stack_policy_body: @stack_policies[options.fetch(:stack_name)])
end

#get_template(options) ⇒ Object



158
159
160
161
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 158

def get_template(options)
  template_body = @templates[options[:stack_name]] || nil
  OpenStruct.new(template_body: template_body)
end

#regionObject



71
72
73
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 71

def region
  @region ||= ENV['AWS_REGION'] || Aws.config[:region] || Aws.shared_config.region
end

#resetObject



79
80
81
82
83
84
85
86
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 79

def reset
  @stacks = {}
  @templates = {}
  @stack_events = {}
  @stack_resources = {}
  @stack_policies = {}
  @change_sets = {}
end

#set_region(region) ⇒ Object



75
76
77
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 75

def set_region(region)
  @region = region
end

#set_stack_policy(options) ⇒ Object



167
168
169
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 167

def set_stack_policy(options)
  @stack_policies[options.fetch(:stack_name)] = options[:stack_policy_body]
end

#set_template(stack_name, template) ⇒ Object



200
201
202
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 200

def set_template(stack_name, template)
  @templates[stack_name] = template
end

#validate_template(options) ⇒ Object



187
188
189
# File 'lib/stack_master/test_driver/cloud_formation.rb', line 187

def validate_template(options)
  true
end