mkstack 1.1.3 → 1.2.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/bin/mkstack +5 -3
- data/lib/mkstack/template.rb +32 -31
- data/mkstack.gemspec +1 -1
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 322eccfead31ad6c826aec54f1e7318895bf083846583c049131e0f07c7cbe23
|
4
|
+
data.tar.gz: 0a91db392b235136cf72837d971cd933f15af793a984cb3ff07401431f4e7248
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc047d7381bfcc86076eda6ae58de7b4b04a7e61cb29248530d2e13d7c353c3eac5925b2c381383c561d3eb530c190de46fa35ae4bfb38dce7e966667ca3591d
|
7
|
+
data.tar.gz: c3393240e63e337ce4ef643ca9df68949678ddfb64a118d3647d68eb6c60cdcc90ce40898440e3f5f7790a98bc5e2db4d0b20f807bf648c4ecade270ee1a8017
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/bin/mkstack
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
#!/usr/
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "logger"
|
4
4
|
require "optparse"
|
5
|
-
|
5
|
+
require_relative "../lib/mkstack"
|
6
|
+
|
7
|
+
version = "1.2.0"
|
6
8
|
|
7
9
|
|
8
10
|
##################################################
|
@@ -29,6 +31,7 @@ opts = OptionParser.new do |p|
|
|
29
31
|
|
30
32
|
# Help
|
31
33
|
p.on("-h", "--help", "Display this message") { puts opts ; exit }
|
34
|
+
p.on("--version", "Show version") { puts version ; exit }
|
32
35
|
p.separator(" ")
|
33
36
|
|
34
37
|
# Verbosity
|
@@ -75,7 +78,6 @@ template = MkStack::Template.new(options[:format], options[:erb_argv])
|
|
75
78
|
files.each do |file|
|
76
79
|
begin
|
77
80
|
Dir.chdir(File.dirname(file)) {
|
78
|
-
$logger.info { "Loading #{file}" }
|
79
81
|
template.merge(File.basename(file), options[:erb])
|
80
82
|
}
|
81
83
|
rescue KeyError => e
|
data/lib/mkstack/template.rb
CHANGED
@@ -5,6 +5,30 @@ require "json"
|
|
5
5
|
require "yaml"
|
6
6
|
|
7
7
|
module MkStack
|
8
|
+
##################################################
|
9
|
+
# A class to represent undefined local tags.
|
10
|
+
#
|
11
|
+
# CloudFormation uses <b>!</b> to denote the YAML short form of
|
12
|
+
# intrinsic functions, which is the same prefix YAML uses for local
|
13
|
+
# tags. The default handler strips undefined local tags, leaving
|
14
|
+
# just the value.
|
15
|
+
#
|
16
|
+
# Loading a YAML file will force the output to be in YAML format.
|
17
|
+
|
18
|
+
class IntrinsicShort
|
19
|
+
def init_with(coder)
|
20
|
+
@coder = coder
|
21
|
+
end
|
22
|
+
|
23
|
+
def encode_with(coder)
|
24
|
+
coder.tag = @coder.tag
|
25
|
+
|
26
|
+
coder.map = @coder.map if @coder.type == :map
|
27
|
+
coder.scalar = @coder.scalar if @coder.type == :scalar
|
28
|
+
coder.seq = @coder.seq if @coder.type == :seq
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
8
32
|
##################################################
|
9
33
|
# A CloudFormation template
|
10
34
|
class Template
|
@@ -34,10 +58,6 @@ module MkStack
|
|
34
58
|
# every time we load a file. This allows ERB code in one file to
|
35
59
|
# be referenced in another.
|
36
60
|
@binding = binding
|
37
|
-
|
38
|
-
# See add_domain_types
|
39
|
-
@yaml_domain = "mlfs.org,2020"
|
40
|
-
@global_tag = "tag:#{@yaml_domain}:"
|
41
61
|
end
|
42
62
|
|
43
63
|
# Shorthand accessor for template sections
|
@@ -60,8 +80,9 @@ module MkStack
|
|
60
80
|
cfn = JSON.load(contents)
|
61
81
|
rescue Exception => e
|
62
82
|
# Try YAML
|
63
|
-
|
64
|
-
cfn = YAML.
|
83
|
+
add_tags
|
84
|
+
cfn = YAML.safe_load(contents, [IntrinsicShort])
|
85
|
+
@format = "yaml"
|
65
86
|
end
|
66
87
|
|
67
88
|
# Merge sections that are present in the file
|
@@ -90,9 +111,7 @@ module MkStack
|
|
90
111
|
when "json"
|
91
112
|
to_hash.to_json
|
92
113
|
when "yaml"
|
93
|
-
|
94
|
-
# And keep Psych from splitting "long" lines
|
95
|
-
to_hash.to_yaml({ line_width: -1 }).gsub(/"(#{@global_tag}[^"]+?)"/, '\1').gsub("#{@global_tag}", "!")
|
114
|
+
to_hash.to_yaml({ line_width: -1 }) # Keep Psych from splitting "long" lines
|
96
115
|
else
|
97
116
|
to_hash
|
98
117
|
end
|
@@ -127,20 +146,9 @@ module MkStack
|
|
127
146
|
|
128
147
|
|
129
148
|
#########################
|
130
|
-
#
|
131
|
-
|
132
|
-
|
133
|
-
# CloudFormation uses <b>!</b> to denote the YAML short form of
|
134
|
-
# intrinsic functions, which is the same prefix YAML uses for
|
135
|
-
# local tags. The default handler strips undefined local tags,
|
136
|
-
# leaving just the value.
|
137
|
-
#
|
138
|
-
# This puts the tags back, but in global tag format. The global
|
139
|
-
# tag prefix is converted back to <b>!</b> on output.
|
140
|
-
#
|
141
|
-
# Using the short form will force the output to be in YAML format.
|
142
|
-
def add_domain_types
|
143
|
-
functions = [
|
149
|
+
# List of intrinsic functions that look like undefined local tags
|
150
|
+
def add_tags
|
151
|
+
[
|
144
152
|
"Base64",
|
145
153
|
"Cidr",
|
146
154
|
"FindInMap",
|
@@ -159,14 +167,7 @@ module MkStack
|
|
159
167
|
"Or",
|
160
168
|
"Sub",
|
161
169
|
].each do |function|
|
162
|
-
YAML::
|
163
|
-
unless @format.eql?("yaml")
|
164
|
-
$logger.debug "Setting output to YAML for short form intrinsic function !#{function}"
|
165
|
-
@format = "yaml"
|
166
|
-
end
|
167
|
-
|
168
|
-
(function.eql?("Sub") and val.is_a?(String))? "#{type} \"#{val}\"" : "#{type} #{val}"
|
169
|
-
end
|
170
|
+
YAML::add_tag("!#{function}", IntrinsicShort)
|
170
171
|
end
|
171
172
|
end
|
172
173
|
end
|
data/mkstack.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "mkstack"
|
3
|
-
s.version = "1.
|
3
|
+
s.version = "1.2.0"
|
4
4
|
s.summary = "Merge multiple CloudFormation template files into a single template"
|
5
5
|
s.description = <<-EOF
|
6
6
|
Merge multiple CloudFormation template files into a single template. Each file may be in either JSON or YAML format. By default all files are run through an ERB (Embedded RuBy) processor.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mkstack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Rosen
|
@@ -33,7 +33,7 @@ cert_chain:
|
|
33
33
|
kLyoFawGT9fF6+lXyIT9XiaUzOCjQUJo94on5U601Y2GXB4Sa1oxLSBlEtkSwuD3
|
34
34
|
gMHlHdBRvoJurkVzYNWkN+Cz
|
35
35
|
-----END CERTIFICATE-----
|
36
|
-
date: 2020-
|
36
|
+
date: 2020-09-01 00:00:00.000000000 Z
|
37
37
|
dependencies:
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: aws-sdk-cloudformation
|
metadata.gz.sig
CHANGED
Binary file
|