Module: MkStack
- Defined in:
- lib/mkstack.rb,
lib/mkstack/section.rb,
lib/mkstack/template.rb
Overview
Merge multiple CloudFormation template files into a single template. Each file may be in either JSON or YAML format.
Get started with template = MkStack::Template.new, or use the command line tool mkstack.
ERB
By default all files are run through an ERB (Embedded RuBy) processor.
<% desc = "awesome" %>
AWSTemplateFormatVersion: "2010-09-09"
Description: My <%= desc %> CloudFormation template
It is safe to leave this enabled. If a file doesn’t have any ERB tags it is passed through untouched.
Include
MkStack searches each file for a section named Include, which should be a list of filenames. These function the same as adding the listed files on the command line.
JSON
"Include" : [
"foo.yaml",
"bar.json"
]
YAML
Include:
- foo.yaml
- bar.json
ERB and Include working together
MkStack uses a single binding for all files. This allows ERB tags defined in one file to be referenced in subsequent files.
foo.yaml
Include:
- bar.json
<% tags_json = %q{
"Tags": [
{ "Key" : "application", "Value" : "mkstack" }
]
}
%>
bar.json
{
"Resources" : {
"sg": {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : {
"Fn::Sub" : "Security Group for ${application}"
}
<%= tags_json %>
}
}
}
}
Note that foo.yaml is processed before bar.json.
Command line tool
Usage: mkstack [ options ] file1 [ file2... ]
-h, --help Display this message
-d, --debug Show debug messages
-v, --verbose Be verbose
-q, --quiet Only show errors
-s, --silent Don't show any log messages
-o, --output=FILE Print final template to FILE
Use '-' for stdout
-f, --format=FORMAT Print as FORMAT
Supported formats: json (default), yaml
‐‐erb, --[no-]erb Perform ERB processing (default is true)
‐‐validate Call ValidateTemplate after merging
‐‐‐ Marks end of mkstack options
Remaining arguments are available to ERB as Array argv
Passing arguments to ERB
Any command line arguments following “—” are added to an Array called argv, which can be referenced in your ERB code.
foo.yaml
<% puts "#{argv.class} with #{argv.length} items: #{argv}" %>
$ mkstack foo.yaml --- a 2 test
Array with 3 items: ["a", "2", "test"]
Defined Under Namespace
Classes: IntrinsicShort, Section, Template