lambdapunt 0.1.2 → 0.1.3

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
  SHA1:
3
- metadata.gz: 8560007dccbe7c9ccf74e4549167d7930a1dbc44
4
- data.tar.gz: 260616d845f5f93bb4942940bfdc59f7e95c7735
3
+ metadata.gz: c4c98030643b5ea9e908ca399b651193f88d6096
4
+ data.tar.gz: ed238dae54f09894acd0db86c59eaa8e0d2e1f26
5
5
  SHA512:
6
- metadata.gz: 009e2e7a9c59c265c2d676c5f997fd8612a94f2b73c47204068c0b3f3c44ae12ad01ed5d0cf887c130e8585883481798eb7ef634a6a797c09954544c814860cd
7
- data.tar.gz: b1498f3796d5be03a14e900a11bfb179f007a542372e77febaf33e465e47f7b4669168bdf1e973db50ed7d1ecf2e800e3194dd8d6acd0eeaa411e5bb2e8a21b3
6
+ metadata.gz: ed0eec1fb0bf7aa731d90105f36eb346c07b50410129fe11606c0a4f0bd755536cf83207a387323f200c2b5abf12728be29e8a7c9c71e3276a7d11e83f6ea503
7
+ data.tar.gz: 8c8d6ee267fbd6d87ca9a13598b10ddb7392073cf40ae076ce64069dc7df23171e758a2cf7f893f3f364f74d61d1413e06403cf251d4f83248b19d69d99057b6
Binary file
data.tar.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -92,3 +92,5 @@ build/
92
92
 
93
93
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
94
94
  .rvmrc
95
+
96
+ scraps.txt
@@ -0,0 +1,7 @@
1
+ # Rubocop config file for the lambdapunt project.
2
+ AllCops:
3
+ Excludes:
4
+ - '*.gemspec'
5
+ - 'Guardfile'
6
+ Documentation:
7
+ Enabled: false
@@ -0,0 +1,23 @@
1
+ # lambdapunt Guardfile
2
+
3
+ guard :minitest do
4
+ # with Minitest::Unit
5
+ watch(%r{^test/(.*)\/?test_(.*)\.rb$})
6
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
7
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
8
+
9
+ # with Minitest::Spec
10
+ watch(%r{^spec/(.*)_spec\.rb$})
11
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
12
+ watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
13
+ end
14
+
15
+ guard :rubocop do
16
+ watch(%r{.+\.rb$})
17
+ watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
18
+ end
19
+
20
+ guard 'rubycritic' do
21
+ watch(%r{^app/(.+)\.rb$})
22
+ watch(%r{^lib/(.+)\.rb$})
23
+ end
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
- task :default => :test
10
+ task default: :test
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "lambdapunt"
3
+ require 'bundler/setup'
4
+ require 'lambdapunt'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
- require "pry"
9
+ require 'pry'
10
10
  Pry.start
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'lambdapunt'
3
+
4
+ Lambdapunt::CLI.start
@@ -1,42 +1,51 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
4
5
  require 'lambdapunt/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "lambdapunt"
8
+ spec.name = 'lambdapunt'
8
9
  spec.version = Lambdapunt::VERSION
9
- spec.authors = ["Daniel Meyer"]
10
- spec.email = ["the.daniel.meyer@gmail.com"]
10
+ spec.authors = ['Daniel Meyer']
11
+ spec.email = ['the.daniel.meyer@gmail.com']
11
12
 
12
- spec.summary = %q{AWS Lambda deploy tool for Java projects}
13
- spec.description = %q{This tool will deploy jar files and update lambda functions.}
14
- spec.homepage = "https://github.com/danielmeyer/lambdapunt"
15
- spec.license = "MIT"
13
+ spec.summary = %q(AWS Lambda deploy tool for Java projects)
14
+ spec.description = %q(This tool will deploy jar files and update lambda functions.)
15
+ spec.homepage = 'https://github.com/danielmeyer/lambdapunt'
16
+ spec.license = 'MIT'
16
17
 
17
18
  spec.cert_chain = ['certs/danielmeyer.pem']
18
- spec.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
19
+ spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem') if $0 =~ /gem\z/
19
20
 
20
21
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
21
22
  # delete this section to allow pushing this gem to any host.
22
23
  if spec.respond_to?(:metadata)
23
- spec.metadata['allowed_push_host'] = "https://rubygems.org"
24
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
24
25
  else
25
- raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
26
+ fail 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
26
27
  end
27
28
 
