cloudformer 0.0.4 → 0.0.5

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: 94350b9dae02e195dd7365c19ea0a56dd9d155bb
4
- data.tar.gz: a08fcc2c9193334db2a83070d9229bfff28abf03
3
+ metadata.gz: 72891aa253cab195a8218bc53d2f1ba270d96a1a
4
+ data.tar.gz: 5afcd141f49cb2dcaea0696de3adb4ead21759d3
5
5
  SHA512:
6
- metadata.gz: 12bdb0def1957cc75ee4161ebd2ecd4b294d38f3096d62b42f2a6ef2a7a48bb1598231ef86dac8342c36a4b746dd354bf461c4a070e913c32a2529f4f09b5f5c
7
- data.tar.gz: 5fea38a3eb4390137f2a0cb3214b03fe9c58e9f1d4668bdeea32db7959def4b3f915f41c95c670cddb4e85a6b9d4af4aeecba54941aa108f088976f5a96c454b
6
+ metadata.gz: 9b053008ac557b3114e372866f67755399f7aac24fb0e65e427916a9a1d09ae7a7f0e5504c1f5c79e04562178aed6ecabf27a6609162352fe9ed4ccd6d9af5c2
7
+ data.tar.gz: 1883bac591b8e05cd3d25f86530c16306522867bdc615005a98fd097174bb38a8d17bf546a9cef9ef295569f1838946d5d45cff4aaf370eb93e523c62aba89d9
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "debugger"
22
23
  spec.add_dependency "rake"
23
24
  spec.add_dependency "aws-sdk"
24
25
  end
@@ -3,5 +3,5 @@ require "cloudformer/stack"
3
3
  require "cloudformer/tasks"
4
4
 
5
5
  module Cloudformer
6
- # Your code goes here...
6
+
7
7
  end
@@ -6,13 +6,14 @@ class Stack
6
6
  @name = stack_name
7
7
  @cf = AWS::CloudFormation.new
8
8
  @stack = @cf.stacks[name]
9
+ @ec2 = AWS::EC2.new
9
10
  end
10
11
 
11
12
  def deployed
12
13
  return stack.exists?
13
14
  end
14
15
 
15
- def apply(template_file, parameters)
16
+ def apply(template_file, parameters, disable_rollback=false)
16
17
  template = File.read(template_file)
17
18
  validation = validate(template)
18
19
  unless validation["valid"]
@@ -23,7 +24,7 @@ class Stack
23
24
  if deployed
24
25
  pending_operations = update(template, parameters)
25
26
  else
26
- pending_operations = create(template, parameters)
27
+ pending_operations = create(template, parameters, disable_rollback)
27
28
  end
28
29
  wait_until_end if pending_operations
29
30
  if stack.status == "ROLLBACK_COMPLETE"
@@ -34,6 +35,14 @@ class Stack
34
35
  end
35
36
  end
36
37
 
38
+ def stop_instances
39
+ update_instances("stop")
40
+ end
41
+
42
+ def start_instances
43
+ update_instances("start")
44
+ end
45
+
37
46
  def delete
38
47
  with_highlight do
39
48
  puts "Attempting to delete stack - #{name}"
@@ -59,7 +68,7 @@ class Stack
59
68
  return
60
69
  end
61
70
  stack.events.sort_by {|a| a.timestamp}.each do |event|
62
- puts "#{event.timestamp} - #{event.resource_type} - #{event.resource_status} - #{event.resource_status_reason.to_s}"
71
+ puts "#{event.timestamp} - #{event.logical_resource_id} - #{event.resource_type} - #{event.resource_status} - #{event.resource_status_reason.to_s}"
63
72
  end
64
73
  end
65
74
  end
@@ -127,13 +136,26 @@ class Stack
127
136
  return false
128
137
  end
129
138
 
130
- def create(template, parameters)
139
+ def create(template, parameters, disable_rollback)
131
140
  puts "Initializing stack creation..."
132
- @cf.stacks.create(name, template, :parameters => parameters)
141
+ @cf.stacks.create(name, template, :parameters => parameters, :disable_rollback => disable_rollback)
133
142
  sleep 10
134
143
  return true
135
144
  rescue ::AWS::CloudFormation::Errors::ValidationError => e
136
145
  puts e.message
137
146
  return false
138
147
  end
148
+
149
+ def update_instances(action)
150
+ with_highlight do
151
+ puts "Attempting to #{action} all ec2 instances in the stack #{stack.name}"
152
+ return "Stack not up" if !deployed
153
+ stack.resources.each do |resource|
154
+ next if resource.resource_type != "AWS::EC2::Instance"
155
+ physical_resource_id = resource.physical_resource_id
156
+ puts "Attempting to #{action} Instance with physical_resource_id: #{physical_resource_id}"
157
+ @ec2.instances[physical_resource_id].send(action)
158
+ end
159
+ end
160
+ end
139
161
  end
@@ -13,7 +13,7 @@ module Cloudformer
13
13
  end
14
14
  end
15
15
 
16
- attr_accessor :template, :parameters
16
+ attr_accessor :template, :parameters, :disable_rollback
17
17
 
18
18
  private
19
19
  def define_tasks
@@ -23,6 +23,8 @@ module Cloudformer
23
23
  define_status_task
24
24
  define_outputs_task
25
25
  define_recreate_task
26
+ define_stop_task
27
+ define_start_task
26
28
  end
27
29
 
28
30
  def define_create_task
@@ -63,5 +65,19 @@ module Cloudformer
63
65
  desc "Recreate stack."
64
66
  task :recreate => [:delete, :apply, :outputs]
65
67
  end
68
+
69
+ def define_stop_task
70
+ desc "Stop EC2 instances in stack."
71
+ task :stop do
72
+ @stack.stop_instances
73
+ end
74
+ end
75
+
76
+ def define_start_task
77
+ desc "Start EC2 instances in stack."
78
+ task :start do
79
+ @stack.start_instances
80
+ end
81
+ end
66
82
  end
67
83
  end
@@ -1,3 +1,3 @@
1
1
  module Cloudformer
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -1,7 +1,8 @@
1
1
  require 'cloudformer'
2
2
 
3
- Cloudformer::Tasks.new("app") do |t|
3
+ Cloudformer::Tasks.new("arvind-test") do |t|
4
4
  t.template = "basic_template.json"
5
5
  #AMI Works in Sydney region only, ensure you supply the right AMI.
6
6
  t.parameters = {"AmiId" => "ami-8da439b7"}
7
+ t.disable_rollback = true
7
8
  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.4
4
+ version: 0.0.5
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-10-24 00:00:00.000000000 Z
11
+ date: 2013-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: debugger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement