Class: Stack
- Inherits:
-
Object
- Object
- Stack
- Defined in:
- lib/cloudformer/stack.rb
Constant Summary collapse
- SUCESS_STATES =
["CREATE_COMPLETE", "UPDATE_COMPLETE"]
- FAILURE_STATES =
["CREATE_FAILED", "DELETE_FAILED", "UPDATE_ROLLBACK_FAILED", "ROLLBACK_FAILED", "ROLLBACK_COMPLETE","ROLLBACK_FAILED","UPDATE_ROLLBACK_COMPLETE","UPDATE_ROLLBACK_FAILED"]
- END_STATES =
SUCESS_STATES + FAILURE_STATES
Instance Attribute Summary collapse
-
#deployed ⇒ Object
Returns the value of attribute deployed.
-
#name ⇒ Object
Returns the value of attribute name.
-
#stack ⇒ Object
Returns the value of attribute stack.
Instance Method Summary collapse
- #apply(template_file, parameters, disable_rollback = false, capabilities = [], notify = []) ⇒ Object
- #delete ⇒ Object
- #deploy_succeded? ⇒ Boolean
- #events(options = {}) ⇒ Object
-
#initialize(stack_name) ⇒ Stack
constructor
WAITING_STATES = [“CREATE_IN_PROGRESS”,“DELETE_IN_PROGRESS”,“ROLLBACK_IN_PROGRESS”,“UPDATE_COMPLETE_CLEANUP_IN_PROGRESS”,“UPDATE_IN_PROGRESS”,“UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS”,“UPDATE_ROLLBACK_IN_PROGRESS”].
- #outputs ⇒ Object
- #start_instances ⇒ Object
- #status ⇒ Object
- #stop_instances ⇒ Object
Constructor Details
#initialize(stack_name) ⇒ Stack
WAITING_STATES = [“CREATE_IN_PROGRESS”,“DELETE_IN_PROGRESS”,“ROLLBACK_IN_PROGRESS”,“UPDATE_COMPLETE_CLEANUP_IN_PROGRESS”,“UPDATE_IN_PROGRESS”,“UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS”,“UPDATE_ROLLBACK_IN_PROGRESS”]
11 12 13 14 15 16 |
# File 'lib/cloudformer/stack.rb', line 11 def initialize(stack_name) @name = stack_name @cf = AWS::CloudFormation.new @stack = @cf.stacks[name] @ec2 = AWS::EC2.new end |
Instance Attribute Details
#deployed ⇒ Object
Returns the value of attribute deployed.
4 5 6 |
# File 'lib/cloudformer/stack.rb', line 4 def deployed @deployed end |
#name ⇒ Object
Returns the value of attribute name.
4 5 6 |
# File 'lib/cloudformer/stack.rb', line 4 def name @name end |
#stack ⇒ Object
Returns the value of attribute stack.
4 5 6 |
# File 'lib/cloudformer/stack.rb', line 4 def stack @stack end |
Instance Method Details
#apply(template_file, parameters, disable_rollback = false, capabilities = [], notify = []) ⇒ Object
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 |
# File 'lib/cloudformer/stack.rb', line 22 def apply(template_file, parameters, disable_rollback=false, capabilities=[], notify=[]) if ( template_file =~ /^https:\/\/s3\S+\.amazonaws\.com\/(.*)/ ) template = template_file else template = File.read(template_file) end validation = validate(template) unless validation["valid"] puts "Unable to update - #{validation["response"][:code]} - #{validation["response"][:message]}" return :Failed end pending_operations = false begin if deployed pending_operations = update(template, parameters, capabilities) else pending_operations = create(template, parameters, disable_rollback, capabilities, notify) end rescue ::AWS::CloudFormation::Errors::ValidationError => e puts e. return (if e. == "No updates are to be performed." then :NoUpdates else :Failed end) end wait_until_end if pending_operations return (if deploy_succeded? then :Succeeded else :Failed end) end |
#delete ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/cloudformer/stack.rb', line 62 def delete with_highlight do puts "Attempting to delete stack - #{name}" stack.delete wait_until_end return deploy_succeded? end end |
#deploy_succeded? ⇒ Boolean
48 49 50 51 52 |
# File 'lib/cloudformer/stack.rb', line 48 def deploy_succeded? return true unless FAILURE_STATES.include?(stack.status) puts "Unable to deploy template. Check log for more information." false end |
#events(options = {}) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/cloudformer/stack.rb', line 81 def events( = {}) with_highlight do if !deployed puts "Stack not up." return end stack.events.sort_by {|a| a.}.each do |event| puts "#{event.timestamp} - #{event.physical_resource_id.to_s} - #{event.logical_resource_id} - #{event.resource_type} - #{event.resource_status} - #{event.resource_status_reason.to_s}" end end end |
#outputs ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/cloudformer/stack.rb', line 93 def outputs with_highlight do if !deployed puts "Stack not up." return 1 end stack.outputs.each do |output| puts "#{output.key} - #{output.description} - #{output.value}" end end return 0 end |
#start_instances ⇒ Object
58 59 60 |
# File 'lib/cloudformer/stack.rb', line 58 def start_instances update_instances("start") end |
#status ⇒ Object
71 72 73 74 75 76 77 78 79 |
# File 'lib/cloudformer/stack.rb', line 71 def status with_highlight do if deployed puts "#{stack.name} - #{stack.status} - #{stack.status_reason}" else puts "#{name} - Not Deployed" end end end |
#stop_instances ⇒ Object
54 55 56 |
# File 'lib/cloudformer/stack.rb', line 54 def stop_instances update_instances("stop") end |