lono 0.5.2 → 1.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +5 -0
  4. data/README.md +152 -23
  5. data/lib/lono.rb +1 -0
  6. data/lib/lono/cli.rb +3 -2
  7. data/lib/lono/dsl.rb +59 -12
  8. data/lib/lono/new.rb +4 -2
  9. data/lib/lono/template.rb +22 -9
  10. data/lib/lono/version.rb +1 -1
  11. data/lib/{starter_project → starter_project_json}/Gemfile +2 -1
  12. data/lib/{starter_project → starter_project_json}/Guardfile +0 -0
  13. data/lib/starter_project_json/config/lono.rb +20 -0
  14. data/lib/{starter_project → starter_project_json}/config/lono/api.rb +9 -9
  15. data/lib/{starter_project → starter_project_json}/templates/db.json.erb +1 -1
  16. data/lib/{starter_project → starter_project_json}/templates/partial/host_record.json.erb +0 -0
  17. data/lib/{starter_project → starter_project_json}/templates/partial/server.json.erb +0 -0
  18. data/lib/{starter_project → starter_project_json}/templates/user_data/app.sh.erb +1 -4
  19. data/lib/{starter_project → starter_project_json}/templates/user_data/db.sh.erb +0 -0
  20. data/lib/{starter_project → starter_project_json}/templates/user_data/db2.sh.erb +0 -0
  21. data/lib/{starter_project → starter_project_json}/templates/user_data/ruby_script.rb.erb +0 -0
  22. data/lib/{starter_project/templates/app.json.erb → starter_project_json/templates/web.json.erb} +1 -1
  23. data/lib/starter_project_yaml/Gemfile +4 -0
  24. data/lib/starter_project_yaml/Guardfile +12 -0
  25. data/lib/{starter_project → starter_project_yaml}/config/lono.rb +5 -5
  26. data/lib/starter_project_yaml/config/lono/api.rb +58 -0
  27. data/lib/starter_project_yaml/templates/db.yml.erb +148 -0
  28. data/lib/starter_project_yaml/templates/partial/host_record.yml.erb +14 -0
  29. data/lib/starter_project_yaml/templates/partial/server.yml.erb +59 -0
  30. data/lib/starter_project_yaml/templates/partial/user_data/bootstrap.sh.erb +5 -0
  31. data/lib/starter_project_yaml/templates/web.yml.erb +205 -0
  32. data/lono.gemspec +1 -1
  33. data/spec/lib/lono/dsl_spec.rb +184 -0
  34. data/spec/lib/lono/new_spec.rb +59 -0
  35. data/spec/lib/lono_spec.rb +6 -116
  36. data/spec/spec_helper.rb +1 -0
  37. metadata +42 -15
@@ -3,15 +3,15 @@ require File.expand_path("../../spec_helper", __FILE__)
3
3
  describe Lono do
4
4
  before(:each) do
5
5
  lono_bin = File.expand_path("../../../bin/lono", __FILE__)
6
- @project = File.expand_path("../../../tmp/lono_project", __FILE__)
7
- dir = File.dirname(@project)
8
- name = File.basename(@project)
6
+ @project_root = File.expand_path("../../../tmp/lono_project", __FILE__)
7
+ dir = File.dirname(@project_root)
8
+ name = File.basename(@project_root)
9
9
  FileUtils.mkdir(dir) unless File.exist?(dir)
10
- execute("cd #{dir} && #{lono_bin} new #{name} -f -q ")
10
+ execute("cd #{dir} && #{lono_bin} new #{name} -f -q --format json")
11
11
  end
12
12
 
13
13
  after(:each) do
14
- FileUtils.rm_rf(@project) unless ENV['KEEP_TMP_PROJECT']
14
+ FileUtils.rm_rf(@project_root) unless ENV['KEEP_TMP_PROJECT']
15
15
  end
16
16
 
17
17
  describe "bashify" do
@@ -79,119 +79,9 @@ describe Lono do
79
79
  end
80
80
  end
81
81
 
