aws-cfn-dsl 0.2.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/Gemfile +9 -0
- data/aws-cfn-dsl.iml +61 -0
- data/lib/aws/cfn/dsl/base.rb +85 -35
- data/lib/aws/cfn/dsl/main.rb +3 -5
- data/lib/aws/cfn/dsl/template.rb +20 -3
- data/lib/aws/cfn/dsl/version.rb +1 -1
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OTRkZGM3ZjljMDFlZDk5NjFkNGNmNjRlYzYwM2ExNTNlNGRhMjM2NQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MDhjZTc2YzRhMmRhMTU2ODg3OGQxZDhmMDU0ZmM4Yzc2MzAzYWRhNA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZDIyMmZkNDQ1ZDFjNWNmZjI0NzEzNTI0MDJhZjIwOTcwZDMyMTkwNjU3MWU2
|
10
|
+
MzBlNDAwNjUxZjg0ZjlhODhjMGI2ZGI3NzA2ODAzZjkyYmExZjc2ODFiZTM0
|
11
|
+
ZjRjOGRkYTcwYjBjNzY5NjRjYmUyNWIzOTg2NjExOGM4ZjhhNzI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZTI1MmVkZWQzODgwZWVjMTUzMDJmMTcwMmVhZGZiOTRmY2Y0OWEwOWVlYzk0
|
14
|
+
ZWJhNzQxYWIxMDkwNDAzMGEzYTU2YzBlMDU1ODhiYzk4YmU2OGYwNzdhMzA3
|
15
|
+
MzVkNWQzYTYxZDlkNWVlOGEyMzNiOGU2MDE4Y2ZkMjE4YmRhOTc=
|
data/Gemfile
CHANGED
@@ -4,6 +4,15 @@ source 'https://rubygems.org'
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
gem 'cloudformation-ruby-dsl', :path => '../cloudformation-ruby-dsl', :group => :development
|
7
|
+
|
8
|
+
gem 'dldinternet-mixlib-logging', :path => '../dldinternet-mixlib-logging', :group => :development
|
9
|
+
gem 'dldinternet-mixlib-cli', :path => '../dldinternet-mixlib-cli', :group => :development
|
10
|
+
gem 'aws-cfn-dsl', :path => '../aws-cfn-dsl', :group => :development
|
11
|
+
gem 'aws-cfn-decompiler', :path => '../aws-cfn-decompiler', :group => :development
|
12
|
+
gem 'aws-cfn-compiler', :path => '../aws-cfn-compiler', :group => :development
|
13
|
+
gem 'aws-cfn-yats', :path => '../aws-cfn-yats', :group => :development
|
14
|
+
gem 'aws-cfn-stacker', :path => '../aws-cfn-stacker', :group => :development
|
15
|
+
|
7
16
|
gem 'slop', :group => :development
|
8
17
|
|
9
18
|
gem 'json_pure', :group => :development
|
data/aws-cfn-dsl.iml
CHANGED
@@ -8,11 +8,72 @@
|
|
8
8
|
<content url="file://$MODULE_DIR$" />
|
9
9
|
<orderEntry type="inheritedJdk" />
|
10
10
|
<orderEntry type="sourceFolder" forTests="false" />
|
11
|
+
<orderEntry type="module" module-name="aws-cfn-compiler" />
|
12
|
+
<orderEntry type="module" module-name="aws-cfn-decompiler" />
|
13
|
+
<orderEntry type="module-library">
|
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>
|
30
|
+
<orderEntry type="module" module-name="aws-cfn-yats" />
|
11
31
|
<orderEntry type="module" module-name="cloudformation-ruby-dsl" />
|
32
|
+
<orderEntry type="module-library">
|
33
|
+
<library name="dldinternet-mixlib-cli (v0.1.0, /Users/cdelange/Dropbox/DLDInternet/ws/gems-ws/dldinternet-mixlib-cli) [path][gem]">
|
34
|
+
<CLASSES>
|
35
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-cli/bin" />
|
36
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-cli/lib" />
|
37
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-cli/pkg" />
|
38
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-cli/.idea" />
|
39
|
+
</CLASSES>
|
40
|
+
<JAVADOC />
|
41
|
+
<SOURCES>
|
42
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-cli/bin" />
|
43
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-cli/lib" />
|
44
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-cli/pkg" />
|
45
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-cli/.idea" />
|
46
|
+
</SOURCES>
|
47
|
+
</library>
|
48
|
+
</orderEntry>
|
49
|
+
<orderEntry type="module-library">
|
50
|
+
<library name="dldinternet-mixlib-logging (v0.2.0, /Users/cdelange/Dropbox/DLDInternet/ws/gems-ws/dldinternet-mixlib-logging) [path][gem]">
|
51
|
+
<CLASSES>
|
52
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-logging/bin" />
|
53
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-logging/lib" />
|
54
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-logging/pkg" />
|
55
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-logging/.idea" />
|
56
|
+
</CLASSES>
|
57
|
+
<JAVADOC />
|
58
|
+
<SOURCES>
|
59
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-logging/bin" />
|
60
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-logging/lib" />
|
61
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-logging/pkg" />
|
62
|
+
<root url="file://$MODULE_DIR$/../dldinternet-mixlib-logging/.idea" />
|
63
|
+
</SOURCES>
|
64
|
+
</library>
|
65
|
+
</orderEntry>
|
12
66
|
<orderEntry type="library" scope="PROVIDED" name="awesome_print (v1.2.0, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
67
|
+
<orderEntry type="library" scope="PROVIDED" name="colorize (v0.7.3, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
13
68
|
<orderEntry type="library" scope="PROVIDED" name="detabulator (v0.1.0, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
69
|
+
<orderEntry type="library" scope="PROVIDED" name="inifile (v2.0.2, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
14
70
|
<orderEntry type="library" scope="PROVIDED" name="json (v1.8.1, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
15
71
|
<orderEntry type="library" scope="PROVIDED" name="json_pure (v1.8.1, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
72
|
+
<orderEntry type="library" scope="PROVIDED" name="little-plugger (v1.1.3, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
73
|
+
<orderEntry type="library" scope="PROVIDED" name="logging (v1.8.2, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
74
|
+
<orderEntry type="library" scope="PROVIDED" name="mixlib-cli (v1.5.0, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
75
|
+
<orderEntry type="library" scope="PROVIDED" name="multi_json (v1.10.1, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
76
|
+
<orderEntry type="library" scope="PROVIDED" name="psych (v2.0.5, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
16
77
|
<orderEntry type="library" scope="PROVIDED" name="rake (v10.3.2, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
17
78
|
<orderEntry type="library" scope="PROVIDED" name="slop (v3.5.0, RVM: ruby-1.9.3-p547 [aws-cfn-compile]) [gem]" level="application" />
|
18
79
|
</component>
|
data/lib/aws/cfn/dsl/base.rb
CHANGED
@@ -1,13 +1,51 @@
|
|
1
1
|
require "aws/cfn/decompiler"
|
2
2
|
require "aws/cfn/dsl/fncall"
|
3
3
|
|
4
|
+
require 'ap'
|
5
|
+
|
4
6
|
module Aws
|
5
7
|
module Cfn
|
6
8
|
module Dsl
|
7
|
-
class Base
|
9
|
+
class Base
|
10
|
+
attr_accessor :items
|
11
|
+
attr_reader :output
|
12
|
+
|
13
|
+
require 'dldinternet/mixlib/logging'
|
14
|
+
include DLDInternet::Mixlib::Logging
|
8
15
|
|
9
16
|
def initialize
|
17
|
+
super
|
10
18
|
@output = []
|
19
|
+
@config ||= {}
|
20
|
+
|
21
|
+
lcs = ::Logging::ColorScheme.new( 'compiler', :levels => {
|
22
|
+
:trace => :blue,
|
23
|
+
:debug => :cyan,
|
24
|
+
:info => :green,
|
25
|
+
:step => :green,
|
26
|
+
:warn => :yellow,
|
27
|
+
:error => :red,
|
28
|
+
:fatal => :red,
|
29
|
+
:todo => :purple,
|
30
|
+
})
|
31
|
+
scheme = lcs.scheme
|
32
|
+
scheme['trace'] = "\e[38;5;33m"
|
33
|
+
scheme['fatal'] = "\e[38;5;89m"
|
34
|
+
scheme['todo'] = "\e[38;5;55m"
|
35
|
+
lcs.scheme scheme
|
36
|
+
@config[:log_opts] = lambda{|mlll| {
|
37
|
+
:pattern => "%#{mlll}l: %m %C\n",
|
38
|
+
:date_pattern => '%Y-%m-%d %H:%M:%S',
|
39
|
+
:color_scheme => 'compiler'
|
40
|
+
}
|
41
|
+
}
|
42
|
+
@config[:log_level] = :info
|
43
|
+
@logger = getLogger(@config)
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
def save(path=nil,parts=@items)
|
48
|
+
pprint(simplify(parts))
|
11
49
|
end
|
12
50
|
|
13
51
|
def simplify(val)
|
@@ -17,32 +55,34 @@ module Aws
|
|
17
55
|
val
|
18
56
|
else
|
19
57
|
k, v = val.entries[0]
|
20
|
-
case
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
58
|
+
case @opts[:functions]
|
59
|
+
when /1|on|set|enable|yes|true/ then
|
60
|
+
case
|
61
|
+
# CloudFormation functions
|
62
|
+
when k == 'Fn::Base64'
|
63
|
+
FnCall.new 'base64', [v], true
|
64
|
+
when k == 'Fn::FindInMap'
|
65
|
+
FnCall.new 'find_in_map', v
|
66
|
+
when k == 'Fn::GetAtt'
|
67
|
+
FnCall.new 'get_att', v
|
68
|
+
when k == 'Fn::GetAZs'
|
69
|
+
FnCall.new 'get_azs', v != '' ? [v] : []
|
70
|
+
when k == 'Fn::Join'
|
71
|
+
FnCall.new 'join', [v[0]] + v[1], true
|
72
|
+
when k == 'Fn::Select'
|
73
|
+
FnCall.new 'select', v
|
74
|
+
when k == 'Ref' && v == 'AWS::Region'
|
75
|
+
FnCall.new 'aws_region', []
|
76
|
+
when k == 'Ref' && v == 'AWS::StackName'
|
77
|
+
FnCall.new 'aws_stack_name', []
|
78
|
+
# CloudFormation internal references
|
79
|
+
when k == 'Ref'
|
80
|
+
FnCall.new 'ref', [v]
|
81
|
+
else
|
82
|
+
val
|
83
|
+
end
|
84
|
+
else
|
85
|
+
val
|
46
86
|
end
|
47
87
|
end
|
48
88
|
elsif val.is_a?(Array)
|
@@ -71,6 +111,12 @@ module Aws
|
|
71
111
|
|
72
112
|
protected
|
73
113
|
|
114
|
+
def abort!(msg=nil,rc=1)
|
115
|
+
@logger.error msg if msg
|
116
|
+
@logger.fatal '!!! Aborting !!!'
|
117
|
+
exit rc
|
118
|
+
end
|
119
|
+
|
74
120
|
def write(*s)
|
75
121
|
if s.is_a?(Array)
|
76
122
|
s = s.join('')
|
@@ -205,18 +251,22 @@ module Aws
|
|
205
251
|
def pprint_cfn_resource(name, options)
|
206
252
|
subdir = 'Resources'
|
207
253
|
open_output(subdir,name)
|
208
|
-
|
254
|
+
writeln '# noinspection RubyStringKeysInHashInspection'
|
255
|
+
writeln "resource #{fmt_string(name)},"
|
209
256
|
indent = ' '
|
210
257
|
options.each do |k, v|
|
258
|
+
case k
|
259
|
+
when /^(Metadata|Properties)$/
|
260
|
+
write "#{indent}#{fmt_key(k)} => "
|
261
|
+
pprint_value options[k], indent
|
262
|
+
writeln ','
|
263
|
+
else
|
264
|
+
write "#{indent}#{fmt_key(k)} => "
|
265
|
+
writeln "#{fmt(v)},"
|
266
|
+
end
|
211
267
|
unless k == 'Properties'
|
212
|
-
write ", #{fmt_key(k)} => #{fmt(v)}"
|
213
268
|
end
|
214
269
|
end
|
215
|
-
if options.key?('Properties')
|
216
|
-
write ", #{fmt_key('Properties')} => "
|
217
|
-
pprint_value options['Properties'], indent
|
218
|
-
end
|
219
|
-
writeln
|
220
270
|
writeln
|
221
271
|
close_output
|
222
272
|
add_brick(subdir,name)
|
@@ -252,7 +302,7 @@ module Aws
|
|
252
302
|
end
|
253
303
|
write "#{indent}]"
|
254
304
|
|
255
|
-
elsif val.is_a?(FnCall) && val.multiline
|
305
|
+
elsif val.is_a?(FnCall) && val.multiline && @opts[:functions] != 'raw'
|
256
306
|
write val.name, "("
|
257
307
|
args = val.arguments
|
258
308
|
sep = ''
|
data/lib/aws/cfn/dsl/main.rb
CHANGED
data/lib/aws/cfn/dsl/template.rb
CHANGED
@@ -70,9 +70,26 @@ module Aws
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
def hash_refs(line)
|
74
|
+
match = line.match %r/^(.*?)(\{\s*:\S+\s*=>.*?\}|\{\s*\S+:\s*.*?\})(.*)$/
|
75
|
+
if match
|
76
|
+
h = nil
|
77
|
+
eval "h = #{match[2]}", binding
|
78
|
+
k = h.keys[0]
|
79
|
+
v = h.delete(k)
|
80
|
+
v = if v.is_a?Array
|
81
|
+
v.map{|e| e.to_s }
|
82
|
+
else
|
83
|
+
v.to_s
|
84
|
+
end
|
85
|
+
|
86
|
+
h[k.to_s] = v
|
87
|
+
VARS[:logger].debug h
|
88
|
+
[match[1], h, hash_refs(match[3]) ]
|
89
|
+
else
|
90
|
+
"#{line}\n"
|
91
|
+
end
|
92
|
+
end
|
76
93
|
|
77
94
|
def exec!(argv=ARGV)
|
78
95
|
@opts = Slop.parse(help: true) do
|
data/lib/aws/cfn/dsl/version.rb
CHANGED
metadata
CHANGED
@@ -1,75 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-cfn-dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christo DeLange
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: cloudformation-ruby-dsl
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.4'
|
48
|
-
- -
|
48
|
+
- - ! '>='
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: 0.4.3
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
|
-
- -
|
55
|
+
- - ~>
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '0.4'
|
58
|
-
- -
|
58
|
+
- - ! '>='
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: 0.4.3
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: slop
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - ! '>='
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- -
|
72
|
+
- - ! '>='
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
75
|
description: Ruby DSL for creating Cloudformation templates
|
@@ -80,7 +80,7 @@ executables:
|
|
80
80
|
extensions: []
|
81
81
|
extra_rdoc_files: []
|
82
82
|
files:
|
83
|
-
-
|
83
|
+
- .gitignore
|
84
84
|
- Gemfile
|
85
85
|
- LICENSE
|
86
86
|
- LICENSE.txt
|
@@ -125,12 +125,12 @@ require_paths:
|
|
125
125
|
- lib
|
126
126
|
required_ruby_version: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
|
-
- -
|
128
|
+
- - ! '>='
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '0'
|
131
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
132
|
requirements:
|
133
|
-
- -
|
133
|
+
- - ! '>='
|
134
134
|
- !ruby/object:Gem::Version
|
135
135
|
version: '0'
|
136
136
|
requirements: []
|