lono 3.5.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +15 -4
  3. data/.rspec +1 -0
  4. data/CHANGELOG.md +15 -1
  5. data/Gemfile +3 -3
  6. data/Guardfile +17 -8
  7. data/{LICENSE → LICENSE.txt} +1 -1
  8. data/README.md +20 -12
  9. data/Rakefile +1 -2
  10. data/{bin → exe}/lono +1 -0
  11. data/lib/lono.rb +12 -9
  12. data/lib/lono/cfn.rb +7 -9
  13. data/lib/lono/cfn/{aws_services.rb → aws_service.rb} +1 -1
  14. data/lib/lono/cfn/base.rb +41 -38
  15. data/lib/lono/cfn/create.rb +6 -2
  16. data/lib/lono/cfn/delete.rb +2 -2
  17. data/lib/lono/cfn/diff.rb +1 -1
  18. data/lib/lono/cfn/preview.rb +26 -15
  19. data/lib/lono/cfn/update.rb +11 -9
  20. data/lib/lono/cfn/util.rb +3 -3
  21. data/lib/lono/clean.rb +1 -1
  22. data/lib/lono/cli.rb +71 -39
  23. data/lib/lono/command.rb +42 -18
  24. data/lib/lono/completer.rb +162 -0
  25. data/lib/lono/completer/script.rb +6 -0
  26. data/lib/lono/completer/script.sh +10 -0
  27. data/lib/lono/completion.rb +15 -0
  28. data/lib/lono/core.rb +23 -9
  29. data/lib/lono/core/config.rb +20 -0
  30. data/lib/lono/default/settings.yml +33 -13
  31. data/lib/lono/help.rb +6 -79
  32. data/lib/lono/help/cfn.md +6 -0
  33. data/lib/lono/help/cfn/create.md +22 -0
  34. data/lib/lono/help/cfn/delete.md +5 -0
  35. data/lib/lono/help/cfn/diff.md +5 -0
  36. data/lib/lono/help/cfn/download.md +5 -0
  37. data/lib/lono/help/cfn/preview.md +11 -0
  38. data/lib/lono/help/cfn/update.md +21 -0
  39. data/lib/lono/help/completion.md +22 -0
  40. data/lib/lono/help/completion_script.md +3 -0
  41. data/lib/lono/help/generate.md +7 -0
  42. data/lib/lono/help/hello.md +5 -0
  43. data/lib/lono/help/import.md +7 -0
  44. data/lib/lono/help/inspect.md +4 -0
  45. data/lib/lono/help/inspect/depends.md +3 -0
  46. data/lib/lono/help/inspect/summary.md +3 -0
  47. data/lib/lono/help/new.md +8 -0
  48. data/lib/lono/help/param.md +3 -0
  49. data/lib/lono/{param/help.rb → help/param/generate.md} +1 -9
  50. data/lib/lono/help/script/build.md +5 -0
  51. data/lib/lono/help/script/upload.md +8 -0
  52. data/lib/lono/help/template.md +4 -0
  53. data/lib/lono/help/template/bashify.md +4 -0
  54. data/lib/lono/help/template/generate.md +7 -0
  55. data/lib/lono/help/user_data.md +3 -0
  56. data/lib/lono/importer.rb +43 -20
  57. data/lib/lono/inspector.rb +2 -19
  58. data/lib/lono/inspector/base.rb +2 -2
  59. data/lib/lono/inspector/{depends.rb → graph.rb} +3 -3
  60. data/lib/lono/inspector/summary.rb +1 -1
  61. data/lib/lono/new.rb +79 -26
  62. data/lib/lono/new/helper.rb +16 -0
  63. data/lib/lono/new/message.rb +35 -0
  64. data/lib/lono/param.rb +1 -2
  65. data/lib/lono/param/generator.rb +34 -86
  66. data/lib/lono/project_checker.rb +35 -40
  67. data/lib/lono/script.rb +19 -0
  68. data/lib/lono/script/base.rb +9 -0
  69. data/lib/lono/script/build.rb +73 -0
  70. data/lib/lono/script/upload.rb +81 -0
  71. data/lib/lono/sequence.rb +33 -0
  72. data/lib/lono/setting.rb +83 -0
  73. data/lib/lono/template.rb +8 -9
  74. data/lib/lono/template/{aws_services.rb → aws_service.rb} +1 -1
  75. data/lib/lono/template/context.rb +73 -0
  76. data/lib/lono/template/dsl.rb +63 -64
  77. data/lib/lono/template/helper.rb +201 -0
  78. data/lib/lono/template/template.rb +29 -221
  79. data/lib/lono/template/upload.rb +41 -33
  80. data/lib/lono/upgrade4.rb +175 -0
  81. data/lib/lono/user_data.rb +31 -0
  82. data/lib/lono/version.rb +1 -1
  83. data/lib/starter_projects/autoscaling/.gitignore +1 -0
  84. data/lib/starter_projects/{json_project → autoscaling}/Gemfile +0 -0
  85. data/lib/starter_projects/{yaml_project → autoscaling}/Guardfile +0 -0
  86. data/lib/starter_projects/autoscaling/README.md +118 -0
  87. data/lib/starter_projects/autoscaling/app/definitions/base.rb +2 -0
  88. data/lib/starter_projects/autoscaling/app/templates/autoscaling.yml +682 -0
  89. data/lib/starter_projects/autoscaling/config/params/base/autoscaling.txt +6 -0
  90. data/lib/starter_projects/autoscaling/config/settings.yml +33 -0
  91. data/lib/starter_projects/ec2/.gitignore +1 -0
  92. data/lib/starter_projects/{yaml_project → ec2}/Gemfile +0 -0
  93. data/lib/starter_projects/{json_project → ec2}/Guardfile +1 -1
  94. data/lib/starter_projects/ec2/README.md +86 -0
  95. data/lib/starter_projects/ec2/app/definitions/base.rb +2 -0
  96. data/lib/starter_projects/ec2/app/definitions/development.rb +1 -0
  97. data/lib/starter_projects/ec2/app/definitions/production.rb +1 -0
  98. data/lib/starter_projects/{yaml_project → ec2/app}/helpers/my_custom_helper.rb +0 -0
  99. data/lib/starter_projects/{json_project/templates/user_data/app.sh → ec2/app/partials/user_data/bootstrap.sh} +1 -2
  100. data/lib/starter_projects/{yaml_project → ec2/app}/templates/example.yml +0 -0
  101. data/lib/starter_projects/{json_project/params/base/api-web.txt → ec2/config/params/base/example.txt} +0 -0
  102. data/lib/starter_projects/ec2/config/params/development/example.txt +3 -0
  103. data/lib/starter_projects/ec2/config/params/production/example.txt +2 -0
  104. data/lib/starter_projects/ec2/config/settings.yml +33 -0
  105. data/lib/starter_projects/ec2/config/variables/base.rb +3 -0
  106. data/lib/starter_projects/ec2/config/variables/development.rb +2 -0
  107. data/lib/starter_projects/ec2/config/variables/production.rb +2 -0
  108. data/lib/starter_projects/ec2/welcome.txt +8 -0
  109. data/lib/starter_projects/skeleton/.gitignore +1 -0
  110. data/lib/starter_projects/skeleton/Gemfile +3 -0
  111. data/lib/starter_projects/skeleton/Guardfile +12 -0
  112. data/lib/starter_projects/skeleton/README.md +53 -0
  113. data/{spec/fixtures/my_project/templates/.gitkeep → lib/starter_projects/skeleton/app/definitions/base.rb} +0 -0
  114. data/lib/starter_projects/skeleton/config/settings.yml +33 -0
  115. data/lib/starter_projects/skeleton/welcome.txt +7 -0
  116. data/lono.gemspec +12 -10
  117. data/spec/fixtures/lono_project/.gitignore +1 -0
  118. data/spec/fixtures/lono_project/Gemfile +3 -0
  119. data/spec/fixtures/lono_project/Guardfile +12 -0
  120. data/spec/fixtures/lono_project/app/definitions/base.rb +10 -0
  121. data/spec/fixtures/lono_project/app/definitions/base/more.rb +7 -0
  122. data/spec/fixtures/lono_project/app/definitions/development.rb +1 -0
  123. data/spec/fixtures/lono_project/app/definitions/production.rb +1 -0
  124. data/spec/fixtures/lono_project/app/helpers/custom_helper.rb +5 -0
  125. data/spec/fixtures/lono_project/app/partials/security_group.yml +10 -0
  126. data/{lib/starter_projects/yaml_project/templates/partial → spec/fixtures/lono_project/app/partials}/user_data/bootstrap.sh +8 -2
  127. data/spec/fixtures/lono_project/app/templates/example.yml +50 -0
  128. data/{lib/starter_projects/yaml_project/params/base/api-web-prod.txt → spec/fixtures/lono_project/config/params/base/example.txt} +1 -0
  129. data/spec/fixtures/lono_project/config/params/development/example.txt +1 -0
  130. data/spec/fixtures/lono_project/config/params/production/example.txt +1 -0
  131. data/spec/fixtures/lono_project/config/settings.yml +31 -0
  132. data/spec/fixtures/lono_project/config/variables/base.rb +3 -0
  133. data/spec/fixtures/lono_project/config/variables/development.rb +1 -0
  134. data/spec/fixtures/lono_project/config/variables/production.rb +1 -0
  135. data/spec/fixtures/params/envonly/params/{prod → development}/network.txt +0 -0
  136. data/spec/fixtures/params/overlay/params/{prod → development}/network.txt +0 -0
  137. data/spec/fixtures/raw_templates/aws-waf-security-automations.template +2 -2
  138. data/spec/lib/lono/cfn_spec.rb +6 -9
  139. data/spec/lib/lono/cli_spec.rb +44 -0
  140. data/spec/lib/lono/completion_spec.rb +17 -0
  141. data/spec/lib/lono/inspect_spec.rb +6 -15
  142. data/spec/lib/lono/param/generator_spec.rb +45 -26
  143. data/spec/lib/lono/param_spec.rb +1 -3
  144. data/spec/lib/lono/setting_spec.rb +47 -0
  145. data/spec/lib/lono/template/dsl_spec.rb +33 -157
  146. data/spec/lib/lono/template_spec.rb +4 -16
  147. data/spec/spec_helper.rb +45 -14
  148. metadata +168 -82
  149. data/.coveralls.yml +0 -1
  150. data/lib/lono/cfn/help.rb +0 -103
  151. data/lib/lono/current_region.rb +0 -42
  152. data/lib/lono/inspector/help.rb +0 -21
  153. data/lib/lono/settings.rb +0 -45
  154. data/lib/lono/template/help.rb +0 -25
  155. data/lib/lono/template/helpers.rb +0 -136
  156. data/lib/starter_projects/json_project/.gitignore +0 -1
  157. data/lib/starter_projects/json_project/config/templates/base/blog.rb +0 -20
  158. data/lib/starter_projects/json_project/config/templates/base/stacks.rb +0 -58
  159. data/lib/starter_projects/json_project/templates/db.json +0 -212
  160. data/lib/starter_projects/json_project/templates/partial/host_record.json +0 -28
  161. data/lib/starter_projects/json_project/templates/partial/server.json +0 -45
  162. data/lib/starter_projects/json_project/templates/user_data/db.sh +0 -39
  163. data/lib/starter_projects/json_project/templates/user_data/db2.sh +0 -2
  164. data/lib/starter_projects/json_project/templates/user_data/ruby_script.rb +0 -5
  165. data/lib/starter_projects/json_project/templates/web.json +0 -386
  166. data/lib/starter_projects/yaml_project/.gitignore +0 -1
  167. data/lib/starter_projects/yaml_project/config/templates/base/blog.rb +0 -20
  168. data/lib/starter_projects/yaml_project/config/templates/base/stacks.rb +0 -56
  169. data/lib/starter_projects/yaml_project/config/templates/prod/stacks.rb +0 -1
  170. data/lib/starter_projects/yaml_project/config/templates/stag/stacks.rb +0 -1
  171. data/lib/starter_projects/yaml_project/config/variables/base/variables.rb +0 -4
  172. data/lib/starter_projects/yaml_project/config/variables/prod/variables.rb +0 -1
  173. data/lib/starter_projects/yaml_project/config/variables/stag/variables.rb +0 -1
  174. data/lib/starter_projects/yaml_project/params/base/example.txt +0 -2
  175. data/lib/starter_projects/yaml_project/params/prod/example.txt +0 -1
  176. data/lib/starter_projects/yaml_project/params/stag/example.txt +0 -1
  177. data/lib/starter_projects/yaml_project/templates/db.yml +0 -148
  178. data/lib/starter_projects/yaml_project/templates/partial/host_record.yml +0 -14
  179. data/lib/starter_projects/yaml_project/templates/partial/server.yml +0 -59
  180. data/lib/starter_projects/yaml_project/templates/web.yml +0 -206
  181. data/spec/fixtures/my_project/config/templates/base/stacks.rb +0 -3
  182. data/spec/fixtures/my_project/params/my-stack.txt +0 -3
  183. data/spec/fixtures/my_project/templates/my-stack.yml +0 -0
  184. data/spec/lib/lono/new_spec.rb +0 -59
  185. data/spec/lib/lono/template/template_spec.rb +0 -104
  186. data/spec/lib/lono_spec.rb +0 -27
