forger 2.0.5 → 3.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -0
  3. data/CHANGELOG.md +12 -0
  4. data/Gemfile.lock +40 -29
  5. data/README.md +6 -37
  6. data/docs/example/config/variables/development.rb +2 -0
  7. data/docs/example/profiles/default.yml +2 -2
  8. data/docs/extract-scripts.md +40 -0
  9. data/docs/layouts.md +35 -0
  10. data/docs/profiles.md +79 -0
  11. data/docs/variables.md +53 -0
  12. data/forger.gemspec +6 -3
  13. data/lib/forger.rb +4 -23
  14. data/lib/forger/autoloader.rb +21 -0
  15. data/lib/forger/aws_services.rb +22 -0
  16. data/lib/forger/clean.rb +0 -2
  17. data/lib/forger/cleaner.rb +0 -1
  18. data/lib/forger/cleaner/ami.rb +1 -1
  19. data/lib/forger/cli.rb +10 -6
  20. data/lib/forger/completer.rb +0 -2
  21. data/lib/forger/core.rb +28 -12
  22. data/lib/forger/create.rb +2 -23
  23. data/lib/forger/create/info.rb +10 -4
  24. data/lib/forger/create/waiter.rb +1 -1
  25. data/lib/forger/destroy.rb +1 -1
  26. data/lib/forger/help/upload.md +1 -13
  27. data/lib/forger/network.rb +2 -2
  28. data/lib/forger/new.rb +5 -6
  29. data/lib/forger/profile.rb +15 -3
  30. data/lib/forger/s3.rb +23 -0
  31. data/lib/forger/s3/bucket.rb +131 -0
  32. data/lib/forger/script.rb +0 -4
  33. data/lib/forger/script/upload.rb +12 -42
  34. data/lib/forger/scripts/cloudwatch.sh +2 -2
  35. data/lib/forger/scripts/shared/functions.sh +1 -1
  36. data/lib/forger/setting.rb +0 -32
  37. data/lib/forger/template.rb +0 -3
  38. data/lib/forger/template/context.rb +16 -1
  39. data/lib/forger/template/helper.rb +9 -9
  40. data/lib/forger/template/helper/ami_helper.rb +1 -1
  41. data/lib/forger/template/helper/core_helper.rb +7 -6
  42. data/lib/forger/template/helper/script_helper.rb +3 -9
  43. data/lib/forger/version.rb +1 -1
  44. data/lib/forger/wait.rb +0 -2
  45. data/lib/forger/waiter.rb +0 -1
  46. data/lib/forger/waiter/ami.rb +1 -1
  47. data/lib/templates/default/app/user_data/bootstrap.sh.tt +6 -9
  48. data/lib/templates/default/app/user_data/layouts/default.sh.tt +1 -5
  49. data/lib/templates/default/config/settings.yml.tt +1 -11
  50. data/lib/templates/default/config/{development.yml.tt → variables/development.yml.tt} +0 -0
  51. data/spec/fixtures/demo_project/app/user_data/bootstrap.sh +2 -2
  52. data/spec/fixtures/demo_project/config/settings.yml +2 -4
  53. data/spec/fixtures/demo_project/config/variables/test.rb +4 -0
  54. data/spec/fixtures/demo_project/profiles/default.yml +2 -2
  55. metadata +59 -13
  56. data/docs/example/config/development.yml +0 -7
  57. data/lib/forger/aws_service.rb +0 -7
  58. data/lib/forger/config.rb +0 -25
  59. data/spec/fixtures/demo_project/config/test.yml +0 -8
@@ -1,6 +1,4 @@
1
1
  module Forger
2
- autoload :Waiter, 'forger/waiter'
3
-
4
2
  class Wait < Command
5
3
  desc "ami", "Wait until AMI available."
6
4
  long_desc Help.text("wait:ami")
@@ -1,5 +1,4 @@
1
1
  module Forger
2
2
  module Waiter
3
- autoload :Ami, 'forger/waiter/ami'
4
3
  end
5
4
  end
@@ -1,6 +1,6 @@
1
1
  module Forger::Waiter
2
2
  class Ami < Forger::Base
3
- include Forger::AwsService
3
+ include Forger::AwsServices
4
4
 
5
5
  def wait
6
6
  delay = 30
@@ -1,12 +1,9 @@
1
- <% if @options[:s3_folder] -%>
1
+ # Example of calling the extracted shared scripts
2
2
  # setup: shared functions, path, awscli, etc
3
- source /opt/scripts/shared/functions.sh
4
- export PATH=/usr/local/bin/:$PATH
5
- configure_aws_cli /root
6
- configure_aws_cli /home/ec2-user
7
-
8
- # install software
9
- /opt/scripts/install/common.sh
10
- <% end -%>
3
+ # source /opt/scripts/shared/functions.sh
4
+ # export PATH=/usr/local/bin/:$PATH
5
+ # configure_aws_cli /root
6
+ # configure_aws_cli /home/ec2-user
7
+ # /opt/scripts/install/common.sh
11
8
 
