cloudformer 0.0.10 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 58d2ce781939b779dd804bf2ec33c8168cf62b1a
4
- data.tar.gz: 24689509a537bc7f1bd3c9e92fadb19135e9e834
3
+ metadata.gz: 97c0ebd927bd0827047330b59ece651cca71605f
4
+ data.tar.gz: d28f7fddddf0bb0fc9a325ed13c963f3afb73f52
5
5
  SHA512:
6
- metadata.gz: 885f731ad0b348038916ac5fb4c24b2c948aedb89e8d3d9a62b6b3d951508563c735b4e1e2d85f04b732875e445ac45c6be96fe0fc2abf3f6165eefd72a0ae1f
7
- data.tar.gz: 6c3a897daeab52367d18b7f80c42c600f710d4677c6bdca725a1292dabf95886e7adb169676db14250cc25697c3ab79a0523a7b0cfc86c7fc89d7f61aa9f53af
6
+ metadata.gz: e99bd60c7d6f380cd3fbe0cb9234df3548575e4d59100e7005b7933c3aad0599dcbb2957f6d92805b98d50468dd9fc972aa0edc2c87a8d56e81f1039bb295eb8
7
+ data.tar.gz: 8b6fb6d5283446de6cbc4442f86f0953eabdf448b77663903a35f901c8a4ee1ad7d6b2fcf45ce153a22c865071a902239590a24f9e975a81a8315d5f3eecdcd2
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require "bundler/gem_tasks"
@@ -2,6 +2,12 @@ require 'aws-sdk'
2
2
 
3
3
  class Stack
4
4
  attr_accessor :stack, :name, :deployed
5
+
6
+ SUCESS_STATES = ["CREATE_COMPLETE", "UPDATE_COMPLETE"]
7
+ FAILURE_STATES = ["CREATE_FAILED", "DELETE_FAILED", "UPDATE_ROLLBACK_FAILED", "ROLLBACK_FAILED", "ROLLBACK_COMPLETE","ROLLBACK_FAILED","UPDATE_ROLLBACK_COMPLETE","UPDATE_ROLLBACK_FAILED"]
8
+ END_STATES = SUCESS_STATES + FAILURE_STATES
9
+
10
+ # 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"]
5
11
  def initialize(stack_name)
6
12
  @name = stack_name
7
13
  @cf = AWS::CloudFormation.new
@@ -18,7 +24,7 @@ class Stack
18
24
  validation = validate(template)
19
25
  unless validation["valid"]
20
26
  puts "Unable to update - #{validation["response"][:code]} - #{validation["response"][:message]}"
21
- return 1
27
+ return false
22
28
  end
23
29
  pending_operations = false
24
30
  if deployed
@@ -27,12 +33,13 @@ class Stack
27
33
  pending_operations = create(template, parameters, disable_rollback, capabilities)
28
34
  end
29
35
  wait_until_end if pending_operations
30
- if stack.status == "ROLLBACK_COMPLETE" || stack.status == "CREATE_FAILED"
31
- puts "Unable to update template. Check log for more information."
32
- return 1
33
- else
34
- return 0
35
- end
36
+ return deploy_succeded?
37
+ end
38
+
39
+ def deploy_succeded?
40
+ return true unless FAILURE_STATES.include?(stack.status)
41
+ puts "Unable to deploy template. Check log for more information."
42
+ false
36
43
  end
37
44
 
38
45
  def stop_instances
@@ -48,6 +55,7 @@ class Stack
48
55
  puts "Attempting to delete stack - #{name}"
49
56
  stack.delete
50
57
  wait_until_end
58
+ return deploy_succeded?
51
59
  end
52
60
  end
53
61
 
@@ -93,7 +101,7 @@ class Stack
93
101
  "response" => response
94
102
  }
95
103
  end
96
-
104
+
97
105
  private
98
106
  def wait_until_end
99
107
  printed = []
@@ -103,16 +111,10 @@ class Stack
103
111
  return
104
112
  end
105
113
  loop do
106
- exit_loop = false
107
114
  printable_events = stack.events.sort_by {|a| a.timestamp}.reject {|a| a if printed.include?(a.event_id)}
108
- printable_events.each do |event|
109
- puts "#{event.timestamp} - #{event.resource_type} - #{event.resource_status} - #{event.resource_status_reason.to_s}"
110
- if event.resource_type == "AWS::CloudFormation::Stack" && !event.resource_status.match(/_COMPLETE$/).nil?
111
- exit_loop = true
112
- end
113
- end
115
+ printable_events.each { |event| puts "#{event.timestamp} - #{event.resource_type} - #{event.resource_status} - #{event.resource_status_reason.to_s}" }
114
116
  printed.concat(printable_events.map(&:event_id))
115
- break if !stack.status.match(/_COMPLETE$/).nil? || !stack.status.match(/DELETE_FAILED$/).nil? || !stack.status.match(/CREATE_FAILED$/).nil?
117
+ break if END_STATES.include?(stack.status)
116
118
  sleep(30)
117
119
  end
118
120
  end
@@ -35,14 +35,15 @@ module Cloudformer
35
35
  if retry_delete
36
36
  @stack.delete
37
37
  end
38
- exit @stack.apply(template, parameters, disable_rollback, capabilities)
38
+ exit 1 unless @stack.apply(template, parameters, disable_rollback, capabilities)
39
39
  end
40
40
  end
41
+
41
42
  def define_delete_task
42
43
  desc "Delete stack from CloudFormation"
43
44
  task :delete do
44
45
  begin
45
- @stack.delete
46
+ exit 1 unless @stack.delete
46
47
  rescue
47
48
  puts "Stack deleted successfully."
48
49
  end
@@ -54,25 +55,27 @@ module Cloudformer
54
55
  task :force_delete do
55
56
  begin
56
57
  @stack.stop_instances
57
- @stack.delete
58
+ exit 1 unless @stack.delete
58
59
  rescue => e
59
60
  puts "Stack delete message - #{e.message}"
60
61
  end
61
62
  end
62
63
  end
63
-
64
+
64
65
  def define_status_task
65
66
  desc "Get the deployed app status."
66
67
  task :status do
67
- @stack.status
68
+ @stack.status
68
69
  end
69
70
  end
71
+
70
72
  def define_events_task
71
73
  desc "Get the recent events from the stack."
72
74
  task :events do
73
75
  @stack.events
74
76
  end
75
77
  end
78
+
76
79
  def define_outputs_task
77
80
  desc "Get the outputs of stack."
78
81
  task :outputs do
@@ -1,3 +1,3 @@
1
1
  module Cloudformer
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudformer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arvind Kunday
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-25 00:00:00.000000000 Z
11
+ date: 2013-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler