lono 3.5.0 → 4.0.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
- 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
|