28
29
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
29
- spec.bindir = "exe"
30
+ spec.bindir = 'exe'
30
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ["lib"]
32
-
33
- spec.add_development_dependency "bundler", "~> 1.10"
34
- spec.add_development_dependency "rake", "~> 10.0"
35
- spec.add_development_dependency "minitest", "~> 5.8"
36
- spec.add_development_dependency "coveralls", "~> 0.8"
37
- spec.add_development_dependency "pry", "~> 0.10"
38
- spec.add_development_dependency "gem-release", "~> 0.7"
39
-
40
- spec.add_runtime_dependency "thor", "~> 0.19"
32
+ spec.require_paths = ['lib']
33
+
34
+ spec.add_development_dependency 'bundler', '~> 1.10'
35
+ spec.add_development_dependency 'rake', '~> 10.0'
36
+ spec.add_development_dependency 'minitest', '~> 5.8'
37
+ spec.add_development_dependency 'coveralls', '~> 0.8'
38
+ spec.add_development_dependency 'pry', '~> 0.10'
39
+ spec.add_development_dependency 'gem-release', '~> 0.7'
40
+ spec.add_development_dependency 'rubocop', '~> 0.29'
41
+ spec.add_development_dependency 'rubycritic', '~> 1.4'
42
+ spec.add_development_dependency 'guard', '~> 2.13'
43
+ spec.add_development_dependency 'guard-minitest', '~> 2.4'
44
+ spec.add_development_dependency 'guard-rubocop', '~> 1.2'
45
+ spec.add_development_dependency 'guard-rubycritic', '~> 1.4'
46
+
47
+ spec.add_runtime_dependency 'thor', '~> 0.19'
48
+ spec.add_runtime_dependency 'aws-sdk', '~> 2'
49
+ spec.add_runtime_dependency 'safe_yaml', '~> 1.0'
41
50
 
42
51
  end
@@ -1,5 +1,10 @@
1
1
  require 'lambdapunt/version'
2
+ require 'lambdapunt/config'
3
+ require 'lambdapunt/deploy'
2
4
  require 'lambdapunt/cli'
5
+ require 'lambdapunt/lambda_function'
6
+ require 'lambdapunt/code_archive'
7
+ require 'lambdapunt/deployment_plan'
3
8
 
4
9
  module Lambdapunt
5
10
  # Your code goes here...
@@ -1,11 +1,18 @@
1
- require "thor"
1
+ require 'thor'
2
+ require 'lambdapunt/deploy'
2
3
 
3
4
  module Lambdapunt
4
- class CLI < Thor
5
- desc "version", "display version"
6
- def version
7
- puts "lambdapunt version #{::Lambdapunt::VERSION}"
8
- end
9
- end
5
+ class CLI < Thor
6
+ option :config
10
7
 
