aws-cfn-compiler 0.8.10 → 0.9.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 +8 -8
- data/aws-cfn-compiler.gemspec +3 -3
- data/bin/cfn-compiler +1 -1
- data/lib/aws/cfn/compiler/base.rb +2 -2
- data/lib/aws/cfn/compiler/mixins/compile.rb +13 -2
- data/lib/aws/cfn/compiler/mixins/load.rb +23 -9
- data/lib/aws/cfn/compiler/mixins/options.rb +68 -0
- data/lib/aws/cfn/compiler/mixins/parse.rb +6 -5
- data/lib/aws/cfn/compiler/mixins/save.rb +1 -1
- data/lib/aws/cfn/compiler/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjUzMDEzY2Q4MDYwNjZkYzZmZWYyOTZmNTYxNTQxOTAyNzdiOTU3Yw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmE3YmQ0MmFkZTI2ZmZjOTJhNjM0ZGZlMjI0YzUyZTAyMmRhMTdiMw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MmNiMDAyMDBmNzIzNWRiNGExODZhMzY5NjQ4NzRhMjBiYmFkNTlkOWJhNTc0
|
10
|
+
ODc2YTk3NzA5ZWI2MmUzNDg0M2I3ODVlNmE3ZTljZWZlMDgxMGY5YzU0ZTE3
|
11
|
+
MTdhZjFlMjJjMGNlNTljZjFiYTRhOGE1MTY4ODhhMDRlYzg4MTI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmRkNDU0Zjk5ODYwMjE1YTcwZjllYThmMWYwNDRlYmUyODNjZGE4NzEzYTgy
|
14
|
+
ZTA2OWEyMzI3YjAwNzQxZWRjYjRjMzVhMzk3NjM3MzgxNjVhMGVjZjc2NjNk
|
15
|
+
MThjYTliMDk3NmNjMjc3ZjdkOTQzMDFlMDk5MDM5MTIxZGUwZmM=
|
data/aws-cfn-compiler.gemspec
CHANGED
@@ -23,8 +23,8 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'json'
|
24
24
|
spec.add_dependency 'slop'
|
25
25
|
spec.add_dependency 'inifile'
|
26
|
-
spec.add_dependency 'aws-cfn-dsl', '>= 0.
|
27
|
-
spec.add_dependency 'dldinternet-mixlib-cli', '>= 0.
|
28
|
-
spec.add_dependency 'dldinternet-mixlib-logging', '>= 0.
|
26
|
+
spec.add_dependency 'aws-cfn-dsl', '>= 0.9.0'
|
27
|
+
spec.add_dependency 'dldinternet-mixlib-cli', '>= 0.2.0'
|
28
|
+
spec.add_dependency 'dldinternet-mixlib-logging', '>= 0.4.0'
|
29
29
|
|
30
30
|
end
|
data/bin/cfn-compiler
CHANGED
@@ -4,7 +4,7 @@ require 'rubygems'
|
|
4
4
|
|
5
5
|
path = File.dirname(__FILE__)
|
6
6
|
if File.exists?("#{path}/../.gitignore")
|
7
|
-
%w(aws-cfn-decompiler aws-cfn-compiler aws-cfn-dsl cloudformation-ruby-dsl dldinternet-mixlib-logging).each do |mod|
|
7
|
+
%w(aws-cfn-decompiler aws-cfn-compiler aws-cfn-dsl cloudformation-ruby-dsl dldinternet-mixlib-logging dldinternet-mixlib-cli).each do |mod|
|
8
8
|
add_path = File.expand_path(File.join(path, "../../#{mod}", "lib"))
|
9
9
|
$:.unshift(add_path)
|
10
10
|
end
|
@@ -116,7 +116,7 @@ module Aws
|
|
116
116
|
def load_spec(spec=nil)
|
117
117
|
if spec
|
118
118
|
abs = nil
|
119
|
-
[spec, File.join(@config[:
|
119
|
+
[spec, File.join(@config[:brick_path_list],spec)].flatten.each do |p|
|
120
120
|
begin
|
121
121
|
abs = File.realpath(File.absolute_path(File.expand_path(p)))
|
122
122
|
break if File.exists?(abs)
|
@@ -143,7 +143,7 @@ module Aws
|
|
143
143
|
abort! "Unsupported file type for specification: #{spec}"
|
144
144
|
end
|
145
145
|
else
|
146
|
-
abort! 'Unable to open specification'+ (abs.nil? ? " or {
|
146
|
+
abort! 'Unable to open specification'+ (abs.nil? ? " or {.,#{@config[:brick_path_list].join(',')}/}#{spec} not found" : ": #{abs}")
|
147
147
|
end
|
148
148
|
else
|
149
149
|
abort! 'No specification provided'
|
@@ -134,11 +134,22 @@ module Aws
|
|
134
134
|
ref = match[2]
|
135
135
|
# noinspection RubyParenthesesAroundConditionInspection
|
136
136
|
if (subm = match[1].match(%r'^(.+?)/(.+)$'))
|
137
|
-
|
137
|
+
@config[:brick_path_list].each do |p|
|
138
|
+
path = File.join(p,subm[1]) # File.dirname(@config[:directory])
|
139
|
+
unless File.directory?(path)
|
140
|
+
path = nil
|
141
|
+
end
|
142
|
+
end
|
138
143
|
sub = subm[2]
|
139
144
|
else
|
140
145
|
# sub = nil
|
141
|
-
path = File.join(File.dirname(@config[:directory]),match[1])
|
146
|
+
# path = File.join(File.dirname(@config[:directory]),match[1])
|
147
|
+
@config[:brick_path_list].each do |p|
|
148
|
+
path = File.join(p,match[1]) # File.dirname(@config[:directory])
|
149
|
+
unless File.directory?(path)
|
150
|
+
path = nil
|
151
|
+
end
|
152
|
+
end
|
142
153
|
end
|
143
154
|
else
|
144
155
|
# Otherwise it is what it seems ;)
|
@@ -55,26 +55,40 @@ module Aws
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def vet_path(dir,base=nil,rel=false)
|
58
|
-
if rel
|
59
|
-
base = File.realpath(File.expand_path(File.join(@config[:directory], base)))
|
60
|
-
else
|
61
|
-
base = @config[:directory] unless base
|
62
|
-
end
|
63
58
|
path = nil
|
64
|
-
[
|
65
|
-
|
59
|
+
@config[:brick_path_list].each do |p|
|
60
|
+
if rel
|
61
|
+
# base = File.realpath(File.expand_path(File.join(@config[:directory], base)))
|
62
|
+
base = File.realpath(File.expand_path(File.join(p, base)))
|
63
|
+
else
|
64
|
+
base = p unless base
|
65
|
+
end
|
66
|
+
[dir, dir.downcase].each do |d|
|
67
|
+
path = File.join(base, dir)
|
68
|
+
if File.directory?(path)
|
69
|
+
break
|
70
|
+
end
|
71
|
+
end
|
66
72
|
if File.directory?(path)
|
67
73
|
break
|
68
74
|
end
|
69
75
|
end
|
76
|
+
patn = path
|
77
|
+
unless @config[:expandedpaths]
|
78
|
+
patn = short_path(path)
|
79
|
+
end
|
80
|
+
|
70
81
|
unless File.directory?(path)
|
71
|
-
@logger.error " !! error: Cannot load bricks from #{path} (started with #{File.join(base, dir)}')"
|
82
|
+
@logger.error " !! error: Cannot load bricks from #{patn} with brick path: \n\t#{@config[:brick_path_list].join("\n\t")} \n(started with #{File.join(base, dir)}')"
|
72
83
|
abort!
|
73
84
|
end
|
74
85
|
path
|
75
86
|
end
|
76
87
|
|
77
|
-
|
88
|
+
def short_path(path,n=2)
|
89
|
+
patn = path.split(File::SEPARATOR)[0-n..-1]
|
90
|
+
patn = patn.join(File::SEPARATOR)
|
91
|
+
end
|
78
92
|
end
|
79
93
|
end
|
80
94
|
end
|
@@ -8,6 +8,7 @@ module Aws
|
|
8
8
|
|
9
9
|
setup_options
|
10
10
|
|
11
|
+
@opts.on :b, :brick_path=, 'A list of paths to template components (bricks). May also set as the BRICK_PATH environment variable.', as: String
|
11
12
|
@opts.on :F, :format=, 'The output format of the components. [JSON|YAML|Ruby]', { as: String, match: @format_regex, default: 'yaml' }
|
12
13
|
@opts.on :s, :specification=, 'The specification to use when selecting components. A JSON or YAML file', { as: String
|
13
14
|
}
|
@@ -39,8 +40,75 @@ module Aws
|
|
39
40
|
|
40
41
|
@config[:precedence] = @opts[:precedence].split(%r',+\s*').reverse
|
41
42
|
|
43
|
+
@optional ||= {}
|
44
|
+
@optional[:directory] = true
|
42
45
|
setup_config
|
43
46
|
|
47
|
+
if @config[:brick_path]
|
48
|
+
brick_path = @config[:brick_path]
|
49
|
+
elsif ENV['BRICK_PATH']
|
50
|
+
brick_path = ENV['BRICK_PATH']
|
51
|
+
else
|
52
|
+
brick_path = @config[:directory]
|
53
|
+
end
|
54
|
+
if brick_path
|
55
|
+
@config[:brick_path_list] = parseList(brick_path,':','parsePath')
|
56
|
+
|
57
|
+
mia = []
|
58
|
+
@config[:brick_path_list].each do |path|
|
59
|
+
unless File.directory? path
|
60
|
+
mia << path
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if mia.size > 0
|
65
|
+
hints = []
|
66
|
+
mia.each do |p|
|
67
|
+
hints << hint_paths(p,Dir.pwd)
|
68
|
+
end
|
69
|
+
hints.flatten!
|
70
|
+
abort! "Invalid brick path: #{brick_path}! #{mia.size > 1 ? 'These' : 'This'} path#{mia.size > 1 ? 's' : ''} does not exist or cannot be read!\n #{mia.join("\n\t")}
|
71
|
+
Did you mean one of these? #{@config[:expandedpaths] ? "(Above #{Dir.pwd})" : ""}
|
72
|
+
\t#{hints.join("\n\t")}\n"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
def hint_paths(p,pwd,n=0,rel='',f=nil)
|
79
|
+
hints = []
|
80
|
+
d = p
|
81
|
+
until File.directory?(d)
|
82
|
+
if d == '.'
|
83
|
+
return hints
|
84
|
+
end
|
85
|
+
d = File.dirname(d)
|
86
|
+
end
|
87
|
+
unless f
|
88
|
+
q = d
|
89
|
+
Range.new(1,n).each do
|
90
|
+
d = File.dirname(d)
|
91
|
+
end
|
92
|
+
f = File.basename(p)
|
93
|
+
r = pwd.gsub(%r'^#{q}','').split(File::SEPARATOR)
|
94
|
+
if r.size > 0
|
95
|
+
r = r[1..-1]
|
96
|
+
end
|
97
|
+
if r.size > 0
|
98
|
+
rel = r.map{|_| '..'}.join(File::SEPARATOR)
|
99
|
+
end
|
100
|
+
pwd = d
|
101
|
+
end
|
102
|
+
Dir.glob("#{d}/*").each do |path|
|
103
|
+
if File.directory?(path)
|
104
|
+
if path.match %r'/#{f}'
|
105
|
+
hints << File.join(rel,path.gsub(%r'^#{File.dirname(d)}',''))
|
106
|
+
else
|
107
|
+
hints << hint_paths(path,pwd,n,rel,f)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
hints.flatten
|
44
112
|
end
|
45
113
|
|
46
114
|
end
|
@@ -15,7 +15,6 @@ module Aws
|
|
15
15
|
logStep "Parsing #{section}..."
|
16
16
|
|
17
17
|
if spec and spec[section]
|
18
|
-
abort! "No such directory: #{@config[:directory]} (I am here: #{Dir.pwd})" unless File.directory?(@config[:directory])
|
19
18
|
@items ||= {}
|
20
19
|
@items[section] ||= {}
|
21
20
|
get = {}
|
@@ -28,6 +27,7 @@ module Aws
|
|
28
27
|
else
|
29
28
|
path = vet_path(sub ? sub : section, refp, rel)
|
30
29
|
end
|
30
|
+
abort! "No such directory: #{path} (I am here: #{Dir.pwd})" unless File.directory?(path)
|
31
31
|
unless get[path]
|
32
32
|
get[path] = get_file_set([".*"], path, @config[:precedence])
|
33
33
|
end
|
@@ -84,10 +84,11 @@ module Aws
|
|
84
84
|
Aws::Cfn::Compiler.binding ||= {}
|
85
85
|
Aws::Cfn::Compiler.binding[section] ||= {}
|
86
86
|
Aws::Cfn::Compiler.binding[section][base] ||= {
|
87
|
-
brick_path:
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
brick_path: @config[:brick_path],
|
88
|
+
brick_path_list: @config[:brick_path_list],
|
89
|
+
template: @dsl,
|
90
|
+
logger: @logger,
|
91
|
+
compiler: self
|
91
92
|
}
|
92
93
|
source_file = File.expand_path(filename)
|
93
94
|
begin
|
@@ -72,7 +72,7 @@ module Aws
|
|
72
72
|
end
|
73
73
|
@logger.info " saved #{filn}."
|
74
74
|
rescue
|
75
|
-
abort! "!!! Could not write file #{path}: #{$!}"
|
75
|
+
abort! "!!! Could not write file #{path}: \nException: #{$!}\nParent directory exists? #{File.directory?(File.dirname(path))}\n"
|
76
76
|
end
|
77
77
|
else
|
78
78
|
@logger.warn " Did not overwrite #{filn}."
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-cfn-compiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PKinney
|
@@ -92,42 +92,42 @@ dependencies:
|
|
92
92
|
requirements:
|
93
93
|
- - ! '>='
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version: 0.
|
95
|
+
version: 0.9.0
|
96
96
|
type: :runtime
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - ! '>='
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: 0.
|
102
|
+
version: 0.9.0
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: dldinternet-mixlib-cli
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: 0.
|
109
|
+
version: 0.2.0
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - ! '>='
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: 0.
|
116
|
+
version: 0.2.0
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: dldinternet-mixlib-logging
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
120
120
|
requirements:
|
121
121
|
- - ! '>='
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: 0.
|
123
|
+
version: 0.4.0
|
124
124
|
type: :runtime
|
125
125
|
prerelease: false
|
126
126
|
version_requirements: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
128
|
- - ! '>='
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
130
|
+
version: 0.4.0
|
131
131
|
description: The idea is to create a folder structure to better manage pieces of a
|
132
132
|
CloudFormation deployment. Additionally, writing in JSON is hard, so the compiler
|
133
133
|
takes YAML files as well.
|