82
- describe "ruby specs" do
83
- before(:each) do
84
- dsl = Lono::DSL.new(
85
- project_root: @project,
86
- quiet: true
87
- )
88
- dsl.run
89
- end
90
-
91
- it "should generate cloudformation template" do
92
- raw = IO.read("#{@project}/output/prod-api-app.json")
93
- json = JSON.load(raw)
94
- expect(json['Description']).to eq "Api Stack"
95
- expect(json['Mappings']['AWSRegionArch2AMI']['us-east-1']['64']).to eq 'ami-123'
96
- end
97
-
98
- it "should make trailing options pass to the partial helper available as instance variables" do
99
- raw = IO.read("#{@project}/output/prod-api-app.json")
100
- json = JSON.load(raw)
101
- expect(json['Resources']['HostRecord']['Properties']['Comment']).to eq 'DNS name for mydomain.com'
102
- end
103
-
104
- it "should generate user data with variables" do
105
- raw = IO.read("#{@project}/output/prod-api-redis.json")
106
- json = JSON.load(raw)
107
- expect(json['Description']).to eq "Api redis"
108
- user_data = json['Resources']['server']['Properties']['UserData']['Fn::Base64']['Fn::Join'][1]
109
- expect(user_data).to include("VARTEST=foo\n")
110
- end
111
-
112
- it "should include multiple user_data scripts" do
113
- raw = IO.read("#{@project}/output/prod-api-redis.json")
114
- json = JSON.load(raw)
115
- expect(json['Description']).to eq "Api redis"
116
- user_data = json['Resources']['server']['Properties']['UserData']['Fn::Base64']['Fn::Join'][1]
117
- expect(user_data).to include("DB2=test\n")
118
- end
119
-
120
- it "should generate db template" do
121
- raw = IO.read("#{@project}/output/prod-api-redis.json")
122
- json = JSON.load(raw)
123
- expect(json['Description']).to eq "Api redis"
124
- user_data = json['Resources']['server']['Properties']['UserData']['Fn::Base64']['Fn::Join'][1]
125
- expect(user_data).to include({"Ref" => "AWS::StackName"})
126
- expect(user_data).to include({"Ref" => "WaitHandle"})
127
- expect(user_data).to include({
128
- "Fn::FindInMap" => [
129
- "EnvironmentMapping",
130
- "HostnamePrefix",
131
- {"Ref" => "Environment"}
132
- ]
133
- })
134
- expect(user_data).to include({
135
- "Fn::FindInMap" => [
136
- "MapName",
137
- "TopLevelKey",
138
- "SecondLevelKey"
139
- ]
140
- })
141
- expect(user_data).to include({"Ref" => "DRINK"})
142
-
143
- expect(user_data).to include({"Fn::Base64" => "value to encode"})
144
- expect(user_data).to include({"Fn::GetAtt" => ["server", "PublicDnsName"]})
145
- expect(user_data).to include({"Fn::GetAZs" => "AWS::Region"})
146
- expect(user_data).to include({"Fn::Join" => [ ':', ['a','b','c']]})
147
- expect(user_data).to include({"Fn::Select" => [ '1', ['a','b','c']]})
148
- end
149
-
150
- it "should transform bash script to CF template user_data" do
151
- block = Proc.new { }
152
- template = Lono::Template.new("foo", block)
153
-
154
- line = 'echo {"Ref"=>"AWS::StackName"} > /tmp/stack_name ; {"Ref"=>"Ami"}'
155
- data = template.transform(line)
156
- expect(data).to eq ["echo ", {"Ref"=>"AWS::StackName"}, " > /tmp/stack_name ; ", {"Ref"=>"Ami"}, "\n"]
157
-
158
- line = 'echo {"Ref"=>"AWS::StackName"} > /tmp/stack_name'
159
- data = template.transform(line)
160
- expect(data).to eq ["echo ", {"Ref"=>"AWS::StackName"}, " > /tmp/stack_name\n"]
161
-
162
- line = 'echo {"Fn::FindInMap" => [ "A", "B", {"Ref"=>"AWS::StackName"} ]}'
163
- data = template.transform(line)
164
- expect(data).to eq ["echo ", {"Fn::FindInMap" => ["A", "B", {"Ref"=>"AWS::StackName"}]}, "\n"]
165
-
166
- line = 'echo {"Fn::FindInMap" => [ "A", "B", {"Ref"=>"AWS::StackName"} ]} > /tmp/stack_name ; {"Ref"=>"Ami"}'
167
- data = template.transform(line)
168
- expect(data).to eq ["echo ", {"Fn::FindInMap" => ["A", "B", {"Ref"=>"AWS::StackName"}]}, " > /tmp/stack_name ; ", {"Ref"=>"Ami"}, "\n"]
169
- end
170
-
171
- it "should not transform user_data ruby scripts" do
172
- raw = IO.read("#{@project}/output/prod-api-worker.json")
173
- json = JSON.load(raw)
174
- user_data = json['Resources']['LaunchConfig']['Properties']['UserData']['Fn::Base64']['Fn::Join'][1]
175
- expect(user_data).to include(%Q|ec2.tags.create(ec2.instances[my_instance_id], "Name", {value: Facter.hostname})\n|)
176
- expect(user_data).to include(%Q{find_all{ |record_set| record_set[:name] == record_name }\n})
177
- end
178
-
179
- it "should create parent folders for parent/db-stack.json" do
180
- directory_created = File.exist?("#{@project}/output/parent")
181
- expect(directory_created).to be true
182
- end
183
-
184
- it "task should generate CloudFormation templates" do
185
- raw = IO.read("#{@project}/output/prod-api-app.json")
186
- json = JSON.load(raw)
187
- expect(json['Description']).to eq "Api Stack"
188
- expect(json['Mappings']['AWSRegionArch2AMI']['us-east-1']['64']).to eq 'ami-123'
189
- end
190
- end
191
-
192
82
  describe "cli specs" do
