lono 2.1.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +16 -284
- data/lib/lono.rb +6 -0
- data/lib/lono/cfn.rb +5 -0
- data/lib/lono/cfn/base.rb +86 -9
- data/lib/lono/cfn/create.rb +27 -2
- data/lib/lono/cfn/help.rb +12 -12
- data/lib/lono/cfn/preview.rb +12 -11
- data/lib/lono/cfn/update.rb +3 -2
- data/lib/lono/default/settings.yml +13 -0
- data/lib/lono/env.rb +11 -0
- data/lib/lono/param.rb +1 -1
- data/lib/lono/param/generator.rb +144 -22
- data/lib/lono/settings.rb +28 -0
- data/lib/lono/template.rb +13 -2
- data/lib/lono/template/aws_services.rb +7 -0
- data/lib/lono/template/dsl.rb +24 -33
- data/lib/lono/template/helpers.rb +144 -0
- data/lib/lono/template/template.rb +69 -68
- data/lib/lono/template/upload.rb +75 -0
- data/lib/lono/version.rb +1 -1
- data/lib/starter_projects/json_project/config/{lono.rb → templates/base/blog.rb} +3 -3
- data/lib/starter_projects/{yaml_project/config/lono/api.rb → json_project/config/templates/base/stacks.rb} +9 -9
- data/lib/starter_projects/json_project/templates/{db.json.erb → db.json} +1 -1
- data/lib/starter_projects/json_project/templates/partial/{host_record.json.erb → host_record.json} +0 -0
- data/lib/starter_projects/json_project/templates/partial/{server.json.erb → server.json} +2 -2
- data/lib/starter_projects/json_project/templates/user_data/{app.sh.erb → app.sh} +0 -0
- data/lib/starter_projects/json_project/templates/user_data/{db.sh.erb → db.sh} +0 -0
- data/lib/starter_projects/json_project/templates/user_data/{db2.sh.erb → db2.sh} +0 -0
- data/lib/starter_projects/json_project/templates/user_data/{ruby_script.rb.erb → ruby_script.rb} +0 -0
- data/lib/starter_projects/json_project/templates/{web.json.erb → web.json} +2 -2
- data/lib/starter_projects/yaml_project/config/{lono.rb → templates/base/blog.rb} +4 -8
- data/lib/starter_projects/{json_project/config/lono/api.rb → yaml_project/config/templates/base/stacks.rb} +11 -13
- data/lib/starter_projects/yaml_project/config/templates/prod/stacks.rb +1 -0
- data/lib/starter_projects/yaml_project/config/templates/stag/stacks.rb +1 -0
- data/lib/starter_projects/yaml_project/config/variables/base/variables.rb +4 -0
- data/lib/starter_projects/yaml_project/config/variables/prod/variables.rb +1 -0
- data/lib/starter_projects/yaml_project/config/variables/stag/variables.rb +1 -0
- data/lib/starter_projects/yaml_project/helpers/my_custom_helper.rb +17 -0
- data/lib/starter_projects/yaml_project/params/{api-web-prod.txt → base/api-web-prod.txt} +0 -0
- data/lib/starter_projects/yaml_project/params/{example.txt → base/example.txt} +0 -0
- data/lib/starter_projects/yaml_project/params/prod/example.txt +1 -0
- data/lib/starter_projects/yaml_project/params/stag/example.txt +1 -0
- data/lib/starter_projects/yaml_project/templates/{db.yml.erb → db.yml} +1 -1
- data/lib/starter_projects/yaml_project/templates/{example.yml.erb → example.yml} +0 -0
- data/lib/starter_projects/yaml_project/templates/partial/{host_record.yml.erb → host_record.yml} +0 -0
- data/lib/starter_projects/yaml_project/templates/partial/{server.yml.erb → server.yml} +0 -0
- data/lib/starter_projects/yaml_project/templates/partial/user_data/{bootstrap.sh.erb → bootstrap.sh} +0 -0
- data/lib/starter_projects/yaml_project/templates/{web.yml.erb → web.yml} +2 -2
- data/lono.gemspec +1 -0
- data/spec/fixtures/params/baseonly/params/base/network.txt +1 -0
- data/spec/fixtures/params/envonly/params/prod/network.txt +1 -0
- data/spec/fixtures/params/overlay/params/base/network.txt +1 -0
- data/spec/fixtures/params/overlay/params/prod/network.txt +1 -0
- data/spec/lib/lono/new_spec.rb +1 -1
- data/spec/lib/lono/param/generator_spec.rb +34 -0
- data/spec/lib/lono/template/dsl_spec.rb +1 -1
- data/spec/lib/lono/template_spec.rb +5 -0
- metadata +60 -22
data/lib/lono/cfn/create.rb
CHANGED
@@ -26,9 +26,34 @@ class Lono::Cfn::Create < Lono::Cfn::Base
|
|
26
26
|
cfn.create_stack(
|
27
27
|
stack_name: @stack_name,
|
28
28
|
template_body: template_body,
|
29
|
-
parameters: params
|
30
|
-
|
29
|
+
parameters: params,
|
30
|
+
capabilities: capabilities, # ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
|
31
|
+
disable_rollback: !@options[:rollback],
|
31
32
|
)
|
32
33
|
puts message unless @options[:mute]
|
33
34
|
end
|
35
|
+
|
36
|
+
# Appends a short random string at the end of a stack name.
|
37
|
+
# Later we will strip this same random string from the template name.
|
38
|
+
# Very makes it convenient. We can just type:
|
39
|
+
#
|
40
|
+
# lono cfn create main --randomize-stack-name
|
41
|
+
#
|
42
|
+
# instead of:
|
43
|
+
#
|
44
|
+
# lono cfn create main-[RANDOM] --template main
|
45
|
+
#
|
46
|
+
# The randomize_stack_name can be specified at the CLI but can also be saved as a
|
47
|
+
# preference.
|
48
|
+
#
|
49
|
+
# It is not a default setting because it might confuse new lono users.
|
50
|
+
def randomize(stack_name)
|
51
|
+
if randomize_stack_name?
|
52
|
+
random = (0...3).map { (65 + rand(26)).chr }.join.downcase # Ex: jhx
|
53
|
+
[stack_name, random].join('-')
|
54
|
+
else
|
55
|
+
stack_name
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
34
59
|
end
|
data/lib/lono/cfn/help.rb
CHANGED
@@ -12,17 +12,17 @@ The above command will generate and use the template in output/my-stack.json and
|
|
12
12
|
|
13
13
|
Here are examples of overriding the template and params name conventions.
|
14
14
|
|
15
|
-
$ lono cfn create my-stack --template
|
15
|
+
$ lono cfn create my-stack --template different1
|
16
16
|
|
17
|
-
The template
|
17
|
+
The template used is output/different1.json and the parameters used is output/params/prod/different1.json.
|
18
18
|
|
19
|
-
$ lono cfn create my-stack --params
|
19
|
+
$ lono cfn create my-stack --params different2
|
20
20
|
|
21
|
-
The template
|
21
|
+
The template used is output/my-stack.json and the parameters used is output/params/prod/different2.json.
|
22
22
|
|
23
|
-
$ lono cfn create my-stack --template
|
23
|
+
$ lono cfn create my-stack --template different3 --params different4
|
24
24
|
|
25
|
-
The template
|
25
|
+
The template used is output/different3.json and the parameters used is output/params/prod/different4.json.
|
26
26
|
|
27
27
|
EOL
|
28
28
|
end
|
@@ -39,17 +39,17 @@ The above command will generate and use the template in output/my-stack.json and
|
|
39
39
|
|
40
40
|
Here are examples of overriding the template and params name conventions.
|
41
41
|
|
42
|
-
$ lono cfn update my-stack --template
|
42
|
+
$ lono cfn update my-stack --template different1
|
43
43
|
|
44
|
-
The template
|
44
|
+
The template used is output/different1.json and the parameters used is output/params/prod/different1.json.
|
45
45
|
|
46
|
-
$ lono cfn update my-stack --params
|
46
|
+
$ lono cfn update my-stack --params different2
|
47
47
|
|
48
|
-
The template
|
48
|
+
The template used is output/my-stack.json and the parameters used is output/params/prod/different2.json.
|
49
49
|
|
50
|
-
$ lono cfn update my-stack --template
|
50
|
+
$ lono cfn update my-stack --template different3 --params different4
|
51
51
|
|
52
|
-
The template
|
52
|
+
The template used is output/different3.json and the parameters used is output/params/prod/different4.json.
|
53
53
|
|
54
54
|
EOL
|
55
55
|
end
|
data/lib/lono/cfn/preview.rb
CHANGED
@@ -23,22 +23,23 @@ class Lono::Cfn::Preview < Lono::Cfn::Base
|
|
23
23
|
exist_unless_updatable(stack_status(@stack_name))
|
24
24
|
|
25
25
|
template_body = IO.read(@template_path)
|
26
|
-
|
26
|
+
begin
|
27
27
|
cfn.create_change_set(
|
28
28
|
change_set_name: change_set_name,
|
29
29
|
stack_name: @stack_name,
|
30
30
|
template_body: template_body,
|
31
|
-
parameters: params
|
31
|
+
parameters: params,
|
32
|
+
capabilities: capabilities, # ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
|
32
33
|
)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
35
|
+
if e.message =~ /^Parameters: /
|
36
|
+
puts "Error creating CloudFormation preview because invalid CloudFormation parameters. Full error message:".colorize(:red)
|
37
|
+
puts e.message
|
38
|
+
quit(1)
|
39
|
+
else
|
40
|
+
raise
|
41
|
+
end
|
42
|
+
end
|
42
43
|
true
|
43
44
|
end
|
44
45
|
|
data/lib/lono/cfn/update.rb
CHANGED
@@ -38,8 +38,9 @@ class Lono::Cfn::Update < Lono::Cfn::Base
|
|
38
38
|
cfn.update_stack(
|
39
39
|
stack_name: @stack_name,
|
40
40
|
template_body: template_body,
|
41
|
-
parameters: params
|
42
|
-
|
41
|
+
parameters: params,
|
42
|
+
capabilities: capabilities, # ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
|
43
|
+
disable_rollback: !@options[:rollback],
|
43
44
|
)
|
44
45
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
45
46
|
puts "ERROR: #{e.message}".red
|
@@ -0,0 +1,13 @@
|
|
1
|
+
aws_profile_lono_env_map:
|
2
|
+
default: prod
|
3
|
+
# More examples:
|
4
|
+
# aws_profile1: prod
|
5
|
+
# aws_profile2: stag
|
6
|
+
# aws_profile3: dev
|
7
|
+
s3:
|
8
|
+
path:
|
9
|
+
default: # default is nil
|
10
|
+
# You can specify different buckets for different LONO_ENV. Examples:
|
11
|
+
# prod: s3://mybucket/templates/storage/path
|
12
|
+
# stag: s3://mybucket/templates/storage/path
|
13
|
+
randomize_stack_name: false
|
data/lib/lono/env.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
class Lono::Env
|
2
|
+
def self.setup!(project_root='.')
|
3
|
+
settings = Lono::Settings.new(project_root).data
|
4
|
+
map = settings['aws_profile_lono_env_map']
|
5
|
+
|
6
|
+
lono_env = map[ENV['AWS_PROFILE']] || map['default'] || 'prod' # defaults to prod
|
7
|
+
lono_env = ENV['LONO_ENV'] if ENV['LONO_ENV'] # highest precedence
|
8
|
+
|
9
|
+
Kernel.const_set(:LONO_ENV, lono_env)
|
10
|
+
end
|
11
|
+
end
|
data/lib/lono/param.rb
CHANGED
@@ -9,7 +9,7 @@ class Lono::Param < Lono::Command
|
|
9
9
|
class_option :mute, type: :boolean
|
10
10
|
class_option :project_root, desc: "project root to use", default: '.'
|
11
11
|
|
12
|
-
desc "generate
|
12
|
+
desc "generate", "generate all parameter files to json format"
|
13
13
|
long_desc Help.generate
|
14
14
|
option :path, desc: "Name of the source that maps to the params txt file. name -> params/NAME.txt. Use this to override the params/NAME.txt convention"
|
15
15
|
def generate
|
data/lib/lono/param/generator.rb
CHANGED
@@ -2,44 +2,134 @@ class Lono::Param::Generator
|
|
2
2
|
def self.generate_all(options)
|
3
3
|
puts "Generating params files"
|
4
4
|
project_root = options[:project_root] || '.'
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
|
6
|
+
params = param_names(project_root, "base") + param_names(project_root, LONO_ENV)
|
7
|
+
params.uniq.each do |name|
|
8
8
|
param = Lono::Param::Generator.new(name, options)
|
9
9
|
param.generate
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
# Returns param names
|
14
|
+
# Example:
|
15
|
+
# Given params:
|
16
|
+
# params/base/a.txt params/base/b.txt params/base/c.txt
|
17
|
+
# Returns:
|
18
|
+
# param_names("base") => ["a", "b", "c"]
|
19
|
+
def self.param_names(project_root, folder)
|
20
|
+
base_folder = "#{project_root}/params/#{folder}" # Example: "./params/base"
|
21
|
+
Dir.glob("#{base_folder}/**/*.txt").map do |path|
|
22
|
+
path.sub("#{base_folder}/", '').sub('.txt','')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
13
26
|
def initialize(name, options)
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
27
|
+
@_name = "#{LONO_ENV}/#{name}"
|
28
|
+
@_options = options
|
29
|
+
@_project_root = options[:project_root] || '.'
|
30
|
+
@_env_path = options[:path] || "#{@_project_root}/params/#{@_name}.txt"
|
31
|
+
@_base_path = @_env_path.sub("/#{LONO_ENV}/", "/base/")
|
18
32
|
end
|
19
33
|
|
20
34
|
def generate
|
21
35
|
# useful option for lono cfn
|
22
|
-
return if @
|
36
|
+
return if @_options[:allow_no_file] && !source_exist?
|
23
37
|
|
24
|
-
if
|
25
|
-
contents =
|
38
|
+
if source_exist?
|
39
|
+
contents = overlay_sources
|
26
40
|
data = convert_to_cfn_format(contents)
|
27
41
|
json = JSON.pretty_generate(data)
|
28
42
|
write_output(json)
|
29
|
-
|
43
|
+
# Example: @_name = stag/ecs/private
|
44
|
+
# pretty_name = ecs/private
|
45
|
+
pretty_name = @_name.sub("#{LONO_ENV}/", '')
|
46
|
+
puts "Params file generated for #{pretty_name} at #{output_path}" unless @_options[:mute]
|
30
47
|
else
|
31
|
-
puts "#{@
|
48
|
+
puts "#{@_base_path} or #{@_env_path} could not be found? Are you sure it exist?"
|
32
49
|
exit 1
|
33
50
|
end
|
51
|
+
json
|
52
|
+
end
|
53
|
+
|
54
|
+
# Reads both the base source and env source and overlay the two
|
55
|
+
# Example 1:
|
56
|
+
# params/base/mystack.txt - base path
|
57
|
+
# params/prod/mystack.txt - env path
|
58
|
+
#
|
59
|
+
# the base/mystack.txt gets combined with the prod/mystack.txt
|
60
|
+
# it produces a final prod/mystack.txt
|
61
|
+
#
|
62
|
+
# Example 2:
|
63
|
+
# params/base/mystack.txt - base path
|
64
|
+
#
|
65
|
+
# the base/mystack.txt is used to produced a prod/mystack.txt
|
66
|
+
#
|
67
|
+
# Example 3:
|
68
|
+
# params/prod/mystack.txt - env path
|
69
|
+
#
|
70
|
+
# the prod/mystack.txt is used to produced a prod/mystack.txt
|
71
|
+
def overlay_sources
|
72
|
+
contents = []
|
73
|
+
contents << process_erb(@_base_path)
|
74
|
+
contents << process_erb(@_env_path)
|
75
|
+
contents.compact.join("\n")
|
76
|
+
end
|
77
|
+
|
78
|
+
def process_erb(path)
|
79
|
+
if File.exist?(path)
|
80
|
+
template = IO.read(path)
|
81
|
+
erb_result(path, template)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def erb_result(path, template)
|
86
|
+
load_variables
|
87
|
+
begin
|
88
|
+
ERB.new(template, nil, "-").result(binding)
|
89
|
+
rescue Exception => e
|
90
|
+
puts e
|
91
|
+
puts e.backtrace if ENV['DEBUG']
|
92
|
+
|
93
|
+
# how to know where ERB stopped? - https://www.ruby-forum.com/topic/182051
|
94
|
+
# syntax errors have the (erb):xxx info in e.message
|
95
|
+
# undefined variables have (erb):xxx info in e.backtrac
|
96
|
+
error_info = e.message.split("\n").grep(/\(erb\)/)[0]
|
97
|
+
error_info ||= e.backtrace.grep(/\(erb\)/)[0]
|
98
|
+
raise unless error_info # unable to find the (erb):xxx: error line
|
99
|
+
line = error_info.split(':')[1].to_i
|
100
|
+
puts "Error evaluating ERB template on line #{line.to_s.colorize(:red)} of: #{path.sub(/^\.\//, '').colorize(:green)}"
|
101
|
+
|
102
|
+
template_lines = template.split("\n")
|
103
|
+
context = 5 # lines of context
|
104
|
+
top, bottom = [line-context-1, 0].max, line+context-1
|
105
|
+
spacing = template_lines.size.to_s.size
|
106
|
+
template_lines[top..bottom].each_with_index do |line_content, index|
|
107
|
+
line_number = top+index+1
|
108
|
+
if line_number == line
|
109
|
+
printf("%#{spacing}d %s\n".colorize(:red), line_number, line_content)
|
110
|
+
else
|
111
|
+
printf("%#{spacing}d %s\n", line_number, line_content)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
exit 1 unless ENV['TEST']
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# Checks both base and source path for existing of the param file.
|
119
|
+
# Example:
|
120
|
+
# params/base/mystack.txt - base path
|
121
|
+
# params/prod/mystack.txt - source path
|
122
|
+
def source_exist?
|
123
|
+
File.exist?(@_base_path) || File.exist?(@_env_path)
|
34
124
|
end
|
35
125
|
|
36
126
|
# useful for when calling CloudFormation via the aws-sdk gem
|
37
|
-
def params
|
127
|
+
def params(casing = :underscore)
|
38
128
|
# useful option for lono cfn
|
39
|
-
return {} if @
|
129
|
+
return {} if @_options[:allow_no_file] && !source_exist?
|
40
130
|
|
41
|
-
contents =
|
42
|
-
convert_to_cfn_format(contents,
|
131
|
+
contents = overlay_sources
|
132
|
+
convert_to_cfn_format(contents, casing)
|
43
133
|
end
|
44
134
|
|
45
135
|
def parse_contents(contents)
|
@@ -55,18 +145,27 @@ class Lono::Param::Generator
|
|
55
145
|
|
56
146
|
def convert_to_cfn_format(contents, casing=:camel)
|
57
147
|
lines = parse_contents(contents)
|
58
|
-
|
148
|
+
|
149
|
+
# First use a Hash structure so that overlay env files will override
|
150
|
+
# the base param file.
|
151
|
+
data = {}
|
59
152
|
lines.each do |line|
|
60
153
|
key,value = line.strip.split("=").map {|x| x.strip}
|
154
|
+
data[key] = value
|
155
|
+
end
|
156
|
+
|
157
|
+
# Now build up the aws json format for parameters
|
158
|
+
params = []
|
159
|
+
data.each do |key,value|
|
61
160
|
param = if value == "use_previous_value"
|
62
161
|
{
|
63
|
-
ParameterKey: key,
|
64
|
-
UsePreviousValue: true
|
162
|
+
"ParameterKey": key,
|
163
|
+
"UsePreviousValue": true
|
65
164
|
}
|
66
165
|
elsif value
|
67
166
|
{
|
68
|
-
ParameterKey: key,
|
69
|
-
ParameterValue: value
|
167
|
+
"ParameterKey": key,
|
168
|
+
"ParameterValue": value
|
70
169
|
}
|
71
170
|
end
|
72
171
|
if param
|
@@ -78,7 +177,7 @@ class Lono::Param::Generator
|
|
78
177
|
end
|
79
178
|
|
80
179
|
def output_path
|
81
|
-
"#{@
|
180
|
+
"#{@_project_root}/output/params/#{@_name}.json".sub(/\.\//,'')
|
82
181
|
end
|
83
182
|
|
84
183
|
def write_output(json)
|
@@ -87,4 +186,27 @@ class Lono::Param::Generator
|
|
87
186
|
IO.write(output_path, json)
|
88
187
|
end
|
89
188
|
|
189
|
+
|
190
|
+
def load_variables
|
191
|
+
load_variables_folder("base")
|
192
|
+
load_variables_folder(LONO_ENV)
|
193
|
+
end
|
194
|
+
|
195
|
+
# Load the variables defined in config/variables/* to make available the params/*.txt files
|
196
|
+
#
|
197
|
+
# Example:
|
198
|
+
#
|
199
|
+
# `config/variables/base/variables.rb`:
|
200
|
+
# @ami = 123
|
201
|
+
#
|
202
|
+
# `params/ecs/private.txt`:
|
203
|
+
# AmiId=<%= @ami %>
|
204
|
+
#
|
205
|
+
def load_variables_folder(folder)
|
206
|
+
paths = Dir.glob("#{@_project_root}/config/variables/#{folder}/**/*")
|
207
|
+
paths.select{ |e| File.file? e }.each do |path|
|
208
|
+
instance_eval(IO.read(path))
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
90
212
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Lono::Settings
|
2
|
+
def initialize(project_root=nil)
|
3
|
+
@project_root = project_root || '.'
|
4
|
+
end
|
5
|
+
|
6
|
+
def data
|
7
|
+
return @settings_yaml if @settings_yaml
|
8
|
+
|
9
|
+
project_file = "#{@project_root}/.lono/settings.yml"
|
10
|
+
project = File.exist?(project_file) ? YAML.load_file(project_file) : {}
|
11
|
+
|
12
|
+
user_file = "#{ENV['HOME']}/.lono/settings.yml"
|
13
|
+
user = File.exist?(user_file) ? YAML.load_file(user_file) : {}
|
14
|
+
|
15
|
+
default_file = File.expand_path("../default/settings.yml", __FILE__)
|
16
|
+
default = YAML.load_file(default_file)
|
17
|
+
|
18
|
+
@settings_yaml = default.merge(user.merge(project))
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def s3_path
|
23
|
+
s3 = data['s3']
|
24
|
+
# s3['default']['path'] - key will always exist because of default lono/settings.yml
|
25
|
+
# defauult value is nil though
|
26
|
+
s3['path'][LONO_ENV] || s3['path']['default']
|
27
|
+
end
|
28
|
+
end
|
data/lib/lono/template.rb
CHANGED
@@ -3,18 +3,29 @@ require_relative "command"
|
|
3
3
|
|
4
4
|
class Lono::Template < Lono::Command
|
5
5
|
autoload :Help, 'lono/template/help'
|
6
|
+
autoload :Helpers, 'lono/template/helpers'
|
6
7
|
autoload :Bashify, 'lono/template/bashify'
|
7
8
|
autoload :DSL, 'lono/template/dsl'
|
8
9
|
autoload :Template, 'lono/template/template'
|
10
|
+
autoload :Upload, 'lono/template/upload'
|
11
|
+
autoload :AwsServices, 'lono/template/aws_services'
|
12
|
+
|
13
|
+
class_option :quiet, type: :boolean, aliases: "-q", desc: "silence the output"
|
14
|
+
class_option :noop, type: :boolean, desc: "noop mode, do nothing destructive"
|
9
15
|
|
10
16
|
desc "generate", "Generate the CloudFormation templates"
|
11
17
|
Help.generate
|
12
18
|
option :clean, type: :boolean, aliases: "-c", desc: "remove all output files before generating"
|
13
19
|
option :project_root, default: ".", aliases: "-r", desc: "project root"
|
14
|
-
option :quiet, type: :boolean, aliases: "-q", desc: "silence the output"
|
15
20
|
option :pretty, type: :boolean, default: true, desc: "json pretty the output. only applies with json format"
|
16
21
|
def generate
|
17
|
-
|
22
|
+
DSL.new(options.clone).run
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "upload", "Uploads templates to configured s3 folder"
|
26
|
+
option :project_root, default: ".", aliases: "-r", desc: "project root"
|
27
|
+
def upload
|
28
|
+
Upload.new(options.clone).run
|
18
29
|
end
|
19
30
|
|
20
31
|
desc "bashify [URL-OR-PATH]", "Convert the UserData section of an existing CloudFormation Template to a starter bash script that is compatiable with lono"
|