12
9
  <%%= personalize_script %>
@@ -5,12 +5,8 @@ cd ~ # user-data starts off in / so go to $HOME
5
5
 
6
6
  <%%= add_ssh_key %>
7
7
 
8
- <% if options[:s3_folder] -%>
9
- <%%= extract_scripts(to: "/opt") %>
10
- <% else -%>
11
8
  # Uncomment to use extract_scripts and use app/scripts
12
- <%%# extract_scripts(to: "/opt") %>
13
- <% end -%>
9
+ <%%=# extract_scripts(to: "/opt") %>
14
10
 
15
11
  <%%= yield %>
16
12
 
@@ -8,18 +8,8 @@ base:
8
8
  # There are separate files to separate user defined variables and internal
9
9
  # setting configs.
10
10
  development:
11
- # By setting s3_folder, forger will automatically tarball and upload your scripts
12
- # to set. You then can then use the extract_scripts helper method to download
13
- # the scripts onto the server.
14
- # s3_folder: mybucket/path/to/folder # simple string
15
11
  # compile_clean: true # uncomment to clean
16
12
  # extract_scripts:
17
13
  # to: "/opt"
18
14
  # as: "ec2-user"
19
- aws_profiles:
20
- - my-aws-profile
21
- <% if @options[:s3_folder] -%>
22
- s3_folder: <%= @options[:s3_folder] %>
23
- <% else -%>
24
- # s3_folder: my-s3-bucket/ec2
25
- <% end -%>
15
+ aws_profile: my-aws-profile
@@ -1,4 +1,4 @@
1
1
  #!/bin/bash
2
2
 
3
- # test env variables from config/[ENV].yml file
4
- # test_key: <%= config["test_key"] %>
3
+ # test env variables from config/variables/[FORGER_ENV].rb file
4
+ # test_key: <%= @test_key %>
@@ -13,10 +13,8 @@ development:
13
13
  # extract_scripts:
14
14
  # to: "/opt"
15
15
  # as: "ec2-user"
16
- # aws_profiles:
17
- # - profile1
16
+ # aws_profile: profile1
18
17
 
19
18
  production:
20
19
  # s3_folder: mybucket/folder
21
- # aws_profiles:
22
- # - profile2
20
+ # aws_profile: profile2
@@ -0,0 +1,4 @@
1
+ @subnets = %w[subnet-111 subnet-222]
2
+ @security_group_ids = %w[sg-111]
3
+ @test_key = ENV['TEST_KEY']
4
+
@@ -10,8 +10,8 @@ user_data: "<%= user_data("bootstrap.sh") %>"
10
10
  iam_instance_profile:
11
11
  name: <%= ENV['IAM_INSTANCE_PROFILE'] %>
12
12
  # public network settings
13
- security_group_ids: <%= config["security_group_ids"].inspect %>
14
- subnet_id: <%= config["subnets"].shuffle.first %>
13
+ security_group_ids: <%= @security_group_ids.inspect %>
14
+ subnet_id: <%= @subnets.shuffle.first %>
15
15
  block_device_mappings:
16
16
  - device_name: /dev/xvda
17
17
  ebs:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-25 00:00:00.000000000 Z
11
+ date: 2019-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk-cloudformation
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: aws-sdk-ec2
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: cfn-status
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: dotenv
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +178,20 @@ dependencies:
150
178
  - - ">="
151
179
  - !ruby/object:Gem::Version
152
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: zeitwerk
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
153
195
  - !ruby/object:Gem::Dependency
154
196
  name: bundler
155
197
  requirement: !ruby/object:Gem::Requirement
@@ -235,8 +277,7 @@ dependencies:
235
277
  - !ruby/object:Gem::Version
236
278
  version: '0'
237
279
  description:
238
- email:
239
- - tongueroo@gmail.com
280
+ email: tongueroo@gmail.com
240
281
  executables:
241
282
  - forger
242
283
  extensions: []
@@ -258,14 +299,19 @@ files:
258
299
  - docs/example/.env.production
259
300
  - docs/example/app/scripts/hello.sh
260
301
  - docs/example/app/user_data/bootstrap.sh
261
- - docs/example/config/development.yml
302
+ - docs/example/config/variables/development.rb
262
303
  - docs/example/profiles/default.yml
263
304
  - docs/example/profiles/spot.yml
305
+ - docs/extract-scripts.md
306
+ - docs/layouts.md
307
+ - docs/profiles.md
308
+ - docs/variables.md
264
309
  - exe/forger