193
83
  it "should generate templates" do
194
- out = execute("./bin/lono generate -c --project-root #{@project}")
84
+ out = execute("./bin/lono generate -c --project-root #{@project_root}")
195
85
  expect(out).to match /Generating CloudFormation templates/
196
86
  end
197
87
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "pp"
2
+ require "byebug"
2
3
  require "bundler"
3
4
 
4
5
  Bundler.require(:development)
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: 0.5.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-30 00:00:00.000000000 Z
11
+ date: 2017-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: byebug
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  description: Lono is a CloudFormation Template ruby generator. Lono generates CloudFormation
168
182
  templates based on ERB templates.
169
183
  email:
@@ -193,20 +207,31 @@ files:
193
207
  - lib/lono/new.rb
194
208
  - lib/lono/template.rb
195
209
  - lib/lono/version.rb
196
- - lib/starter_project/Gemfile
197
- - lib/starter_project/Guardfile
198
- - lib/starter_project/config/lono.rb
199
- - lib/starter_project/config/lono/api.rb
200
- - lib/starter_project/templates/app.json.erb
201
- - lib/starter_project/templates/db.json.erb
202
- - lib/starter_project/templates/partial/host_record.json.erb
203
- - lib/starter_project/templates/partial/server.json.erb
204
- - lib/starter_project/templates/user_data/app.sh.erb
205
- - lib/starter_project/templates/user_data/db.sh.erb
206
- - lib/starter_project/templates/user_data/db2.sh.erb
207
- - lib/starter_project/templates/user_data/ruby_script.rb.erb
210
+ - lib/starter_project_json/Gemfile
211
+ - lib/starter_project_json/Guardfile
212
+ - lib/starter_project_json/config/lono.rb
213
+ - lib/starter_project_json/config/lono/api.rb
214
+ - lib/starter_project_json/templates/db.json.erb
215
+ - lib/starter_project_json/templates/partial/host_record.json.erb
216
+ - lib/starter_project_json/templates/partial/server.json.erb
217
+ - lib/starter_project_json/templates/user_data/app.sh.erb
218
+ - lib/starter_project_json/templates/user_data/db.sh.erb
219
+ - lib/starter_project_json/templates/user_data/db2.sh.erb
220
+ - lib/starter_project_json/templates/user_data/ruby_script.rb.erb
221
+ - lib/starter_project_json/templates/web.json.erb
222
+ - lib/starter_project_yaml/Gemfile
223
+ - lib/starter_project_yaml/Guardfile
224
+ - lib/starter_project_yaml/config/lono.rb
225
+ - lib/starter_project_yaml/config/lono/api.rb
226
+ - lib/starter_project_yaml/templates/db.yml.erb
227
+ - lib/starter_project_yaml/templates/partial/host_record.yml.erb
228
+ - lib/starter_project_yaml/templates/partial/server.yml.erb
229
+ - lib/starter_project_yaml/templates/partial/user_data/bootstrap.sh.erb
230
+ - lib/starter_project_yaml/templates/web.yml.erb
208
231
  - lono.gemspec
209
232
  - spec/fixtures/cfn.json
233
+ - spec/lib/lono/dsl_spec.rb
234
+ - spec/lib/lono/new_spec.rb
210
235
  - spec/lib/lono_spec.rb
211
236
  - spec/spec_helper.rb
212
237
  homepage: http://github.com/tongueroo/lono
@@ -229,12 +254,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
229
254
  version: '0'
230
255
  requirements: []
231
256
  rubyforge_project:
232
- rubygems_version: 2.6.4
257
+ rubygems_version: 2.5.2
233
258
  signing_key:
234
259
  specification_version: 4
235
260
  summary: Lono is a CloudFormation Template ruby generator. Lono generates CloudFormation
236
261
  templates based on ERB templates.
237
262
  test_files:
238
263
  - spec/fixtures/cfn.json
264
+ - spec/lib/lono/dsl_spec.rb
265
+ - spec/lib/lono/new_spec.rb
239
266
  - spec/lib/lono_spec.rb
240
267
  - spec/spec_helper.rb