dpl 1.8.30.travis.1843.3 → 1.8.30.travis.1849.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: 415081635bd9b2a23bf3f95d2100542e42d2ae79
4
- data.tar.gz: f8669bbf17aee7ae33de15d805a78c4a68d9c6e9
3
+ metadata.gz: 53f98382ab9c2fd449cf66a1673e1b7a3e502191
4
+ data.tar.gz: 60dc13bf847cf6d804be7affbb1e11d7dcda4c4a
5
5
  SHA512:
6
- metadata.gz: 169c05ea02c10f6538635768fd765e5a404fff2064caf99729352467906f43b0cf9f653a5eee17225100c54eff3c581ad5bdc04501f6161104fb5d9d5976502c
7
- data.tar.gz: b8458c9b0397be15abb7942e9679538204b0ff349170bccb2628aef9c75774b27a802dab654c54d795f1355fd98e231b26bfb309b200b13062b38d3301200c40
6
+ metadata.gz: 0fe508ade4e79f2ea574ed58cbd915c61d51c323e901f8ee8d7b8e5290470613230e4d19cbf9502f8e2f9e5394138e1b21ba6926ca69f5b1ccca0b2ff7d9cf3c
7
+ data.tar.gz: 62c45debd3a88b8502c0cafb13a0a57e58f6398350f862334de3e3176faf5162cdfd9412da91957accb1a2183ae331c0f4ebdbb571de3feb3a087a8bf3db9f6c
data/README.md CHANGED
@@ -707,6 +707,7 @@ c. Update your `before_deploy` step in `.travis.yml` to update the `known_hosts`
707
707
  * **timeout**: Optional. The function execution time at which Lambda should terminate the function. Defaults to 3 (seconds).
708
708
  * **memory_size**: Optional. The amount of memory in MB to allocate to this Lambda. Defaults to 128.
709
709
  * **runtime**: Optional. The Lambda runtime to use. Defaults to `node`.
