aws-ec2 0.8.0 → 0.8.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c555a3e325c610710e0db4ab6839ae08a29020f96c06b740c5283b383d4c34a5
4
- data.tar.gz: 3deb2d4cf2bbf39fb48dea6050ed1be67d2b3dcb4b68298bde8ad2bfc4ed8517
3
+ metadata.gz: 7eed22f3840f438dbfab2212334abcd8e4337e850f234bd7392e42e95fd0c6e7
4
+ data.tar.gz: 4d8cb388ffe2b1cbe1e5efdfd28e4d363443b8b4eba97b5f1843220310bbb439
5
5
  SHA512:
6
- metadata.gz: 81e3a1e2e6186fb146aa3377afab79430170853bb579c3782a877be38592a33dd0c4980d7bc68c7f992be5b4e4f31e85537b989459fe80b49395c9bcebf3bdaa
7
- data.tar.gz: 51dacb024e89a664e3c0b642a21220a67108a264f35d39d41ff25f9f9ece4acfec906e9f3ac01300238efc38b3ec9061ba3f4aba04af03ec40cc8009c7604f7e
6
+ metadata.gz: bfb928c51a9c89ded35ab43752a188e99bb5bd1f6f0cd784a20f977a36e4e9e1c9e1134a2379f761d77420342c2b78746bc4b8c162d9946c9a98ad1017c6a811
7
+ data.tar.gz: 2561e05ead626c13ca00b65f2760c7e34f8b63daafc02145c75e414d275c6d4706ac67f77f410e636a5593ba9a3f9d01f9e42af7e0097b11c1eb6f0cbae440bc
data/CHANGELOG.md CHANGED
@@ -3,6 +3,9 @@
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
+ ## [0.8.1]
7
+ - reorganize template helpers into core and update readme
8
+
6
9
  ## [0.8.0]
7
10
  - aws-ec2 upload_scripts command
8
11
  - rename aws-ec2 compile to aws-ec2 compile_scripts
data/README.md CHANGED
@@ -23,10 +23,7 @@ config | Access to the variables set in config/[AWS_EC2_ENV].yml.
23
23
  latest_ami | Returns an AMI id by searching the ami name pattern and sorting in reverse older. Example: `latest_ami("ruby-2.5.0_*")`
24
24
  search_ami | Returns a collection of AMI image objects based on a search pattern. The query searches on the AMI name.
25
25
 
26
- The template helpers defined in:
27
-
28
- * [aws_ec2/template_helper.rb](lib/aws_ec2/template_helper.rb).
29
- * [aws_ec2/template_helper](lib/aws_ec2/template_helper).
26
+ For a full list of all the template helpers checkout: [aws_ec2/template_helper](lib/aws_ec2/template_helper).
30
27
 
31
28
  You can also define your own custom helpers in the `app/helpers` folder as ruby modules with the naming convention `'*_helper.rb`. Example, the module FooHelper should be defined in `app/helpers/foo_helper.rb`. The custom helpers are first class citizens and have access to the same variables and methods as built in helpers.
32
29
 
@@ -5,12 +5,13 @@ class AwsEc2::Script
5
5
  class Upload < AwsEc2::Base
6
6
  def initialize(options={})
7
7
  @options = options
8
+ @compile = @options[:compile] ? @options[:compile] : true
8
9
  end
9
10
 
10
11
  def upload
11
- compiler.compile if @options[:compile]
12
+ compiler.compile if @compile
12
13
  sync_scripts_to_s3
13
- compiler.clean if @options[:compile] and !ENV['AWS_EC2_KEEP']
14
+ compiler.clean if @compile and !ENV['AWS_EC2_KEEP']
14
15
  end
15
16
 
16
17
  def sync_scripts_to_s3
@@ -1,5 +1,3 @@
1
- require "base64"
2
- require "erb"
3
1
  require "active_support/all"
4
2
 
5
3
  module AwsEc2
@@ -15,99 +13,5 @@ module AwsEc2
15
13
  include const_get(class_name)
16
14
  end
17
15
  end
