cfhighlander 0.2.1 → 0.3.0.alpha.1528936037
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/README.md +199 -82
- data/bin/cfhighlander +1 -1
- data/bin/{highlander.rb → cfhighlander.rb} +39 -23
- data/cfndsl_ext/sg.rb +29 -2
- data/hl_ext/mapping_helper.rb +6 -4
- data/lib/{highlander.compiler.rb → cfhighlander.compiler.rb} +26 -18
- data/lib/{highlander.dsl.base.rb → cfhighlander.dsl.base.rb} +3 -2
- data/lib/cfhighlander.dsl.params.rb +108 -0
- data/lib/cfhighlander.dsl.subcomponent.rb +274 -0
- data/lib/{highlander.dsl.rb → cfhighlander.dsl.template.rb} +111 -63
- data/lib/cfhighlander.factory.rb +45 -0
- data/lib/cfhighlander.factory.templatefinder.rb +248 -0
- data/lib/{highlander.helper.rb → cfhighlander.helper.rb} +2 -2
- data/lib/{highlander.mapproviders.rb → cfhighlander.mapproviders.rb} +1 -1
- data/lib/cfhighlander.model.component.rb +177 -0
- data/lib/cfhighlander.model.templatemeta.rb +25 -0
- data/lib/{highlander.publisher.rb → cfhighlander.publisher.rb} +3 -3
- data/lib/{highlander.validator.rb → cfhighlander.validator.rb} +1 -1
- data/lib/util/zip.util.rb +1 -1
- data/templates/cfndsl.component.template.erb +15 -14
- metadata +38 -15
- data/lib/highlander.dsl.component.rb +0 -243
- data/lib/highlander.dsl.params.rb +0 -113
- data/lib/highlander.factory.rb +0 -359
@@ -1,243 +0,0 @@
|
|
1
|
-
require_relative './highlander.helper'
|
2
|
-
require_relative './highlander.dsl.base'
|
3
|
-
require_relative './highlander.factory'
|
4
|
-
|
5
|
-
module Highlander
|
6
|
-
|
7
|
-
module Dsl
|
8
|
-
|
9
|
-
class SubcomponentParameter
|
10
|
-
attr_accessor :name, :cfndsl_value
|
11
|
-
|
12
|
-
def initialize
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
class Component < DslBase
|
20
|
-
|
21
|
-
attr_accessor :name,
|
22
|
-
:template,
|
23
|
-
:template_version,
|
24
|
-
:distribution_format,
|
25
|
-
:distribution_location,
|
26
|
-
:distribution_url,
|
27
|
-
:distribution_format,
|
28
|
-
:component_loaded,
|
29
|
-
:parameters,
|
30
|
-
:param_values,
|
31
|
-
:parent,
|
32
|
-
:component_config_override,
|
33
|
-
:export_config
|
34
|
-
|
35
|
-
def initialize(parent,
|
36
|
-
name,
|
37
|
-
template,
|
38
|
-
param_values,
|
39
|
-
component_sources = [],
|
40
|
-
config = {},
|
41
|
-
export_config = {},
|
42
|
-
distribution_format = 'yaml')
|
43
|
-
|
44
|
-
@parent = parent
|
45
|
-
@config = config
|
46
|
-
@export_config = export_config
|
47
|
-
@component_sources = component_sources
|
48
|
-
|
49
|
-
template_name = template
|
50
|
-
template_version = 'latest'
|
51
|
-
if template.include?('@') and not (template.start_with? 'git')
|
52
|
-
template_name = template.split('@')[0]
|
53
|
-
template_version = template.split('@')[1]
|
54
|
-
end
|
55
|
-
|
56
|
-
@template = template_name
|
57
|
-
@template_version = template_version
|
58
|
-
@name = name
|
59
|
-
@param_values = param_values
|
60
|
-
|
61
|
-
# distribution settings
|
62
|
-
@distribution_format = distribution_format
|
63
|
-
# by default components located at same location as master stack
|
64
|
-
@distribution_location = '.'
|
65
|
-
build_distribution_url
|
66
|
-
|
67
|
-
# load component
|
68
|
-
factory = Highlander::Factory::ComponentFactory.new(@component_sources)
|
69
|
-
@component_loaded = factory.findComponent(
|
70
|
-
@template,
|
71
|
-
@template_version
|
72
|
-
)
|
73
|
-
@component_loaded.config.extend @config
|
74
|
-
|
75
|
-
@parameters = []
|
76
|
-
# load_parameters
|
77
|
-
end
|
78
|
-
|
79
|
-
def version=(value)
|
80
|
-
@component_loaded.version = value
|
81
|
-
end
|
82
|
-
|
83
|
-
def distribute_bucket=(value)
|
84
|
-
@component_loaded.distribution_bucket = value
|
85
|
-
end
|
86
|
-
|
87
|
-
def distribute_prefix=(value)
|
88
|
-
@component_loaded.distribution_prefix = value
|
89
|
-
end
|
90
|
-
|
91
|
-
def distribution_format=(value)
|
92
|
-
@distribution_format = value
|
93
|
-
build_distribution_url
|
94
|
-
end
|
95
|
-
|
96
|
-
def build_distribution_url
|
97
|
-
@distribution_location = @parent.distribute_url unless @parent.distribute_url.nil?
|
98
|
-
@distribution_url = "#{@distribution_location}/#{@name}.compiled.#{@distribution_format}"
|
99
|
-
end
|
100
|
-
|
101
|
-
def load(component_config_override = {})
|
102
|
-
# check for component config on parent
|
103
|
-
parent = @parent
|
104
|
-
|
105
|
-
# Highest priority is DSL defined configuration
|
106
|
-
component_config_override.extend @config
|
107
|
-
|
108
|
-
@component_config_override = component_config_override
|
109
|
-
|
110
|
-
@component_loaded.load @component_config_override
|
111
|
-
end
|
112
|
-
|
113
|
-
# Parameters should be lazy loaded, that is late-binding should happen once
|
114
|
-
# all parameters and mappings are known
|
115
|
-
def load_parameters
|
116
|
-
component_dsl = @component_loaded.highlander_dsl
|
117
|
-
component_dsl.parameters.param_list.each do |component_param|
|
118
|
-
param = Highlander::Dsl::SubcomponentParameter.new
|
119
|
-
param.name = component_param.name
|
120
|
-
param.cfndsl_value = SubcomponentParamValueResolver.resolveValue(
|
121
|
-
@parent,
|
122
|
-
self,
|
123
|
-
component_param)
|
124
|
-
@parameters << param
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
end
|
129
|
-
|
130
|
-
class SubcomponentParamValueResolver
|
131
|
-
def self.resolveValue(component, sub_component, param)
|
132
|
-
|
133
|
-
puts("Resolving parameter #{component.name} -> #{sub_component.name}.#{param.name}")
|
134
|
-
|
135
|
-
# check if there are values defined on component itself
|
136
|
-
if sub_component.param_values.key?(param.name)
|
137
|
-
return Highlander::Helper.parameter_cfndsl_value(sub_component.param_values[param.name])
|
138
|
-
end
|
139
|
-
|
140
|
-
if param.class == Highlander::Dsl::StackParam
|
141
|
-
return self.resolveStackParamValue(component, sub_component, param)
|
142
|
-
elsif param.class == Highlander::Dsl::ComponentParam
|
143
|
-
return self.resolveComponentParamValue(component, sub_component, param)
|
144
|
-
elsif param.class == Highlander::Dsl::MappingParam
|
145
|
-
return self.resolveMappingParamValue(component, sub_component, param)
|
146
|
-
elsif param.class == Highlander::Dsl::OutputParam
|
147
|
-
return self.resolveOutputParamValue(component, sub_component, param)
|
148
|
-
else
|
149
|
-
raise "#{param.class} not resolvable to parameter value"
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def self.resolveStackParamValue(component, sub_component, param)
|
154
|
-
param_name = param.is_global ? param.name : "#{sub_component.name}#{param.name}"
|
155
|
-
return "Ref('#{param_name}')"
|
156
|
-
end
|
157
|
-
|
158
|
-
def self.resolveComponentParamValue(component, sub_component, param)
|
159
|
-
# check component config for param value
|
160
|
-
# TODO
|
161
|
-
# check stack config for param value
|
162
|
-
# TODO
|
163
|
-
# return default value
|
164
|
-
return "'#{param.default_value}'"
|
165
|
-
end
|
166
|
-
|
167
|
-
def self.resolveMappingParamValue(component, sub_component, param)
|
168
|
-
|
169
|
-
# determine map name
|
170
|
-
|
171
|
-
provider = nil
|
172
|
-
|
173
|
-
mappings_name = param.mapName
|
174
|
-
actual_map_name = mappings_name
|
175
|
-
|
176
|
-
key_name = nil
|
177
|
-
|
178
|
-
# priority 0: stack-level parameter of map name
|
179
|
-
stack_param_mapname = component.parameters.param_list.find { |p| p.name == mappings_name }
|
180
|
-
unless stack_param_mapname.nil?
|
181
|
-
key_name = "Ref('#{mappings_name}')"
|
182
|
-
end
|
183
|
-
|
184
|
-
# priority 1 mapping provider keyName - used as lowest priority
|
185
|
-
if key_name.nil?
|
186
|
-
provider = mappings_provider(mappings_name)
|
187
|
-
if ((not provider.nil?) and (provider.respond_to?('getDefaultKey')))
|
188
|
-
key_name = provider.getDefaultKey
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
# priority 2: dsl defined key name
|
193
|
-
if key_name.nil?
|
194
|
-
key_name = param.mapKey
|
195
|
-
# could still be nil after this line
|
196
|
-
end
|
197
|
-
|
198
|
-
value = mapping_value(component: component,
|
199
|
-
provider_name: mappings_name,
|
200
|
-
value_name: param.mapAttribute,
|
201
|
-
key_name: key_name
|
202
|
-
)
|
203
|
-
|
204
|
-
if value.nil?
|
205
|
-
return "'#{param.default_value}'" unless param.default_value.empty?
|
206
|
-
return "''"
|
207
|
-
end
|
208
|
-
|
209
|
-
return value
|
210
|
-
|
211
|
-
|
212
|
-
return value
|
213
|
-
end
|
214
|
-
|
215
|
-
def self.resolveOutputParamValue(component, sub_component, param)
|
216
|
-
component_name = param.component
|
217
|
-
resource_name = nil
|
218
|
-
if not sub_component.export_config.nil?
|
219
|
-
if sub_component.export_config.key? component_name
|
220
|
-
resource_name = sub_component.export_config[component_name]
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
if resource_name.nil?
|
225
|
-
# find by component
|
226
|
-
resource = component.components.find { |c| c.name == component_name }
|
227
|
-
resource_name = resource.name unless resource.nil?
|
228
|
-
if resource_name.nil?
|
229
|
-
resource = component.components.find { |c| c.template == component_name }
|
230
|
-
resource_name = resource.name unless resource.nil?
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
if resource_name.nil?
|
235
|
-
raise "#{sub_component.name}.Params.#{param.name}: Failed to resolve OutputParam '#{param.name}' with source '#{component_name}'. Component not found!"
|
236
|
-
end
|
237
|
-
|
238
|
-
return "FnGetAtt('#{resource_name}','Outputs.#{param.name}')"
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
|
-
end
|
243
|
-
end
|
@@ -1,113 +0,0 @@
|
|
1
|
-
require_relative './highlander.dsl.base'
|
2
|
-
|
3
|
-
module Highlander
|
4
|
-
|
5
|
-
module Dsl
|
6
|
-
class Parameters < DslBase
|
7
|
-
|
8
|
-
attr_accessor :param_list
|
9
|
-
|
10
|
-
def initialize()
|
11
|
-
@param_list = []
|
12
|
-
end
|
13
|
-
|
14
|
-
def addParam(param)
|
15
|
-
existing_param = @param_list.find { |p| p.name == param.name }
|
16
|
-
if not existing_param.nil?
|
17
|
-
puts "Parameter being overwritten. Updating parameter #{param.name} with new definition..."
|
18
|
-
@param_list[@param_list.index(existing_param)] = param
|
19
|
-
else
|
20
|
-
@param_list << param
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def StackParam(name, defaultValue='', isGlobal: false, noEcho: false)
|
25
|
-
param = StackParam.new(name, 'String', defaultValue)
|
26
|
-
param.is_global = isGlobal
|
27
|
-
param.config = @config
|
28
|
-
param.no_echo = noEcho
|
29
|
-
addParam param
|
30
|
-
end
|
31
|
-
|
32
|
-
def ComponentParam(name, defaultValue='')
|
33
|
-
param = ComponentParam.new(name, 'String', defaultValue)
|
34
|
-
param.config = @config
|
35
|
-
addParam param
|
36
|
-
end
|
37
|
-
|
38
|
-
def MappingParam(name, defaultValue='', &block)
|
39
|
-
param = MappingParam.new(name, 'String', defaultValue)
|
40
|
-
param.config = @config
|
41
|
-
param.instance_eval(&block)
|
42
|
-
addParam param
|
43
|
-
end
|
44
|
-
|
45
|
-
def OutputParam(component:, name:, default: '')
|
46
|
-
param = OutputParam.new(component, name, default)
|
47
|
-
param.config = @config
|
48
|
-
addParam param
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
class Parameter < DslBase
|
53
|
-
attr_accessor :name, :type, :default_value, :no_echo
|
54
|
-
|
55
|
-
def initialize(name, type, defaultValue, noEcho = false)
|
56
|
-
@no_echo = noEcho
|
57
|
-
@name = name
|
58
|
-
@type = type
|
59
|
-
@default_value = defaultValue
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
class StackParam < Parameter
|
64
|
-
attr_accessor :is_global
|
65
|
-
end
|
66
|
-
|
67
|
-
class ComponentParam < Parameter
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
class OutputParam < Parameter
|
72
|
-
attr_accessor :component
|
73
|
-
|
74
|
-
def initialize(component, name, default)
|
75
|
-
@component = component
|
76
|
-
@name = name
|
77
|
-
@default_value = default
|
78
|
-
@type = 'String'
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class MappingParam < Parameter
|
83
|
-
|
84
|
-
attr_accessor :mapName, :mapKey, :mapAttribute
|
85
|
-
|
86
|
-
def method_missing(method, *args)
|
87
|
-
smethod = "#{method}"
|
88
|
-
if smethod.start_with?('Map')
|
89
|
-
puts smethod
|
90
|
-
end
|
91
|
-
|
92
|
-
super.method_missing(method)
|
93
|
-
end
|
94
|
-
|
95
|
-
def key(map_key)
|
96
|
-
@mapKey = map_key
|
97
|
-
end
|
98
|
-
|
99
|
-
def attribute(key)
|
100
|
-
@mapAttribute = key
|
101
|
-
end
|
102
|
-
|
103
|
-
def map(mapName)
|
104
|
-
@mapName = mapName
|
105
|
-
end
|
106
|
-
|
107
|
-
def mapProvider
|
108
|
-
mappings_provider(@mapName)
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|