vaporware 0.0.2

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/vaporware.rb +70 -0
  3. metadata +86 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8e81d9a7d38cde5c3cfab765747ee7d6a9c265a3
4
+ data.tar.gz: 7811e2f2709e43c05f36688f734fc80f1295b076
5
+ SHA512:
6
+ metadata.gz: 8820352bf7edb7dad6eec5c57b2032481243a29d242b0d96cf2f08503323b765b929612925fe31806869f69f7e299f70cca1bae7e7fe8a65d158941ccd1050ff
7
+ data.tar.gz: dd66b66cdc3e116feec36fc3e685c9a876d4c8f6c3b320e5411056ff7fcd53230dc84f345f3555a4c4ce872ee1d890f6b9e3454c0d524c327322a8b66e6562bc
data/lib/vaporware.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'aws-sdk'
2
+
3
+ class Vaporware
4
+ attr_reader :client
5
+
6
+ def initialize opts = {}
7
+ options = {
8
+ stack_name: "change-me",
9
+ parameters: {},
10
+ timeout: 40 # minutes
11
+ }.merge opts
12
+ fail "You must specify a template filename!" unless options[:template_filename]
13
+
14
+ @client = Aws::CloudFormation::Client.new
15
+ @stack_name = options[:stack_name]
16
+ @template_body = File.read(options[:template_filename])
17
+ @parameters = build_parameters options[:parameters]
18
+ @timeout = options[:timeout]
19
+ end
20
+
21
+ def apply
22
+ stack_exists? ? update_stack : create_stack
23
+ end
24
+
25
+ def create_stack
26
+ @client.create_stack(stack_params)
27
+ @client.wait_until(:stack_create_complete, stack_name: @stack_name)
28
+ end
29
+
30
+ def update_stack
31
+ @client.update_stack(stack_params)
32
+ @client.wait_until(:stack_update_complete, stack_name: @stack_name)
33
+ end
34
+
35
+ def delete_stack
36
+ @client.delete_stack({ stack_name: @stack_name })
37
+ @client.wait_until(:stack_delete_complete, stack_name: @stack_name)
38
+ end
39
+
40
+ private
41
+
42
+ def build_parameters parameters
43
+ parameters.keys.reduce([]) do |acc, key|
44
+ acc << {
45
+ parameter_key: key.to_s,
46
+ parameter_value: parameters[key]
47
+ }
48
+ end
49
+ end
50
+
51
+ def stack_params
52
+ {
53
+ stack_name: @stack_name,
54
+ template_body: @template_body,
55
+ parameters: @parameters,
56
+ timeout_in_minutes: @timeout,
57
+ capabilities: ["CAPABILITY_IAM"],
58
+ on_failure: "ROLLBACK"
59
+ }
60
+ end
61
+
62
+ def stack_exists?
63
+ begin
64
+ @client.describe_stacks(stack_name: @stack_name)
65
+ rescue Aws::CloudFormation::Errors::ValidationError => e
66
+ return false
67
+ end
68
+ true
69
+ end
70
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vaporware
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Audrey Schwarz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sdk
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.8'
55
+ description: A thin wrapper for running CloudFormation templates
56
+ email: acbschwarz@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/vaporware.rb
62
+ homepage: http://rubygems.org/gems/vaporware
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.4.5.1
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: Vaporware
86
+ test_files: []