sparkle_formation 3.0.26 → 3.0.28
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +6 -0
- data/lib/sparkle_formation/composition.rb +17 -17
- data/lib/sparkle_formation/error.rb +2 -5
- data/lib/sparkle_formation/function_struct.rb +27 -31
- data/lib/sparkle_formation/provider/aws.rb +32 -31
- data/lib/sparkle_formation/provider/azure.rb +18 -19
- data/lib/sparkle_formation/provider/google.rb +20 -22
- data/lib/sparkle_formation/provider/heat.rb +17 -17
- data/lib/sparkle_formation/provider/terraform.rb +14 -15
- data/lib/sparkle_formation/provider.rb +0 -2
- data/lib/sparkle_formation/resources/aws.rb +129 -149
- data/lib/sparkle_formation/resources/aws_resources.json +9208 -5542
- data/lib/sparkle_formation/resources/azure.rb +2 -5
- data/lib/sparkle_formation/resources/azure_resources.json +12367 -2901
- data/lib/sparkle_formation/resources/google.rb +1 -4
- data/lib/sparkle_formation/resources/heat.rb +0 -4
- data/lib/sparkle_formation/resources/heat_resources.json +2616 -2062
- data/lib/sparkle_formation/resources/rackspace.rb +0 -4
- data/lib/sparkle_formation/resources/terraform.rb +2 -6
- data/lib/sparkle_formation/resources.rb +20 -24
- data/lib/sparkle_formation/sparkle.rb +56 -66
- data/lib/sparkle_formation/sparkle_attribute/aws.rb +61 -34
- data/lib/sparkle_formation/sparkle_attribute/azure.rb +12 -8
- data/lib/sparkle_formation/sparkle_attribute/google.rb +18 -15
- data/lib/sparkle_formation/sparkle_attribute/heat.rb +22 -7
- data/lib/sparkle_formation/sparkle_attribute/rackspace.rb +0 -2
- data/lib/sparkle_formation/sparkle_attribute/terraform.rb +11 -5
- data/lib/sparkle_formation/sparkle_attribute.rb +13 -7
- data/lib/sparkle_formation/sparkle_collection/rainbow.rb +5 -7
- data/lib/sparkle_formation/sparkle_collection.rb +13 -15
- data/lib/sparkle_formation/sparkle_formation.rb +116 -112
- data/lib/sparkle_formation/sparkle_struct.rb +30 -24
- data/lib/sparkle_formation/translation/heat.rb +57 -58
- data/lib/sparkle_formation/translation/rackspace.rb +48 -49
- data/lib/sparkle_formation/translation.rb +34 -37
- data/lib/sparkle_formation/utils.rb +6 -13
- data/lib/sparkle_formation/version.rb +1 -1
- data/sparkle_formation.gemspec +1 -1
- metadata +9 -9
@@ -17,6 +17,7 @@ class SparkleFormation
|
|
17
17
|
__t_stringish(v_name)
|
18
18
|
res = ::SparkleFormation::TerraformStruct.new('var').set!(__attribute_key(v_name))
|
19
19
|
end
|
20
|
+
|
20
21
|
alias_method :var!, :_var
|
21
22
|
alias_method :parameter!, :_var
|
22
23
|
|
@@ -24,23 +25,27 @@ class SparkleFormation
|
|
24
25
|
__t_stringish(p_name)
|
25
26
|
::SparkleFormation::TerraformStruct.new('path').set!(__attribute_key(p_name))
|
26
27
|
end
|
28
|
+
|
27
29
|
alias_method :path!, :_path
|
28
30
|
|
29
31
|
def _module(m_name)
|
30
32
|
__t_stringish(m_name)
|
31
33
|
::SparkleFormation::TerraformStruct.new('module').set!(__attribute_key(m_name))
|
32
34
|
end
|
35
|
+
|
33
36
|
alias_method :module!, :_module
|
34
37
|
|
35
38
|
def _terraform_self(s_name)
|
36
39
|
__t_stringish(s_name)
|
37
40
|
::SparkleFormation::TerraformStruct.new('self').set!(__attribute_key(s_name))
|
38
41
|
end
|
42
|
+
|
39
43
|
alias_method :self!, :_terraform_self
|
40
44
|
|
41
45
|
def _terraform_lookup(*args)
|
42
46
|
::SparkleFormation::TerraformStruct.new('lookup', *args)
|
43
47
|
end
|
48
|
+
|
44
49
|
alias_method :lookup!, :_terraform_lookup
|
45
50
|
|
46
51
|
# TODO: Add resource checking before returning structure
|
@@ -49,6 +54,7 @@ class SparkleFormation
|
|
49
54
|
r_name = __resource_lookup(r_name)
|
50
55
|
::SparkleFormation::TerraformStruct.new(r_name)
|
51
56
|
end
|
57
|
+
|
52
58
|
alias_method :resource!, :_resource
|
53
59
|
|
54
60
|
TERRAFORM_INTRINSIC_FUNCTIONS = [
|
@@ -83,7 +89,7 @@ class SparkleFormation
|
|
83
89
|
'sort',
|
84
90
|
'split',
|
85
91
|
'trimspace',
|
86
|
-
'upper'
|
92
|
+
'upper',
|
87
93
|
]
|
88
94
|
|
89
95
|
# NOTE: Alias implementation disabled due to Ruby 2.3 __callee__ bug
|
@@ -114,7 +120,7 @@ class SparkleFormation
|
|
114
120
|
|
115
121
|
def __resource_lookup(name)
|
116
122
|
resource = root!.resources[name]
|
117
|
-
if
|
123
|
+
if resource.nil?
|
118
124
|
name
|
119
125
|
else
|
120
126
|
"#{resource.type}.#{name}"
|
@@ -131,8 +137,9 @@ class SparkleFormation
|
|
131
137
|
# @return [Array<String>]
|
132
138
|
# @note this will directly modify the struct at its current context to inject depends on structure
|
133
139
|
def _depends_on(*args)
|
134
|
-
_set('depends_on', [args].flatten.compact.map{|s| __attribute_key(s) })
|
140
|
+
_set('depends_on', [args].flatten.compact.map { |s| __attribute_key(s) })
|
135
141
|
end
|
142
|
+
|
136
143
|
alias_method :depends_on!, :_depends_on
|
137
144
|
|
138
145
|
# Reference output value from nested stack
|
@@ -143,9 +150,8 @@ class SparkleFormation
|
|
143
150
|
def _stack_output(stack_name, output_name)
|
144
151
|
_module(stack_name)._set(output_name)
|
145
152
|
end
|
146
|
-
alias_method :stack_output!, :_stack_output
|
147
153
|
|
154
|
+
alias_method :stack_output!, :_stack_output
|
148
155
|
end
|
149
|
-
|
150
156
|
end
|
151
157
|
end
|
@@ -4,7 +4,6 @@ class SparkleFormation
|
|
4
4
|
|
5
5
|
# Provides template helper methods
|
6
6
|
module SparkleAttribute
|
7
|
-
|
8
7
|
autoload :Aws, 'sparkle_formation/sparkle_attribute/aws'
|
9
8
|
autoload :Azure, 'sparkle_formation/sparkle_attribute/azure'
|
10
9
|
autoload :Google, 'sparkle_formation/sparkle_attribute/google'
|
@@ -18,8 +17,8 @@ class SparkleFormation
|
|
18
17
|
# @return [String]
|
19
18
|
def _resource_name
|
20
19
|
result = nil
|
21
|
-
if
|
22
|
-
if
|
20
|
+
if _parent
|
21
|
+
if _parent._parent == _root
|
23
22
|
result = _parent._data.detect do |r_name, r_value|
|
24
23
|
r_value == self
|
25
24
|
end
|
@@ -28,14 +27,15 @@ class SparkleFormation
|
|
28
27
|
result = _parent._resource_name
|
29
28
|
end
|
30
29
|
end
|
31
|
-
unless
|
30
|
+
unless result
|
32
31
|
::Kernel.raise NameError.new 'Failed to determine current resource name! (Check call location)'
|
33
32
|
end
|
34
|
-
if
|
33
|
+
if result.is_a?(::SparkleFormation::FunctionStruct)
|
35
34
|
result = result._clone
|
36
35
|
end
|
37
36
|
result
|
38
37
|
end
|
38
|
+
|
39
39
|
alias_method :resource_name!, :_resource_name
|
40
40
|
|
41
41
|
# Execute system command
|
@@ -45,6 +45,7 @@ class SparkleFormation
|
|
45
45
|
def _system(command)
|
46
46
|
::Kernel.send('`', command)
|
47
47
|
end
|
48
|
+
|
48
49
|
alias_method :system!, :_system
|
49
50
|
|
50
51
|
# @overload _puts(obj, ...)
|
@@ -55,6 +56,7 @@ class SparkleFormation
|
|
55
56
|
def _puts(*args)
|
56
57
|
$stdout.puts(*args)
|
57
58
|
end
|
59
|
+
|
58
60
|
alias_method :puts!, :_puts
|
59
61
|
|
60
62
|
# Raise an exception
|
@@ -62,6 +64,7 @@ class SparkleFormation
|
|
62
64
|
def _raise(*args)
|
63
65
|
::Kernel.raise(*args)
|
64
66
|
end
|
67
|
+
|
65
68
|
alias_method :raise!, :_raise
|
66
69
|
|
67
70
|
# @overload _method(sym)
|
@@ -73,6 +76,7 @@ class SparkleFormation
|
|
73
76
|
def _method(*args)
|
74
77
|
::Kernel.instance_method(:method).bind(self).call(*args)
|
75
78
|
end
|
79
|
+
|
76
80
|
alias_method :method!, :_method
|
77
81
|
|
78
82
|
# @overload _dynamic(resource_type, custom_name, options={})
|
@@ -97,6 +101,7 @@ class SparkleFormation
|
|
97
101
|
def _dynamic(name, *args, &block)
|
98
102
|
SparkleFormation.insert(name, self, *args, &block)
|
99
103
|
end
|
104
|
+
|
100
105
|
alias_method :dynamic!, :_dynamic
|
101
106
|
|
102
107
|
# @overload _registry(name)
|
@@ -114,6 +119,7 @@ class SparkleFormation
|
|
114
119
|
def _registry(name, *args)
|
115
120
|
SparkleFormation.registry(name, self, *args)
|
116
121
|
end
|
122
|
+
|
117
123
|
alias_method :registry!, :_registry
|
118
124
|
|
119
125
|
# @overload _nest(template, *names, options={})
|
@@ -133,6 +139,7 @@ class SparkleFormation
|
|
133
139
|
def _nest(template, *args, &block)
|
134
140
|
SparkleFormation.nest(template, self, *args, &block)
|
135
141
|
end
|
142
|
+
|
136
143
|
alias_method :nest!, :_nest
|
137
144
|
|
138
145
|
# Format the provided key. If symbol type is provided
|
@@ -142,12 +149,11 @@ class SparkleFormation
|
|
142
149
|
# @param key [String, Symbol] given key
|
143
150
|
# @return [String] formatted key
|
144
151
|
def __attribute_key(key)
|
145
|
-
if
|
152
|
+
if key.is_a?(::Symbol) || key.is_a?(::String)
|
146
153
|
_process_key(key, key.is_a?(::Symbol) ? :force : nil)
|
147
154
|
else
|
148
155
|
key
|
149
156
|
end
|
150
157
|
end
|
151
|
-
|
152
158
|
end
|
153
159
|
end
|
@@ -2,7 +2,6 @@ require 'sparkle_formation'
|
|
2
2
|
require 'forwardable'
|
3
3
|
|
4
4
|
class SparkleFormation
|
5
|
-
|
6
5
|
class SparkleCollection
|
7
6
|
|
8
7
|
# Contains a layered number of a specific item defined via
|
@@ -15,7 +14,7 @@ class SparkleFormation
|
|
15
14
|
VALID_TYPES = [
|
16
15
|
:template,
|
17
16
|
:component,
|
18
|
-
:dynamic
|
17
|
+
:dynamic,
|
19
18
|
].freeze
|
20
19
|
|
21
20
|
extend Forwardable
|
@@ -34,7 +33,7 @@ class SparkleFormation
|
|
34
33
|
# @param type [String, Symbol] type of item
|
35
34
|
# @return [self]
|
36
35
|
def initialize(name, type)
|
37
|
-
unless
|
36
|
+
unless VALID_TYPES.include?(type.to_sym)
|
38
37
|
raise ArgumentError.new "Invalid type provdied for Rainbow instance `#{type}`"
|
39
38
|
end
|
40
39
|
@name = name.to_s
|
@@ -47,7 +46,7 @@ class SparkleFormation
|
|
47
46
|
# @param item [Hash]
|
48
47
|
# @return [self]
|
49
48
|
def add_layer(item)
|
50
|
-
unless
|
49
|
+
unless item.is_a?(Hash)
|
51
50
|
raise TypeError.new "Expecting type `Hash` but received type `#{item.class}`"
|
52
51
|
end
|
53
52
|
spectrum << item.to_smash
|
@@ -59,7 +58,7 @@ class SparkleFormation
|
|
59
58
|
# @param idx [Integer]
|
60
59
|
# @return [Hash]
|
61
60
|
def layer_at(idx)
|
62
|
-
if
|
61
|
+
if idx <= spectrum.size
|
63
62
|
spectrum.at(idx)
|
64
63
|
else
|
65
64
|
raise KeyError.new "Invalid layer requested for #{type} - #{name} (index: #{idx})"
|
@@ -74,7 +73,7 @@ class SparkleFormation
|
|
74
73
|
def monochrome
|
75
74
|
Array.new.tap do |result|
|
76
75
|
spectrum.each do |item|
|
77
|
-
unless
|
76
|
+
unless item.get(:args, :layering).to_s == 'merge'
|
78
77
|
result.clear
|
79
78
|
end
|
80
79
|
result << item
|
@@ -87,6 +86,5 @@ class SparkleFormation
|
|
87
86
|
spectrum.last || {}
|
88
87
|
end
|
89
88
|
end
|
90
|
-
|
91
89
|
end
|
92
90
|
end
|
@@ -5,7 +5,6 @@ class SparkleFormation
|
|
5
5
|
# @todo add unmemoize behavior on collection modification to prevent
|
6
6
|
# leak on long running processes with long lasting collections
|
7
7
|
class SparkleCollection < Sparkle
|
8
|
-
|
9
8
|
autoload :Rainbow, 'sparkle_formation/sparkle_collection/rainbow'
|
10
9
|
|
11
10
|
# @return [Symbol] provider
|
@@ -16,7 +15,7 @@ class SparkleFormation
|
|
16
15
|
# @param args [Hash]
|
17
16
|
# @option args [Symbol, String] :provider name of default provider
|
18
17
|
# @return [self]
|
19
|
-
def initialize(args={})
|
18
|
+
def initialize(args = {})
|
20
19
|
@provider = Bogo::Utility.snake(args.to_smash.fetch(:provider, 'aws')).to_sym
|
21
20
|
@root = nil
|
22
21
|
@sparkles = []
|
@@ -46,11 +45,11 @@ class SparkleFormation
|
|
46
45
|
#
|
47
46
|
# @param sparkle [Sparkle]
|
48
47
|
# @return [self]
|
49
|
-
def add_sparkle(sparkle, precedence
|
50
|
-
unless
|
48
|
+
def add_sparkle(sparkle, precedence = :high)
|
49
|
+
unless sparkle.is_a?(Sparkle)
|
51
50
|
raise TypeError.new "Expected type `SparkleFormation::Sparkle` but received `#{sparkle.class}`!"
|
52
51
|
end
|
53
|
-
if
|
52
|
+
if precedence == :high
|
54
53
|
@sparkles.push(sparkle).uniq!
|
55
54
|
else
|
56
55
|
@sparkles.unshift(sparkle).uniq!
|
@@ -89,7 +88,7 @@ class SparkleFormation
|
|
89
88
|
sparkles.each do |sprkl|
|
90
89
|
sprkl.components.each_pair do |c_provider, c_info|
|
91
90
|
c_info.each_pair do |c_name, c_value|
|
92
|
-
unless
|
91
|
+
unless hsh.get(c_provider, c_name)
|
93
92
|
hsh.set(c_provider, c_name, Rainbow.new(c_name, :component))
|
94
93
|
end
|
95
94
|
hsh.get(c_provider, c_name).add_layer(c_value)
|
@@ -107,7 +106,7 @@ class SparkleFormation
|
|
107
106
|
sparkles.each do |sprkl|
|
108
107
|
sprkl.dynamics.each_pair do |c_provider, c_info|
|
109
108
|
c_info.each_pair do |c_name, c_value|
|
110
|
-
unless
|
109
|
+
unless hsh.get(c_provider, c_name)
|
111
110
|
hsh.set(c_provider, c_name, Rainbow.new(c_name, :dynamic))
|
112
111
|
end
|
113
112
|
hsh.get(c_provider, c_name).add_layer(c_value)
|
@@ -136,7 +135,7 @@ class SparkleFormation
|
|
136
135
|
sparkles.each do |sprkl|
|
137
136
|
sprkl.templates.each_pair do |c_provider, c_info|
|
138
137
|
c_info.each_pair do |c_name, c_value|
|
139
|
-
unless
|
138
|
+
unless hsh.get(c_provider, c_name)
|
140
139
|
hsh.set(c_provider, c_name, Rainbow.new(c_name, :template))
|
141
140
|
end
|
142
141
|
hsh.get(c_provider, c_name).add_layer(c_value)
|
@@ -154,29 +153,29 @@ class SparkleFormation
|
|
154
153
|
# @param target_provider [String, Symbol] restrict to provider
|
155
154
|
# @return [Smash] requested item
|
156
155
|
# @raises [NameError, Error::NotFound]
|
157
|
-
def get(type, name, target_provider=nil)
|
156
|
+
def get(type, name, target_provider = nil)
|
158
157
|
type_name = Sparkle::TYPES[type.to_s]
|
159
|
-
unless
|
158
|
+
unless type_name
|
160
159
|
raise ArgumentError.new "Unknown file type requested from collection `#{type}`"
|
161
160
|
end
|
162
161
|
result = nil
|
163
162
|
error = nil
|
164
|
-
unless
|
163
|
+
unless target_provider
|
165
164
|
target_provider = provider
|
166
165
|
end
|
167
166
|
result = send(type_name).get(target_provider, name)
|
168
|
-
if
|
167
|
+
if result.nil? && type_name == 'templates'
|
169
168
|
t_direct = sparkles.map do |pack|
|
170
169
|
begin
|
171
170
|
pack.get(:template, name, target_provider)
|
172
171
|
rescue Error::NotFound
|
173
172
|
end
|
174
173
|
end.compact.last
|
175
|
-
if
|
174
|
+
if t_direct
|
176
175
|
result = send(type_name).get(target_provider, t_direct[:name])
|
177
176
|
end
|
178
177
|
end
|
179
|
-
unless
|
178
|
+
unless result
|
180
179
|
error_klass = Error::NotFound.const_get(
|
181
180
|
Bogo::Utility.camel(type)
|
182
181
|
)
|
@@ -200,6 +199,5 @@ class SparkleFormation
|
|
200
199
|
end
|
201
200
|
end.checksum
|
202
201
|
end
|
203
|
-
|
204
202
|
end
|
205
203
|
end
|