lono 2.0.4 → 2.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitmodules +1 -1
- data/CHANGELOG.md +4 -0
- data/CONTRIBUTING.md +56 -0
- data/lib/lono.rb +1 -0
- data/lib/lono/cfn.rb +54 -56
- data/lib/lono/cfn/base.rb +5 -3
- data/lib/lono/clean.rb +15 -0
- data/lib/lono/cli.rb +6 -2
- data/lib/lono/command.rb +17 -19
- data/lib/lono/new.rb +25 -27
- data/lib/lono/param.rb +12 -14
- data/lib/lono/project_checker.rb +31 -33
- data/lib/lono/template.rb +18 -20
- data/lib/lono/version.rb +1 -1
- data/lib/starter_projects/yaml_project/config/lono.rb +4 -0
- data/lib/starter_projects/yaml_project/params/example.txt +2 -0
- data/lib/starter_projects/yaml_project/templates/example.yml.erb +430 -0
- data/lono.gemspec +4 -2
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4004cb33d3863a0160d5e75e3e24fd261448e206
|
4
|
+
data.tar.gz: b83737a5e2de0c98835fcebbc44da709b4e0e2b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 781e08333e3487dfc7025406f2b83b994bbadc22783bbb723e31f479ae4e9686accef93dfc870c6c014d6c8bb5245d24ff0ea55dfe6b4c33fd52cf01f65a693e
|
7
|
+
data.tar.gz: 9fbbd4cd14c0b7ae2b7a644950acb954fe54774c07f5c3d89a8a2cb302d2a02b43077e41e5ced05c5dc6c5cc08e7cd86cc2542763532251aebc82d8a05c2fabb
|
data/.gitmodules
CHANGED
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [2.0.5]
|
7
|
+
- add example template to starter app
|
8
|
+
- add docs website
|
9
|
+
|
6
10
|
## [2.0.4]
|
7
11
|
- cfn preview: exit gracefully when stack doesnt exist
|
8
12
|
- exit gracefully with ctrl-c
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# Contributing to Lono
|
2
|
+
|
3
|
+
Contributing is welcomed and encouraged. We love pull requests!
|
4
|
+
|
5
|
+
Here are some ways *you* can contribute:
|
6
|
+
|
7
|
+
* by reporting bugs
|
8
|
+
* by suggesting new features
|
9
|
+
* by writing or editing documentation
|
10
|
+
* by writing specs
|
11
|
+
* by writing code ( **no patch is too small** : fix typos, add comments, clean up inconsistent whitespace )
|
12
|
+
* by refactoring code
|
13
|
+
* by closing [issues][]
|
14
|
+
* by reviewing patches
|
15
|
+
|
16
|
+
[issues]: https://github.com/tongueroo/lono/issues
|
17
|
+
|
18
|
+
## Submitting an Issue
|
19
|
+
|
20
|
+
* We use the [GitHub issue tracker][issues] to track bugs and features.
|
21
|
+
* Before submitting a bug report or feature request, check to make sure it hasn't
|
22
|
+
already been submitted.
|
23
|
+
* When submitting a bug report, please include a [Gist][] that includes a stack
|
24
|
+
trace and any details that may be necessary to reproduce the bug, including
|
25
|
+
your gem version, Ruby version, and operating system. Ideally, a bug report
|
26
|
+
should include a pull request with failing specs.
|
27
|
+
|
28
|
+
[gist]: https://gist.github.com/
|
29
|
+
|
30
|
+
## Cleaning up issues
|
31
|
+
|
32
|
+
* Issues that have no response from the submitter will be closed after 30 days.
|
33
|
+
* Issues will be closed once they're assumed to be fixed or answered. If the
|
34
|
+
maintainer is wrong, it can be opened again.
|
35
|
+
* If your issue is closed by mistake, please understand and explain the issue.
|
36
|
+
We will happily reopen the issue.
|
37
|
+
|
38
|
+
## Submitting a Pull Request
|
39
|
+
1. [Fork][fork] the [official repository][repo].
|
40
|
+
2. [Create a topic branch.][branch]
|
41
|
+
3. Implement your feature or bug fix.
|
42
|
+
4. Add, commit, and push your changes.
|
43
|
+
5. [Submit a pull request.][pr]
|
44
|
+
|
45
|
+
## Notes
|
46
|
+
* Please add tests if you changed code. Contributions without tests won't be accepted.
|
47
|
+
* If you don't know how to add tests, please put in a PR and leave a comment
|
48
|
+
asking for help. We love helping!
|
49
|
+
* Please don't update the Gem version.
|
50
|
+
|
51
|
+
[repo]: https://github.com/tongueroo/lono/tree/master
|
52
|
+
[fork]: https://help.github.com/articles/fork-a-repo/
|
53
|
+
[branch]: https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/
|
54
|
+
[pr]: https://help.github.com/articles/using-pull-requests/
|
55
|
+
|
56
|
+
Inspired by https://github.com/middleman/middleman-heroku/blob/master/CONTRIBUTING.md
|
data/lib/lono.rb
CHANGED
data/lib/lono/cfn.rb
CHANGED
@@ -1,64 +1,62 @@
|
|
1
1
|
require "thor"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
3
|
+
class Lono::Cfn < Lono::Command
|
4
|
+
autoload :Help, 'lono/cfn/help'
|
5
|
+
autoload :AwsServices, 'lono/cfn/aws_services'
|
6
|
+
autoload :Util, 'lono/cfn/util'
|
7
|
+
autoload :CLI, 'lono/cfn/cli'
|
8
|
+
autoload :Base, 'lono/cfn/base'
|
9
|
+
autoload :Create, 'lono/cfn/create'
|
10
|
+
autoload :Update, 'lono/cfn/update'
|
11
|
+
autoload :Delete, 'lono/cfn/delete'
|
12
|
+
autoload :Preview, 'lono/cfn/preview'
|
13
|
+
autoload :Diff, 'lono/cfn/diff'
|
14
|
+
|
15
|
+
class_option :verbose, type: :boolean
|
16
|
+
class_option :noop, type: :boolean
|
17
|
+
class_option :project_root, desc: "Project folder. Defaults to current directory", default: "."
|
18
|
+
class_option :region, desc: "AWS region"
|
19
|
+
|
20
|
+
# common to create and update
|
21
|
+
class_option :template, desc: "override convention and specify the template file to use"
|
22
|
+
class_option :param, desc: "override convention and specify the param file to use"
|
23
|
+
class_option :lono, type: :boolean, desc: "invoke lono to generate CloudFormation templates", default: true
|
24
|
+
|
25
|
+
desc "create STACK", "create a CloudFormation stack"
|
26
|
+
long_desc Help.create
|
27
|
+
def create(name)
|
28
|
+
Create.new(name, options).run
|
29
|
+
end
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
31
|
+
desc "update STACK", "update a CloudFormation stack"
|
32
|
+
long_desc Help.update
|
33
|
+
option :change_set, type: :boolean, default: true, desc: "Uses generated change set to update the stack. If false, will perform normal update-stack."
|
34
|
+
option :diff, type: :boolean, default: true, desc: "Show diff of the source code template changes before continuing."
|
35
|
+
option :preview, type: :boolean, default: true, desc: "Show preview of the stack changes before continuing."
|
36
|
+
option :sure, type: :boolean, desc: "Skips are you sure prompt"
|
37
|
+
def update(name)
|
38
|
+
Update.new(name, options).run
|
39
|
+
end
|
41
40
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
desc "delete STACK", "delete a CloudFormation stack"
|
42
|
+
long_desc Help.delete
|
43
|
+
option :sure, type: :boolean, desc: "Skips are you sure prompt"
|
44
|
+
def delete(name)
|
45
|
+
Delete.new(name, options).run
|
46
|
+
end
|
48
47
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
48
|
+
desc "preview STACK", "preview a CloudFormation stack update"
|
49
|
+
long_desc Help.preview
|
50
|
+
option :keep, type: :boolean, desc: "keep the changeset instead of deleting it afterwards"
|
51
|
+
option :diff, type: :boolean, default: true, desc: "Show diff of the source code template changes also."
|
52
|
+
def preview(name)
|
53
|
+
Diff.new(name, options).run if options[:diff]
|
54
|
+
Preview.new(name, options).run
|
55
|
+
end
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
end
|
57
|
+
desc "diff STACK", "diff of newly generated template vs existing template in AWS"
|
58
|
+
long_desc Help.diff
|
59
|
+
def diff(name)
|
60
|
+
Diff.new(name, options).run
|
63
61
|
end
|
64
62
|
end
|
data/lib/lono/cfn/base.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "lono"
|
2
|
+
require "byebug"
|
2
3
|
|
3
4
|
class Lono::Cfn::Base
|
4
5
|
include Lono::Cfn::AwsServices
|
@@ -100,10 +101,11 @@ class Lono::Cfn::Base
|
|
100
101
|
|
101
102
|
# Returns String with value of "yml" or "json".
|
102
103
|
def detect_format
|
103
|
-
formats = Dir.glob("#{@project_root}/
|
104
|
-
|
104
|
+
formats = Dir.glob("#{@project_root}/templates/**/*").
|
105
|
+
map { |path| path.sub(/\.erb$/, '') }.
|
105
106
|
map { |path| File.extname(path) }.
|
106
107
|
reject { |s| s.empty? }. # reject ""
|
108
|
+
select { |s| s.include?("yml") || s.include?("json") }.
|
107
109
|
uniq
|
108
110
|
if formats.size > 1
|
109
111
|
puts "ERROR: Detected multiple formats: #{formats.join(", ")}".colorize(:red)
|
@@ -112,7 +114,7 @@ class Lono::Cfn::Base
|
|
112
114
|
elsif formats.size == 1
|
113
115
|
formats.first.sub(/^\./,'')
|
114
116
|
else
|
115
|
-
puts "WARN: Did not detect any template formats. Defaulting to yml. Please check the config and templates folders."
|
117
|
+
puts "WARN: Did not detect any template formats. Defaulting to yml. Please check the config and templates folders.".colorize(:yellow)
|
116
118
|
"yml" # default format
|
117
119
|
end
|
118
120
|
end
|
data/lib/lono/clean.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
3
|
+
class Lono::Clean
|
4
|
+
attr_reader :options
|
5
|
+
def initialize(options)
|
6
|
+
@options = options
|
7
|
+
@project_root = options[:project_root] || '.'
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
puts "Cleaning up"
|
12
|
+
puts "Removing output/*"
|
13
|
+
FileUtils.rm_rf("#{@project_root}/output/*")
|
14
|
+
end
|
15
|
+
end
|
data/lib/lono/cli.rb
CHANGED
@@ -3,8 +3,7 @@ require 'lono/command'
|
|
3
3
|
|
4
4
|
module Lono
|
5
5
|
autoload :Help, 'lono/help'
|
6
|
-
|
7
|
-
class CLI < Command
|
6
|
+
class CLI < Lono::Command
|
8
7
|
|
9
8
|
desc "new [NAME]", "Generates lono starter project"
|
10
9
|
Help.new_long_desc
|
@@ -27,6 +26,11 @@ module Lono
|
|
27
26
|
Lono::Param::Generator.generate_all(options.clone)
|
28
27
|
end
|
29
28
|
|
29
|
+
desc "clean", "Clean up generated files"
|
30
|
+
def clean
|
31
|
+
Lono::Clean.new(options.clone).run
|
32
|
+
end
|
33
|
+
|
30
34
|
desc "version", "Prints version"
|
31
35
|
def version
|
32
36
|
puts Lono::VERSION
|
data/lib/lono/command.rb
CHANGED
@@ -1,25 +1,23 @@
|
|
1
1
|
require 'thor'
|
2
2
|
|
3
|
-
|
4
|
-
class
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
args.insert(-2, "help")
|
20
|
-
end
|
21
|
-
super
|
3
|
+
class Lono::Command < Thor
|
4
|
+
class << self
|
5
|
+
def dispatch(m, args, options, config)
|
6
|
+
# Allow calling for help via:
|
7
|
+
# lono generate help
|
8
|
+
# lono generate -h
|
9
|
+
# lono generate --help
|
10
|
+
# lono generate -D
|
11
|
+
#
|
12
|
+
# as well thor's nomral setting as
|
13
|
+
#
|
14
|
+
# lono help generate
|
15
|
+
help_flags = Thor::HELP_MAPPINGS + ["help"]
|
16
|
+
if args.length > 1 && !(args & help_flags).empty?
|
17
|
+
args -= help_flags
|
18
|
+
args.insert(-2, "help")
|
22
19
|
end
|
20
|
+
super
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
data/lib/lono/new.rb
CHANGED
@@ -1,33 +1,31 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
1
|
+
class Lono::New
|
2
|
+
attr_reader :options
|
3
|
+
def initialize(options)
|
4
|
+
@options = options
|
5
|
+
@project_root = options[:project_root] || '.'
|
6
|
+
@format = options[:format] || 'json'
|
7
|
+
end
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
9
|
+
def run
|
10
|
+
puts "Setting up lono project" unless options[:quiet]
|
11
|
+
source_root = File.expand_path("../../starter_projects/#{@format}_project", __FILE__)
|
12
|
+
paths = Dir.glob("#{source_root}/**/*").
|
13
|
+
select {|p| File.file?(p) }
|
14
|
+
paths.each do |src|
|
15
|
+
# starter_projects/yaml_project/ ->
|
16
|
+
regexp = Regexp.new(".*starter_projects/#{@format}_project/")
|
17
|
+
dest = src.gsub(regexp,'')
|
18
|
+
dest = "#{@project_root}/#{dest}"
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
20
|
+
if File.exist?(dest) and !options[:force]
|
21
|
+
puts "already exists: #{dest}" unless options[:quiet]
|
22
|
+
else
|
23
|
+
puts "creating: #{dest}" unless options[:quiet]
|
24
|
+
dirname = File.dirname(dest)
|
25
|
+
FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
|
26
|
+
FileUtils.cp(src, dest)
|
29
27
|
end
|
30
|
-
puts "Starter lono project created" unless options[:quiet]
|
31
28
|
end
|
29
|
+
puts "Starter lono project created" unless options[:quiet]
|
32
30
|
end
|
33
31
|
end
|
data/lib/lono/param.rb
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
require "thor"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
autoload :Generator, 'lono/param/generator'
|
3
|
+
class Lono::Param < Lono::Command
|
4
|
+
autoload :Help, 'lono/param/help'
|
5
|
+
autoload :Generator, 'lono/param/generator'
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
class_option :verbose, type: :boolean
|
8
|
+
class_option :noop, type: :boolean
|
9
|
+
class_option :mute, type: :boolean
|
10
|
+
class_option :project_root, desc: "project root to use", default: '.'
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
12
|
+
desc "generate NAME", "generate parameter json file for NAME"
|
13
|
+
long_desc Help.generate
|
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
|
+
def generate
|
16
|
+
Generator.generate_all(options)
|
19
17
|
end
|
20
18
|
end
|
data/lib/lono/project_checker.rb
CHANGED
@@ -1,44 +1,42 @@
|
|
1
|
-
|
2
|
-
class ProjectChecker
|
1
|
+
class Lono::ProjectChecker
|
3
2
|
# Checks to see command is running in a lono project.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
# If not, provide a friendly message and exit.
|
4
|
+
def self.check(project_root)
|
5
|
+
new(project_root).check
|
6
|
+
end
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
def initialize(project_root)
|
9
|
+
@project_root = project_root
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
def check
|
13
|
+
config_folder_exist
|
14
|
+
templates_folder_exist
|
15
|
+
empty_folders
|
16
|
+
end
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
18
|
+
def config_folder_exist
|
19
|
+
unless File.exist?("#{@project_root}/config")
|
20
|
+
puts "The config folder does not exist in this project. Are you sure this is a lono project?"
|
21
|
+
exit 1
|
24
22
|
end
|
23
|
+
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
25
|
+
def templates_folder_exist
|
26
|
+
unless File.exist?("#{@project_root}/templates")
|
27
|
+
puts "The templates folder does not exist in this project. Are you sure this is a lono project?"
|
28
|
+
exit 1
|
31
29
|
end
|
30
|
+
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
32
|
+
def empty_folders
|
33
|
+
if Dir["#{@project_root}/config/**/*.rb"].empty?
|
34
|
+
puts "The config folder does not contain any lono template definitions."
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
if Dir["#{@project_root}/templates/**/*"].empty?
|
38
|
+
puts "The templates folder does not contain any lono template definitions."
|
39
|
+
exit 1
|
42
40
|
end
|
43
41
|
end
|
44
42
|
end
|
data/lib/lono/template.rb
CHANGED
@@ -1,27 +1,25 @@
|
|
1
1
|
require "thor"
|
2
2
|
require_relative "command"
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
autoload :Template, 'lono/template/template'
|
4
|
+
class Lono::Template < Lono::Command
|
5
|
+
autoload :Help, 'lono/template/help'
|
6
|
+
autoload :Bashify, 'lono/template/bashify'
|
7
|
+
autoload :DSL, 'lono/template/dsl'
|
8
|
+
autoload :Template, 'lono/template/template'
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
10
|
+
desc "generate", "Generate the CloudFormation templates"
|
11
|
+
Help.generate
|
12
|
+
option :clean, type: :boolean, aliases: "-c", desc: "remove all output files before generating"
|
13
|
+
option :project_root, default: ".", aliases: "-r", desc: "project root"
|
14
|
+
option :quiet, type: :boolean, aliases: "-q", desc: "silence the output"
|
15
|
+
option :pretty, type: :boolean, default: true, desc: "json pretty the output. only applies with json format"
|
16
|
+
def generate
|
17
|
+
DSL.new(options.clone).run
|
18
|
+
end
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
20
|
+
desc "bashify [URL-OR-PATH]", "Convert the UserData section of an existing CloudFormation Template to a starter bash script that is compatiable with lono"
|
21
|
+
Help.bashify
|
22
|
+
def bashify(path)
|
23
|
+
Bashify.new(path: path).run
|
26
24
|
end
|
27
25
|
end
|
data/lib/lono/version.rb
CHANGED
@@ -0,0 +1,430 @@
|
|
1
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/sample-templates-services-us-west-2.html#w1ab2c21c45c15c15
|
2
|
+
# Amazon EC2 instance in a security group Creates an Amazon EC2 instance in an Amazon EC2 security group.
|
3
|
+
---
|
4
|
+
AWSTemplateFormatVersion: '2010-09-09'
|
5
|
+
Description: 'AWS CloudFormation Sample Template EC2InstanceWithSecurityGroupSample:
|
6
|
+
Create an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based
|
7
|
+
on the region in which the stack is run. This example creates an EC2 security group
|
8
|
+
for the instance to give you SSH access. **WARNING** This template creates an Amazon
|
9
|
+
EC2 instance. You will be billed for the AWS resources used if you create a stack
|
10
|
+
from this template.'
|
11
|
+
Parameters:
|
12
|
+
KeyName:
|
13
|
+
Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
|
14
|
+
Type: AWS::EC2::KeyPair::KeyName
|
15
|
+
ConstraintDescription: must be the name of an existing EC2 KeyPair.
|
16
|
+
InstanceType:
|
17
|
+
Description: WebServer EC2 instance type
|
18
|
+
Type: String
|
19
|
+
Default: t2.small
|
20
|
+
AllowedValues:
|
21
|
+
- t1.micro
|
22
|
+
- t2.nano
|
23
|
+
- t2.micro
|
24
|
+
- t2.small
|
25
|
+
- t2.medium
|
26
|
+
- t2.large
|
27
|
+
- m1.small
|
28
|
+
- m1.medium
|
29
|
+
- m1.large
|
30
|
+
- m1.xlarge
|
31
|
+
- m2.xlarge
|
32
|
+
- m2.2xlarge
|
33
|
+
- m2.4xlarge
|
34
|
+
- m3.medium
|
35
|
+
- m3.large
|
36
|
+
- m3.xlarge
|
37
|
+
- m3.2xlarge
|
38
|
+
- m4.large
|
39
|
+
- m4.xlarge
|
40
|
+
- m4.2xlarge
|
41
|
+
- m4.4xlarge
|
42
|
+
- m4.10xlarge
|
43
|
+
- c1.medium
|
44
|
+
- c1.xlarge
|
45
|
+
- c3.large
|
46
|
+
- c3.xlarge
|
47
|
+
- c3.2xlarge
|
48
|
+
- c3.4xlarge
|
49
|
+
- c3.8xlarge
|
50
|
+
- c4.large
|
51
|
+
- c4.xlarge
|
52
|
+
- c4.2xlarge
|
53
|
+
- c4.4xlarge
|
54
|
+
- c4.8xlarge
|
55
|
+
- g2.2xlarge
|
56
|
+
- g2.8xlarge
|
57
|
+
- r3.large
|
58
|
+
- r3.xlarge
|
59
|
+
- r3.2xlarge
|
60
|
+
- r3.4xlarge
|
61
|
+
- r3.8xlarge
|
62
|
+
- i2.xlarge
|
63
|
+
- i2.2xlarge
|
64
|
+
- i2.4xlarge
|
65
|
+
- i2.8xlarge
|
66
|
+
- d2.xlarge
|
67
|
+
- d2.2xlarge
|
68
|
+
- d2.4xlarge
|
69
|
+
- d2.8xlarge
|
70
|
+
- hi1.4xlarge
|
71
|
+
- hs1.8xlarge
|
72
|
+
- cr1.8xlarge
|
73
|
+
- cc2.8xlarge
|
74
|
+
- cg1.4xlarge
|
75
|
+
ConstraintDescription: must be a valid EC2 instance type.
|
76
|
+
SSHLocation:
|
77
|
+
Description: The IP address range that can be used to SSH to the EC2 instances
|
78
|
+
Type: String
|
79
|
+
MinLength: '9'
|
80
|
+
MaxLength: '18'
|
81
|
+
Default: 0.0.0.0/0
|
82
|
+
AllowedPattern: "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})"
|
83
|
+
ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
|
84
|
+
<% if @route53 %>
|
85
|
+
HostedZoneName:
|
86
|
+
Description: The route53 HostedZoneName. For example, "mydomain.com." Don't forget the period at the end.
|
87
|
+
Type: String
|
88
|
+
Subdomain:
|
89
|
+
Description: The subdomain of the dns entry. For example, hello -> hello.mydomain.com, hello is the subdomain.
|
90
|
+
Type: String
|
91
|
+
<% end %>
|
92
|
+
Mappings:
|
93
|
+
AWSInstanceType2Arch:
|
94
|
+
t1.micro:
|
95
|
+
Arch: PV64
|
96
|
+
t2.nano:
|
97
|
+
Arch: HVM64
|
98
|
+
t2.micro:
|
99
|
+
Arch: HVM64
|
100
|
+
t2.small:
|
101
|
+
Arch: HVM64
|
102
|
+
t2.medium:
|
103
|
+
Arch: HVM64
|
104
|
+
t2.large:
|
105
|
+
Arch: HVM64
|
106
|
+
m1.small:
|
107
|
+
Arch: PV64
|
108
|
+
m1.medium:
|
109
|
+
Arch: PV64
|
110
|
+
m1.large:
|
111
|
+
Arch: PV64
|
112
|
+
m1.xlarge:
|
113
|
+
Arch: PV64
|
114
|
+
m2.xlarge:
|
115
|
+
Arch: PV64
|
116
|
+
m2.2xlarge:
|
117
|
+
Arch: PV64
|
118
|
+
m2.4xlarge:
|
119
|
+
Arch: PV64
|
120
|
+
m3.medium:
|
121
|
+
Arch: HVM64
|
122
|
+
m3.large:
|
123
|
+
Arch: HVM64
|
124
|
+
m3.xlarge:
|
125
|
+
Arch: HVM64
|
126
|
+
m3.2xlarge:
|
127
|
+
Arch: HVM64
|
128
|
+
m4.large:
|
129
|
+
Arch: HVM64
|
130
|
+
m4.xlarge:
|
131
|
+
Arch: HVM64
|
132
|
+
m4.2xlarge:
|
133
|
+
Arch: HVM64
|
134
|
+
m4.4xlarge:
|
135
|
+
Arch: HVM64
|
136
|
+
m4.10xlarge:
|
137
|
+
Arch: HVM64
|
138
|
+
c1.medium:
|
139
|
+
Arch: PV64
|
140
|
+
c1.xlarge:
|
141
|
+
Arch: PV64
|
142
|
+
c3.large:
|
143
|
+
Arch: HVM64
|
144
|
+
c3.xlarge:
|
145
|
+
Arch: HVM64
|
146
|
+
c3.2xlarge:
|
147
|
+
Arch: HVM64
|
148
|
+
c3.4xlarge:
|
149
|
+
Arch: HVM64
|
150
|
+
c3.8xlarge:
|
151
|
+
Arch: HVM64
|
152
|
+
c4.large:
|
153
|
+
Arch: HVM64
|
154
|
+
c4.xlarge:
|
155
|
+
Arch: HVM64
|
156
|
+
c4.2xlarge:
|
157
|
+
Arch: HVM64
|
158
|
+
c4.4xlarge:
|
159
|
+
Arch: HVM64
|
160
|
+
c4.8xlarge:
|
161
|
+
Arch: HVM64
|
162
|
+
g2.2xlarge:
|
163
|
+
Arch: HVMG2
|
164
|
+
g2.8xlarge:
|
165
|
+
Arch: HVMG2
|
166
|
+
r3.large:
|
167
|
+
Arch: HVM64
|
168
|
+
r3.xlarge:
|
169
|
+
Arch: HVM64
|
170
|
+
r3.2xlarge:
|
171
|
+
Arch: HVM64
|
172
|
+
r3.4xlarge:
|
173
|
+
Arch: HVM64
|
174
|
+
r3.8xlarge:
|
175
|
+
Arch: HVM64
|
176
|
+
i2.xlarge:
|
177
|
+
Arch: HVM64
|
178
|
+
i2.2xlarge:
|
179
|
+
Arch: HVM64
|
180
|
+
i2.4xlarge:
|
181
|
+
Arch: HVM64
|
182
|
+
i2.8xlarge:
|
183
|
+
Arch: HVM64
|
184
|
+
d2.xlarge:
|
185
|
+
Arch: HVM64
|
186
|
+
d2.2xlarge:
|
187
|
+
Arch: HVM64
|
188
|
+
d2.4xlarge:
|
189
|
+
Arch: HVM64
|
190
|
+
d2.8xlarge:
|
191
|
+
Arch: HVM64
|
192
|
+
hi1.4xlarge:
|
193
|
+
Arch: HVM64
|
194
|
+
hs1.8xlarge:
|
195
|
+
Arch: HVM64
|
196
|
+
cr1.8xlarge:
|
197
|
+
Arch: HVM64
|
198
|
+
cc2.8xlarge:
|
199
|
+
Arch: HVM64
|
200
|
+
AWSInstanceType2NATArch:
|
201
|
+
t1.micro:
|
202
|
+
Arch: NATPV64
|
203
|
+
t2.nano:
|
204
|
+
Arch: NATHVM64
|
205
|
+
t2.micro:
|
206
|
+
Arch: NATHVM64
|
207
|
+
t2.small:
|
208
|
+
Arch: NATHVM64
|
209
|
+
t2.medium:
|
210
|
+
Arch: NATHVM64
|
211
|
+
t2.large:
|
212
|
+
Arch: NATHVM64
|
213
|
+
m1.small:
|
214
|
+
Arch: NATPV64
|
215
|
+
m1.medium:
|
216
|
+
Arch: NATPV64
|
217
|
+
m1.large:
|
218
|
+
Arch: NATPV64
|
219
|
+
m1.xlarge:
|
220
|
+
Arch: NATPV64
|
221
|
+
m2.xlarge:
|
222
|
+
Arch: NATPV64
|
223
|
+
m2.2xlarge:
|
224
|
+
Arch: NATPV64
|
225
|
+
m2.4xlarge:
|
226
|
+
Arch: NATPV64
|
227
|
+
m3.medium:
|
228
|
+
Arch: NATHVM64
|
229
|
+
m3.large:
|
230
|
+
Arch: NATHVM64
|
231
|
+
m3.xlarge:
|
232
|
+
Arch: NATHVM64
|
233
|
+
m3.2xlarge:
|
234
|
+
Arch: NATHVM64
|
235
|
+
m4.large:
|
236
|
+
Arch: NATHVM64
|
237
|
+
m4.xlarge:
|
238
|
+
Arch: NATHVM64
|
239
|
+
m4.2xlarge:
|
240
|
+
Arch: NATHVM64
|
241
|
+
m4.4xlarge:
|
242
|
+
Arch: NATHVM64
|
243
|
+
m4.10xlarge:
|
244
|
+
Arch: NATHVM64
|
245
|
+
c1.medium:
|
246
|
+
Arch: NATPV64
|
247
|
+
c1.xlarge:
|
248
|
+
Arch: NATPV64
|
249
|
+
c3.large:
|
250
|
+
Arch: NATHVM64
|
251
|
+
c3.xlarge:
|
252
|
+
Arch: NATHVM64
|
253
|
+
c3.2xlarge:
|
254
|
+
Arch: NATHVM64
|
255
|
+
c3.4xlarge:
|
256
|
+
Arch: NATHVM64
|
257
|
+
c3.8xlarge:
|
258
|
+
Arch: NATHVM64
|
259
|
+
c4.large:
|
260
|
+
Arch: NATHVM64
|
261
|
+
c4.xlarge:
|
262
|
+
Arch: NATHVM64
|
263
|
+
c4.2xlarge:
|
264
|
+
Arch: NATHVM64
|
265
|
+
c4.4xlarge:
|
266
|
+
Arch: NATHVM64
|
267
|
+
c4.8xlarge:
|
268
|
+
Arch: NATHVM64
|
269
|
+
g2.2xlarge:
|
270
|
+
Arch: NATHVMG2
|
271
|
+
g2.8xlarge:
|
272
|
+
Arch: NATHVMG2
|
273
|
+
r3.large:
|
274
|
+
Arch: NATHVM64
|
275
|
+
r3.xlarge:
|
276
|
+
Arch: NATHVM64
|
277
|
+
r3.2xlarge:
|
278
|
+
Arch: NATHVM64
|
279
|
+
r3.4xlarge:
|
280
|
+
Arch: NATHVM64
|
281
|
+
r3.8xlarge:
|
282
|
+
Arch: NATHVM64
|
283
|
+
i2.xlarge:
|
284
|
+
Arch: NATHVM64
|
285
|
+
i2.2xlarge:
|
286
|
+
Arch: NATHVM64
|
287
|
+
i2.4xlarge:
|
288
|
+
Arch: NATHVM64
|
289
|
+
i2.8xlarge:
|
290
|
+
Arch: NATHVM64
|
291
|
+
d2.xlarge:
|
292
|
+
Arch: NATHVM64
|
293
|
+
d2.2xlarge:
|
294
|
+
Arch: NATHVM64
|
295
|
+
d2.4xlarge:
|
296
|
+
Arch: NATHVM64
|
297
|
+
d2.8xlarge:
|
298
|
+
Arch: NATHVM64
|
299
|
+
hi1.4xlarge:
|
300
|
+
Arch: NATHVM64
|
301
|
+
hs1.8xlarge:
|
302
|
+
Arch: NATHVM64
|
303
|
+
cr1.8xlarge:
|
304
|
+
Arch: NATHVM64
|
305
|
+
cc2.8xlarge:
|
306
|
+
Arch: NATHVM64
|
307
|
+
AWSRegionArch2AMI:
|
308
|
+
us-east-1:
|
309
|
+
PV64: ami-2a69aa47
|
310
|
+
HVM64: ami-6869aa05
|
311
|
+
HVMG2: ami-61e27177
|
312
|
+
us-west-2:
|
313
|
+
PV64: ami-7f77b31f
|
314
|
+
HVM64: ami-7172b611
|
315
|
+
HVMG2: ami-60aa3700
|
316
|
+
us-west-1:
|
317
|
+
PV64: ami-a2490dc2
|
318
|
+
HVM64: ami-31490d51
|
319
|
+
HVMG2: ami-4b694d2b
|
320
|
+
eu-west-1:
|
321
|
+
PV64: ami-4cdd453f
|
322
|
+
HVM64: ami-f9dd458a
|
323
|
+
HVMG2: ami-2955524f
|
324
|
+
eu-west-2:
|
325
|
+
PV64: NOT_SUPPORTED
|
326
|
+
HVM64: ami-886369ec
|
327
|
+
HVMG2: NOT_SUPPORTED
|
328
|
+
eu-central-1:
|
329
|
+
PV64: ami-6527cf0a
|
330
|
+
HVM64: ami-ea26ce85
|
331
|
+
HVMG2: ami-81ac71ee
|
332
|
+
ap-northeast-1:
|
333
|
+
PV64: ami-3e42b65f
|
334
|
+
HVM64: ami-374db956
|
335
|
+
HVMG2: ami-46220c21
|
336
|
+
ap-northeast-2:
|
337
|
+
PV64: NOT_SUPPORTED
|
338
|
+
HVM64: ami-2b408b45
|
339
|
+
HVMG2: NOT_SUPPORTED
|
340
|
+
ap-southeast-1:
|
341
|
+
PV64: ami-df9e4cbc
|
342
|
+
HVM64: ami-a59b49c6
|
343
|
+
HVMG2: ami-c212aba1
|
344
|
+
ap-southeast-2:
|
345
|
+
PV64: ami-63351d00
|
346
|
+
HVM64: ami-dc361ebf
|
347
|
+
HVMG2: ami-0ad2db69
|
348
|
+
ap-south-1:
|
349
|
+
PV64: NOT_SUPPORTED
|
350
|
+
HVM64: ami-ffbdd790
|
351
|
+
HVMG2: ami-ca3042a5
|
352
|
+
us-east-2:
|
353
|
+
PV64: NOT_SUPPORTED
|
354
|
+
HVM64: ami-f6035893
|
355
|
+
HVMG2: NOT_SUPPORTED
|
356
|
+
ca-central-1:
|
357
|
+
PV64: NOT_SUPPORTED
|
358
|
+
HVM64: ami-730ebd17
|
359
|
+
HVMG2: NOT_SUPPORTED
|
360
|
+
sa-east-1:
|
361
|
+
PV64: ami-1ad34676
|
362
|
+
HVM64: ami-6dd04501
|
363
|
+
HVMG2: NOT_SUPPORTED
|
364
|
+
cn-north-1:
|
365
|
+
PV64: ami-77559f1a
|
366
|
+
HVM64: ami-8e6aa0e3
|
367
|
+
HVMG2: NOT_SUPPORTED
|
368
|
+
Resources:
|
369
|
+
EC2Instance:
|
370
|
+
Type: AWS::EC2::Instance
|
371
|
+
Properties:
|
372
|
+
InstanceType:
|
373
|
+
Ref: InstanceType
|
374
|
+
SecurityGroups:
|
375
|
+
- Ref: InstanceSecurityGroup
|
376
|
+
KeyName:
|
377
|
+
Ref: KeyName
|
378
|
+
ImageId:
|
379
|
+
Fn::FindInMap:
|
380
|
+
- AWSRegionArch2AMI
|
381
|
+
- Ref: AWS::Region
|
382
|
+
- Fn::FindInMap:
|
383
|
+
- AWSInstanceType2Arch
|
384
|
+
- Ref: InstanceType
|
385
|
+
- Arch
|
386
|
+
InstanceSecurityGroup:
|
387
|
+
Type: AWS::EC2::SecurityGroup
|
388
|
+
Properties:
|
389
|
+
GroupDescription: Enable SSH access via port 22
|
390
|
+
SecurityGroupIngress:
|
391
|
+
- IpProtocol: tcp
|
392
|
+
FromPort: '22'
|
393
|
+
ToPort: '22'
|
394
|
+
CidrIp:
|
395
|
+
Ref: SSHLocation
|
396
|
+
<% if @route53 %>
|
397
|
+
DnsRecord:
|
398
|
+
Type: AWS::Route53::RecordSet
|
399
|
+
Properties:
|
400
|
+
HostedZoneName: !Ref 'HostedZoneName'
|
401
|
+
Comment: DNS name for my instance.
|
402
|
+
Name: !Join ['', [!Ref 'Subdomain', ., !Ref 'HostedZoneName']]
|
403
|
+
Type: CNAME
|
404
|
+
TTL: '900'
|
405
|
+
ResourceRecords:
|
406
|
+
- !GetAtt EC2Instance.PublicIp
|
407
|
+
<% end %>
|
408
|
+
Outputs:
|
409
|
+
InstanceId:
|
410
|
+
Description: InstanceId of the newly created EC2 instance
|
411
|
+
Value:
|
412
|
+
Ref: EC2Instance
|
413
|
+
AZ:
|
414
|
+
Description: Availability Zone of the newly created EC2 instance
|
415
|
+
Value:
|
416
|
+
Fn::GetAtt:
|
417
|
+
- EC2Instance
|
418
|
+
- AvailabilityZone
|
419
|
+
PublicDNS:
|
420
|
+
Description: Public DNSName of the newly created EC2 instance
|
421
|
+
Value:
|
422
|
+
Fn::GetAtt:
|
423
|
+
- EC2Instance
|
424
|
+
- PublicDnsName
|
425
|
+
PublicIP:
|
426
|
+
Description: Public IP address of the newly created EC2 instance
|
427
|
+
Value:
|
428
|
+
Fn::GetAtt:
|
429
|
+
- EC2Instance
|
430
|
+
- PublicIp
|
data/lono.gemspec
CHANGED
@@ -8,9 +8,11 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.summary = %q{Lono is a CloudFormation Template ruby generator. Lono generates CloudFormation templates based on ERB templates.}
|
9
9
|
gem.homepage = "http://github.com/tongueroo/lono"
|
10
10
|
|
11
|
-
|
11
|
+
files = `git ls-files`.split($\) + Dir.glob("vendor/**/*")
|
12
|
+
files = files.reject { |p| p =~ /^docs/ }
|
13
|
+
gem.files = files
|
12
14
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features|docs)/})
|
14
16
|
gem.name = "lono"
|
15
17
|
gem.require_paths = ["lib"]
|
16
18
|
gem.version = Lono::VERSION
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lono
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -222,6 +222,7 @@ files:
|
|
222
222
|
- ".ruby-version"
|
223
223
|
- ".travis.yml"
|
224
224
|
- CHANGELOG.md
|
225
|
+
- CONTRIBUTING.md
|
225
226
|
- Gemfile
|
226
227
|
- Guardfile
|
227
228
|
- LICENSE
|
@@ -240,6 +241,7 @@ files:
|
|
240
241
|
- lib/lono/cfn/preview.rb
|
241
242
|
- lib/lono/cfn/update.rb
|
242
243
|
- lib/lono/cfn/util.rb
|
244
|
+
- lib/lono/clean.rb
|
243
245
|
- lib/lono/cli.rb
|
244
246
|
- lib/lono/command.rb
|
245
247
|
- lib/lono/help.rb
|
@@ -272,7 +274,9 @@ files:
|
|
272
274
|
- lib/starter_projects/yaml_project/config/lono.rb
|
273
275
|
- lib/starter_projects/yaml_project/config/lono/api.rb
|
274
276
|
- lib/starter_projects/yaml_project/params/api-web-prod.txt
|
277
|
+
- lib/starter_projects/yaml_project/params/example.txt
|
275
278
|
- lib/starter_projects/yaml_project/templates/db.yml.erb
|
279
|
+
- lib/starter_projects/yaml_project/templates/example.yml.erb
|
276
280
|
- lib/starter_projects/yaml_project/templates/partial/host_record.yml.erb
|
277
281
|
- lib/starter_projects/yaml_project/templates/partial/server.yml.erb
|
278
282
|
- lib/starter_projects/yaml_project/templates/partial/user_data/bootstrap.sh.erb
|