stackup 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: b28654577f4adc5f14d2021d5d636411175e96fb
4
- data.tar.gz: 5f17fcfc2f449abcc5970db182de088b4d56bddb
3
+ metadata.gz: 3a76fe73e3081eb43b4b664f82ab8018f43d95e0
4
+ data.tar.gz: e888b62cdd79ecb05ae03c366b5deadcee497ddb
5
5
  SHA512:
6
- metadata.gz: e5d6ad207e295be6f7f09ae3eea5293c4de81406711b881542f2a3c5c574555f1506597d1e399fda006613683674163aec23a13604f6f983195330eda731c6bf
7
- data.tar.gz: 23f066308e4247263aeb87631f801c4be6290903d74c082b859c38d063d6ecb025ac8180d3f2f3488d2d9b2b1ea51a176d0ac9fe0c3fcedc49115e40bcda3d1c
6
+ metadata.gz: 3d3b377393f712fe04de5ec8ce6b9a4527b8a9a1f15cef60c009483b0317d3d317f2ae453e75936e9b48f423644b63fbfa15b7c62f6b7c90ac16044c3bba17b3
7
+ data.tar.gz: 6f639914a99aed8803ee9a72cc3055b0f0071e0af561519c848b032d1e3ddb0e025f79ccd5c00eb00321e2ff130148ac98538ff8b5a840d2fcc7b279d60496f8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stackup (0.0.3)
4
+ stackup (0.0.4)
5
5
  aws-sdk (~> 2.0)
6
6
  clamp (~> 1.0)
7
7
 
@@ -11,12 +11,12 @@ GEM
11
11
  ast (2.1.0)
12
12
  astrolabe (1.3.1)
13
13
  parser (~> 2.2)
14
- aws-sdk (2.1.20)
15
- aws-sdk-resources (= 2.1.20)
16
- aws-sdk-core (2.1.20)
14
+ aws-sdk (2.1.21)
15
+ aws-sdk-resources (= 2.1.21)
16
+ aws-sdk-core (2.1.21)
17
17
  jmespath (~> 1.0)
18
- aws-sdk-resources (2.1.20)
19
- aws-sdk-core (= 2.1.20)
18
+ aws-sdk-resources (2.1.21)
19
+ aws-sdk-core (= 2.1.21)
20
20
  byebug (6.0.2)
21
21
  clamp (1.0.0)
22
22
  diff-lcs (1.2.5)
data/lib/stackup/cli.rb CHANGED
@@ -1,25 +1,34 @@
1
- module Stackup
2
- class CLI < Clamp::Command
3
-
4
- subcommand ["stack"], "Manage a stack." do
5
- parameter "STACK-NAME", "Name of stack", :attribute_name => :stack_name
6
-
7
- subcommand "apply", "Create/update the stack" do
8
- parameter "TEMPLATE", "CloudFormation template (.json)", :attribute_name => :template
9
-
10
- def execute
11
- stack = Stackup::Stack.new(stack_name, template)
12
- stack.create
13
- end
14
- end
15
-
16
- subcommand "delete", "Remove the stack." do
17
- def execute
18
- stack = Stackup::Stack.new(stack_name, nil)
19
- stack.delete
20
- end
21
- end
22
- end
23
-
24
- end
25
- end
1
+ module Stackup
2
+ class CLI < Clamp::Command
3
+
4
+ subcommand ["stack"], "Manage a stack." do
5
+ parameter "STACK-NAME", "Name of stack", :attribute_name => :stack_name
6
+
7
+ subcommand "deploy", "Create/update the stack" do
8
+ parameter "TEMPLATE", "CloudFormation template (.json)", :attribute_name => :template
9
+ parameter "PARAMETERS", "CloudFormation parameters (.json)", :attribute_name => :parameters
10
+
11
+ def execute
12
+ params = JSON.parse(parameters)
13
+ stack = Stackup::Stack.new(stack_name)
14
+ stack.create(template, params)
15
+ end
16
+ end
17
+
18
+ subcommand "delete", "Remove the stack." do
19
+ def execute
20
+ stack = Stackup::Stack.new(stack_name)
21
+ stack.delete
22
+ end
23
+ end
24
+
25
+ subcommand "outputs", "Stack outputs." do
26
+ def execute
27
+ stack = Stackup::Stack.new(stack_name)
28
+ stack.outputs
29
+ end
30
+ end
31
+ end
32
+
33
+ end
34
+ end
data/lib/stackup/stack.rb CHANGED
@@ -15,25 +15,28 @@ module Stackup
15
15
  @name = name
16
16
  end
17
17
 
18
- def create(template)
18
+ def create(template, parameters)
19
19
  response = cf.create_stack(:stack_name => name,
20
20
  :template_body => template,
21
- :disable_rollback => true)
21
+ :disable_rollback => true,
22
+ :parameters => parameters)
22
23
  wait_till_end
23
24
  !response[:stack_id].nil?
24
25
  end
25
26
 
26
- def deploy(template)
27
+ def deploy(template, parameters = [])
27
28
  if deployed?
28
- update(template)
29
+ update(template, parameters)
29
30
  else
30
- create(template)
31
+ create(template, parameters)
31
32
  end
33
+ rescue Aws::CloudFormation::Errors::ValidationError => e
34
+ puts e.message
32
35
  end
33
36
 
34
- def update(template)
37
+ def update(template, parameters)
35
38
  return false unless deployed?
36
- response = cf.update_stack(:stack_name => name, :template_body => template)
39
+ response = cf.update_stack(:stack_name => name, :template_body => template, :parameters => parameters)
37
40
  wait_till_end
38
41
  !response[:stack_id].nil?
39
42
  end
@@ -45,6 +48,10 @@ module Stackup
45
48
  puts "Stack does not exist."