18
-
19
- def user_data(name, base64=true)
20
- # allow user to specify the path also
21
- if File.exist?(name)
22
- name = File.basename(name) # normalize name, change path to name
23
- end
24
- name = File.basename(name, '.sh')
25
- path = "#{AwsEc2.root}/app/user-data/#{name}.sh"
26
- result = erb_result(path)
27
- result = append_scripts(result)
28
-
29
- # save the unencoded user-data script for easy debugging
30
- temp_path = "/tmp/aws-ec2/user-data.txt"
31
- FileUtils.mkdir_p(File.dirname(temp_path))
32
- IO.write(temp_path, result)
33
-
34
- base64 ? Base64.encode64(result).strip : result
35
- end
36
-
37
- # provides access to config/* settings as variables
38
- # AWS_EC2_ENV=development => config/development.yml
39
- # AWS_EC2_ENV=production => config/production.yml
40
- def config
41
- AwsEc2.config
42
- end
43
-
44
- # pretty timestamp that is useful for ami ids.
45
- # the timestamp is generated once and cached.
46
- def timestamp
47
- @timestamp ||= Time.now.strftime("%Y-%m-%d-%H-%M-%S")
48
- end
49
-
50
- private
51
- def append_scripts(user_data)
52
- # assuming user-data script is a bash script for simplicity
53
- script = AwsEc2::Script.new(@options)
54
- user_data += script.auto_terminate if @options[:auto_terminate]
55
- user_data += script.create_ami if @options[:ami_name]
56
- user_data
57
- end
58
-
59
- # Load custom helper methods from the project repo
60
- def load_custom_helpers
61
- Dir.glob("#{AwsEc2.root}/app/helpers/**/*_helper.rb").each do |path|
62
- filename = path.sub(%r{.*/},'').sub('.rb','')
63
- module_name = filename.classify
64
-
65
- require path
66
- self.class.send :include, module_name.constantize
67
- end
68
-
69
- end
70
-
71
- def erb_result(path)
72
- load_custom_helpers
73
- template = IO.read(path)
74
-
75
- # Allow a way to bypass the custom ERB error handling in case
76
- # the error is in the lambdagem code.
77
- if ENV['DEBUG']
78
- return ERB.new(template, nil, "-").result(binding)
79
- end
80
-
81
- begin
82
- ERB.new(template, nil, "-").result(binding)
83
- rescue Exception => e
84
- puts e
85
-
86
- # how to know where ERB stopped? - https://www.ruby-forum.com/topic/182051
87
- # syntax errors have the (erb):xxx info in e.message
88
- # undefined variables have (erb):xxx info in e.backtrac
89
- error_info = e.message.split("\n").grep(/\(erb\)/)[0]
90
- error_info ||= e.backtrace.grep(/\(erb\)/)[0]
91
- raise unless error_info # unable to find the (erb):xxx: error line
92
- line = error_info.split(':')[1].to_i
93
- puts "Error evaluating ERB template on line #{line.to_s.colorize(:red)} of: #{path.sub(/^\.\//, '')}"
94
-
95
- template_lines = template.split("\n")
96
- context = 5 # lines of context
97
- top, bottom = [line-context-1, 0].max, line+context-1
98
- spacing = template_lines.size.to_s.size
99
- template_lines[top..bottom].each_with_index do |line_content, index|
100
- line_number = top+index+1
101
- if line_number == line
102
- printf("%#{spacing}d %s\n".colorize(:red), line_number, line_content)
103
- else
104
- printf("%#{spacing}d %s\n", line_number, line_content)
105
- end
106
- end
107
-
108
- puts "\nIf the this error does not make sense and the error is not in the ERB template. Run the command again with DEBUG=1 to show the full lambdagem backtrace"
109
- exit 1 unless ENV['TEST']
110
- end
111
- end
112
16
  end
113
17
  end