11
- end
8
+ desc 'version', 'display version'
9
+ def version
10
+ puts ::Lambdapunt::VERSION
11
+ end
12
+
13
+ desc 'deploy FILE', 'deploy a file'
14
+ def deploy(file)
15
+ Lambdapunt::deploy(file)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,36 @@
1
+ require 'aws-sdk'
2
+ require 'pathname'
3
+
4
+ module Lambdapunt
5
+ class CodeArchive
6
+ attr_reader :filename, :directory, :fullpath
7
+
8
+ def initialize(filename, bucket, regions)
9
+ @fullpath = filename
10
+ @filename = File.basename(filename)
11
+ @directory = File.dirname(filename)
12
+ @bucket = bucket
13
+ @regions = Array(regions)
14
+ end
15
+
16
+ def upload
17
+ upload_to_regions
18
+ end
19
+
20
+ private
21
+
22
+ def upload_to_regions
23
+ @regions.each do |region|
24
+ upload_to_region(region)
25
+ end
26
+ end
27
+
28
+ def upload_to_region(region)
29
+ s3_client = ::Aws::S3::Resource.new(region: region)
30
+ obj = s3_client.bucket(@bucket).object(@filename)
31
+ obj.upload_file(@fullpath)
32
+ obj
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ require 'safe_yaml/load'
2
+
3
+ module Lambdapunt
4
+ class Config
5
+ attr_reader :settings, :functions
6
+
7
+ def initialize(filename='./.lambdapunt.yml')
8
+ data = transform_keys_to_symbols(SafeYAML::load_file(filename))
9
+
10
+ @settings = data[:settings]
11
+ @functions = data[:functions]
12
+ end
13
+
14
+ private
15
+
16
+ def transform_keys_to_symbols(value)
17
+ return value if not value.is_a?(Hash)
18
+ hash = value.inject({}){|memo,(k,v)| memo[k.to_sym] = transform_keys_to_symbols(v); memo}
19
+ return hash
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ require 'pathname'
2
+
3
+ module Lambdapunt
4
+ module_function
5
+
6
+ def deploy(filename, config_file = './.lambdapunt.yml')
7
+ config = Lambdapunt::Config.new(config_file)
8
+
9
+ archive = Lambdapunt::CodeArchive.new(filename, config.settings[:bucket], config.settings[:regions]).upload
10
+
11
+ deployment_plan = Lambdapunt::DeploymentPlan.new(config.functions, config.settings)
12
+
13
+ deployment_plan.steps.each do |deployment_step|
14
+ deployment_step[:filename] = File.basename(filename)
15
+ Lambdapunt::LambdaFunction.new(deployment_step).deploy
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ require 'safe_yaml/load'
2
+
3
+ module Lambdapunt
4
+ class DeploymentPlan
5
+ attr_reader :recipes
6
+
7
+ def initialize(recipes, settings)
8
+ @recipes = recipes
9
+ @settings = settings
10
+ end
11
+
12
+ def steps
13
+ data = []
14
+ @recipes.each do |function_name, function_settings|
15
+ function_settings[:handler] = [ @settings[:module], '::', function_settings[:handler]].join
16
+ @settings[:regions].each do |region|
17
+ step = @settings.merge({ function_name: function_name.to_s, region: region }).merge(function_settings)
18
+ data << strip_keys(step, [:regions, :module])
19
+ end
20
+ end
21
+ data
22
+ end
23
+
24
+ private
25
+
26
+ def strip_keys(hash_in, keys_in)
27
+ keys_in.each { |k| hash_in.delete(k)}
28
+ hash_in
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,60 @@
1
+ require 'aws-sdk'
2
+
3
+ module Lambdapunt
4
+ class LambdaFunction
5
+
6
+ def initialize(params)
7
+ @params = params
8
+ @lambda_client = ::Aws::Lambda::Client.new(region: @params[:region])
9
+ end
10
+
11
+ def deploy
12
+ begin
13
+ response = @lambda_client.get_function({function_name: @params[:function_name]})
14
+ update_function_code
15
+ rescue Aws::Lambda::Errors::ResourceNotFoundException
16
+ create_function
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def create_function
23
+ lambda_function = @lambda_client.create_function({
24
+ function_name: @params[:function_name],
25
+ runtime: @params[:runtime],
26
+ description: @params[:description],
27
+ timeout: @params[:timeout],
28
+ memory_size: @params[:memory_size],
29
+ handler: @params[:handler],
30
+ role: @params[:role],
31
+ code: {
32
+ s3_key: @params[:filename],
33
+ s3_bucket: @params[:bucket]
34
+ }
35
+ })
36
+ lambda_function
37
+ end
38
+
39
+ def update_function_code
40
+ response = @lambda_client.update_function_code({
41
+ function_name: @params[:function_name],
42
+ s3_key: @params[:filename],
43
+ s3_bucket: @params[:bucket]
44
+ })
45
+ response
46
+ end
47
+
48
+ def update_function_settings
49
+ response = @lambda_client.update_function_configuration({
50
+ function_name: @params[:function_name],
51
+ role: @params[:role],
52
+ handler: @params[:handler],
53
+ description: @params[:description],
54
+ timeout: @params[:timeout],
55
+ memory_size: @params[:memory_size]
56
+ })
57
+ response
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,21 @@
1
+ # # Sample lambdapunt configuration file
2
+ # settings:
3
+ # memory_size: 128
4
+ # runtime: 'java8'
5
+ # timeout: 10
6
+ # role: 'arn:aws:iam::368057212345:role/lambda-operation-role'
7
+ # description: 'Test function.'
8
+ # module: 'com.something.api'
9
+ # bucket: 'some-test-bucket'
10
+ # regions: ['us-east-1']
11
+ # functions:
12
+ # function1:
13
+ # handler: 'handler1'
14
+ # 'function2_cake':
15
+ # handler: 'handler2'
16
+ # timeout: 5
17
+ # function_3:
18
+ # memory_size: 1024
19
+ # description: 'This is function #3'
20
+ # handler: 'handler3'
21
+ #
@@ -0,0 +1,21 @@
1
+ # Sample lambdapunt configuration file
2
+ settings:
3
+ memory_size: 128
4
+ runtime: 'java8'
5
+ timeout: 10
6
+ role: 'arn:aws:iam::368057212345:role/lambda-operation-role'
7
+ description: 'Test function.'
8
+ module: 'com.something.api'
9
+ bucket: 'some-test-bucket'
10
+ regions: ['us-east-1']
11
+ functions:
12
+ function1:
13
+ handler: 'handler1'
14
+ 'function2_cake':
15
+ handler: 'handler2'
16
+ timeout: 5
17
+ function_3:
18
+ memory_size: 1024
19
+ description: 'This is function #3'
20
+ handler: 'handler3'
21
+
@@ -1,3 +1,3 @@
1
1
  module Lambdapunt
