lambdapunt 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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