lono 6.1.11 → 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.cody/acceptance.sh +19 -3
- data/.gitignore +2 -2
- data/CHANGELOG.md +16 -1
- data/README.md +18 -20
- data/Rakefile +1 -0
- data/lib/lono.rb +7 -5
- data/lib/lono/abstract_base.rb +25 -0
- data/lib/lono/api/client.rb +30 -0
- data/lib/lono/api/proxy.rb +58 -0
- data/lib/lono/api/repos.rb +8 -0
- data/lib/lono/api/verify.rb +13 -0
- data/lib/lono/app_file/base.rb +4 -11
- data/lib/lono/app_file/build.rb +1 -1
- data/lib/lono/app_file/upload.rb +1 -4
- data/lib/lono/autoloader.rb +3 -1
- data/lib/lono/aws_services.rb +9 -9
- data/lib/lono/aws_services/helper.rb +14 -0
- data/lib/lono/aws_services/{util.rb → stack.rb} +1 -9
- data/lib/lono/aws_services/stack_set.rb +41 -0
- data/lib/lono/blueprint.rb +2 -2
- data/lib/lono/blueprint/configset/loader.rb +7 -0
- data/lib/lono/blueprint/helper.rb +8 -2
- data/lib/lono/blueprint/meta.rb +4 -12
- data/lib/lono/blueprint/new.rb +3 -3
- data/lib/lono/blueprint/root.rb +6 -26
- data/lib/lono/bundle.rb +54 -0
- data/lib/lono/cfn.rb +31 -75
- data/lib/lono/cfn/base.rb +39 -136
- data/lib/lono/cfn/cancel.rb +14 -9
- data/lib/lono/cfn/create.rb +15 -19
- data/lib/lono/cfn/delete.rb +9 -9
- data/lib/lono/cfn/deploy.rb +4 -4
- data/lib/lono/cfn/download.rb +27 -9
- data/lib/lono/cfn/opts.rb +80 -0
- data/lib/lono/cfn/preview/changeset.rb +23 -23
- data/lib/lono/cfn/preview/codediff.rb +5 -6
- data/lib/lono/cfn/preview/param.rb +10 -10
- data/lib/lono/cfn/rollback.rb +5 -5
- data/lib/lono/cfn/status.rb +0 -10
- data/lib/lono/cfn/update.rb +22 -27
- data/lib/lono/clean.rb +3 -3
- data/lib/lono/cli.rb +69 -34
- data/lib/lono/code.rb +22 -0
- data/lib/lono/command.rb +7 -0
- data/lib/lono/config_location.rb +6 -13
- data/lib/lono/configset.rb +9 -0
- data/lib/lono/configset/combiner.rb +128 -0
- data/lib/lono/configset/evaluate_file.rb +8 -0
- data/lib/lono/configset/list.rb +67 -0
- data/lib/lono/configset/loader.rb +98 -0
- data/lib/lono/configset/loader/dsl.rb +9 -0
- data/lib/lono/configset/materializer/final.rb +10 -0
- data/lib/lono/configset/materializer/gems_builder.rb +81 -0
- data/lib/lono/configset/materializer/jade.rb +15 -0
- data/lib/lono/configset/materializer/source.rb +54 -0
- data/lib/lono/configset/meta.rb +19 -0
- data/lib/lono/configset/meta/dsl.rb +12 -0
- data/lib/lono/configset/new.rb +84 -0
- data/lib/lono/configset/preparer.rb +44 -0
- data/lib/lono/configset/register/base.rb +121 -0
- data/lib/lono/configset/register/blueprint.rb +16 -0
- data/lib/lono/configset/register/dsl.rb +15 -0
- data/lib/lono/configset/register/project.rb +12 -0
- data/lib/lono/configset/registry.rb +34 -0
- data/lib/lono/configset/resolver.rb +42 -0
- data/lib/lono/conventions.rb +18 -7
- data/lib/lono/core.rb +16 -20
- data/lib/lono/default/settings.yml +2 -3
- data/lib/lono/ext/bundler.rb +7 -0
- data/lib/lono/file_uploader.rb +8 -5
- data/lib/lono/finder/base.rb +140 -0
- data/lib/lono/finder/blueprint.rb +11 -0
- data/lib/lono/finder/blueprint/configset.rb +17 -0
- data/lib/lono/finder/configset.rb +11 -0
- data/lib/lono/generate.rb +93 -0
- data/lib/lono/help/blueprint/new.md +0 -1
- data/lib/lono/help/cfn/delete.md +1 -1
- data/lib/lono/help/cfn/deploy.md +5 -76
- data/lib/lono/help/cfn/status.md +0 -4
- data/lib/lono/help/cfn/update.md +1 -1
- data/lib/lono/help/code/convert.md +51 -0
- data/lib/lono/help/code/import.md +30 -0
- data/lib/lono/help/configsets.md +24 -0
- data/lib/lono/help/generate.md +4 -4
- data/lib/lono/help/new.md +1 -2
- data/lib/lono/help/sets/delete.md +8 -0
- data/lib/lono/help/sets/deploy.md +76 -0
- data/lib/lono/help/sets/instances/delete.md +21 -0
- data/lib/lono/help/sets/instances/list.md +14 -0
- data/lib/lono/help/sets/instances/status.md +15 -0
- data/lib/lono/help/sets/instances/sync.md +88 -0
- data/lib/lono/help/sets/status.md +23 -0
- data/lib/lono/help/upgrade.md +1 -0
- data/lib/lono/importer.rb +22 -0
- data/lib/lono/importer/base.rb +59 -0
- data/lib/lono/importer/converter.rb +19 -0
- data/lib/lono/importer/download.rb +46 -0
- data/lib/lono/importer/dsl.rb +36 -0
- data/lib/lono/importer/erb.rb +31 -0
- data/lib/lono/importer/params.rb +56 -0
- data/lib/lono/importer/service/coder.rb +81 -0
- data/lib/lono/inspector/base.rb +12 -22
- data/lib/lono/inspector/graph.rb +1 -1
- data/lib/lono/inspector/summary.rb +41 -17
- data/lib/lono/jade.rb +103 -0
- data/lib/lono/jade/circular.rb +26 -0
- data/lib/lono/jadespec.rb +41 -0
- data/lib/lono/new.rb +2 -2
- data/lib/lono/opts.rb +43 -0
- data/lib/lono/output/template.rb +48 -0
- data/lib/lono/param.rb +3 -5
- data/lib/lono/param/generator.rb +13 -33
- data/lib/lono/pro.rb +15 -0
- data/lib/lono/pro/base.rb +16 -0
- data/lib/lono/pro/repo.rb +27 -0
- data/lib/lono/project_checker.rb +4 -29
- data/lib/lono/registration.rb +15 -0
- data/lib/lono/registration/base.rb +37 -0
- data/lib/lono/registration/check.rb +15 -0
- data/lib/lono/registration/temp.rb +60 -0
- data/lib/lono/registration/user.rb +54 -0
- data/lib/lono/script/base.rb +1 -10
- data/lib/lono/script/upload.rb +2 -12
- data/lib/lono/seed.rb +2 -11
- data/lib/lono/seed/base.rb +55 -110
- data/lib/lono/sets.rb +38 -0
- data/lib/lono/sets/base.rb +45 -0
- data/lib/lono/sets/create.rb +30 -0
- data/lib/lono/sets/delete.rb +47 -0
- data/lib/lono/sets/deploy.rb +11 -0
- data/lib/lono/sets/instances.rb +33 -0
- data/lib/lono/sets/instances/base.rb +30 -0
- data/lib/lono/sets/instances/delete.rb +69 -0
- data/lib/lono/sets/instances/list.rb +13 -0
- data/lib/lono/sets/instances/opts.rb +29 -0
- data/lib/lono/sets/instances/status.rb +12 -0
- data/lib/lono/sets/instances/sync.rb +182 -0
- data/lib/lono/sets/list.rb +35 -0
- data/lib/lono/sets/opts.rb +18 -0
- data/lib/lono/sets/preview/codediff.rb +35 -0
- data/lib/lono/sets/preview/param.rb +32 -0
- data/lib/lono/sets/status.rb +116 -0
- data/lib/lono/sets/status/instance.rb +20 -0
- data/lib/lono/sets/status/instance/base.rb +120 -0
- data/lib/lono/sets/status/instance/completed.rb +35 -0
- data/lib/lono/sets/status/instance/deleted.rb +32 -0
- data/lib/lono/sets/status/instance/show.rb +7 -0
- data/lib/lono/sets/status/instances.rb +111 -0
- data/lib/lono/sets/summarize.rb +20 -0
- data/lib/lono/sets/time_spent.rb +11 -0
- data/lib/lono/sets/update.rb +81 -0
- data/lib/lono/template.rb +5 -7
- data/lib/lono/template/configset_injector.rb +50 -0
- data/lib/lono/template/context.rb +4 -4
- data/lib/lono/template/context/loader.rb +4 -16
- data/lib/lono/template/evaluate.rb +2 -1
- data/lib/lono/template/generator.rb +17 -15
- data/lib/lono/template/helper.rb +7 -7
- data/lib/lono/template/post_processor.rb +2 -12
- data/lib/lono/template/strategy/base.rb +4 -0
- data/lib/lono/template/{dsl.rb → strategy/dsl.rb} +4 -6
- data/lib/lono/template/{dsl → strategy/dsl}/builder.rb +11 -15
- data/lib/lono/template/{dsl → strategy/dsl}/builder/fn.rb +1 -1
- data/lib/lono/template/strategy/dsl/builder/helpers.rb +11 -0
- data/lib/lono/template/strategy/dsl/builder/helpers/core_helper.rb +14 -0
- data/lib/lono/template/strategy/dsl/builder/helpers/file_helper.rb +48 -0
- data/lib/lono/template/strategy/dsl/builder/helpers/lookup_helper.rb +27 -0
- data/lib/lono/template/strategy/dsl/builder/helpers/s3_helper.rb +13 -0
- data/lib/lono/template/strategy/dsl/builder/helpers/tags_helper.rb +39 -0
- data/lib/lono/template/{dsl/builder → strategy/dsl/builder/section}/base.rb +6 -17
- data/lib/lono/template/{dsl/builder → strategy/dsl/builder/section}/condition.rb +1 -1
- data/lib/lono/template/strategy/dsl/builder/section/extensions.rb +9 -0
- data/lib/lono/template/{dsl/builder → strategy/dsl/builder/section}/mapping.rb +1 -1
- data/lib/lono/template/{dsl/builder/section_methods.rb → strategy/dsl/builder/section/methods.rb} +9 -2
- data/lib/lono/template/{dsl/builder → strategy/dsl/builder/section}/output.rb +1 -1
- data/lib/lono/template/strategy/dsl/builder/section/parameter.rb +69 -0
- data/lib/lono/template/{dsl/builder → strategy/dsl/builder/section}/resource.rb +1 -1
- data/lib/lono/template/{dsl/builder → strategy/dsl/builder/section}/resource/property_mover.rb +1 -1
- data/lib/lono/template/{dsl/builder → strategy/dsl/builder/section}/section.rb +1 -1
- data/lib/lono/template/{dsl → strategy/dsl}/builder/squeezer.rb +1 -1
- data/lib/lono/template/strategy/dsl/builder/stringify.rb +15 -0
- data/lib/lono/template/{dsl → strategy/dsl}/builder/syntax.rb +3 -2
- data/lib/lono/template/strategy/dsl/finalizer.rb +12 -0
- data/lib/lono/template/strategy/dsl/finalizer/parameter_groups.rb +56 -0
- data/lib/lono/template/{erb.rb → strategy/erb.rb} +5 -5
- data/lib/lono/template/strategy/source.rb +8 -0
- data/lib/lono/template/template.rb +1 -1
- data/lib/lono/template/upload.rb +4 -9
- data/lib/lono/template/util.rb +0 -40
- data/lib/lono/upgrade.rb +12 -10
- data/lib/lono/user_data.rb +4 -4
- data/lib/lono/utils/pretty_time.rb +14 -0
- data/lib/lono/utils/sure.rb +23 -0
- data/lib/lono/version.rb +1 -1
- data/lib/lono/yamler/loader.rb +52 -0
- data/lib/lono/yamler/validator.rb +51 -0
- data/lib/templates/blueprint/%blueprint_name%.gemspec.tt +4 -0
- data/lib/templates/blueprint/README.md.tt +1 -1
- data/lib/templates/blueprint/seed/configs.rb +2 -2
- data/lib/templates/blueprint_types/dsl/app/templates/%blueprint_name%.rb +17 -18
- data/lib/templates/blueprint_types/erb/app/templates/%blueprint_name%.yml +63 -4
- data/lib/templates/configset/%configset_name%.gemspec.tt +41 -0
- data/lib/templates/configset/.gitignore +11 -0
- data/lib/templates/configset/CHANGELOG.md +7 -0
- data/lib/templates/configset/Gemfile +4 -0
- data/lib/templates/configset/README.md.tt +3 -0
- data/lib/templates/configset/Rakefile.tt +9 -0
- data/lib/templates/configset/lib/configset.yml +20 -0
- data/lib/templates/skeleton/.gitignore +1 -0
- data/lib/templates/skeleton/Gemfile +0 -1
- data/lib/templates/skeleton/README.md +4 -4
- data/lib/templates/skeleton/configs/settings.yml +1 -1
- data/lono.gemspec +1 -4
- metadata +146 -79
- data/Guardfile +0 -19
- data/lib/lono/app_file.rb +0 -5
- data/lib/lono/blueprint/find.rb +0 -90
- data/lib/lono/blueprint/info.rb +0 -10
- data/lib/lono/blueprint/list.rb +0 -14
- data/lib/lono/cfn/current.rb +0 -95
- data/lib/lono/cfn/preview.rb +0 -4
- data/lib/lono/cfn/suffix.rb +0 -67
- data/lib/lono/cfn/util.rb +0 -27
- data/lib/lono/help/cfn/current.md +0 -18
- data/lib/lono/help/upgrade4.md +0 -25
- data/lib/lono/inspector.rb +0 -4
- data/lib/lono/output_template.rb +0 -35
- data/lib/lono/template/base.rb +0 -13
- data/lib/lono/template/dsl/builder/helpers.rb +0 -8
- data/lib/lono/template/dsl/builder/helpers/core_helper.rb +0 -107
- data/lib/lono/template/dsl/builder/helpers/param_helper.rb +0 -61
- data/lib/lono/template/dsl/builder/parameter.rb +0 -39
- data/lib/lono/upgrade/upgrade4.rb +0 -175
- data/lib/lono/upgrade/upgrade42.rb +0 -36
- data/lib/lono/upgrade/upgrade5.rb +0 -55
- data/lib/templates/blueprint/.meta/config.yml.tt +0 -4
- data/lib/templates/skeleton/Guardfile +0 -12
- data/lib/templates/upgrade5/blueprints/main/.lono/config.yml +0 -3
- data/lib/templates/upgrade5/blueprints/main/.meta/config.yml +0 -3
@@ -0,0 +1,48 @@
|
|
1
|
+
module Lono::Template::Strategy::Dsl::Builder::Helpers
|
2
|
+
module FileHelper
|
3
|
+
extend Memoist
|
4
|
+
|
5
|
+
def content(path)
|
6
|
+
render_file(Lono.config.content_path, path)
|
7
|
+
end
|
8
|
+
|
9
|
+
def user_data(path)
|
10
|
+
render_file(Lono.config.user_data_path, path)
|
11
|
+
end
|
12
|
+
|
13
|
+
def user_data_script
|
14
|
+
unless @user_data_script
|
15
|
+
return <<~EOL
|
16
|
+
# @user_data_script variable not set. IE: @user_data_script = "configs/#{@blueprint}/user-data/boostrap.sh"
|
17
|
+
# Also, make sure that "configs/#{@blueprint}/user-data/boostrap.sh" path you're using exists.
|
18
|
+
EOL
|
19
|
+
end
|
20
|
+
|
21
|
+
if File.exist?(@user_data_script)
|
22
|
+
render_path(@user_data_script)
|
23
|
+
else
|
24
|
+
message = "WARN: #{@user_data_script} not found"
|
25
|
+
puts message.color(:yellow)
|
26
|
+
"# #{message}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def render_file(folder, path)
|
31
|
+
path = "#{folder}/#{path}"
|
32
|
+
if File.exist?(path)
|
33
|
+
render_path(path)
|
34
|
+
else
|
35
|
+
message = "WARNING: path #{path} not found"
|
36
|
+
puts message.color(:yellow)
|
37
|
+
puts "Called from:"
|
38
|
+
puts caller[2]
|
39
|
+
message
|
40
|
+
end
|
41
|
+
end
|
42
|
+
memoize :render_file
|
43
|
+
|
44
|
+
def render_path(path)
|
45
|
+
RenderMePretty.result(path, context: self)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Lono::Template::Strategy::Dsl::Builder::Helpers
|
2
|
+
module LookupHelper
|
3
|
+
extend Memoist
|
4
|
+
include Lono::AwsServices
|
5
|
+
|
6
|
+
def lookup_output(name)
|
7
|
+
stack_name, key = name.split(".")
|
8
|
+
resp = describe_stacks(stack_name: stack_name)
|
9
|
+
stack = resp.stacks.first
|
10
|
+
if stack
|
11
|
+
o = stack.outputs.detect { |h| h.output_key == key }
|
12
|
+
end
|
13
|
+
|
14
|
+
if o
|
15
|
+
o.output_value
|
16
|
+
else
|
17
|
+
"NOT FOUND: Did not lookup_output #{name} for stack #{stack}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def describe_stacks(options={})
|
23
|
+
cfn.describe_stacks(options)
|
24
|
+
end
|
25
|
+
memoize :describe_stacks
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Lono::Template::Strategy::Dsl::Builder::Helpers
|
2
|
+
module S3Helper
|
3
|
+
def s3_bucket
|
4
|
+
Lono::S3::Bucket.name
|
5
|
+
end
|
6
|
+
|
7
|
+
def file_s3_key(name, options={})
|
8
|
+
Lono::AppFile::Registry.register(name, @blueprint, options)
|
9
|
+
"file://app/files/#{name}" # placeholder for post processing
|
10
|
+
end
|
11
|
+
alias_method :s3_key, :file_s3_key
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Lono::Template::Strategy::Dsl::Builder::Helpers
|
2
|
+
module TagsHelper
|
3
|
+
def tags(hash={})
|
4
|
+
if hash.empty?
|
5
|
+
tag_list(@tags) if @tags # when hash is empty, use @tags variable. If not set then return nil
|
6
|
+
else
|
7
|
+
tag_list(hash)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def tag_list(hash)
|
12
|
+
raise "tags hash cannot be empty" if hash == nil
|
13
|
+
|
14
|
+
if hash.is_a?(Array)
|
15
|
+
hash = hash.inject({}) do |h,i|
|
16
|
+
i.symbolize_keys!
|
17
|
+
h[i[:Key]] = i[:Value]
|
18
|
+
h
|
19
|
+
end
|
20
|
+
return tag_list(hash) # recursive call tag_list to normalized the argument with a Hash
|
21
|
+
end
|
22
|
+
|
23
|
+
propagate = hash[:PropagateAtLaunch] # special treatment
|
24
|
+
list = hash.map do |k,v|
|
25
|
+
h = {Key: k.to_s, Value: v}
|
26
|
+
h[:PropagateAtLaunch] = propagate unless propagate.nil?
|
27
|
+
h
|
28
|
+
end
|
29
|
+
list.reject { |h| h[:Key] == "PropagateAtLaunch" }
|
30
|
+
end
|
31
|
+
|
32
|
+
def dimensions(hash)
|
33
|
+
tag_list(hash).map { |h|
|
34
|
+
h[:Name] = h.delete(:Key) || h.delete(:key)
|
35
|
+
h
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
|
-
|
1
|
+
module Lono::Template::Strategy::Dsl::Builder::Section
|
2
2
|
class Base
|
3
|
-
include Fn
|
4
|
-
include Helpers
|
3
|
+
include Lono::Template::Strategy::Dsl::Builder::Fn
|
4
|
+
include Lono::Template::Strategy::Dsl::Builder::Helpers
|
5
|
+
include Lono::Template::Strategy::Dsl::Builder::Stringify
|
5
6
|
|
6
7
|
def initialize(blueprint, *definition)
|
7
8
|
@blueprint = blueprint
|
@@ -16,26 +17,14 @@ class Lono::Template::Dsl::Builder
|
|
16
17
|
data = if blueprint_meta.auto_camelize?(target_section)
|
17
18
|
CfnCamelizer.transform(attributes)
|
18
19
|
else
|
19
|
-
|
20
|
+
stringify!(attributes)
|
20
21
|
end
|
21
22
|
clean(data)
|
22
23
|
end
|
23
24
|
|
24
|
-
# Accounts for Arrays also. ActiveSupport only works for Hashes.
|
25
|
-
def stringify_keys!(data)
|
26
|
-
case data
|
27
|
-
when Array
|
28
|
-
data.map! { |i| stringify_keys!(i) }
|
29
|
-
when Hash
|
30
|
-
data.deep_transform_keys! { |k| k.to_s }
|
31
|
-
else
|
32
|
-
data # do not transform
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
25
|
# Remove items with nil value automatically
|
37
26
|
def clean(data)
|
38
|
-
Squeezer.new(data).squeeze
|
27
|
+
Lono::Template::Strategy::Dsl::Builder::Squeezer.new(data).squeeze
|
39
28
|
end
|
40
29
|
end
|
41
30
|
end
|
data/lib/lono/template/{dsl/builder/section_methods.rb → strategy/dsl/builder/section/methods.rb}
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Organize core section method syntax here
|
2
|
-
|
3
|
-
module
|
2
|
+
module Lono::Template::Strategy::Dsl::Builder::Section
|
3
|
+
module Methods
|
4
4
|
def aws_template_format_version(version_date)
|
5
5
|
@cfn["AWSTemplateFormatVersion"] = version_date
|
6
6
|
end
|
@@ -22,6 +22,13 @@ class Lono::Template::Dsl::Builder
|
|
22
22
|
@cfn["Parameters"] ||= {}
|
23
23
|
param = Parameter.new(@blueprint, definition)
|
24
24
|
@cfn["Parameters"].merge!(param.template)
|
25
|
+
|
26
|
+
# Additional decorations
|
27
|
+
param.group_label = @group_label
|
28
|
+
@parameters << param # register for to build Metadata Interface later
|
29
|
+
if param.conditional
|
30
|
+
condition("Has#{param.name}", not!(equals(ref(param.name), "")))
|
31
|
+
end
|
25
32
|
end
|
26
33
|
|
27
34
|
def mapping(*definition)
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Implements:
|
2
|
+
#
|
3
|
+
# template - uses @definition to build a CloudFormation template section
|
4
|
+
#
|
5
|
+
module Lono::Template::Strategy::Dsl::Builder::Section
|
6
|
+
class Parameter < Base
|
7
|
+
attr_accessor :group_label
|
8
|
+
attr_reader :conditional, :label
|
9
|
+
|
10
|
+
def template
|
11
|
+
camelize(add_required(track_label(track_conditional(standarize(@definition)))))
|
12
|
+
end
|
13
|
+
|
14
|
+
# Type is the only required property: https://amzn.to/2x8W5aD
|
15
|
+
def standarize(definition)
|
16
|
+
first, second, third = definition
|
17
|
+
if definition.size == 1 && first.is_a?(Hash) # long form
|
18
|
+
first # pass through
|
19
|
+
elsif definition.size == 2 && second.is_a?(Hash) # medium form - 1
|
20
|
+
logical_id, properties = first, second
|
21
|
+
{ logical_id => properties }
|
22
|
+
elsif definition.size == 3 && !second.is_a?(Hash) && third.is_a?(Hash) # medium form variant - 2
|
23
|
+
third[:Default] = second # probably a String, Integer, or Float
|
24
|
+
logical_id, properties = first, third
|
25
|
+
{ logical_id => properties }
|
26
|
+
elsif (definition.size == 2 && valid_value?(second)) || # short form
|
27
|
+
definition.size == 1
|
28
|
+
logical_id = first
|
29
|
+
properties = valid_value?(second) ? { Default: second } : {}
|
30
|
+
{ logical_id => properties }
|
31
|
+
else # I dont know what form
|
32
|
+
raise "Invalid form provided. definition #{definition.inspect}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_required(attributes)
|
37
|
+
properties = attributes.values.first
|
38
|
+
properties["Type"] ||= 'String'
|
39
|
+
attributes
|
40
|
+
end
|
41
|
+
|
42
|
+
def valid_value?(o)
|
43
|
+
o.is_a?(Float) || o.is_a?(Integer) || o.is_a?(String) || o.is_a?(TrueClass) || o.is_a?(FalseClass)
|
44
|
+
end
|
45
|
+
|
46
|
+
def track_conditional(attributes)
|
47
|
+
properties = attributes.values.first
|
48
|
+
@conditional ||= properties[:Conditional] # flag for later
|
49
|
+
properties.delete(:Conditional) # remove property, it's not a real property, used to flag conditional parameters
|
50
|
+
# Ensure default
|
51
|
+
if @conditional
|
52
|
+
defaults = { Default: "" }
|
53
|
+
properties.reverse_merge!(defaults)
|
54
|
+
end
|
55
|
+
attributes
|
56
|
+
end
|
57
|
+
|
58
|
+
def track_label(attributes)
|
59
|
+
properties = attributes.values.first
|
60
|
+
@label ||= properties[:Label] # flag for later
|
61
|
+
properties.delete(:Label) # remove property, it's not a real property, used to build metadata interface
|
62
|
+
attributes
|
63
|
+
end
|
64
|
+
|
65
|
+
def name
|
66
|
+
template.keys.first # logical_id or name
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Lono::Template::Strategy::Dsl::Builder
|
2
|
+
module Stringify
|
3
|
+
# Accounts for Arrays also. ActiveSupport only works for Hashes.
|
4
|
+
def stringify!(data)
|
5
|
+
case data
|
6
|
+
when Array
|
7
|
+
data.map! { |i| stringify!(i) }
|
8
|
+
when Hash
|
9
|
+
data.deep_transform_keys! { |k| k.to_s }
|
10
|
+
else
|
11
|
+
data # do not transform
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
# Encapsulates syntax methods so they can be included in both the Builder and Context scope
|
2
|
-
class Lono::Template::Dsl::Builder
|
2
|
+
class Lono::Template::Strategy::Dsl::Builder
|
3
3
|
module Syntax
|
4
4
|
include Fn
|
5
5
|
include Lono::Template::Evaluate
|
6
|
-
include
|
6
|
+
include Section::Methods
|
7
|
+
include Section::Extensions
|
7
8
|
include Helpers # built-in helpers
|
8
9
|
end
|
9
10
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
class Lono::Template::Strategy::Dsl::Finalizer
|
2
|
+
class ParameterGroups
|
3
|
+
extend Memoist
|
4
|
+
include Lono::Template::Strategy::Dsl::Builder::Stringify
|
5
|
+
|
6
|
+
def initialize(cfn, parameters)
|
7
|
+
@cfn, @parameters = cfn, parameters
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
return @cfn if parameter_groups.empty?
|
12
|
+
@cfn["Metadata"] ||= {}
|
13
|
+
@cfn["Metadata"]["AWS::CloudFormation::Interface"] = stringify!(interface)
|
14
|
+
@cfn
|
15
|
+
end
|
16
|
+
|
17
|
+
def interface
|
18
|
+
interface = {}
|
19
|
+
parameter_groups.each do |group_label, parameters|
|
20
|
+
group = {
|
21
|
+
Label: { default: group_label},
|
22
|
+
Parameters: parameters,
|
23
|
+
}
|
24
|
+
interface[:ParameterGroups] ||= []
|
25
|
+
interface[:ParameterGroups] << group
|
26
|
+
end
|
27
|
+
parameter_labels.each do |name, label|
|
28
|
+
l = { name => { default: label } }
|
29
|
+
interface[:ParameterLabels] ||= {}
|
30
|
+
interface[:ParameterLabels].merge!(l)
|
31
|
+
end
|
32
|
+
interface
|
33
|
+
end
|
34
|
+
|
35
|
+
def parameter_groups
|
36
|
+
parameter_groups = {}
|
37
|
+
@parameters.each do |p|
|
38
|
+
next unless p.group_label
|
39
|
+
parameter_groups[p.group_label] ||= []
|
40
|
+
parameter_groups[p.group_label] << p.name
|
41
|
+
end
|
42
|
+
parameter_groups
|
43
|
+
end
|
44
|
+
memoize :parameter_groups
|
45
|
+
|
46
|
+
def parameter_labels
|
47
|
+
parameter_labels = {}
|
48
|
+
@parameters.each do |p|
|
49
|
+
next unless p.label
|
50
|
+
parameter_labels[p.name] = p.label
|
51
|
+
end
|
52
|
+
parameter_labels
|
53
|
+
end
|
54
|
+
memoize :parameter_labels
|
55
|
+
end
|
56
|
+
end
|