2
- VERSION = "0.1.2"
2
+ VERSION = '0.1.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lambdapunt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Meyer
@@ -31,7 +31,7 @@ cert_chain:
31
31
  JPK3nZE3xCDDyuqRlklMwkez36Azf+o6clNsU0PS45x1wsnjJpG6eR7Q18T760Gg
32
32
  GiwyRQFX
33
33
  -----END CERTIFICATE-----
34
- date: 2015-08-29 00:00:00.000000000 Z
34
+ date: 2015-09-01 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
@@ -117,6 +117,90 @@ dependencies:
117
117
  - - "~>"
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0.7'
120
+ - !ruby/object:Gem::Dependency
121
+ name: rubocop
122
+ requirement: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: '0.29'
127
+ type: :development
128
+ prerelease: false
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '0.29'
134
+ - !ruby/object:Gem::Dependency
135
+ name: rubycritic
136
+ requirement: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '1.4'
141
+ type: :development
142
+ prerelease: false
143
+ version_requirements: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '1.4'
148
+ - !ruby/object:Gem::Dependency
149
+ name: guard
150
+ requirement: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '2.13'
155
+ type: :development
156
+ prerelease: false
157
+ version_requirements: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '2.13'
162
+ - !ruby/object:Gem::Dependency
163
+ name: guard-minitest
164
+ requirement: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: '2.4'
169
+ type: :development
170
+ prerelease: false
171
+ version_requirements: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: '2.4'
176
+ - !ruby/object:Gem::Dependency
177
+ name: guard-rubocop
178
+ requirement: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: '1.2'
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '1.2'
190
+ - !ruby/object:Gem::Dependency
191
+ name: guard-rubycritic
192
+ requirement: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - "~>"
195
+ - !ruby/object:Gem::Version
196
+ version: '1.4'
197
+ type: :development
198
+ prerelease: false
199
+ version_requirements: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - "~>"
202
+ - !ruby/object:Gem::Version
203
+ version: '1.4'
120
204
  - !ruby/object:Gem::Dependency
121
205
  name: thor
122
206
  requirement: !ruby/object:Gem::Requirement
@@ -131,29 +215,66 @@ dependencies:
131
215
  - - "~>"
132
216
  - !ruby/object:Gem::Version
133
217
  version: '0.19'
218
+ - !ruby/object:Gem::Dependency
219
+ name: aws-sdk
220
+ requirement: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - "~>"
223
+ - !ruby/object:Gem::Version
224
+ version: '2'
225
+ type: :runtime
226
+ prerelease: false
227
+ version_requirements: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - "~>"
230
+ - !ruby/object:Gem::Version
231
+ version: '2'
232
+ - !ruby/object:Gem::Dependency
233
+ name: safe_yaml
234
+ requirement: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - "~>"
237
+ - !ruby/object:Gem::Version
238
+ version: '1.0'
239
+ type: :runtime
240
+ prerelease: false
241
+ version_requirements: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - "~>"
244
+ - !ruby/object:Gem::Version
245
+ version: '1.0'
134
246
  description: This tool will deploy jar files and update lambda functions.
135
247
  email:
136
248
  - the.daniel.meyer@gmail.com
137
249
  executables:
138
- - lpunt
250
+ - lambdapunt
139
251
  extensions: []
140
252
  extra_rdoc_files: []
141
253
  files:
142
254
  - ".coveralls.yml"
143
255
  - ".gitignore"
256
+ - ".rubocop.yml"
144
257
  - ".ruby-version"
145
258
  - ".travis.yml"
146
259
  - Gemfile
260
+ - Guardfile
147
261
  - LICENSE
148
262
  - README.md
149
263
  - Rakefile
150
264
  - bin/console
151
265
  - bin/setup
152
266
  - certs/danielmeyer.pem
153
- - exe/lpunt
267
+ - exe/lambdapunt
154
268
  - lambdapunt.gemspec
155
269
  - lib/lambdapunt.rb
156
270
  - lib/lambdapunt/cli.rb
271
+ - lib/lambdapunt/code_archive.rb
272
+ - lib/lambdapunt/config.rb
273
+ - lib/lambdapunt/deploy.rb
274
+ - lib/lambdapunt/deployment_plan.rb
275
+ - lib/lambdapunt/lambda_function.rb
276
+ - lib/lambdapunt/templates/lambdapunt.yml
277
+ - lib/lambdapunt/templates/test.yml
157
278
  - lib/lambdapunt/version.rb
158
279
  homepage: https://github.com/danielmeyer/lambdapunt
159
280
  licenses:
metadata.gz.sig CHANGED
Binary file
data/exe/lpunt DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "lambdapunt"
4
-
5
- Lambdapunt::CLI.start