cloudformer 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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