@@ -1,3 +0,0 @@
1
- # this file is just in here to get the lono-cfn spec to pass
2
-
3
- template "my-stack"
@@ -1,3 +0,0 @@
1
- Param1=1
2
- Param2=1
3
-
File without changes
@@ -1,59 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Lono::New do
4
- before(:each) do
5
- @saved_root = ENV['LONO_ROOT']
6
- ENV['LONO_ROOT'] = ENV['TMP_LONO_ROOT']
7
- end
8
- after(:each) do
9
- ENV['LONO_ROOT'] = @saved_root
10
- FileUtils.rm_rf(ENV['TMP_LONO_ROOT']) unless ENV['KEEP_TMP_PROJECT']
11
- end
12
-
13
- context "json starter project" do
14
- before(:each) do
15
- new_project = Lono::New.new(
16
- force: true,
17
- quiet: true,
18
- format: 'json',
19
- project_root: ENV['TMP_LONO_ROOT'],
20
- )
21
- new_project.run
22
- end
23
-
24
- it "should be able to lono generate" do
25
- dsl = Lono::Template::DSL.new(
26
- quiet: true
27
- )
28
- dsl.run
29
- generated = File.exist?("#{Lono.root}/output/blog-web.json")
30
- expect(generated).to be true
31
- end
32
- end
33
-
34
- context "yml starter project" do
35
- before(:each) do
36
- new_project = Lono::New.new(
37
- force: true,
38
- quiet: true,
39
- format: 'yaml',
40
- project_root: ENV['TMP_LONO_ROOT'],
41
- )
42
- new_project.run
43
- end
44
-
45
- it "should be able to lono generate" do
46
- dsl = Lono::Template::DSL.new(
47
- quiet: true
48
- )
49
- dsl.run
50
- generated = File.exist?("#{Lono.root}/output/blog-web.yml")
51
- expect(generated).to be true
52
- end
53
- end
54
-
55
- context "multiple format starter project" do
56
- # TODO: this should not generate anything but puts out a message to the user that the
57
- # project needs to be either all yaml or all json format
58
- end
59
- end
@@ -1,104 +0,0 @@
1
- require_relative "../../../spec_helper"
2
-
3
- describe Lono::Template do
4
- let(:template) do
5
- block = Proc.new {}
6
- template = Lono::Template::Template.new("output_name.yml", block)
7
-
8
- # override the puts and printf methods within the test
9
- def template.messages
10
- @messages
11
- end
12
-
13
- def template.puts(msg)
14
- @messages ||= []
15
- @messages << msg
16
- nil
17
- end
18
-
19
- def template.printf(*args)
20
- @messages ||= []
21
- @messages << args
22
- end
23
-
24
- template
25
- end
26
-
27
- context "valid erb template" do
28
- it "should be able to lono generate" do
29
- template.erb_result("path", "template")
30
- end
31
- end
32
-
33
- context "invalid erb template" do
34
- it "should print out useful error message about undefined variable" do
35
- template.erb_result("path", "variable does not exist\n<% variable %>\nanother line")
36
- errors = template.messages.grep(/Error evaluating ERB template on line/)
37
- expect(errors).not_to be_empty
38
- end
39
-
40
- it "should print out useful error message about syntax error" do
41
- template.erb_result("path", "<%s dsfds ?%>\nanother line")
42
- errors = template.messages.grep(/Error evaluating ERB template on line/)
43
- expect(errors).not_to be_empty
44
- end
45
- end
46
-
47
- describe "parsing" do
48
- it "should transform bash script into json array with cloudformation objects" do
49
- block = Proc.new { }
50
- template = Lono::Template::Template.new("foo", block)
51
-
52
- line = '0{2345}7'
53
- expect(template.bracket_positions(line)).to eq [[0,0],[1,6],[7,7]]
54
- line = '0{2}4{6}' # more than one bracket
55
- expect(template.bracket_positions(line)).to eq [[0,0],[1,3],[4,4],[5,7]]
56
- line = '0{2}4{6{8}0}2' # nested brackets
57
- expect(template.bracket_positions(line)).to eq [[0,0],[1,3],[4,4],[5,11],[12,12]]
58
-
59
- line = '{'
60
- expect(template.decompose(line)).to eq ['{']
61
-
62
- ##########################
63
- line = '1{"Ref"=>"A"}{"Ref"=>"B"}'
64
- expect(template.decompose(line)).to eq ['1','{"Ref"=>"A"}','{"Ref"=>"B"}']
65
-
66
- line = '{"Ref"=>"A"}{"Ref"=>"B"}2'
67
- expect(template.decompose(line)).to eq ['{"Ref"=>"A"}','{"Ref"=>"B"}','2']
68
-
69
- line = '1{"Ref"=>"A"}{"Ref"=>"B"}2'
70
- expect(template.decompose(line)).to eq ['1','{"Ref"=>"A"}','{"Ref"=>"B"}','2']
71
-
72
- line = '{"Ref"=>"A"}{"Ref"=>"B"}'
73
- expect(template.decompose(line)).to eq ['{"Ref"=>"A"}','{"Ref"=>"B"}']
74
-
75
- line = 'Ref{"Ref"=>"B"}'
76
- expect(template.decompose(line)).to eq ['Ref','{"Ref"=>"B"}']
77
- ##############################
78
-
79
- # only allow whitelist
80
- line = 'a{b}{"foo"=>"bar"}h'
81
- expect(template.decompose(line)).to eq ['a{b}{"foo"=>"bar"}h']
82
-
83
- line = 'a{b}{"Ref"=>"bar"}h'
84
- expect(template.decompose(line)).to eq ['a{b}','{"Ref"=>"bar"}','h']
85
- line = 'a{"Ref"=>"bar"}c{"Ref"=>{"cat"=>"mouse"}}e' # nested brackets
86
- expect(template.decompose(line)).to eq ['a','{"Ref"=>"bar"}','c','{"Ref"=>{"cat"=>"mouse"}}','e']
87
-
88
- line = 'test{"Ref"=>"world"}me' # nested brackets
89
- decomposition = template.decompose(line)
90
- result = template.recompose(decomposition)
91
- expect(result).to eq ["test", {"Ref" => "world"}, "me"]
92
-
93
- line = 'test{"Ref"=>"world"}me'
94
- expect(template.transform(line)).to eq ["test", {"Ref" => "world"}, "me\n"]
95
- line = '{"Ref"=>"world"}'
96
- expect(template.transform(line)).to eq [{"Ref" => "world"}, "\n"]
97
- line = '{'
98
- expect(template.transform(line)).to eq ["{\n"]
99
- line = 'Ref{"Ref"=>"B"}'
100
- expect(template.transform(line)).to eq ['Ref',{"Ref"=>"B"}, "\n"]
101
- end
102
- end
103
-
104
- end
@@ -1,27 +0,0 @@
1
- require_relative "../spec_helper"
2
-
3
- describe Lono do
4
- describe "lono" do
5
- before(:each) do
6
- @env = "LONO_ROOT=#{ENV['LONO_ROOT']}"
7
- end
8
- after(:each) do
9
- FileUtils.rm_rf("spec/fixtures/my_project/params/base")
10
- end
11
-
12
- it "generate should build templates" do
13
- out = execute("#{@env} bin/lono generate")
14
- expect(out).to match /Generating both CloudFormation template and parameter/
15
- end
16
-
17
- it "import should download template" do
18
- path = "spec/fixtures/my_project/config/templates/base/stacks.rb"
19
- backup = "spec/fixtures/my_project/config/templates/base/stacks.rb.bak"
20
- FileUtils.cp(path, backup)
21
- out = execute("#{@env} bin/lono import spec/fixtures/raw_templates/aws-waf-security-automations.template #{@args}")
22
- expect(out).to match /Imported raw CloudFormation template/
23
- FileUtils.mv(backup, path)
24
- end
25
- end
26
- end
27
-