cfhighlander 0.2.1.alpha.43 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +79 -153
- data/bin/cfhighlander +1 -1
- data/bin/{cfhighlander.rb → highlander.rb} +22 -27
- data/cfndsl_ext/sg.rb +2 -29
- data/hl_ext/mapping_helper.rb +4 -6
- data/lib/{cfhighlander.compiler.rb → highlander.compiler.rb} +18 -26
- data/lib/{cfhighlander.dsl.base.rb → highlander.dsl.base.rb} +2 -2
- data/lib/{cfhighlander.dsl.subcomponent.rb → highlander.dsl.component.rb} +71 -83
- data/lib/highlander.dsl.params.rb +113 -0
- data/lib/{cfhighlander.dsl.template.rb → highlander.dsl.rb} +62 -91
- data/lib/highlander.factory.rb +359 -0
- data/lib/{cfhighlander.helper.rb → highlander.helper.rb} +2 -2
- data/lib/{cfhighlander.mapproviders.rb → highlander.mapproviders.rb} +1 -1
- data/lib/{cfhighlander.publisher.rb → highlander.publisher.rb} +3 -3
- data/lib/{cfhighlander.validator.rb → highlander.validator.rb} +1 -1
- data/lib/util/zip.util.rb +1 -1
- data/templates/cfndsl.component.template.erb +1 -4
- metadata +15 -38
- data/lib/cfhighlander.dsl.params.rb +0 -108
- data/lib/cfhighlander.factory.rb +0 -45
- data/lib/cfhighlander.factory.templatefinder.rb +0 -248
- data/lib/cfhighlander.model.component.rb +0 -177
- data/lib/cfhighlander.model.templatemeta.rb +0 -25
@@ -1,11 +1,11 @@
|
|
1
|
-
require_relative './
|
1
|
+
require_relative './highlander.compiler'
|
2
2
|
require 'aws-sdk-s3'
|
3
3
|
|
4
|
-
module
|
4
|
+
module Highlander
|
5
5
|
|
6
6
|
module Publisher
|
7
7
|
|
8
|
-
class
|
8
|
+
class Component
|
9
9
|
|
10
10
|
def initialize(component, cleanup)
|
11
11
|
@component = component
|
data/lib/util/zip.util.rb
CHANGED
@@ -8,7 +8,7 @@ CloudFormation do
|
|
8
8
|
<% end %>
|
9
9
|
|
10
10
|
# render subcomponents
|
11
|
-
<% for @component in dsl.
|
11
|
+
<% for @component in dsl.components %>
|
12
12
|
CloudFormation_Stack('<%= @component.name.gsub('-','').gsub('_','') %>') do
|
13
13
|
TemplateURL '<%= @component.distribution_url %>'
|
14
14
|
Parameters ({
|
@@ -38,9 +38,6 @@ CloudFormation do
|
|
38
38
|
<% unless @param.no_echo.nil? %>
|
39
39
|
NoEcho <%= @param.no_echo.to_s %>
|
40
40
|
<% end %>
|
41
|
-
<% unless @param.allowed_values.nil? %>
|
42
|
-
AllowedValues <%= @param.allowed_values.to_s %>
|
43
|
-
<% end %>
|
44
41
|
end
|
45
42
|
<% end %>
|
46
43
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfhighlander
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikola Tosic
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-05-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: highline
|
@@ -191,26 +191,6 @@ dependencies:
|
|
191
191
|
- - "<"
|
192
192
|
- !ruby/object:Gem::Version
|
193
193
|
version: '2'
|
194
|
-
- !ruby/object:Gem::Dependency
|
195
|
-
name: netaddr
|
196
|
-
requirement: !ruby/object:Gem::Requirement
|
197
|
-
requirements:
|
198
|
-
- - "~>"
|
199
|
-
- !ruby/object:Gem::Version
|
200
|
-
version: '1.5'
|
201
|
-
- - ">="
|
202
|
-
- !ruby/object:Gem::Version
|
203
|
-
version: 1.5.1
|
204
|
-
type: :runtime
|
205
|
-
prerelease: false
|
206
|
-
version_requirements: !ruby/object:Gem::Requirement
|
207
|
-
requirements:
|
208
|
-
- - "~>"
|
209
|
-
- !ruby/object:Gem::Version
|
210
|
-
version: '1.5'
|
211
|
-
- - ">="
|
212
|
-
- !ruby/object:Gem::Version
|
213
|
-
version: 1.5.1
|
214
194
|
- !ruby/object:Gem::Dependency
|
215
195
|
name: rspec
|
216
196
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,7 +214,7 @@ extra_rdoc_files: []
|
|
234
214
|
files:
|
235
215
|
- README.md
|
236
216
|
- bin/cfhighlander
|
237
|
-
- bin/
|
217
|
+
- bin/highlander.rb
|
238
218
|
- cfndsl_ext/config/managed_policies.yaml
|
239
219
|
- cfndsl_ext/iam_helper.rb
|
240
220
|
- cfndsl_ext/lambda_helper.rb
|
@@ -243,19 +223,16 @@ files:
|
|
243
223
|
- hl_ext/common_helper.rb
|
244
224
|
- hl_ext/mapping_helper.rb
|
245
225
|
- hl_ext/vpc.rb
|
246
|
-
- lib/
|
247
|
-
- lib/
|
248
|
-
- lib/
|
249
|
-
- lib/
|
250
|
-
- lib/
|
251
|
-
- lib/
|
252
|
-
- lib/
|
253
|
-
- lib/
|
254
|
-
- lib/
|
255
|
-
- lib/
|
256
|
-
- lib/cfhighlander.model.templatemeta.rb
|
257
|
-
- lib/cfhighlander.publisher.rb
|
258
|
-
- lib/cfhighlander.validator.rb
|
226
|
+
- lib/highlander.compiler.rb
|
227
|
+
- lib/highlander.dsl.base.rb
|
228
|
+
- lib/highlander.dsl.component.rb
|
229
|
+
- lib/highlander.dsl.params.rb
|
230
|
+
- lib/highlander.dsl.rb
|
231
|
+
- lib/highlander.factory.rb
|
232
|
+
- lib/highlander.helper.rb
|
233
|
+
- lib/highlander.mapproviders.rb
|
234
|
+
- lib/highlander.publisher.rb
|
235
|
+
- lib/highlander.validator.rb
|
259
236
|
- lib/util/zip.util.rb
|
260
237
|
- templates/cfndsl.component.template.erb
|
261
238
|
homepage: https://github.com/theonestack/cfhighlander/blob/master/README.md
|
@@ -273,9 +250,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
273
250
|
version: '0'
|
274
251
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
275
252
|
requirements:
|
276
|
-
- - "
|
253
|
+
- - ">="
|
277
254
|
- !ruby/object:Gem::Version
|
278
|
-
version:
|
255
|
+
version: '0'
|
279
256
|
requirements: []
|
280
257
|
rubyforge_project:
|
281
258
|
rubygems_version: 2.7.7
|
@@ -1,108 +0,0 @@
|
|
1
|
-
require_relative './cfhighlander.dsl.base'
|
2
|
-
|
3
|
-
module Cfhighlander
|
4
|
-
|
5
|
-
module Dsl
|
6
|
-
|
7
|
-
# dsl statements
|
8
|
-
class Parameters < DslBase
|
9
|
-
|
10
|
-
attr_accessor :param_list
|
11
|
-
|
12
|
-
def initialize()
|
13
|
-
@param_list = []
|
14
|
-
end
|
15
|
-
|
16
|
-
def addParam(param)
|
17
|
-
existing_param = @param_list.find {|p| p.name == param.name}
|
18
|
-
if not existing_param.nil?
|
19
|
-
puts "Parameter being overwritten. Updating parameter #{param.name} with new definition..."
|
20
|
-
@param_list[@param_list.index(existing_param)] = param
|
21
|
-
else
|
22
|
-
@param_list << param
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def StackParam(name, defaultValue = '', isGlobal: false, noEcho: false, type: 'String')
|
27
|
-
STDERR.puts "DEPRECATED: StackParam #{name} - Use ComponentParam instead"
|
28
|
-
ComponentParam(name, defaultValue, isGlobal: isGlobal, noEcho: noEcho, type: type)
|
29
|
-
end
|
30
|
-
|
31
|
-
def OutputParam(component:, name:, isGlobal: false, noEcho: false, type: 'String')
|
32
|
-
STDERR.puts ("DEPRECATED: OutputParam #{name} - Use ComponentParam instead. Outputut params are " +
|
33
|
-
"autorwired by name only, with component disregarded")
|
34
|
-
param = ComponentParam(name, '', isGlobal: isGlobal, noEcho: noEcho, type: type)
|
35
|
-
param.provided_value = "#{component}.#{name}"
|
36
|
-
end
|
37
|
-
|
38
|
-
def ComponentParam(name, defaultValue = '', isGlobal: false, noEcho: false, type: 'String', allowedValues: nil)
|
39
|
-
param = Parameter.new(name, type, defaultValue, noEcho, isGlobal, allowedValues)
|
40
|
-
param.config = @config
|
41
|
-
addParam param
|
42
|
-
return param
|
43
|
-
end
|
44
|
-
|
45
|
-
def MappingParam(name, defaultValue = '', &block)
|
46
|
-
param = MappingParam.new(name, 'String', defaultValue)
|
47
|
-
param.config = @config
|
48
|
-
param.instance_eval(&block)
|
49
|
-
addParam param
|
50
|
-
end
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
# model classes
|
56
|
-
class Parameter < DslBase
|
57
|
-
attr_accessor :name,
|
58
|
-
:type,
|
59
|
-
:default_value,
|
60
|
-
:no_echo,
|
61
|
-
:is_global,
|
62
|
-
:provided_value,
|
63
|
-
:allowed_values
|
64
|
-
|
65
|
-
def initialize(name, type, defaultValue, noEcho = false, isGlobal = false, allowed_values = nil)
|
66
|
-
@no_echo = noEcho
|
67
|
-
@name = name
|
68
|
-
@type = type
|
69
|
-
@default_value = defaultValue
|
70
|
-
@is_global = isGlobal
|
71
|
-
@allowed_values = allowed_values
|
72
|
-
@provided_value = nil
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
class MappingParam < Parameter
|
78
|
-
|
79
|
-
attr_accessor :mapName, :mapKey, :mapAttribute
|
80
|
-
|
81
|
-
def method_missing(method, *args)
|
82
|
-
smethod = "#{method}"
|
83
|
-
if smethod.start_with?('Map')
|
84
|
-
puts smethod
|
85
|
-
end
|
86
|
-
|
87
|
-
super.method_missing(method)
|
88
|
-
end
|
89
|
-
|
90
|
-
def key(map_key)
|
91
|
-
@mapKey = map_key
|
92
|
-
end
|
93
|
-
|
94
|
-
def attribute(key)
|
95
|
-
@mapAttribute = key
|
96
|
-
end
|
97
|
-
|
98
|
-
def map(mapName)
|
99
|
-
@mapName = mapName
|
100
|
-
end
|
101
|
-
|
102
|
-
def mapProvider
|
103
|
-
mappings_provider(@mapName)
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
data/lib/cfhighlander.factory.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require_relative './cfhighlander.dsl.template'
|
2
|
-
require_relative './cfhighlander.factory.templatefinder'
|
3
|
-
require_relative './cfhighlander.model.component'
|
4
|
-
require 'fileutils'
|
5
|
-
require 'git'
|
6
|
-
|
7
|
-
|
8
|
-
module Cfhighlander
|
9
|
-
|
10
|
-
module Factory
|
11
|
-
|
12
|
-
class ComponentFactory
|
13
|
-
|
14
|
-
attr_accessor :component_sources
|
15
|
-
|
16
|
-
def initialize(component_sources = [])
|
17
|
-
@template_finder = Cfhighlander::Factory::TemplateFinder.new(component_sources)
|
18
|
-
@component_sources = component_sources
|
19
|
-
end
|
20
|
-
|
21
|
-
# Find component and given list of sources
|
22
|
-
# @return [Cfhighlander::Factory::Component]
|
23
|
-
def loadComponentFromTemplate(template_name, template_version = nil, component_name = nil)
|
24
|
-
|
25
|
-
template_meta = @template_finder.findTemplate(template_name, template_version)
|
26
|
-
|
27
|
-
raise StandardError, "highlander template #{template_name}@#{template_version} not located" +
|
28
|
-
" in sources #{@component_sources}" if template_meta.nil?
|
29
|
-
|
30
|
-
component_name = template_name if component_name.nil?
|
31
|
-
return buildComponentFromLocation(template_meta, component_name)
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
def buildComponentFromLocation(template_meta, component_name)
|
37
|
-
component = Model::Component.new(template_meta, component_name)
|
38
|
-
component.load_config
|
39
|
-
return component
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
@@ -1,248 +0,0 @@
|
|
1
|
-
LOCAL_CFHIGHLANDER_CACHE_LOCATION = "#{ENV['HOME']}/.cfhighlander/components"
|
2
|
-
|
3
|
-
require_relative './cfhighlander.model.templatemeta'
|
4
|
-
|
5
|
-
module Cfhighlander
|
6
|
-
|
7
|
-
module Factory
|
8
|
-
|
9
|
-
class TemplateFinder
|
10
|
-
|
11
|
-
def initialize(component_sources = [])
|
12
|
-
## First look in local $PWD/components folder
|
13
|
-
## Then search for cached $HOME/.highlander/components
|
14
|
-
## Then search in sources given by dsl
|
15
|
-
default_locations = [
|
16
|
-
LOCAL_CFHIGHLANDER_CACHE_LOCATION,
|
17
|
-
File.expand_path('components'),
|
18
|
-
File.expand_path('.')
|
19
|
-
]
|
20
|
-
default_locations.each do |predefined_path|
|
21
|
-
component_sources.unshift(predefined_path)
|
22
|
-
end
|
23
|
-
|
24
|
-
@component_sources = component_sources
|
25
|
-
end
|
26
|
-
|
27
|
-
def findTemplateDefault(template_name, component_version)
|
28
|
-
default_lookup_url = 'https://github.com/theonestack'
|
29
|
-
default_lookup_url = ENV['HIGHLANDER_DEFAULT_COMPONENT_GIT_LOOKUP'] if ENV.key? 'HIGHLANDER_DEFAULT_COMPONENT_GIT_LOOKUP'
|
30
|
-
default_lookup_url = ENV['CFHIGHLANDER_DEFAULT_COMPONENT_GIT_LOOKUP'] if ENV.key? 'CFHIGHLANDER_DEFAULT_COMPONENT_GIT_LOOKUP'
|
31
|
-
|
32
|
-
git_url = "#{default_lookup_url}/hl-component-#{template_name}"
|
33
|
-
|
34
|
-
if component_version.nil? or component_version.empty? or component_version == 'latest'
|
35
|
-
branch = 'master'
|
36
|
-
else
|
37
|
-
branch = component_version
|
38
|
-
end
|
39
|
-
local_path = "#{LOCAL_CFHIGHLANDER_CACHE_LOCATION}/#{template_name}/#{component_version}"
|
40
|
-
return findTemplateGit(local_path, template_name, component_version, git_url, branch)
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
def findTemplateGit(cache_path, component_name, component_version, git_url, branch)
|
45
|
-
begin
|
46
|
-
cache_path = "#{cache_path}/" unless cache_path.end_with? '/'
|
47
|
-
# if this is snapshot, clean local cache
|
48
|
-
if branch.end_with? '.snapshot'
|
49
|
-
branch = branch.gsub('.snapshot', '')
|
50
|
-
FileUtils.rmtree cache_path if File.exist? cache_path and File.directory? cache_path
|
51
|
-
end
|
52
|
-
|
53
|
-
# if local cache exists, return from cache
|
54
|
-
if not Dir.glob("#{cache_path}*.highlander.rb").empty?
|
55
|
-
# if cache exists, just return from cache
|
56
|
-
component_name = Dir.glob("#{cache_path}*.highlander.rb")[0].gsub(cache_path, '').gsub('.highlander.rb', '')
|
57
|
-
STDERR.puts("DEPRECATED: #{component_name}: Use *.cfhighlander.rb template file name pattern")
|
58
|
-
return component_name, cache_path
|
59
|
-
end
|
60
|
-
|
61
|
-
if not Dir.glob("#{cache_path}*.cfhighlander.rb").empty?
|
62
|
-
# if cache exists, just return from cache
|
63
|
-
component_name = Dir.glob("#{cache_path}*.cfhighlander.rb")[0].gsub(cache_path, '').gsub('.highlander.rb', '')
|
64
|
-
return component_name, cache_path
|
65
|
-
end
|
66
|
-
|
67
|
-
# shallow clone
|
68
|
-
puts "Trying to load #{component_name}/#{component_version} from #{git_url}##{branch} ... "
|
69
|
-
clone_opts = { depth: 1 }
|
70
|
-
clone_opts[:branch] = branch if not (branch.nil? or branch.empty?)
|
71
|
-
Git.clone git_url, cache_path, clone_opts
|
72
|
-
puts "\t .. cached in #{cache_path}\n"
|
73
|
-
# return from cache once it's cloned
|
74
|
-
return findTemplateGit(cache_path, component_name, component_version, git_url, branch)
|
75
|
-
rescue Exception => e
|
76
|
-
STDERR.puts "Failed to resolve component #{component_name}@#{component_version} from #{git_url}"
|
77
|
-
STDERR.puts e
|
78
|
-
return nil
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def findTemplateS3(s3_location, component_name, component_version, use_legacy_extension = true)
|
83
|
-
parts = s3_location.split('/')
|
84
|
-
bucket = parts[2]
|
85
|
-
prefix = parts[3]
|
86
|
-
s3_key = "#{prefix}/#{component_name}/#{component_version}/#{component_name}.highlander.rb"
|
87
|
-
s3_prefix = "#{prefix}/#{component_name}/#{component_version}/"
|
88
|
-
local_destination = "#{LOCAL_CFHIGHLANDER_CACHE_LOCATION}/#{component_name}/#{component_version}"
|
89
|
-
begin
|
90
|
-
s3 = Aws::S3::Client.new({ region: s3_bucket_region(bucket) })
|
91
|
-
FileUtils.mkdir_p local_destination unless Dir.exist? local_destination
|
92
|
-
|
93
|
-
hl_content = s3.get_object({ bucket: bucket,
|
94
|
-
key: s3_key,
|
95
|
-
response_target: "#{local_destination}/#{component_name}.#{use_legacy_extension ? 'highlander' : 'cfhighlander'}.rb"
|
96
|
-
})
|
97
|
-
# if code execution got so far we consider file exists and download it locally
|
98
|
-
component_files = s3.list_objects_v2({ bucket: bucket, prefix: s3_prefix })
|
99
|
-
component_files.contents.each {|s3_object|
|
100
|
-
file_name = s3_object.key.gsub(s3_prefix, '')
|
101
|
-
destination_file = "#{local_destination}/#{file_name}"
|
102
|
-
destination_dir = File.dirname(destination_file)
|
103
|
-
print "Caching #{file_name} of #{component_name}@#{component_version} in #{destination_dir} ... "
|
104
|
-
|
105
|
-
FileUtils.mkpath(destination_dir) unless File.exists?(destination_dir)
|
106
|
-
s3.get_object({ bucket: bucket, key: s3_object.key, response_target: destination_file })
|
107
|
-
print " [OK] \n"
|
108
|
-
}
|
109
|
-
if use_legacy_extension
|
110
|
-
STDERR.puts "DEPRECATED: s3 load #{component_name} with *.highlander.rb template file name pattern"
|
111
|
-
end
|
112
|
-
return local_destination
|
113
|
-
rescue => e
|
114
|
-
# this handles both nonexisting key and bucket
|
115
|
-
if use_legacy_extension
|
116
|
-
return findTemplateS3(s3_location, component_name, component_version, false)
|
117
|
-
end
|
118
|
-
puts("#{component_name} not found in s3://#{bucket}/#{prefix}")
|
119
|
-
STDERR.puts(e.to_s) unless e.message.include? 'does not exist'
|
120
|
-
return nil
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
# will try and locate template based on git template location
|
125
|
-
# if template location is not git repo, returns nil
|
126
|
-
def tryFindTemplateGit(template_location, template_version)
|
127
|
-
|
128
|
-
# avoid any nres
|
129
|
-
template_version = '' if template_version.nil?
|
130
|
-
|
131
|
-
# if empty or latest branch is empty
|
132
|
-
if template_version.empty? or template_version == 'latest' or template_version == 'latest.snapshot'
|
133
|
-
branch = ''
|
134
|
-
else
|
135
|
-
# otherwise component version is actual branch
|
136
|
-
branch = template_version
|
137
|
-
end
|
138
|
-
|
139
|
-
|
140
|
-
git_url = nil
|
141
|
-
if template_location.start_with? 'git:'
|
142
|
-
git_url = template_location.gsub('git:', '')
|
143
|
-
elsif template_location.start_with? 'github:'
|
144
|
-
git_url = "https://github.com/#{template_location.gsub('github:', '')}"
|
145
|
-
elsif template_location.start_with? 'github.com:'
|
146
|
-
git_url = "https://github.com/#{template_location.gsub('github.com:', '')}"
|
147
|
-
end
|
148
|
-
|
149
|
-
|
150
|
-
if not git_url.nil?
|
151
|
-
local_path = "#{LOCAL_CFHIGHLANDER_CACHE_LOCATION}/#{template_location.gsub(':', '_').gsub(/\/+/, '/')}/#{template_version}"
|
152
|
-
template_name, location = findTemplateGit(local_path, template_location, template_version, git_url, branch)
|
153
|
-
if location.nil?
|
154
|
-
raise "Could not resolve component #{template_location}@#{template_version}"
|
155
|
-
else
|
156
|
-
return template_name, template_version, location
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
return nil
|
161
|
-
end
|
162
|
-
|
163
|
-
def findTemplate(template_name, template_version)
|
164
|
-
template_version_s = template_version.nil? ? 'latest' : template_version
|
165
|
-
template_version = nil if template_version == 'latest'
|
166
|
-
is_git_template = template_name.start_with? 'git'
|
167
|
-
|
168
|
-
if template_name.include? '@' and (not template_name.start_with? 'git')
|
169
|
-
parts = template_name.split('@')
|
170
|
-
template_name = parts[0]
|
171
|
-
template_version = parts[1]
|
172
|
-
template_version_s = template_version
|
173
|
-
end
|
174
|
-
|
175
|
-
if template_name.include? '#' and (is_git_template)
|
176
|
-
parts = template_name.split('#')
|
177
|
-
template_name = parts[0]
|
178
|
-
template_version = parts[1]
|
179
|
-
template_version_s = template_version
|
180
|
-
end
|
181
|
-
|
182
|
-
# if component specified as git location
|
183
|
-
if is_git_template
|
184
|
-
new_template_name, new_version, candidate_git = tryFindTemplateGit(template_name, template_version_s)
|
185
|
-
return build_meta(new_template_name, new_version, candidate_git) unless candidate_git.nil?
|
186
|
-
end
|
187
|
-
|
188
|
-
# if not git but has .snapshot lookup in default, it is allowed to reference default
|
189
|
-
# snapshots
|
190
|
-
if (not template_version.nil?) and template_version.end_with? '.snapshot'
|
191
|
-
new_template_name, snapshot_candidate_location = findTemplateDefault(template_name, template_version_s)
|
192
|
-
return build_meta(new_template_name, template_version, snapshot_candidate_location) unless snapshot_candidate_location.nil?
|
193
|
-
end
|
194
|
-
|
195
|
-
# try in all of the component sources
|
196
|
-
@component_sources.each do |source|
|
197
|
-
template_full_name = "#{template_name}@#{template_version.nil? ? 'latest' : template_version}"
|
198
|
-
# TODO handle http(s) sources and their download to local
|
199
|
-
if source.start_with?('http')
|
200
|
-
raise StandardError, 'http(s) sources not supported yet'
|
201
|
-
elsif source.start_with?('s3://')
|
202
|
-
# s3 candidate
|
203
|
-
|
204
|
-
s3_candidate = findTemplateS3(source, template_name, template_version_s)
|
205
|
-
# at this point all component files are download to local file system and consumed from there
|
206
|
-
return build_meta(template_name, template_version_s, s3_candidate) unless s3_candidate.nil?
|
207
|
-
|
208
|
-
else
|
209
|
-
# file system candidate
|
210
|
-
candidate = "#{source}/#{template_name}"
|
211
|
-
candidate = "#{candidate}/#{template_version}" unless template_version.nil?
|
212
|
-
candidate_hl_path = "#{candidate}/#{template_name}.highlander.rb"
|
213
|
-
candidate_cfhl_path = "#{candidate}/#{template_name}.cfhighlander.rb"
|
214
|
-
candidate2_hl_path = "#{source}/#{template_name}.highlander.rb"
|
215
|
-
candidate2_cfhl_path = "#{source}/#{template_name}.cfhighlander.rb"
|
216
|
-
puts "TRACE: Trying to load #{template_full_name} from #{candidate} ... "
|
217
|
-
if (File.exist?(candidate_hl_path) or File.exist?(candidate_cfhl_path))
|
218
|
-
return build_meta(template_name, template_version_s, candidate)
|
219
|
-
end
|
220
|
-
|
221
|
-
puts "TRACE: Trying to load #{template_full_name} from #{source} ... "
|
222
|
-
# if component version is latest it is allowed to search in path
|
223
|
-
# with no version component in it
|
224
|
-
if (File.exist?(candidate2_hl_path) or File.exist?(candidate2_cfhl_path))
|
225
|
-
return build_meta(template_name, 'latest', source)
|
226
|
-
end unless template_version_s != 'latest'
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
# try default component source on github
|
231
|
-
template_name, default_candidate = findTemplateDefault(template_name, template_version_s)
|
232
|
-
return build_meta(template_name, template_version_s, default_candidate) unless default_candidate.nil?
|
233
|
-
|
234
|
-
return nil
|
235
|
-
end
|
236
|
-
|
237
|
-
def build_meta(template_name, template_version, template_location)
|
238
|
-
return Cfhighlander::Model::TemplateMetadata.new(
|
239
|
-
template_name: template_name,
|
240
|
-
template_version: template_version,
|
241
|
-
template_location: template_location)
|
242
|
-
end
|
243
|
-
|
244
|
-
end
|
245
|
-
|
246
|
-
end
|
247
|
-
|
248
|
-
end
|