lono 3.5.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +15 -4
- data/.rspec +1 -0
- data/CHANGELOG.md +15 -1
- data/Gemfile +3 -3
- data/Guardfile +17 -8
- data/{LICENSE → LICENSE.txt} +1 -1
- data/README.md +20 -12
- data/Rakefile +1 -2
- data/{bin → exe}/lono +1 -0
- data/lib/lono.rb +12 -9
- data/lib/lono/cfn.rb +7 -9
- data/lib/lono/cfn/{aws_services.rb → aws_service.rb} +1 -1
- data/lib/lono/cfn/base.rb +41 -38
- data/lib/lono/cfn/create.rb +6 -2
- data/lib/lono/cfn/delete.rb +2 -2
- data/lib/lono/cfn/diff.rb +1 -1
- data/lib/lono/cfn/preview.rb +26 -15
- data/lib/lono/cfn/update.rb +11 -9
- data/lib/lono/cfn/util.rb +3 -3
- data/lib/lono/clean.rb +1 -1
- data/lib/lono/cli.rb +71 -39
- data/lib/lono/command.rb +42 -18
- data/lib/lono/completer.rb +162 -0
- data/lib/lono/completer/script.rb +6 -0
- data/lib/lono/completer/script.sh +10 -0
- data/lib/lono/completion.rb +15 -0
- data/lib/lono/core.rb +23 -9
- data/lib/lono/core/config.rb +20 -0
- data/lib/lono/default/settings.yml +33 -13
- data/lib/lono/help.rb +6 -79
- data/lib/lono/help/cfn.md +6 -0
- data/lib/lono/help/cfn/create.md +22 -0
- data/lib/lono/help/cfn/delete.md +5 -0
- data/lib/lono/help/cfn/diff.md +5 -0
- data/lib/lono/help/cfn/download.md +5 -0
- data/lib/lono/help/cfn/preview.md +11 -0
- data/lib/lono/help/cfn/update.md +21 -0
- data/lib/lono/help/completion.md +22 -0
- data/lib/lono/help/completion_script.md +3 -0
- data/lib/lono/help/generate.md +7 -0
- data/lib/lono/help/hello.md +5 -0
- data/lib/lono/help/import.md +7 -0
- data/lib/lono/help/inspect.md +4 -0
- data/lib/lono/help/inspect/depends.md +3 -0
- data/lib/lono/help/inspect/summary.md +3 -0
- data/lib/lono/help/new.md +8 -0
- data/lib/lono/help/param.md +3 -0
- data/lib/lono/{param/help.rb → help/param/generate.md} +1 -9
- data/lib/lono/help/script/build.md +5 -0
- data/lib/lono/help/script/upload.md +8 -0
- data/lib/lono/help/template.md +4 -0
- data/lib/lono/help/template/bashify.md +4 -0
- data/lib/lono/help/template/generate.md +7 -0
- data/lib/lono/help/user_data.md +3 -0
- data/lib/lono/importer.rb +43 -20
- data/lib/lono/inspector.rb +2 -19
- data/lib/lono/inspector/base.rb +2 -2
- data/lib/lono/inspector/{depends.rb → graph.rb} +3 -3
- data/lib/lono/inspector/summary.rb +1 -1
- data/lib/lono/new.rb +79 -26
- data/lib/lono/new/helper.rb +16 -0
- data/lib/lono/new/message.rb +35 -0
- data/lib/lono/param.rb +1 -2
- data/lib/lono/param/generator.rb +34 -86
- data/lib/lono/project_checker.rb +35 -40
- data/lib/lono/script.rb +19 -0
- data/lib/lono/script/base.rb +9 -0
- data/lib/lono/script/build.rb +73 -0
- data/lib/lono/script/upload.rb +81 -0
- data/lib/lono/sequence.rb +33 -0
- data/lib/lono/setting.rb +83 -0
- data/lib/lono/template.rb +8 -9
- data/lib/lono/template/{aws_services.rb → aws_service.rb} +1 -1
- data/lib/lono/template/context.rb +73 -0
- data/lib/lono/template/dsl.rb +63 -64
- data/lib/lono/template/helper.rb +201 -0
- data/lib/lono/template/template.rb +29 -221
- data/lib/lono/template/upload.rb +41 -33
- data/lib/lono/upgrade4.rb +175 -0
- data/lib/lono/user_data.rb +31 -0
- data/lib/lono/version.rb +1 -1
- data/lib/starter_projects/autoscaling/.gitignore +1 -0
- data/lib/starter_projects/{json_project → autoscaling}/Gemfile +0 -0
- data/lib/starter_projects/{yaml_project → autoscaling}/Guardfile +0 -0
- data/lib/starter_projects/autoscaling/README.md +118 -0
- data/lib/starter_projects/autoscaling/app/definitions/base.rb +2 -0
- data/lib/starter_projects/autoscaling/app/templates/autoscaling.yml +682 -0
- data/lib/starter_projects/autoscaling/config/params/base/autoscaling.txt +6 -0
- data/lib/starter_projects/autoscaling/config/settings.yml +33 -0
- data/lib/starter_projects/ec2/.gitignore +1 -0
- data/lib/starter_projects/{yaml_project → ec2}/Gemfile +0 -0
- data/lib/starter_projects/{json_project → ec2}/Guardfile +1 -1
- data/lib/starter_projects/ec2/README.md +86 -0
- data/lib/starter_projects/ec2/app/definitions/base.rb +2 -0
- data/lib/starter_projects/ec2/app/definitions/development.rb +1 -0
- data/lib/starter_projects/ec2/app/definitions/production.rb +1 -0
- data/lib/starter_projects/{yaml_project → ec2/app}/helpers/my_custom_helper.rb +0 -0
- data/lib/starter_projects/{json_project/templates/user_data/app.sh → ec2/app/partials/user_data/bootstrap.sh} +1 -2
- data/lib/starter_projects/{yaml_project → ec2/app}/templates/example.yml +0 -0
- data/lib/starter_projects/{json_project/params/base/api-web.txt → ec2/config/params/base/example.txt} +0 -0
- data/lib/starter_projects/ec2/config/params/development/example.txt +3 -0
- data/lib/starter_projects/ec2/config/params/production/example.txt +2 -0
- data/lib/starter_projects/ec2/config/settings.yml +33 -0
- data/lib/starter_projects/ec2/config/variables/base.rb +3 -0
- data/lib/starter_projects/ec2/config/variables/development.rb +2 -0
- data/lib/starter_projects/ec2/config/variables/production.rb +2 -0
- data/lib/starter_projects/ec2/welcome.txt +8 -0
- data/lib/starter_projects/skeleton/.gitignore +1 -0
- data/lib/starter_projects/skeleton/Gemfile +3 -0
- data/lib/starter_projects/skeleton/Guardfile +12 -0
- data/lib/starter_projects/skeleton/README.md +53 -0
- data/{spec/fixtures/my_project/templates/.gitkeep → lib/starter_projects/skeleton/app/definitions/base.rb} +0 -0
- data/lib/starter_projects/skeleton/config/settings.yml +33 -0
- data/lib/starter_projects/skeleton/welcome.txt +7 -0
- data/lono.gemspec +12 -10
- data/spec/fixtures/lono_project/.gitignore +1 -0
- data/spec/fixtures/lono_project/Gemfile +3 -0
- data/spec/fixtures/lono_project/Guardfile +12 -0
- data/spec/fixtures/lono_project/app/definitions/base.rb +10 -0
- data/spec/fixtures/lono_project/app/definitions/base/more.rb +7 -0
- data/spec/fixtures/lono_project/app/definitions/development.rb +1 -0
- data/spec/fixtures/lono_project/app/definitions/production.rb +1 -0
- data/spec/fixtures/lono_project/app/helpers/custom_helper.rb +5 -0
- data/spec/fixtures/lono_project/app/partials/security_group.yml +10 -0
- data/{lib/starter_projects/yaml_project/templates/partial → spec/fixtures/lono_project/app/partials}/user_data/bootstrap.sh +8 -2
- data/spec/fixtures/lono_project/app/templates/example.yml +50 -0
- data/{lib/starter_projects/yaml_project/params/base/api-web-prod.txt → spec/fixtures/lono_project/config/params/base/example.txt} +1 -0
- data/spec/fixtures/lono_project/config/params/development/example.txt +1 -0
- data/spec/fixtures/lono_project/config/params/production/example.txt +1 -0
- data/spec/fixtures/lono_project/config/settings.yml +31 -0
- data/spec/fixtures/lono_project/config/variables/base.rb +3 -0
- data/spec/fixtures/lono_project/config/variables/development.rb +1 -0
- data/spec/fixtures/lono_project/config/variables/production.rb +1 -0
- data/spec/fixtures/params/envonly/params/{prod → development}/network.txt +0 -0
- data/spec/fixtures/params/overlay/params/{prod → development}/network.txt +0 -0
- data/spec/fixtures/raw_templates/aws-waf-security-automations.template +2 -2
- data/spec/lib/lono/cfn_spec.rb +6 -9
- data/spec/lib/lono/cli_spec.rb +44 -0
- data/spec/lib/lono/completion_spec.rb +17 -0
- data/spec/lib/lono/inspect_spec.rb +6 -15
- data/spec/lib/lono/param/generator_spec.rb +45 -26
- data/spec/lib/lono/param_spec.rb +1 -3
- data/spec/lib/lono/setting_spec.rb +47 -0
- data/spec/lib/lono/template/dsl_spec.rb +33 -157
- data/spec/lib/lono/template_spec.rb +4 -16
- data/spec/spec_helper.rb +45 -14
- metadata +168 -82
- data/.coveralls.yml +0 -1
- data/lib/lono/cfn/help.rb +0 -103
- data/lib/lono/current_region.rb +0 -42
- data/lib/lono/inspector/help.rb +0 -21
- data/lib/lono/settings.rb +0 -45
- data/lib/lono/template/help.rb +0 -25
- data/lib/lono/template/helpers.rb +0 -136
- data/lib/starter_projects/json_project/.gitignore +0 -1
- data/lib/starter_projects/json_project/config/templates/base/blog.rb +0 -20
- data/lib/starter_projects/json_project/config/templates/base/stacks.rb +0 -58
- data/lib/starter_projects/json_project/templates/db.json +0 -212
- data/lib/starter_projects/json_project/templates/partial/host_record.json +0 -28
- data/lib/starter_projects/json_project/templates/partial/server.json +0 -45
- data/lib/starter_projects/json_project/templates/user_data/db.sh +0 -39
- data/lib/starter_projects/json_project/templates/user_data/db2.sh +0 -2
- data/lib/starter_projects/json_project/templates/user_data/ruby_script.rb +0 -5
- data/lib/starter_projects/json_project/templates/web.json +0 -386
- data/lib/starter_projects/yaml_project/.gitignore +0 -1
- data/lib/starter_projects/yaml_project/config/templates/base/blog.rb +0 -20
- data/lib/starter_projects/yaml_project/config/templates/base/stacks.rb +0 -56
- data/lib/starter_projects/yaml_project/config/templates/prod/stacks.rb +0 -1
- data/lib/starter_projects/yaml_project/config/templates/stag/stacks.rb +0 -1
- data/lib/starter_projects/yaml_project/config/variables/base/variables.rb +0 -4
- data/lib/starter_projects/yaml_project/config/variables/prod/variables.rb +0 -1
- data/lib/starter_projects/yaml_project/config/variables/stag/variables.rb +0 -1
- data/lib/starter_projects/yaml_project/params/base/example.txt +0 -2
- data/lib/starter_projects/yaml_project/params/prod/example.txt +0 -1
- data/lib/starter_projects/yaml_project/params/stag/example.txt +0 -1
- data/lib/starter_projects/yaml_project/templates/db.yml +0 -148
- data/lib/starter_projects/yaml_project/templates/partial/host_record.yml +0 -14
- data/lib/starter_projects/yaml_project/templates/partial/server.yml +0 -59
- data/lib/starter_projects/yaml_project/templates/web.yml +0 -206
- data/spec/fixtures/my_project/config/templates/base/stacks.rb +0 -3
- data/spec/fixtures/my_project/params/my-stack.txt +0 -3
- data/spec/fixtures/my_project/templates/my-stack.yml +0 -0
- data/spec/lib/lono/new_spec.rb +0 -59
- data/spec/lib/lono/template/template_spec.rb +0 -104
- data/spec/lib/lono_spec.rb +0 -27
data/.coveralls.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
service_name: travis-ci
|
data/lib/lono/cfn/help.rb
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
class Lono::Cfn::Help
|
2
|
-
class << self
|
3
|
-
def create
|
4
|
-
<<-EOL
|
5
|
-
Examples:
|
6
|
-
|
7
|
-
Provided that you are in a lono project and have a `my-stack` lono template definition. To create a stack you can simply run:
|
8
|
-
|
9
|
-
$ lono cfn create my-stack
|
10
|
-
|
11
|
-
The above command will generate and use the template in output/my-stack.json and parameters in params/my-stack.txt. The template by convention defaults to the name of the stack. In turn, the params by convention defaults to the name of the template.
|
12
|
-
|
13
|
-
Here are examples of overriding the template and params name conventions.
|
14
|
-
|
15
|
-
$ lono cfn create my-stack --template different1
|
16
|
-
|
17
|
-
The template used is output/different1.json and the parameters used is output/params/prod/different1.json.
|
18
|
-
|
19
|
-
$ lono cfn create my-stack --params different2
|
20
|
-
|
21
|
-
The template used is output/my-stack.json and the parameters used is output/params/prod/different2.json.
|
22
|
-
|
23
|
-
$ lono cfn create my-stack --template different3 --params different4
|
24
|
-
|
25
|
-
The template used is output/different3.json and the parameters used is output/params/prod/different4.json.
|
26
|
-
|
27
|
-
EOL
|
28
|
-
end
|
29
|
-
|
30
|
-
def update
|
31
|
-
<<-EOL
|
32
|
-
Examples:
|
33
|
-
|
34
|
-
Provided that you are in a lono project and have a `my-stack` lono template definition. To update a stack you can simply run:
|
35
|
-
|
36
|
-
$ lono cfn update my-stack
|
37
|
-
|
38
|
-
The above command will generate and use the template in output/my-stack.json and parameters in params/my-stack.txt. The template by convention defaults to the name of the stack. In turn, the params by convention defaults to the name of the template.
|
39
|
-
|
40
|
-
Here are examples of overriding the template and params name conventions.
|
41
|
-
|
42
|
-
$ lono cfn update my-stack --template different1
|
43
|
-
|
44
|
-
The template used is output/different1.json and the parameters used is output/params/prod/different1.json.
|
45
|
-
|
46
|
-
$ lono cfn update my-stack --params different2
|
47
|
-
|
48
|
-
The template used is output/my-stack.json and the parameters used is output/params/prod/different2.json.
|
49
|
-
|
50
|
-
$ lono cfn update my-stack --template different3 --params different4
|
51
|
-
|
52
|
-
The template used is output/different3.json and the parameters used is output/params/prod/different4.json.
|
53
|
-
|
54
|
-
EOL
|
55
|
-
end
|
56
|
-
|
57
|
-
def delete
|
58
|
-
<<-EOL
|
59
|
-
Examples:
|
60
|
-
|
61
|
-
$ lono cfn delete my-stack
|
62
|
-
|
63
|
-
The above command will delete my-stack.
|
64
|
-
EOL
|
65
|
-
end
|
66
|
-
|
67
|
-
def preview
|
68
|
-
<<-EOL
|
69
|
-
Generates a CloudFormation preview. This is similar to a `terraform plan` or puppet's dry-run mode.
|
70
|
-
|
71
|
-
Example output:
|
72
|
-
|
73
|
-
CloudFormation preview for 'example' stack update. Changes:
|
74
|
-
|
75
|
-
Remove AWS::Route53::RecordSet: DnsRecord testsubdomain.sub.tongueroo.com
|
76
|
-
|
77
|
-
Examples:
|
78
|
-
|
79
|
-
$ lono cfn preview my-stack
|
80
|
-
EOL
|
81
|
-
end
|
82
|
-
|
83
|
-
def diff
|
84
|
-
<<-EOL
|
85
|
-
Displays code diff of the generated CloudFormation template locally vs the existing template on AWS. You can set a desired diff viewer by setting the LONO_CFN_DIFF environment variable.
|
86
|
-
|
87
|
-
Examples:
|
88
|
-
|
89
|
-
$ lono cfn diff my-stack
|
90
|
-
EOL
|
91
|
-
end
|
92
|
-
|
93
|
-
def download
|
94
|
-
<<-EOL
|
95
|
-
Download CloudFormation template from existing template on AWS.
|
96
|
-
|
97
|
-
Examples:
|
98
|
-
|
99
|
-
$ lono cfn download my-stack
|
100
|
-
EOL
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
data/lib/lono/current_region.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'aws-sdk-core'
|
2
|
-
|
3
|
-
module Lono::CurrentRegion
|
4
|
-
def current_region
|
5
|
-
region = Aws.config[:region]
|
6
|
-
region ||= ENV['AWS_REGION']
|
7
|
-
return region if region
|
8
|
-
|
9
|
-
if ENV['AWS_PROFILE']
|
10
|
-
path = "#{ENV['HOME']}/.aws/config"
|
11
|
-
if File.exist?(path)
|
12
|
-
lines = IO.readlines(path)
|
13
|
-
capture_default, capture_current = false, false
|
14
|
-
lines.each do | line|
|
15
|
-
if line.include?('[default]')
|
16
|
-
capture_default = true # next line
|
17
|
-
next
|
18
|
-
end
|
19
|
-
if capture_default && line.match(/region = /)
|
20
|
-
default_region = line.split(' = ').last.strip
|
21
|
-
capture_default = false
|
22
|
-
end
|
23
|
-
|
24
|
-
md = line.match(/\[profile (.*)\]/)
|
25
|
-
if md && md[1] == ENV['AWS_PROFILE']
|
26
|
-
capture_current = true
|
27
|
-
next
|
28
|
-
end
|
29
|
-
if capture_current && line.match(/region = /)
|
30
|
-
region = line.split(' = ').last.strip
|
31
|
-
capture_current = false
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
region ||= default_region
|
37
|
-
return region if region
|
38
|
-
end
|
39
|
-
|
40
|
-
'us-east-1' # default
|
41
|
-
end
|
42
|
-
end
|
data/lib/lono/inspector/help.rb
DELETED
data/lib/lono/settings.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
class Lono::Settings
|
2
|
-
# The options from the files get merged with the following precedence:
|
3
|
-
#
|
4
|
-
# current folder - The current folder’s config/settings.yml values take the highest precedence.
|
5
|
-
# user - The user’s ~/.lono/settings.yml values take the second highest precedence.
|
6
|
-
# default - The default settings bundled with the tool takes the lowest precedence.
|
7
|
-
#
|
8
|
-
# More info: http://lono.cloud/docs/settings/
|
9
|
-
def data
|
10
|
-
return @settings_yaml if @settings_yaml
|
11
|
-
|
12
|
-
project_file = "#{Lono.root}/config/settings.yml"
|
13
|
-
project = File.exist?(project_file) ? YAML.load_file(project_file) : {}
|
14
|
-
|
15
|
-
user_file = "#{ENV['HOME']}/.lono/settings.yml"
|
16
|
-
user = File.exist?(user_file) ? YAML.load_file(user_file) : {}
|
17
|
-
|
18
|
-
default_file = File.expand_path("../default/settings.yml", __FILE__)
|
19
|
-
default = YAML.load_file(default_file)
|
20
|
-
|
21
|
-
@settings_yaml = default.merge(user.merge(project))
|
22
|
-
end
|
23
|
-
|
24
|
-
# Examples:
|
25
|
-
#
|
26
|
-
# Using the Lono.env
|
27
|
-
# s3:
|
28
|
-
# path:
|
29
|
-
# production: s3://infrastructure-prod/cloudformation
|
30
|
-
# staging: s3://infrastructure-dev/cloudformation
|
31
|
-
#
|
32
|
-
# Using the AWS_PROFILE
|
33
|
-
# s3:
|
34
|
-
# path:
|
35
|
-
# my-prod-profile: s3://infrastructure-prod/cloudformation
|
36
|
-
# my-stag-profile: s3://infrastructure-dev/cloudformation
|
37
|
-
#
|
38
|
-
def s3_path
|
39
|
-
s3 = data['s3']
|
40
|
-
s3_path = s3['path']
|
41
|
-
# s3_path['default'] - key will always exist because of default lono/settings.yml
|
42
|
-
# default value is nil though
|
43
|
-
s3_path[ENV['AWS_PROFILE']] || s3_path[Lono.env] || s3_path['default']
|
44
|
-
end
|
45
|
-
end
|
data/lib/lono/template/help.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Lono::Template::Help
|
2
|
-
def generate
|
3
|
-
<<-EOL
|
4
|
-
Examples:
|
5
|
-
|
6
|
-
$ lono template generate
|
7
|
-
|
8
|
-
$ lono template g -c # shortcut
|
9
|
-
|
10
|
-
Builds the CloudFormation templates files based on lono project and writes them to the output folder on the filesystem.
|
11
|
-
EOL
|
12
|
-
end
|
13
|
-
|
14
|
-
def bashify
|
15
|
-
<<-EOL
|
16
|
-
Examples:
|
17
|
-
|
18
|
-
$ lono template bashify /path/to/cloudformation-template.json
|
19
|
-
|
20
|
-
$ lono template bashify https://s3.amazonaws.com/cloudformation-templates-us-east-1/EC2WebSiteSample.template
|
21
|
-
EOL
|
22
|
-
end
|
23
|
-
|
24
|
-
extend self
|
25
|
-
end
|
@@ -1,136 +0,0 @@
|
|
1
|
-
module Lono::Template::Helpers
|
2
|
-
def template_s3_path(template_name)
|
3
|
-
format = @_detected_format.sub('yaml','yml')
|
4
|
-
template_path = "#{template_name}.#{format}"
|
5
|
-
|
6
|
-
# must have settings.s3_path for this to owrk
|
7
|
-
settings = Lono::Settings.new
|
8
|
-
if settings.s3_path
|
9
|
-
# high jacking Upload for useful s3_https_url method
|
10
|
-
upload = Lono::Template::Upload.new(@_options)
|
11
|
-
upload.s3_https_url(template_path)
|
12
|
-
else
|
13
|
-
message = "template_s3_path helper called but s3.path not configured in settings.yml"
|
14
|
-
puts "WARN: #{message}".colorize(:yellow)
|
15
|
-
message
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def template_params(param_name)
|
20
|
-
param_path = "params/#{Lono.env}/#{param_name}.txt"
|
21
|
-
generator_options = {
|
22
|
-
path: param_path,
|
23
|
-
allow_no_file: true
|
24
|
-
}.merge(@_options)
|
25
|
-
generator = Lono::Param::Generator.new(param_name, generator_options)
|
26
|
-
# do not generate because lono cfn calling logic already generated it we only need the values
|
27
|
-
generator.params # Returns Array in underscore keys format
|
28
|
-
end
|
29
|
-
|
30
|
-
# Really only useful if using json format
|
31
|
-
def user_data(path, vars={})
|
32
|
-
path = "#{Lono.root}/templates/user_data/#{path}"
|
33
|
-
template = IO.read(path)
|
34
|
-
variables(vars)
|
35
|
-
result = erb_result(path, template)
|
36
|
-
output = []
|
37
|
-
result.split("\n").each do |line|
|
38
|
-
output += transform(line)
|
39
|
-
end
|
40
|
-
json = output.to_json
|
41
|
-
json[0] = '' # remove first char: [
|
42
|
-
json.chop! # remove last char: ]
|
43
|
-
end
|
44
|
-
|
45
|
-
def ref(name)
|
46
|
-
%Q|{"Ref"=>"#{name}"}|
|
47
|
-
end
|
48
|
-
|
49
|
-
def find_in_map(*args)
|
50
|
-
%Q|{"Fn::FindInMap" => [ #{transform_array(args)} ]}|
|
51
|
-
end
|
52
|
-
|
53
|
-
def base64(value)
|
54
|
-
%Q|{"Fn::Base64"=>"#{value}"}|
|
55
|
-
end
|
56
|
-
|
57
|
-
def get_att(*args)
|
58
|
-
%Q|{"Fn::GetAtt" => [ #{transform_array(args)} ]}|
|
59
|
-
end
|
60
|
-
|
61
|
-
def get_azs(region="AWS::Region")
|
62
|
-
%Q|{"Fn::GetAZs"=>"#{region}"}|
|
63
|
-
end
|
64
|
-
|
65
|
-
def join(delimiter, values)
|
66
|
-
%Q|{"Fn::Join" => ["#{delimiter}", [ #{transform_array(values)} ]]}|
|
67
|
-
end
|
68
|
-
|
69
|
-
def select(index, list)
|
70
|
-
%Q|{"Fn::Select" => ["#{index}", [ #{transform_array(list)} ]]}|
|
71
|
-
end
|
72
|
-
|
73
|
-
def partial_exist?(path)
|
74
|
-
path = partial_path_for(path)
|
75
|
-
path = auto_add_format(path)
|
76
|
-
path && File.exist?(path)
|
77
|
-
end
|
78
|
-
|
79
|
-
# The partial's path is a relative path given without the extension and
|
80
|
-
#
|
81
|
-
# Example:
|
82
|
-
# Given: file in templates/partial/iam/docker.yml
|
83
|
-
# The path should be: iam/docker
|
84
|
-
#
|
85
|
-
# If the user specifies the extension then use that instead of auto-adding
|
86
|
-
# the detected format.
|
87
|
-
def partial(path,vars={}, options={})
|
88
|
-
path = partial_path_for(path)
|
89
|
-
path = auto_add_format(path)
|
90
|
-
|
91
|
-
template = IO.read(path)
|
92
|
-
variables(vars)
|
93
|
-
result = erb_result(path, template)
|
94
|
-
result = indent(result, options[:indent]) if options[:indent]
|
95
|
-
result
|
96
|
-
end
|
97
|
-
|
98
|
-
# add indentation
|
99
|
-
def indent(text, indentation_amount)
|
100
|
-
text.split("\n").map do |line|
|
101
|
-
" " * indentation_amount + line
|
102
|
-
end.join("\n")
|
103
|
-
end
|
104
|
-
|
105
|
-
private
|
106
|
-
def partial_path_for(path)
|
107
|
-
"#{Lono.root}/templates/partial/#{path}"
|
108
|
-
end
|
109
|
-
|
110
|
-
def auto_add_format(path)
|
111
|
-
# Return immediately if user provided explicit extension
|
112
|
-
extension = File.extname(path) # current extension
|
113
|
-
return path if !extension.empty?
|
114
|
-
|
115
|
-
# Else let's auto detect
|
116
|
-
paths = Dir.glob("#{path}.*")
|
117
|
-
|
118
|
-
if paths.size == 1 # non-ambiguous match
|
119
|
-
return paths.first
|
120
|
-
end
|
121
|
-
|
122
|
-
if paths.size > 1 # ambiguous match
|
123
|
-
puts "ERROR: Multiple possible partials found:".colorize(:red)
|
124
|
-
paths.each do |path|
|
125
|
-
puts " #{path}"
|
126
|
-
end
|
127
|
-
puts "Please specify an extension in the name to remove the ambiguity.".colorize(:green)
|
128
|
-
exit 1
|
129
|
-
end
|
130
|
-
|
131
|
-
# Account for case when user wants to include a file with no extension at all
|
132
|
-
return path if File.exist?(path) && !File.directory?(path)
|
133
|
-
|
134
|
-
path # original path if this point is reached
|
135
|
-
end
|
136
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
/output
|
@@ -1,20 +0,0 @@
|
|
1
|
-
template "blog-web" do
|
2
|
-
app,role,env = name.split('-')
|
3
|
-
source "web"
|
4
|
-
variables(
|
5
|
-
env: env,
|
6
|
-
app: app,
|
7
|
-
role: role,
|
8
|
-
ami: "ami-4836a428", # us-west-2
|
9
|
-
instance_type: "t2.small",
|
10
|
-
port: "80",
|
11
|
-
high_threshold: "35",
|
12
|
-
high_periods: "4",
|
13
|
-
low_threshold: "20",
|
14
|
-
low_periods: "2",
|
15
|
-
max_size: "6",
|
16
|
-
min_size: "3",
|
17
|
-
down_adjustment: "-1",
|
18
|
-
up_adjustment: "2"
|
19
|
-
)
|
20
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
template "api-web" do
|
2
|
-
source "web"
|
3
|
-
variables(
|
4
|
-
ami: "ami-123",
|
5
|
-
instance_type: "t2.small",
|
6
|
-
port: "80",
|
7
|
-
high_threshold: "15",
|
8
|
-
high_periods: "4",
|
9
|
-
low_threshold: "5",
|
10
|
-
low_periods: "10",
|
11
|
-
max_size: "24",
|
12
|
-
min_size: "6",
|
13
|
-
down_adjustment: "-3",
|
14
|
-
up_adjustment: "3",
|
15
|
-
ssl_cert: "arn:aws:iam::12345:server-certificate/wildcard"
|
16
|
-
)
|
17
|
-
end
|
18
|
-
|
19
|
-
template "api-worker" do
|
20
|
-
source "web"
|
21
|
-
variables(
|
22
|
-
ami: "ami-123",
|
23
|
-
instance_type: "t2.small",
|
24
|
-
port: "80",
|
25
|
-
high_threshold: "15",
|
26
|
-
high_periods: "4",
|
27
|
-
low_threshold: "5",
|
28
|
-
low_periods: "10",
|
29
|
-
max_size: "24",
|
30
|
-
min_size: "6",
|
31
|
-
down_adjustment: "-3",
|
32
|
-
up_adjustment: "3",
|
33
|
-
user_data_script: "ruby_script.rb",
|
34
|
-
ssl_cert: "arn:aws:iam::12345:server-certificate/wildcard"
|
35
|
-
)
|
36
|
-
end
|
37
|
-
|
38
|
-
template "api-redis" do
|
39
|
-
source "db"
|
40
|
-
variables(
|
41
|
-
ami: "ami-456",
|
42
|
-
instance_type: "t2.small",
|
43
|
-
port: "80",
|
44
|
-
volume_size: "20",
|
45
|
-
availability_zone: "us-east-1e"
|
46
|
-
)
|
47
|
-
end
|
48
|
-
|
49
|
-
template "parent/db-stack" do
|
50
|
-
source "db"
|
51
|
-
variables(
|
52
|
-
ami: "ami-456",
|
53
|
-
instance_type: "t2.small",
|
54
|
-
port: "80",
|
55
|
-
volume_size: "20",
|
56
|
-
availability_zone: "us-east-1e"
|
57
|
-
)
|
58
|
-
end
|