class CuffSert::UpdateStackAction
Public Instance Methods
as_observable()
click to toggle source
# File lib/cuffsert/actions.rb, line 88 def as_observable cfargs = CuffSert.as_update_change_set(@meta, @stack) upload_uri, maybe_upload = upload_template_if_oversized(cfargs) cfargs[:template_url] = upload_uri if upload_uri maybe_upload .concat(prepare_update(cfargs)) .flat_map(&method(:on_event)) end
validate!()
click to toggle source
# File lib/cuffsert/actions.rb, line 80 def validate! if @meta.stack_uri.nil? if @meta.parameters.empty? && @meta.tags.empty? raise "Stack update without template needs at least one parameter (-p) or tag (-t)." end end end
Private Instance Methods
on_changeset(change_set)
click to toggle source
# File lib/cuffsert/actions.rb, line 132 def on_changeset(change_set) if change_set[:status] == 'FAILED' if change_set[:status_reason].include?('didn\'t contain changes') next_action = NoChanges.new.as_observable else message = "Update failed: #{change_set[:status_reason]}" next_action = Abort.new(message).as_observable end @cfclient.abort_update(change_set[:change_set_id]) .concat(next_action) elsif @confirmation.call(@meta, :update, change_set) @cfclient.update_stack(change_set[:stack_id], change_set[:change_set_id]) .concat(Done.new.as_observable) else @cfclient.abort_update(change_set[:change_set_id]) .concat(Abort.new('User abort!').as_observable) end end
on_event(event)
click to toggle source
# File lib/cuffsert/actions.rb, line 118 def on_event(event) Rx::Observable.concat( Rx::Observable.just(event), Rx::Observable.defer do case event when CuffSert::ChangeSet on_changeset(event.message) else Rx::Observable.empty end end ) end
prepare_update(cfargs)
click to toggle source
# File lib/cuffsert/actions.rb, line 99 def prepare_update(cfargs) @cfclient.get_template(@meta) .map do |current_template| pending_template = if cfargs[:template_body] YAML.load(cfargs[:template_body]) elsif @meta.stack_uri && @meta.stack_uri.scheme == 'file' CuffSert.load_template(@meta.stack_uri) else current_template end CuffSert::Templates.new([current_template, pending_template]) end.merge( @cfclient.prepare_update(cfargs) .map do |change_set| CuffSert::ChangeSet.new(change_set) end ) end