46
49
  end
47
50
 
51
+ def outputs
52
+ puts stack.outputs.flat_map { |output| "#{output.output_key} - #{output.output_value}" }
53
+ end
54
+
48
55
  def display_events
49
56
  monitor.new_events.each do |e|
50
57
  ts = e.timestamp.localtime.strftime("%H:%M:%S")
data/lib/stackup.rb CHANGED
@@ -1,3 +1,4 @@
1
- require "aws-sdk"
2
- require_relative "stackup/monitor"
3
- require_relative "stackup/stack"
1
+ require "aws-sdk"
2
+ require_relative "stackup/monitor"
3
+ require_relative "stackup/stack"
4
+ require "json"
Binary file
Binary file
@@ -5,6 +5,7 @@ describe Stackup::Stack do
5
5
  let(:template) { double(String) }
6
6
  let(:cf_stack) { double(Aws::CloudFormation::Stack) }
7
7
  let(:cf) { double(Aws::CloudFormation::Client) }
8
+ let(:parameters) { [] }
8
9
 
9
10
  before do
10
11
  allow(Aws::CloudFormation::Client).to receive(:new).and_return(cf)
@@ -16,12 +17,12 @@ describe Stackup::Stack do
16
17
  it "should call create if stack is not deployed" do
17
18
  allow(stack).to receive(:deployed?).and_return(false)
18
19
  expect(stack).to receive(:create).and_return(true)
19
- expect(stack.deploy(template)).to be true
20
+ expect(stack.deploy(template, parameters)).to be true
20
21
  end
21
22
  it "should call update if stack is deployed" do
22
23
  allow(stack).to receive(:deployed?).and_return(true)
23
24
  expect(stack).to receive(:update).and_return(true)
24
- expect(stack.deploy(template)).to be true
25
+ expect(stack.deploy(template, parameters)).to be true
25
26
  end
26
27
  end
27
28
 
@@ -32,12 +33,12 @@ describe Stackup::Stack do
32
33
  allow(response).to receive(:[]).with(:stack_id).and_return("1")
33
34
  allow(cf).to receive(:update_stack).and_return(response)
34
35
  allow(cf_stack).to receive(:wait_until).and_return(true)
35
- expect(stack.update(template)).to be true
36
+ expect(stack.update(template, parameters)).to be true
36
37
  end
37
38
 
38
39
  it "should not update if the stack is not deployed" do
39
40
  allow(cf_stack).to receive(:stack_status).and_raise(Aws::CloudFormation::Errors::ValidationError.new("1", "2"))
40
- expect(stack.update(template)).to be false
41
+ expect(stack.update(template, parameters)).to be false
41
42
  end
42
43
  end
43
44
 
@@ -56,14 +57,14 @@ describe Stackup::Stack do
56
57
  allow(response).to receive(:[]).with(:stack_id).and_return("1")
57
58
  allow(cf).to receive(:create_stack).and_return(response)
58
59
  allow(cf_stack).to receive(:wait_until).and_return(true)
59
- expect(stack.create(template)).to be true
60
+ expect(stack.create(template, parameters)).to be true
60
61
  end
61
62
 
62
63
  it "should return nil if stack was not created" do
63
64
  allow(response).to receive(:[]).with(:stack_id).and_return(nil)
64
65
  allow(cf).to receive(:create_stack).and_return(response)
65
66
  allow(cf_stack).to receive(:wait_until).and_return(false)
66
- expect(stack.create(template)).to be false
67
+ expect(stack.create(template, parameters)).to be false
67
68
  end
68
69
  end
69
70
 
data/stackup.gemspec CHANGED
@@ -1,21 +1,21 @@
1
- lib = File.expand_path("../lib", __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
-
4
- Gem::Specification.new do |spec|
5
-
6
- spec.name = "stackup"
7
- spec.version = "0.0.4"
8
- spec.authors = ["Arvind Kunday", "Mike Williams"]
9
- spec.email = ["arvind.kunday@rea-group.com", "mike.williams@rea-group.com"]
10
- spec.summary = "Tools for deployment to AWS"
11
- spec.homepage = "https://github.com/realestate-com-au/stackup"
12
- spec.license = "MIT"
13
-
14
- spec.files = Dir["**/*"].reject { |f| File.directory?(f) }
15
- spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
16
- spec.require_paths = ["lib"]
17
-
18
- spec.add_dependency "aws-sdk", "~> 2.0"
19
- spec.add_dependency "clamp", "~> 1.0"
20
-
21
- end
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ Gem::Specification.new do |spec|
5
+
6
+ spec.name = "stackup"
7
+ spec.version = "0.0.5"
8
+ spec.authors = ["Arvind Kunday", "Mike Williams"]
9
+ spec.email = ["arvind.kunday@rea-group.com", "mike.williams@rea-group.com"]
10
+ spec.summary = "Tools for deployment to AWS"
11
+ spec.homepage = "https://github.com/realestate-com-au/stackup"
12
+ spec.license = "MIT"
13
+
14
+ spec.files = Dir["**/*"].reject { |f| File.directory?(f) }
15
+ spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_dependency "aws-sdk", "~> 2.0"
19
+ spec.add_dependency "clamp", "~> 1.0"
20
+
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackup
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
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-09-16 00:00:00.000000000 Z
12
+ date: 2015-09-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
@@ -59,6 +59,8 @@ files:
59
59
  - lib/stackup/stack.rb
60
60
  - pkg/stackup-0.0.2.gem
61
61
  - pkg/stackup-0.0.3.gem
62
+ - pkg/stackup-0.0.4.gem
63
+ - pkg/stackup-0.0.5.gem
62
64
  - sample.json
63
65
  - spec/spec_helper.rb
64
66
  - spec/stackup/monitor_spec.rb