@@ -0,0 +1,98 @@
1
+ require "base64"
2
+ require "erb"
3
+
4
+ module AwsEc2::TemplateHelper::Core
5
+ def user_data(name, base64=true)
6
+ # allow user to specify the path also
7
+ if File.exist?(name)
8
+ name = File.basename(name) # normalize name, change path to name
9
+ end
10
+ name = File.basename(name, '.sh')
11
+ path = "#{AwsEc2.root}/app/user-data/#{name}.sh"
12
+ result = erb_result(path)
13
+ result = append_scripts(result)
14
+
15
+ # save the unencoded user-data script for easy debugging
16
+ temp_path = "/tmp/aws-ec2/user-data.txt"
17
+ FileUtils.mkdir_p(File.dirname(temp_path))
18
+ IO.write(temp_path, result)
19
+
20
+ base64 ? Base64.encode64(result).strip : result
21
+ end
22
+
23
+ # provides access to config/* settings as variables
24
+ # AWS_EC2_ENV=development => config/development.yml
25
+ # AWS_EC2_ENV=production => config/production.yml
26
+ def config
27
+ AwsEc2.config
28
+ end
29
+
30
+ # pretty timestamp that is useful for ami ids.
31
+ # the timestamp is generated once and cached.
32
+ def timestamp
33
+ @timestamp ||= Time.now.strftime("%Y-%m-%d-%H-%M-%S")
34
+ end
35
+
36
+ private
37
+ def append_scripts(user_data)
38
+ # assuming user-data script is a bash script for simplicity
39
+ script = AwsEc2::Script.new(@options)
40
+ user_data += script.auto_terminate if @options[:auto_terminate]
41
+ user_data += script.create_ami if @options[:ami_name]
42
+ user_data
43
+ end
44
+
45
+ # Load custom helper methods from the project repo
46
+ def load_custom_helpers
47
+ Dir.glob("#{AwsEc2.root}/app/helpers/**/*_helper.rb").each do |path|
48
+ filename = path.sub(%r{.*/},'').sub('.rb','')
49
+ module_name = filename.classify
50
+
51
+ require path
52
+ self.class.send :include, module_name.constantize
53
+ end
54
+
55
+ end
56
+
57
+ def erb_result(path)
58
+ load_custom_helpers
59
+ template = IO.read(path)
60
+
61
+ # Allow a way to bypass the custom ERB error handling in case
62
+ # the error is in the lambdagem code.
63
+ if ENV['DEBUG']
64
+ return ERB.new(template, nil, "-").result(binding)
65
+ end
66
+
67
+ begin
68
+ ERB.new(template, nil, "-").result(binding)
69
+ rescue Exception => e
70
+ puts e
71
+
72
+ # how to know where ERB stopped? - https://www.ruby-forum.com/topic/182051
73
+ # syntax errors have the (erb):xxx info in e.message
74
+ # undefined variables have (erb):xxx info in e.backtrac
75
+ error_info = e.message.split("\n").grep(/\(erb\)/)[0]
76
+ error_info ||= e.backtrace.grep(/\(erb\)/)[0]
77
+ raise unless error_info # unable to find the (erb):xxx: error line
78
+ line = error_info.split(':')[1].to_i
79
+ puts "Error evaluating ERB template on line #{line.to_s.colorize(:red)} of: #{path.sub(/^\.\//, '')}"
80
+
81
+ template_lines = template.split("\n")
82
+ context = 5 # lines of context
83
+ top, bottom = [line-context-1, 0].max, line+context-1
84
+ spacing = template_lines.size.to_s.size
85
+ template_lines[top..bottom].each_with_index do |line_content, index|
86
+ line_number = top+index+1
87
+ if line_number == line
88
+ printf("%#{spacing}d %s\n".colorize(:red), line_number, line_content)
89
+ else
90
+ printf("%#{spacing}d %s\n", line_number, line_content)
91
+ end
92
+ end
93
+
94
+ puts "\nIf the this error does not make sense and the error is not in the ERB template. Run the command again with DEBUG=1 to show the full lambdagem backtrace"
95
+ exit 1 unless ENV['TEST']
96
+ end
97
+ end
98
+ end
@@ -1,3 +1,3 @@
1
1
  module AwsEc2
2
- VERSION = "0.8.0"
2
+ VERSION = "0.8.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-ec2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
@@ -223,6 +223,7 @@ files:
223
223
  - lib/aws_ec2/scripts/auto_terminate.sh
224
224
  - lib/aws_ec2/template_helper.rb
225
225
  - lib/aws_ec2/template_helper/ami_helper.rb
226
+ - lib/aws_ec2/template_helper/core.rb
226
227
  - lib/aws_ec2/template_helper/partial_helper.rb
227
228
  - lib/aws_ec2/version.rb
228
229
  - spec/fixtures/demo_project/config/test.yml