cfhighlander 0.2.1.alpha.43 → 0.2.1
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 +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
|