265
310
  - forger.gemspec
266
311
  - lib/forger.rb
267
312
  - lib/forger/ami.rb
268
- - lib/forger/aws_service.rb
313
+ - lib/forger/autoloader.rb
314
+ - lib/forger/aws_services.rb
269
315
  - lib/forger/base.rb
270
316
  - lib/forger/clean.rb
271
317
  - lib/forger/cleaner.rb
@@ -275,7 +321,6 @@ files:
275
321
  - lib/forger/completer.rb
276
322
  - lib/forger/completer/script.rb
277
323
  - lib/forger/completer/script.sh
278
- - lib/forger/config.rb
279
324
  - lib/forger/core.rb
280
325
  - lib/forger/create.rb
281
326
  - lib/forger/create/error_messages.rb
@@ -299,6 +344,8 @@ files:
299
344
  - lib/forger/network.rb
300
345
  - lib/forger/new.rb
301
346
  - lib/forger/profile.rb
347
+ - lib/forger/s3.rb
348
+ - lib/forger/s3/bucket.rb
302
349
  - lib/forger/script.rb
303
350
  - lib/forger/script/compile.rb
304
351
  - lib/forger/script/compress.rb
@@ -350,13 +397,13 @@ files:
350
397
  - lib/templates/default/app/scripts/shared/functions.sh
351
398
  - lib/templates/default/app/user_data/bootstrap.sh.tt
352
399
  - lib/templates/default/app/user_data/layouts/default.sh.tt
353
- - lib/templates/default/config/development.yml.tt
354
400
  - lib/templates/default/config/settings.yml.tt
401
+ - lib/templates/default/config/variables/development.yml.tt
355
402
  - lib/templates/default/profiles/default.yml.tt
356
403
  - spec/fixtures/demo_project/.env.test
357
404
  - spec/fixtures/demo_project/app/user_data/bootstrap.sh
358
405
  - spec/fixtures/demo_project/config/settings.yml
359
- - spec/fixtures/demo_project/config/test.yml
406
+ - spec/fixtures/demo_project/config/variables/test.rb
360
407
  - spec/fixtures/demo_project/profiles/default.yml
361
408
  - spec/lib/cli_spec.rb
362
409
  - spec/lib/core_helper_spec.rb
@@ -381,16 +428,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
381
428
  - !ruby/object:Gem::Version
382
429
  version: '0'
383
430
  requirements: []
384
- rubyforge_project:
385
- rubygems_version: 2.7.6
431
+ rubygems_version: 3.0.6
386
432
  signing_key:
387
433
  specification_version: 4
388
- summary: Tool to create AWS ec2 instances
434
+ summary: Create EC2 Instances with preconfigured settings
389
435
  test_files:
390
436
  - spec/fixtures/demo_project/.env.test
391
437
  - spec/fixtures/demo_project/app/user_data/bootstrap.sh
392
438
  - spec/fixtures/demo_project/config/settings.yml
393
- - spec/fixtures/demo_project/config/test.yml
439
+ - spec/fixtures/demo_project/config/variables/test.rb
394
440
  - spec/fixtures/demo_project/profiles/default.yml
395
441
  - spec/lib/cli_spec.rb
396
442
  - spec/lib/core_helper_spec.rb
@@ -1,7 +0,0 @@
1
- ---
2
- subnets:
3
- - subnet-111
4
- - subnet-222
5
- - subnet-333
6
- security_group_ids:
7
- - sg-111
@@ -1,7 +0,0 @@
1
- require 'aws-sdk-ec2'
2
-
3
- module Forger::AwsService
4
- def ec2
5
- @ec2 ||= Aws::EC2::Client.new
6
- end
7
- end
@@ -1,25 +0,0 @@
1
- require 'yaml'
2
- require 'render_me_pretty'
3
-
4
- module Forger
5
- class Config < Base
6
- include Forger::Template
7
-
8
- def initialize(options={})
9
- super
10
- @path = options[:path] || "#{Forger.root}/config/#{Forger.env}.yml"
11
- end
12
-
13
- @@data = nil
14
- def data
15
- return @@data if @@data
16
-
17
- text = RenderMePretty.result(@path, context: context)
18
- @@data = YAML.load(text)
19
- rescue Errno::ENOENT => e
20
- puts e.message
21
- puts "The #{@path} does not exist. Please double check that it exists."
22
- exit
23
- end
24
- end
25
- end
@@ -1,8 +0,0 @@
1
- ---
2
- subnets:
3
- - subnet-123
4
- - subnet-456
5
- security_group_ids:
6
- - sg-123 # test-single-instance
7
- s3_bucket: my-bucket # for the user-data shared scripts
8
- test_key: <%= ENV['TEST_KEY'] %>