710
+ * **publish**: If `true`, a [new version](http://docs.aws.amazon.com/lambda/latest/dg/versioning-intro.html#versioning-intro-publish-version) of the Lambda function will be created instead of replacing the code of the existing one.
710
711
 
711
712
  #### Examples:
712
713
 
@@ -9,7 +9,7 @@ module DPL
9
9
  requires 'rubyzip', load: 'zip'
10
10
 
11
11
  def lambda
12
- @lambda ||= ::Aws::LambdaPreview::Client.new(lambda_options)
12
+ @lambda ||= ::Aws::Lambda::Client.new(lambda_options)
13
13
  end
14
14
 
15
15
  def lambda_options
@@ -20,27 +20,67 @@ module DPL
20
20
  end
21
21
 
22
22
  def push_app
23
- # Options defined at
24
- # https://docs.aws.amazon.com/sdkforruby/api/Aws/LambdaPreview/Client.html
25
- # https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html
26
- response = lambda.upload_function({
27
- function_name: options[:name] || option(:function_name),
28
- description: options[:description] || default_description,
29
- timeout: options[:timeout] || default_timeout,
30
- memory_size: options[:memory_size] || deafult_memory_size,
31
- role: option(:role),
32
- handler: handler,
33
- function_zip: function_zip,
34
- runtime: options[:runtime] || default_runtime,
35
- mode: default_mode,
36
- })
37
-
38
- log "Uploaded lambda: #{response.function_name}."
39
- rescue ::Aws::LambdaPreview::Errors::ServiceException => exception
23
+
24
+ # The original LambdaPreview client supported create/update in one call
25
+ # To keep compatibility we try to fetch the function and then decide
26
+ # whether to update the code or create a new function
27
+
28
+ function_name = options[:name] || option(:function_name)
29
+
30
+ response = lambda.list_functions
31
+
32
+ if response.functions.any? { |function| function.function_name == function_name }
33
+
34
+ log "Function #{function_name} already exists, updating."
35
+
36
+ # Options defined at
37
+ # https://docs.aws.amazon.com/sdkforruby/api/Aws/Lambda/Client.html#update_function_configuration-instance_method
38
+ response = lambda.update_function_configuration({
39
+ function_name: function_name,
40
+ description: options[:description] || default_description,
41
+ timeout: options[:timeout] || default_timeout,
42
+ memory_size: options[:memory_size] || default_memory_size,
43
+ role: option(:role),
44
+ handler: handler,
45
+ runtime: options[:runtime] || default_runtime,
46
+ })
47
+
48
+
49
+ log "Updated configuration of function: #{response.function_name}."
50
+
51
+ # Options defined at
52
+ # https://docs.aws.amazon.com/sdkforruby/api/Aws/Lambda/Client.html#update_function_code-instance_method
53
+ response = lambda.update_function_code({
54
+ function_name: options[:name] || option(:function_name),
55
+ zip_file: function_zip,
56
+ publish: publish,
57
+ })
58
+
59
+ log "Updated code of function: #{response.function_name}."
60
+ else
61
+ # Options defined at
62
+ # https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html
63
+ response = lambda.create_function({
64
+ function_name: options[:name] || option(:function_name),
65
+ description: options[:description] || default_description,
66
+ timeout: options[:timeout] || default_timeout,
67
+ memory_size: options[:memory_size] || default_memory_size,
68
+ role: option(:role),
69
+ handler: handler,
70
+ code: {
71
+ zip_file: function_zip,
72
+ },
73
+ runtime: options[:runtime] || default_runtime,
74
+ publish: publish,
75
+ })
76
+
77
+ log "Created lambda: #{response.function_name}."
78
+ end
79
+ rescue ::Aws::Lambda::Errors::ServiceException => exception
40
80
  error(exception.message)
41
- rescue ::Aws::LambdaPreview::Errors::InvalidParameterValueException => exception
81
+ rescue ::Aws::Lambda::Errors::InvalidParameterValueException => exception
42
82
  error(exception.message)
43
- rescue ::Aws::LambdaPreview::Errors::ResourceNotFoundException => exception
83
+ rescue ::Aws::Lambda::Errors::ResourceNotFoundException => exception
44
84
  error(exception.message)
45
85
  end
46
86
 
@@ -111,10 +151,6 @@ module DPL
111
151
  'nodejs'
112
152
  end
113
153
 
114
- def default_mode
115
- 'event'
116
- end
117
-
118
154
  def default_timeout
119
155
  3 # seconds
120
156
  end
@@ -123,7 +159,7 @@ module DPL
123
159
  "Deploy build #{context.env['TRAVIS_BUILD_NUMBER']} to AWS Lambda via Travis CI"
124
160
  end
125
161
 
126
- def deafult_memory_size
162
+ def default_memory_size
127
163
  128
128
164
  end
129
165
 
@@ -131,6 +167,10 @@ module DPL
131
167
  'index'
132
168
  end
133
169
 
170
+ def publish
171
+ !!options[:publish]
172
+ end
173
+
134
174
  def random_chars(count=8)
135
175
  (36**(count-1) + rand(36**count - 36**(count-1))).to_s(36)
136
176
  end
@@ -53,7 +53,7 @@ describe DPL::Provider::Lambda do
53
53
 
54
54
  describe '#lambda' do
55
55
  example do
56
- expect(Aws::LambdaPreview::Client).to receive(:new).with(client_options).once
56
+ expect(Aws::Lambda::Client).to receive(:new).with(client_options).once
57
57
  provider.lambda
58
58
  end
59
59
  end
@@ -66,6 +66,16 @@ describe DPL::Provider::Lambda do
66
66
  handler_name: 'handler'
67
67
  }
68
68
 
