autostacker24 1.0.14 → 1.0.16
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 +4 -4
- data/lib/autostacker24/stacker.rb +16 -14
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40dc0a732bdb09dd60231d5eaa1b0f0514205b2b
|
4
|
+
data.tar.gz: 4a2a006c5b28fd818b299695a197070513081d44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b025a2e4ac47f0b19b514c7b765e6b72bfa43372def9e0278253f6cb7ceb68168251d8a89a9b105b19baf0bb4e95813d038eeff65449ddbd5a5d6e8e79978d8b
|
7
|
+
data.tar.gz: ba2938c9022c9120ae6e22f4fc2c41445422c15092ca0e5163dfb864a8c681081be759e7263c5480c6bc7f132aedc67fbe3a4a6fdae0c63f6c85146dab7d2582
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'aws-sdk'
|
1
|
+
require 'aws-sdk-core'
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
module Stacker
|
5
5
|
|
6
|
-
def
|
6
|
+
def create_or_update_stack(stack_name, template_body, parameters, parent_stack_name = nil)
|
7
7
|
if find_stack(stack_name).nil?
|
8
8
|
create_stack(stack_name, template_body, parameters, parent_stack_name)
|
9
9
|
else
|
@@ -11,7 +11,7 @@ module Stacker
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def create_stack(stack_name, template_body, parameters, parent_stack_name = nil)
|
15
15
|
merge_output_parameters(parent_stack_name, template_body, parameters) if parent_stack_name
|
16
16
|
cloud_formation.create_stack(stack_name: stack_name,
|
17
17
|
template_body: template_body,
|
@@ -21,7 +21,7 @@ module Stacker
|
|
21
21
|
wait_for_stack(stack_name, :create)
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
24
|
+
def update_stack(stack_name, template_body, parameters, parent_stack_name = nil)
|
25
25
|
merge_output_parameters(parent_stack_name, template_body, parameters) if parent_stack_name
|
26
26
|
begin
|
27
27
|
cloud_formation.update_stack(stack_name: stack_name,
|
@@ -36,7 +36,7 @@ module Stacker
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
39
|
+
def merge_output_parameters(stack_name, template_body, parameters)
|
40
40
|
expected_parameters = JSON(template_body)['Parameters']
|
41
41
|
get_stack_outputs(stack_name).each do |k, v|
|
42
42
|
parameters[k.to_sym] = v if expected_parameters.has_key?(k.to_s)
|
@@ -44,12 +44,12 @@ module Stacker
|
|
44
44
|
parameters
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
47
|
+
def delete_stack(stack_name)
|
48
48
|
cloud_formation.delete_stack(stack_name: stack_name)
|
49
49
|
wait_for_stack(stack_name, :delete)
|
50
50
|
end
|
51
51
|
|
52
|
-
def
|
52
|
+
def wait_for_stack(stack_name, operation, timeout_in_minutes = 15)
|
53
53
|
stop_time = Time.now + timeout_in_minutes * 60
|
54
54
|
finished = /(CREATE_COMPLETE|UPDATE_COMPLETE|DELETE_COMPLETE|ROLLBACK_COMPLETE|ROLLBACK_FAILED|CREATE_FAILED|DELETE_FAILED)$/
|
55
55
|
while Time.now < stop_time
|
@@ -68,40 +68,42 @@ module Stacker
|
|
68
68
|
fail "waiting for stack timeout after #{timeout_in_minutes} minutes"
|
69
69
|
end
|
70
70
|
|
71
|
-
def
|
71
|
+
def find_stack(stack_name)
|
72
72
|
cloud_formation.describe_stacks(stack_name: stack_name).stacks.first
|
73
73
|
rescue Aws::CloudFormation::Errors::ValidationError => error
|
74
74
|
raise error unless error.message =~ /does not exist/i # may be flaky, do more research in API
|
75
75
|
nil
|
76
76
|
end
|
77
77
|
|
78
|
-
def
|
78
|
+
def estimate_template_cost(template_body, parameters)
|
79
79
|
cloud_formation.estimate_template_cost(:template_body => template_body, :parameters => transform_parameters(parameters))
|
80
80
|
end
|
81
81
|
|
82
|
-
def
|
82
|
+
def get_stack_outputs(stack_name)
|
83
83
|
stack = find_stack(stack_name)
|
84
84
|
fail "stack #{stack_name} not found" unless stack
|
85
85
|
transform_outputs(stack.outputs).freeze
|
86
86
|
end
|
87
87
|
|
88
|
-
def
|
88
|
+
def transform_outputs(outputs)
|
89
89
|
outputs.inject({}) { |m, o| m.merge(o.output_key.to_sym => o.output_value) }
|
90
90
|
end
|
91
91
|
|
92
|
-
def
|
92
|
+
def transform_parameters(parameters)
|
93
93
|
parameters.inject([]) { |m, kv| m << {parameter_key: kv[0].to_s, parameter_value: kv[1].to_s} }
|
94
94
|
end
|
95
95
|
|
96
|
-
def
|
96
|
+
def get_stack_resources(stack_name)
|
97
97
|
resources = cloud_formation.describe_stack_resources(stack_name: stack_name).data.stack_resources
|
98
98
|
resources.inject({}){|map, resource| map.merge(resource.logical_resource_id.to_sym => resource)}.freeze
|
99
99
|
end
|
100
100
|
|
101
|
-
def
|
101
|
+
def cloud_formation # lazy CloudFormation client
|
102
102
|
@lazy_cloud_formation ||= Aws::CloudFormation::Client.new(region: ENV['AWS_DEFAULT_REGION'] || 'eu-west-1')
|
103
103
|
end
|
104
104
|
|
105
|
+
extend self
|
106
|
+
|
105
107
|
end
|
106
108
|
|
107
109
|
if $0 ==__FILE__ # placeholder for interactive testing
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autostacker24
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johannes Mueller
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-01-
|
12
|
+
date: 2015-01-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name: aws-sdk
|
15
|
+
name: aws-sdk-core
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2
|
20
|
+
version: '2'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2
|
27
|
+
version: '2'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: json
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|