aws-cfn-compiler 0.5.2 → 0.6.0
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 +8 -8
- data/aws-cfn-compiler.iml +1 -17
- data/lib/aws/cfn/compiler.rb +13 -0
- data/lib/aws/cfn/compiler/base.rb +39 -31
- data/lib/aws/cfn/compiler/main.rb +19 -7
- data/lib/aws/cfn/compiler/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWFiNWI1NTIzY2VhNjQ4NjM3ZDgzOWIwNTg4MzczZDI3OWFlNzFlMw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjIwMjMwNzlkY2Q2YzliM2U3ZWM0YjE2ODgyZDcyMjUzMDM2MzJmMw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NDhjYjgyZjZlNzM4ZWExMTA0Y2QxNGIzMWM3ZTNmZWQ2ZWUxNDdlMDlhNzA3
|
10
|
+
ZjI4Y2QxNDgwNDYwZjNiNTRjODY5ZmE3ZjBlYmJjYmYxMzhkYmJjN2YzMjNh
|
11
|
+
YTMwYjQ2Y2U4NDE2N2Q0NTJlZWZiNDVlZjg5MjFhMDRhMWRjNzk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NGYyNzU2MWE2NTZhOGFkZTRjYTgxZTMzNzVjOGVmZDJjZjQzOTQxNzg3M2Vh
|
14
|
+
ODY1YzQ1YWI5OWMxOGU5OGY5MzEyMTg0YjY2NzdiODcyYzUzNTk0ODVjNjQw
|
15
|
+
MjBhMmQzMmZmYzM3MTIxNTc1MzFlZTkyZWUxNGUzYWYxNTFkZDg=
|
data/aws-cfn-compiler.iml
CHANGED
@@ -10,23 +10,7 @@
|
|
10
10
|
<orderEntry type="sourceFolder" forTests="false" />
|
11
11
|
<orderEntry type="module" module-name="aws-cfn-decompiler" />
|
12
12
|
<orderEntry type="module" module-name="aws-cfn-dsl" />
|
13
|
-
<orderEntry type="module-
|
14
|
-
<library name="aws-cfn-stacker (v[path], /Users/cdelange/Dropbox/DLDInternet/ws/gems-ws/aws-cfn-stacker) [path][gem]">
|
15
|
-
<CLASSES>
|
16
|
-
<root url="file://$MODULE_DIR$/../aws-cfn-stacker/bin" />
|
17
|
-
<root url="file://$MODULE_DIR$/../aws-cfn-stacker/lib" />
|
18
|
-
<root url="file://$MODULE_DIR$/../aws-cfn-stacker/pkg" />
|
19
|
-
<root url="file://$MODULE_DIR$/../aws-cfn-stacker/.idea" />
|
20
|
-
</CLASSES>
|
21
|
-
<JAVADOC />
|
22
|
-
<SOURCES>
|
23
|
-
<root url="file://$MODULE_DIR$/../aws-cfn-stacker/bin" />
|
24
|
-
<root url="file://$MODULE_DIR$/../aws-cfn-stacker/lib" />
|
25
|
-
<root url="file://$MODULE_DIR$/../aws-cfn-stacker/pkg" />
|
26
|
-
<root url="file://$MODULE_DIR$/../aws-cfn-stacker/.idea" />
|
27
|
-
</SOURCES>
|
28
|
-
</library>
|
29
|
-
</orderEntry>
|
13
|
+
<orderEntry type="module" module-name="aws-cfn-stacker" />
|
30
14
|
<orderEntry type="module" module-name="aws-cfn-yats" />
|
31
15
|
<orderEntry type="module" module-name="cloudformation-ruby-dsl" />
|
32
16
|
<orderEntry type="module-library">
|
data/lib/aws/cfn/compiler.rb
CHANGED
@@ -2,3 +2,16 @@ require "aws/cfn/compiler/version"
|
|
2
2
|
require "aws/cfn/compiler/base"
|
3
3
|
require "aws/cfn/compiler/main"
|
4
4
|
|
5
|
+
module Aws::Cfn::Compiler
|
6
|
+
attr_accessor :binding
|
7
|
+
|
8
|
+
@binding ||= {}
|
9
|
+
|
10
|
+
def self.binding=(b)
|
11
|
+
@binding = b
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.binding
|
15
|
+
@binding
|
16
|
+
end
|
17
|
+
end
|
@@ -9,7 +9,7 @@ require 'aws/cfn/dsl/template'
|
|
9
9
|
module Aws
|
10
10
|
module Cfn
|
11
11
|
module Compiler
|
12
|
-
class Base < Aws::Cfn::Dsl::Base
|
12
|
+
class Base < ::Aws::Cfn::Dsl::Base
|
13
13
|
attr_accessor :items
|
14
14
|
attr_accessor :opts
|
15
15
|
attr_accessor :spec
|
@@ -54,7 +54,7 @@ module Aws
|
|
54
54
|
@logger.info ' References validated'
|
55
55
|
end
|
56
56
|
|
57
|
-
def
|
57
|
+
def save_template(output_file,compiled)
|
58
58
|
output_file = File.realpath(File.expand_path(output_file)) if @config[:expandedpaths]
|
59
59
|
logStep "Writing compiled file to #{output_file}..."
|
60
60
|
begin
|
@@ -77,21 +77,21 @@ module Aws
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
def
|
80
|
+
def load_spec(spec=nil)
|
81
81
|
if spec
|
82
82
|
abs = nil
|
83
|
-
[spec, File.join(@
|
83
|
+
[spec, File.join(@config[:directory],spec)].each do |p|
|
84
84
|
begin
|
85
85
|
abs = File.realpath(File.absolute_path(File.expand_path(p)))
|
86
86
|
break if File.exists?(abs)
|
87
87
|
rescue => e
|
88
|
-
@logger.
|
88
|
+
@logger.debug e
|
89
89
|
# pass
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
if File.exists?(abs)
|
94
|
-
logStep "Loading specification #{@
|
93
|
+
if not abs.nil? and File.exists?(abs)
|
94
|
+
logStep "Loading specification #{@config[:expandedpaths] ? abs : spec}..."
|
95
95
|
unless abs =~ /\.(json|ya?ml|jts|yts)\z/i
|
96
96
|
abort! "Unsupported specification file type: #{spec}=>#{abs}\n\tSupported types are: json,yaml,jts,yts\n"
|
97
97
|
end
|
@@ -107,9 +107,9 @@ module Aws
|
|
107
107
|
abort! "Unsupported file type for specification: #{spec}"
|
108
108
|
end
|
109
109
|
else
|
110
|
-
abort! "Unable to open specification: #{abs}"
|
110
|
+
abort! "Unable to open specification"+ (abs.nil? ? " or {,#{@config[:directory]}/}#{spec} not found" : ": #{abs}")
|
111
111
|
end
|
112
|
-
@dsl ||= Aws::Cfn::Dsl::Template.new(@
|
112
|
+
@dsl ||= Aws::Cfn::Dsl::Template.new(@config[:directory])
|
113
113
|
%w( Mappings Parameters Resources Outputs ).each do |dir|
|
114
114
|
load_dir(dir,@spec)
|
115
115
|
end
|
@@ -125,7 +125,7 @@ module Aws
|
|
125
125
|
logStep "Loading #{dir}..."
|
126
126
|
|
127
127
|
if spec and spec[dir]
|
128
|
-
raise "No such directory: #{@
|
128
|
+
raise "No such directory: #{@config[:directory]}" unless File.directory?(@config[:directory])
|
129
129
|
path = vet_path(dir)
|
130
130
|
@items ||= {}
|
131
131
|
@items[dir] ||= {}
|
@@ -135,7 +135,7 @@ module Aws
|
|
135
135
|
|
136
136
|
item = {}
|
137
137
|
spec[dir].each do |rsrc|
|
138
|
-
@logger.info "\tUsing #{dir}
|
138
|
+
@logger.info "\tUsing #{dir}::#{rsrc}"
|
139
139
|
set = get[path]
|
140
140
|
refp,sub,base,rel = map_resource_reference(rsrc)
|
141
141
|
unless refp.nil?
|
@@ -163,18 +163,7 @@ module Aws
|
|
163
163
|
next if content.size==0
|
164
164
|
|
165
165
|
if filename =~ /\.(rb|ruby)\z/i
|
166
|
-
|
167
|
-
$Aws_Cfn_Compiler[dir] ||= {}
|
168
|
-
$Aws_Cfn_Compiler[dir][base] ||= {
|
169
|
-
brick_path: @opts[:directory],
|
170
|
-
template: @dsl,
|
171
|
-
logger: @logger
|
172
|
-
}
|
173
|
-
source_file = File.expand_path(filename)
|
174
|
-
eval "require source_file", binding
|
175
|
-
unless @dsl.dict[dir.to_sym]
|
176
|
-
raise "Unable to expand #{filename} for #{dir}/#{base}"
|
177
|
-
end
|
166
|
+
compile_rb_file(base, dir, filename)
|
178
167
|
item.merge! @dsl.dict[dir.to_sym]
|
179
168
|
elsif filename =~ /\.js(|on)\z/i
|
180
169
|
item.merge! JSON.parse(content)
|
@@ -209,6 +198,22 @@ module Aws
|
|
209
198
|
|
210
199
|
end
|
211
200
|
|
201
|
+
def compile_rb_file(base, dir, filename)
|
202
|
+
Aws::Cfn::Compiler.binding ||= {}
|
203
|
+
Aws::Cfn::Compiler.binding[dir] ||= {}
|
204
|
+
Aws::Cfn::Compiler.binding[dir][base] ||= {
|
205
|
+
brick_path: @config[:directory],
|
206
|
+
template: @dsl,
|
207
|
+
logger: @logger
|
208
|
+
}
|
209
|
+
source_file = File.expand_path(filename)
|
210
|
+
# source = IO.read(source_file)
|
211
|
+
eval "require source_file", binding
|
212
|
+
unless @dsl.dict[dir.to_sym]
|
213
|
+
abort! "Unable to compile/expand #{filename} for #{dir}/#{base}"
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
212
217
|
def find_refs(hash, type='Reference', parent='')
|
213
218
|
h = {}
|
214
219
|
newparent = parent
|
@@ -334,6 +339,9 @@ module Aws
|
|
334
339
|
if rsrc.match %r'^(\.\./.*?)::(.*)$'
|
335
340
|
# Relative path stack reference
|
336
341
|
path,sub,ref,rel = map_resource_reference(File.basename(rsrc))
|
342
|
+
elsif rsrc.match %r'^(~/.*?)$'
|
343
|
+
# Relative to HOME
|
344
|
+
path,sub,ref,rel = map_resource_reference(File.expand_path(rsrc))
|
337
345
|
elsif rsrc.match %r'^(\.\./[^:]*?)$'
|
338
346
|
# Relative path
|
339
347
|
path = File.dirname(rsrc)
|
@@ -341,26 +349,26 @@ module Aws
|
|
341
349
|
path = File.dirname(path)
|
342
350
|
ref = File.basename(rsrc)
|
343
351
|
rel = true
|
352
|
+
elsif rsrc.match %r'(^/.*?)::(.*)$'
|
353
|
+
# Absolute path
|
354
|
+
_,sub,ref,rel = map_resource_reference(File.basename(rsrc))
|
355
|
+
path = File.realpath(File.join(File.dirname(rsrc),_))
|
344
356
|
elsif rsrc.match %r'(^/.*?[^:]*?)$'
|
345
357
|
# Absolute path
|
346
358
|
path = File.dirname(rsrc)
|
347
359
|
sub = File.basename(path)
|
348
360
|
path = File.dirname(path)
|
349
361
|
ref = File.basename(rsrc)
|
350
|
-
elsif rsrc.match %r'(^/.*?)::(.*)$'
|
351
|
-
# Absolute path
|
352
|
-
path = File.dirname(rsrc)
|
353
|
-
ref = map_resource_reference(File.basename(rsrc))
|
354
362
|
elsif (match = rsrc.match %r'^(.*?)::(.*)$')
|
355
363
|
# Inherited stack reference
|
356
364
|
ref = match[2]
|
357
365
|
# noinspection RubyParenthesesAroundConditionInspection
|
358
366
|
if (subm = match[1].match(%r'^(.+?)/(.+)$'))
|
359
|
-
path = File.join(File.dirname(@
|
367
|
+
path = File.join(File.dirname(@config[:directory]),subm[1])
|
360
368
|
sub = subm[2]
|
361
369
|
else
|
362
370
|
# sub = nil
|
363
|
-
path = File.join(File.dirname(@
|
371
|
+
path = File.join(File.dirname(@config[:directory]),match[1])
|
364
372
|
end
|
365
373
|
else
|
366
374
|
# Otherwise it is what it seems ;)
|
@@ -371,9 +379,9 @@ module Aws
|
|
371
379
|
|
372
380
|
def vet_path(dir,base=nil,rel=false)
|
373
381
|
if rel
|
374
|
-
base = File.realpath(File.expand_path(File.join(@
|
382
|
+
base = File.realpath(File.expand_path(File.join(@config[:directory], base)))
|
375
383
|
else
|
376
|
-
base = @
|
384
|
+
base = @config[:directory] unless base
|
377
385
|
end
|
378
386
|
path = nil
|
379
387
|
[dir, dir.downcase].each do |d|
|
@@ -13,13 +13,24 @@ module Aws
|
|
13
13
|
|
14
14
|
@opts = Slop.parse(help: true) do
|
15
15
|
# command File.basename(__FILE__,'.rb')
|
16
|
-
on :d, :directory=, 'The directory
|
16
|
+
on :d, :directory=, 'The directory containing template sections', as: String
|
17
17
|
on :o, :output=, 'The JSON file to output', as: String
|
18
18
|
on :s, :specification=, 'The specification to use when selecting components. A JSON or YAML file or JSON object', as: String
|
19
|
-
on :f, :formatversion=, 'The AWS Template format version.
|
20
|
-
|
21
|
-
|
22
|
-
on :
|
19
|
+
on :f, :formatversion=, 'The AWS Template format version. ', { as: String,
|
20
|
+
optional_argument: true,
|
21
|
+
default: '2010-09-09' }
|
22
|
+
on :p, :precedence=, 'The precedence of template component types. Default: rb,ruby,yaml,yml,json,js', { as: String,
|
23
|
+
default: 'rb,ruby,yaml,yml,json,js' }
|
24
|
+
on :t, :description=, "The AWS Template description. Default: output basename or #{File.basename(__FILE__,'.rb')}", { as: String,
|
25
|
+
default: File.basename(__FILE__,'.rb') }
|
26
|
+
on :x, :expandedpaths, 'Show expanded paths in output', { as: String,
|
27
|
+
optional_argument: true,
|
28
|
+
default: 'off',
|
29
|
+
match: %r/0|1|yes|no|on|off|enable|disable|set|unset|true|false|raw/i }
|
30
|
+
on :O, :overwrite, 'Overwrite existing generated source files. (HINT: Think twice ...)', { as: String,
|
31
|
+
optional_argument: true,
|
32
|
+
default: 'off',
|
33
|
+
match: %r/0|1|yes|no|on|off|enable|disable|set|unset|true|false|raw/i }
|
23
34
|
end
|
24
35
|
|
25
36
|
unless @opts[:directory]
|
@@ -29,8 +40,9 @@ module Aws
|
|
29
40
|
|
30
41
|
@config[:precedence] = @opts[:precedence].split(%r',+\s*').reverse
|
31
42
|
@config[:expandedpaths] = @opts[:expandedpaths].downcase.match %r'^(1|true|on|yes|enable|set)$'
|
43
|
+
@config[:directory] = @opts[:directory]
|
32
44
|
|
33
|
-
|
45
|
+
load_spec @opts[:specification]
|
34
46
|
|
35
47
|
desc = @opts[:output] ? File.basename(@opts[:output]).gsub(%r/\.(json|yaml)/, '') : File.basename(__FILE__,'.rb')
|
36
48
|
if @spec and @spec['Description']
|
@@ -53,7 +65,7 @@ module Aws
|
|
53
65
|
validate(compiled)
|
54
66
|
|
55
67
|
output_file = @opts[:output] || 'compiled.json'
|
56
|
-
|
68
|
+
save_template(output_file,compiled)
|
57
69
|
|
58
70
|
@logger.step '*** Compiled Successfully ***'
|
59
71
|
end
|