69
+ list_functions_response = {
70
+ functions: [
71
+ { function_name: 'test-function' }
72
+ ]
73
+ }
74
+
75
+ empty_list_functions_response = {
76
+ functions: [ ]
77
+ }
78
+
69
79
  example_response = {
70
80
  function_name: 'test-function',
71
81
  role: 'some-role',
@@ -77,20 +87,37 @@ describe DPL::Provider::Lambda do
77
87
  provider.stub(:options) { old_options.merge(lambda_options) }
78
88
  end
79
89
 
80
- context 'with a successful response' do
90
+ context 'by creating a new function' do
91
+ before do
92
+ provider.lambda.stub_responses(:list_functions, empty_list_functions_response)
93
+ provider.lambda.stub_responses(:create_function, example_response)
94
+ end
95
+
96
+ example do
97
+ expect(provider).to receive(:log).with(/Created lambda: #{lambda_options[:function_name]}\./)
98
+ provider.push_app
99
+ end
100
+ end
101
+
102
+ context 'by updating an existing function' do
81
103
  before do
82
- provider.lambda.stub_responses(:upload_function, example_response)
104
+ provider.lambda.stub_responses(:list_functions, list_functions_response)
105
+ provider.lambda.stub_responses(:update_function_configuration, example_response)
106
+ provider.lambda.stub_responses(:update_function_code, example_response)
83
107
  end
84
108
 
85
109
  example do
86
- expect(provider).to receive(:log).with(/Uploaded lambda: #{lambda_options[:function_name]}\./)
110
+ expect(provider).to receive(:log).with(/Function #{lambda_options[:function_name]} already exists, updating\./)
111
+ expect(provider).to receive(:log).with(/Updated configuration of function: #{lambda_options[:function_name]}\./)
112
+ expect(provider).to receive(:log).with(/Updated code of function: #{lambda_options[:function_name]}\./)
87
113
  provider.push_app
88
114
  end
89
115
  end
90
116
 
91
117
  context 'with a ServiceException response' do
92
118
  before do
93
- provider.lambda.stub_responses(:upload_function, 'ServiceException')
119
+ provider.lambda.stub_responses(:list_functions, 'ResourceNotFoundException')
120
+ provider.lambda.stub_responses(:create_function, 'ServiceException')
94
121
  end
95
122
 
96
123
  example do
@@ -101,7 +128,7 @@ describe DPL::Provider::Lambda do
101
128
 
102
129
  context 'with a InvalidParameterValueException response' do
103
130
  before do
104
- provider.lambda.stub_responses(:upload_function, 'InvalidParameterValueException')
131
+ provider.lambda.stub_responses(:list_functions, 'InvalidParameterValueException')
105
132
  end
106
133
 
107
134
  example do
@@ -112,7 +139,8 @@ describe DPL::Provider::Lambda do
112
139
 
113
140
  context 'with a ResourceNotFoundException response' do
114
141
  before do
115
- provider.lambda.stub_responses(:upload_function, 'ResourceNotFoundException')
142
+ provider.lambda.stub_responses(:list_functions, 'ResourceNotFoundException')
143
+ provider.lambda.stub_responses(:create_function, 'ResourceNotFoundException')
116
144
  end
117
145
 
118
146
  example do
@@ -320,12 +348,6 @@ describe DPL::Provider::Lambda do
320
348
  end
321
349
  end
322
350
 
323
- describe '#default_mode' do
324
- example do
325
- expect(provider.default_mode).to eq('event')
326
- end
327
- end
328
-
329
351
  describe '#default_timeout' do
330
352
  example do
331
353
  expect(provider.default_timeout).to eq(3)
@@ -348,9 +370,26 @@ describe DPL::Provider::Lambda do
348
370
  end
349
371
  end
350
372
 
351
- describe '#deafult_memory_size' do
373
+ describe '#default_memory_size' do
352
374
  example do
353
- expect(provider.deafult_memory_size).to eq(128)
375
+ expect(provider.default_memory_size).to eq(128)
376
+ end
377
+ end
378
+
379
+ describe '#publish' do
380
+ context 'is default turned off' do
381
+ example do
382
+ expect(provider.publish).to eq(false)
383
+ end
384
+ end
385
+ context 'can be turned on' do
386
+ before do
387
+ expect(provider.options).to receive(:[]).with(:publish).and_return(true)
388
+ end
389
+
390
+ example do
391
+ expect(provider.publish).to eq(true)
392
+ end
354
393
  end
355
394
  end
356
395
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dpl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.30.travis.1843.3
4
+ version: 1.8.30.travis.1849.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Haase
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-28 00:00:00.000000000 Z
11
+ date: 2017-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec