elasticity 6.0.11 → 6.0.12

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: 2f61a0e2148b8a7f75fe8c28516fbc777a57c566
4
- data.tar.gz: b2913d92acd6c595eb9ef2637be9649f2a42c996
3
+ metadata.gz: f96e8b15d696c580e01a6957b7981806190c86ef
4
+ data.tar.gz: aa9fc8328096b4fc7cf0649b0bb3f82eaf416e8f
5
5
  SHA512:
6
- metadata.gz: f524779e497a2a325d7e48ee5a08333e67f9e2c28d897bcab9beaa2f21d715b1e85b2830f6abddab3c3320db15e308fbf87bff2ba99d9af803ba16603b3dc7f9
7
- data.tar.gz: 3d81e2b0e7f23b10ee8cd937e843e5ffd16a739a75c9300a13b505746d535e15e9e38f2d699fd0381d95d044df97d840c74c74e78d4c660729cdd08530b64f0c
6
+ metadata.gz: 709475923787784aaf6e38c3825a730cf462966b3cf7c10c1f26314d259743e21b462a2d3f36e4d4e077a79b16ec62da65d058ffbd8bdb78ccf915f994a3da36
7
+ data.tar.gz: 4b5a0731398a0e7cf22f144c853a99d76fbc27ed3cbbf0d18c9ed46d1a4803e76d9872833fb86a96fb4cb23393b0315b74d84eee418e45838ad48a33ace0d2df
data/HISTORY.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 6.0.12 - February 7, 2017
2
+
3
+ - Including PR [#140](https://github.com/rslifka/elasticity/pull/140) - "Update fog". Thank you [@BenFradet ](https://github.com/BenFradet )!
4
+ - Including PR [#138](https://github.com/rslifka/elasticity/pull/138) - "Make application configuration available". Thank you [@henryhu666](https://github.com/henryhu666)!
5
+ - Including PR [#136](https://github.com/rslifka/elasticity/pull/136) - "added security configuration attribute". Thank you [@devsaik](https://github.com/devsaik)!
6
+
1
7
  ## 6.0.11 - February 7, 2017
2
8
 
3
9
  - Including PR [#134](https://github.com/rslifka/elasticity/pull/134) - "Spark step". Thank you [@BenFradet](https://github.com/BenFradet)!
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.description = %q{Streamlined, programmatic access to Amazon's Elastic Map Reduce service, driven by the Sharethrough team's requirements for belting out EMR jobs.}
14
14
 
15
15
  s.add_dependency('rest-client', '~> 1.0')
16
- s.add_dependency('fog', '~> 1.0')
16
+ s.add_dependency('fog-aws', '~> 1.0')
17
17
  s.add_dependency('unf', '~> 0.1')
18
18
 
19
19
  s.add_development_dependency('factory_girl', '~> 4.0')
@@ -3,7 +3,7 @@ require 'time'
3
3
 
4
4
  require 'rest_client'
5
5
  require 'nokogiri'
6
- require 'fog'
6
+ require 'fog/aws'
7
7
 
8
8
  require 'elasticity/version'
9
9
 
@@ -51,7 +51,12 @@ module Elasticity
51
51
  end
52
52
 
53
53
  def payload
54
- AwsUtils.convert_ruby_to_aws_v4(@ruby_service_hash).to_json
54
+ configurations = @ruby_service_hash.delete(:configurations)
55
+ service_hash = AwsUtils.convert_ruby_to_aws_v4(@ruby_service_hash)
56
+ return service_hash.to_json if configurations.nil?
57
+ @ruby_service_hash[:configurations] = configurations
58
+ service_hash['Configurations'] = configurations
59
+ service_hash.to_json
55
60
  end
56
61
 
57
62
  private
@@ -33,4 +33,4 @@ module Elasticity
33
33
 
34
34
  end
35
35
 
36
- end
36
+ end
@@ -10,6 +10,7 @@ module Elasticity
10
10
 
11
11
  attr_accessor :action_on_failure
12
12
  attr_accessor :ec2_key_name
13
+ attr_accessor :security_configuration
13
14
  attr_accessor :name
14
15
  attr_accessor :instance_count
15
16
  attr_accessor :log_uri
@@ -28,6 +29,7 @@ module Elasticity
28
29
  attr_accessor :service_role
29
30
  attr_accessor :jobflow_id
30
31
  attr_accessor :aws_applications
32
+ attr_accessor :aws_configurations
31
33
  attr_accessor :additional_info
32
34
  attr_accessor :additional_master_security_groups
33
35
  attr_accessor :additional_slave_security_groups
@@ -43,6 +45,7 @@ module Elasticity
43
45
 
44
46
  @bootstrap_actions = []
45
47
  @aws_applications = []
48
+ @aws_configurations = []
46
49
  @jobflow_steps = []
47
50
  @installed_steps = []
48
51
 
@@ -118,6 +121,11 @@ module Elasticity
118
121
  @aws_applications << application
119
122
  end
120
123
 
124
+ def add_configuration(configuration)
125
+ raise JobFlowRunningError, 'To add configurations, please create a new job flow.' if is_jobflow_running?
126
+ @aws_configurations << configuration
127
+ end
128
+
121
129
  def set_master_instance_group(instance_group)
122
130
  instance_group.role = 'MASTER'
123
131
  @instance_groups[:master] = instance_group
@@ -210,15 +218,17 @@ module Elasticity
210
218
  config = jobflow_preamble
211
219
  validate_and_apply_ami_or_release_version(config)
212
220
  steps = jobflow_steps
213
- steps.insert(0, Elasticity::SetupHadoopDebuggingStep.new.to_aws_step(self)) if @enable_debugging
221
+ steps.insert(0, Elasticity::SetupHadoopDebuggingStep.new(@region).to_aws_step(self)) if @enable_debugging
214
222
  config[:steps] = steps
215
223
  config[:log_uri] = @log_uri if @log_uri
216
224
  config[:tags] = jobflow_tags if @tags
217
225
  config[:job_flow_role] = @job_flow_role if @job_flow_role
218
226
  config[:service_role] = @service_role if @service_role
219
227
  config[:additional_info] = @additional_info if @additional_info
228
+ config[:security_configuration] = @security_configuration if @security_configuration
220
229
  config[:bootstrap_actions] = @bootstrap_actions.map(&:to_aws_bootstrap_action) unless @bootstrap_actions.empty?
221
230
  config[:applications] = @aws_applications.map(&:to_hash) if valid_aws_applications?
231
+ config[:configurations] = @aws_configurations unless @aws_configurations.empty?
222
232
  config
223
233
  end
224
234
 
@@ -2,10 +2,10 @@ module Elasticity
2
2
 
3
3
  class SetupHadoopDebuggingStep < CustomJarStep
4
4
 
5
- def initialize
5
+ def initialize(region)
6
6
  @name = 'Elasticity Setup Hadoop Debugging'
7
- @jar = 's3://elasticmapreduce/libs/script-runner/script-runner.jar'
8
- @arguments = ['s3://elasticmapreduce/libs/state-pusher/0.1/fetch']
7
+ @jar = "s3://#{region}.elasticmapreduce/libs/script-runner/script-runner.jar"
8
+ @arguments = ["s3://#{region}.elasticmapreduce/libs/state-pusher/0.1/fetch"]
9
9
  @action_on_failure = 'TERMINATE_JOB_FLOW'
10
10
  end
11
11
 
@@ -1,3 +1,3 @@
1
1
  module Elasticity
2
- VERSION = '6.0.11'
2
+ VERSION = '6.0.12'
3
3
  end
@@ -86,8 +86,29 @@ describe Elasticity::AwsRequestV4 do
86
86
  end
87
87
 
88
88
  describe '#payload' do
89
- it 'should create the proper payload' do
90
- subject.payload.should == '{"JobFlowIds":["TEST_JOBFLOW_ID"]}'
89
+ context 'when no configurations are given' do
90
+ it 'should create the proper payload' do
91
+ subject.payload.should == '{"JobFlowIds":["TEST_JOBFLOW_ID"]}'
92
+ end
93
+ end
94
+
95
+ context 'when configurations are given' do
96
+ subject do
97
+ Elasticity::AwsRequestV4.new(
98
+ Elasticity::AwsSession.new,
99
+ {:operation => 'DescribeJobFlows', :job_flow_ids => ['TEST_JOBFLOW_ID'],
100
+ :configurations => [
101
+ 'Classification' => 'capacity-scheduler',
102
+ 'Properties' => {
103
+ 'yarn.scheduler.capacity.resource-calculator' =>
104
+ 'org.apache.hadoop.yarn.util.resource.DominantResourceCalculator'
105
+ }]
106
+ }
107
+ )
108
+ end
109
+ it 'should create the proper payload' do
110
+ subject.payload.should == '{"JobFlowIds":["TEST_JOBFLOW_ID"],"Configurations":[{"Classification":"capacity-scheduler","Properties":{"yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator"}}]}'
111
+ end
91
112
  end
92
113
  end
93
114
 
@@ -123,7 +144,7 @@ describe Elasticity::AwsRequestV4 do
123
144
 
124
145
  describe '.aws_v4_signature' do
125
146
  it 'should create the proper signature' do
126
- subject.send(:aws_v4_signature).should == '9fcb4107e8346b2b92a4a2c56de98ed80fdd87d3f9514e728adce76390c5b267'
147
+ subject.send(:aws_v4_signature).should == '71d7f2adf5b01990b09d7d10910b9a0312ded30bacf05ea8e8a05cc72ab389d1'
127
148
  end
128
149
  end
129
150
 
@@ -56,4 +56,4 @@ describe Elasticity::AwsUtils do
56
56
  end
57
57
  end
58
58
 
59
- end
59
+ end
@@ -8,6 +8,7 @@ describe Elasticity::JobFlow do
8
8
  it 'should set the fields appropriately' do
9
9
  expect(subject.action_on_failure).to eql('TERMINATE_JOB_FLOW')
10
10
  expect(subject.ec2_key_name).to eql(nil)
11
+ expect(subject.security_configuration).to eql(nil)
11
12
  expect(subject.name).to eql('Elasticity Job Flow')
12
13
  expect(subject.instance_count).to eql(2)
13
14
  expect(subject.log_uri).to eql(nil)
@@ -16,6 +17,7 @@ describe Elasticity::JobFlow do
16
17
  expect(subject.ami_version).to eql(nil)
17
18
  expect(subject.release_label).to eql(nil)
18
19
  expect(subject.aws_applications).to eql([])
20
+ expect(subject.aws_configurations).to eql([])
19
21
  expect(subject.keep_job_flow_alive_when_no_steps).to eql(false)
20
22
  expect(subject.ec2_subnet_id).to eql(nil)
21
23
  expect(subject.placement).to eql('us-east-1a')
@@ -77,6 +79,18 @@ describe Elasticity::JobFlow do
77
79
  end
78
80
  end
79
81
 
82
+ describe '#security_configuration=' do
83
+ context 'when set' do
84
+ before do
85
+ subject.security_configuration = 'security configuration'
86
+ end
87
+ it 'security_configuration is a string' do
88
+ expect(subject.security_configuration).to eq('security configuration')
89
+ end
90
+ end
91
+ end
92
+
93
+
80
94
  describe '#enable_debugging=' do
81
95
 
82
96
  context 'when a log_uri is present' do
@@ -212,6 +226,31 @@ describe Elasticity::JobFlow do
212
226
 
213
227
  end
214
228
 
229
+ describe '#add_configuration' do
230
+ let(:configuration) { {'Classification' => 'spark'} }
231
+ context 'when the jobflow is not yet started' do
232
+ it 'should not raise an error' do
233
+ expect {
234
+ subject.add_bootstrap_action(configuration)
235
+ }.to_not raise_error
236
+ end
237
+ end
238
+
239
+ context 'when the jobflow is already started' do
240
+ before do
241
+ Elasticity::EMR.any_instance.stub(:run_job_flow => '_')
242
+ subject.add_step(Elasticity::CustomJarStep.new('_'))
243
+ subject.run
244
+ end
245
+ it 'should raise an error' do
246
+ expect {
247
+ subject.add_configuration(configuration)
248
+ }.to raise_error(Elasticity::JobFlowRunningError, 'To add configurations, please create a new job flow.')
249
+ end
250
+ end
251
+
252
+ end
253
+
215
254
  describe '#add_step' do
216
255
 
217
256
  context 'when the jobflow is already running' do
@@ -312,7 +351,7 @@ describe Elasticity::JobFlow do
312
351
  before do
313
352
  jobflow_with_steps.log_uri = '_'
314
353
  jobflow_with_steps.enable_debugging = true
315
- aws_steps.insert(0, Elasticity::SetupHadoopDebuggingStep.new.to_aws_step(jobflow_with_steps))
354
+ aws_steps.insert(0, Elasticity::SetupHadoopDebuggingStep.new('us-east-1').to_aws_step(jobflow_with_steps))
316
355
  end
317
356
  it 'should incorporate the step to setup Hadoop debugging' do
318
357
  jobflow_with_steps.send(:jobflow_config).should be_a_hash_including({:steps => aws_steps})
@@ -515,6 +554,27 @@ describe Elasticity::JobFlow do
515
554
  end
516
555
  end
517
556
 
557
+ describe 'aws_configurations' do
558
+ let(:configuration) {
559
+ { 'Classification' => 'spark',
560
+ 'Properties' => { 'prop' => 'valule'} }
561
+ }
562
+
563
+ let(:emr) { double(Elasticity::EMR, run_job_flow: true) }
564
+
565
+ before do
566
+ subject.stub(:emr).and_return(emr)
567
+ end
568
+
569
+ context 'with configurations' do
570
+ it 'sets the configurations as a part of its config' do
571
+ subject.instance_variable_set(:@aws_configurations, [configuration])
572
+ config = subject.send(:jobflow_config)
573
+ expect(config[:configurations]).to eql([configuration])
574
+ end
575
+ end
576
+
577
+ end
518
578
  end
519
579
 
520
580
  describe '#jobflow_instance_groups' do
@@ -1,14 +1,18 @@
1
1
  describe Elasticity::SetupHadoopDebuggingStep do
2
2
 
3
+ subject do
4
+ Elasticity::SetupHadoopDebuggingStep.new('us-east-1')
5
+ end
6
+
3
7
  it 'should be a CustomJarStep' do
4
8
  expect(subject).to be_a(Elasticity::CustomJarStep)
5
9
  end
6
10
 
7
11
  it 'should set the appropriate fields' do
8
12
  expect(subject.name).to eql('Elasticity Setup Hadoop Debugging')
9
- expect(subject.jar).to eql('s3://elasticmapreduce/libs/script-runner/script-runner.jar')
10
- expect(subject.arguments).to eql(['s3://elasticmapreduce/libs/state-pusher/0.1/fetch'])
13
+ expect(subject.jar).to eql('s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar')
14
+ expect(subject.arguments).to eql(['s3://us-east-1.elasticmapreduce/libs/state-pusher/0.1/fetch'])
11
15
  expect(subject.action_on_failure).to eql('TERMINATE_JOB_FLOW')
12
16
  end
13
17
 
14
- end
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticity
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.11
4
+ version: 6.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Slifka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-06 00:00:00.000000000 Z
11
+ date: 2017-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: fog
28
+ name: fog-aws
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"