mortar 0.13.1 → 0.13.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,6 +13,7 @@
13
13
  #
14
14
 
15
15
  require "mortar/helpers"
16
+ require "mortar/auth"
16
17
  require "mortar/pigversion"
17
18
  require "mortar/local/pig"
18
19
  require "mortar/local/java"
@@ -45,12 +46,25 @@ https://pypi.python.org/pypi/virtualenv
45
46
  EOF
46
47
 
47
48
  NO_AWS_KEYS_ERROR_MESSAGE = <<EOF
48
- Please specify your amazon AWS access key via environment variable AWS_ACCESS_KEY
49
- and your AWS secret key via environment variable AWS_SECRET_KEY, e.g.:
49
+ You have not set AWS access keys, which will often prevent you from accessing input data. You can either:
50
50
 
51
- export AWS_ACCESS_KEY="XXXXXXXXXXXX"
51
+ - Login to your Mortar account to automatically sync your AWS keys from Mortar when running commands ("mortar login")
52
+
53
+ - *or*, set your AWS keys via environment variables:
54
+
55
+ export AWS_ACCESS_KEY="XXXXXXXXXXXX"
52
56
  export AWS_SECRET_KEY="XXXXXXXXXXXX"
53
57
 
58
+ If your script does not need AWS S3 access, you can leave those values as XXXXXXXXXXXX.
59
+ EOF
60
+
61
+ API_CONFIG_ERROR_MESSAGE = <<EOF
62
+ We were unable to sync your AWS keys from Mortar.
63
+ To continue, please specify your amazon AWS access key via environment variable AWS_ACCESS_KEY and your AWS secret key via environment variable AWS_SECRET_KEY, e.g.:
64
+
65
+ export AWS_ACCESS_KEY="XXXXXXXXXXXX"
66
+ export AWS_SECRET_KEY="XXXXXXXXXXXX"
67
+
54
68
  If your script does not need AWS S3 access, you can set these variables to XXXXXXXXXXXX.
55
69
  EOF
56
70
 
@@ -68,13 +82,35 @@ EOF
68
82
  end
69
83
  end
70
84
 
71
- # Exits with a helpful message if the user has not setup their aws keys
72
- def require_aws_keys()
85
+ # Asks to sync with AWS if user has not setup their aws keys
86
+ def require_aws_keys()
73
87
  unless verify_aws_keys()
74
- error(NO_AWS_KEYS_ERROR_MESSAGE)
88
+ auth = Mortar::Auth
89
+ if !auth.has_credentials
90
+ error(NO_AWS_KEYS_ERROR_MESSAGE)
91
+ else
92
+ vars = fetch_aws_keys(auth, Mortar::Command::Base.new)
93
+ if vars['aws_access_key_id'] && vars['aws_secret_access_key']
94
+ set_aws_keys(vars['aws_access_key_id'], vars['aws_secret_access_key'])
95
+ else
96
+ error(API_CONFIG_ERROR_MESSAGE)
97
+ end
98
+ end
75
99
  end
76
100
  end
77
101
 
102
+ # Fetches AWS Keys based on auth
103
+ def fetch_aws_keys(auth, base)
104
+ project = base.project
105
+ project_name = base.options[:project] || project.name
106
+ return auth.api.get_config_vars(project_name).body['config']
107
+ end
108
+
109
+ def set_aws_keys(aws_access_key, aws_secret_key)
110
+ ENV['AWS_ACCESS_KEY'] = aws_access_key
111
+ ENV['AWS_SECRET_KEY'] = aws_secret_key
112
+ end
113
+
78
114
  # Main entry point to perform installation and configuration necessary
79
115
  # to run pig on the users local machine
80
116
  def install_and_configure(pig_version=nil)
@@ -16,5 +16,5 @@
16
16
 
17
17
  module Mortar
18
18
  # see http://semver.org/
19
- VERSION = "0.13.1"
19
+ VERSION = "0.13.2"
20
20
  end
@@ -17,21 +17,26 @@
17
17
  require 'spec_helper'
18
18
  require 'fakefs/spec_helpers'
19
19
  require 'mortar/local/controller'
20
+ require 'mortar/auth'
21
+ require 'mortar/command/base'
20
22
  require 'launchy'
23
+ require 'excon'
21
24
 
22
25
  module Mortar::Local
23
26
  describe Controller do
24
27
 
25
28
  before do
29
+ stub_core
26
30
  ENV['AWS_ACCESS_KEY'] = "foo"
27
31
  ENV['AWS_SECRET_KEY'] = "BAR"
28
32
  end
29
33
 
30
- context("aws keys") do
31
- it "exits if they are not present" do
34
+ context("aws keys") do
35
+ it "exits if they are not present and not logged in" do
32
36
  ENV.delete('AWS_ACCESS_KEY')
33
37
  ctrl = Mortar::Local::Controller.new
34
38
  previous_stderr, $stderr = $stderr, StringIO.new
39
+ mock(Mortar::Auth).has_credentials{false}
35
40
  begin
36
41
  expect { ctrl.require_aws_keys }.to raise_error(SystemExit)
37
42
  $stderr.string.should eq(Mortar::Local::Controller::NO_AWS_KEYS_ERROR_MESSAGE.gsub(/^/, " ! "))
@@ -40,6 +45,21 @@ module Mortar::Local
40
45
  end
41
46
  end
42
47
 
48
+ it "exits if keys are not present, not logged in and api fails to return keys" do
49
+ ENV.delete('AWS_ACCESS_KEY')
50
+ ctrl = Mortar::Local::Controller.new
51
+ previous_stderr, $stderr = $stderr, StringIO.new
52
+ mock(Mortar::Auth).has_credentials{true}
53
+ stub(Mortar::Command::Base).new {'base'}
54
+ mock(ctrl).fetch_aws_keys(Mortar::Auth, 'base'){{}}
55
+ begin
56
+ expect { ctrl.require_aws_keys }.to raise_error(SystemExit)
57
+ $stderr.string.should eq(Mortar::Local::Controller::API_CONFIG_ERROR_MESSAGE.gsub(/^/, " ! "))
58
+ ensure
59
+ $stderr = previous_stderr
60
+ end
61
+ end
62
+
43
63
  it "returns if they are present" do
44
64
  ctrl = Mortar::Local::Controller.new
45
65
  previous_stderr, $stderr = $stderr, StringIO.new
@@ -50,6 +70,48 @@ module Mortar::Local
50
70
  $stderr = previous_stderr
51
71
  end
52
72
  end
73
+
74
+ it "sets fetches and sets aws keys if missing and logged in" do
75
+ ENV.delete('AWS_ACCESS_KEY')
76
+ ctrl = Mortar::Local::Controller.new
77
+ stub(Mortar::Command::Base).new {'base'}
78
+ stub(Mortar::Auth).has_credentials{true}
79
+ previous_stderr, $stderr = $stderr, StringIO.new
80
+ mock(ctrl).fetch_aws_keys(Mortar::Auth, 'base'){
81
+ {
82
+ "aws_access_key_id"=>"key_id",
83
+ "aws_secret_access_key"=>"secret"
84
+ }
85
+ }
86
+ begin
87
+ ctrl.require_aws_keys()
88
+ $stderr.string.should eq("")
89
+ ENV['AWS_ACCESS_KEY'].should eq("key_id")
90
+ ENV['AWS_SECRET_KEY'].should eq("secret")
91
+ ensure
92
+ $stderr = previous_stderr
93
+ end
94
+ end
95
+
96
+
97
+
98
+ it "fetches aws keys" do
99
+ ctrl = Mortar::Local::Controller.new
100
+ auth = Mortar::Auth
101
+
102
+
103
+ with_blank_project do
104
+ base = Mortar::Command::Base.new
105
+ with_git_initialized_project do |p|
106
+ # stub api request
107
+ configs = {}
108
+ mock(Mortar::Auth.api).get_config_vars("myproject").returns(Excon::Response.new(:body => {"config" => configs}))
109
+
110
+ ctrl.fetch_aws_keys(auth,base).should eq(configs)
111
+ end
112
+ end
113
+ end
114
+
53
115
 
54
116
  it "returns if they are not present but override is in place" do
55
117
  ENV.delete('AWS_ACCESS_KEY')
@@ -62,7 +124,7 @@ module Mortar::Local
62
124
  ensure
63
125
  $stderr = previous_stderr
64
126
  end
65
- end
127
+ end
66
128
 
67
129
  end
68
130
 
metadata CHANGED
@@ -1,32 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mortar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.1
4
+ version: 0.13.2
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Mortar Data
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-01-15 00:00:00.000000000 Z
12
+ date: 2014-01-21 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rdoc
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: 4.0.0
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: 4.0.0
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: mortar-api-ruby
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ~>
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ~>
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: netrc
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ~>
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ~>
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: launchy
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ~>
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :runtime
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ~>
67
76
  - !ruby/object:Gem::Version
@@ -69,6 +78,7 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: parseconfig
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - ~>
74
84
  - !ruby/object:Gem::Version
@@ -76,6 +86,7 @@ dependencies:
76
86
  type: :runtime
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - ~>
81
92
  - !ruby/object:Gem::Version
@@ -83,6 +94,7 @@ dependencies:
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: excon
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
99
  - - ~>
88
100
  - !ruby/object:Gem::Version
@@ -90,6 +102,7 @@ dependencies:
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
107
  - - ~>
95
108
  - !ruby/object:Gem::Version
@@ -97,6 +110,7 @@ dependencies:
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: fakefs
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
115
  - - ~>
102
116
  - !ruby/object:Gem::Version
@@ -104,6 +118,7 @@ dependencies:
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
123
  - - ~>
109
124
  - !ruby/object:Gem::Version
@@ -111,57 +126,65 @@ dependencies:
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: gem-release
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
- - - '>='
131
+ - - ! '>='
116
132
  - !ruby/object:Gem::Version
117
133
  version: '0'
118
134
  type: :development
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
121
138
  requirements:
122
- - - '>='
139
+ - - ! '>='
123
140
  - !ruby/object:Gem::Version
124
141
  version: '0'
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: rake
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
- - - '>='
147
+ - - ! '>='
130
148
  - !ruby/object:Gem::Version
131
149
  version: '0'
132
150
  type: :development
133
151
  prerelease: false
134
152
  version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
135
154
  requirements:
136
- - - '>='
155
+ - - ! '>='
137
156
  - !ruby/object:Gem::Version
138
157
  version: '0'
139
158
  - !ruby/object:Gem::Dependency
140
159
  name: rr
141
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
142
162
  requirements:
143
- - - '>='
163
+ - - ! '>='
144
164
  - !ruby/object:Gem::Version
145
165
  version: '0'
146
166
  type: :development
147
167
  prerelease: false
148
168
  version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
149
170
  requirements:
150
- - - '>='
171
+ - - ! '>='
151
172
  - !ruby/object:Gem::Version
152
173
  version: '0'
153
174
  - !ruby/object:Gem::Dependency
154
175
  name: rspec
155
176
  requirement: !ruby/object:Gem::Requirement
177
+ none: false
156
178
  requirements:
157
- - - '>='
179
+ - - ! '>='
158
180
  - !ruby/object:Gem::Version
159
181
  version: '0'
160
182
  type: :development
161
183
  prerelease: false
162
184
  version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
163
186
  requirements:
164
- - - '>='
187
+ - - ! '>='
165
188
  - !ruby/object:Gem::Version
166
189
  version: '0'
167
190
  description: Client library and command-line tool to interact with the Mortar service.
@@ -296,25 +319,26 @@ files:
296
319
  - spec/support/display_message_matcher.rb
297
320
  homepage: http://mortardata.com/
298
321
  licenses: []
299
- metadata: {}
300
322
  post_install_message:
301
323
  rdoc_options: []
302
324
  require_paths:
303
325
  - lib
304
326
  required_ruby_version: !ruby/object:Gem::Requirement
327
+ none: false
305
328
  requirements:
306
- - - '>='
329
+ - - ! '>='
307
330
  - !ruby/object:Gem::Version
308
331
  version: 1.8.7
309
332
  required_rubygems_version: !ruby/object:Gem::Requirement
333
+ none: false
310
334
  requirements:
311
- - - '>='
335
+ - - ! '>='
312
336
  - !ruby/object:Gem::Version
313
337
  version: '0'
314
338
  requirements: []
315
339
  rubyforge_project:
316
- rubygems_version: 2.0.6
340
+ rubygems_version: 1.8.24
317
341
  signing_key:
318
- specification_version: 4
342
+ specification_version: 3
319
343
  summary: Client library and CLI to interact with the Mortar service.
320
344
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 67d3ed5faec8d91449aa2ff2a655473b299751b2
4
- data.tar.gz: f89c8144659270c49215daba688bd29396bc3f8e
5
- SHA512:
6
- metadata.gz: b24095b9ad94d8393fcd388fecab1be47bc91d63ab8054e5142598a73a3f52447c4b7a8138c890623f937afa160c88f36a365b67690b540ccf955c301ebe16c1
7
- data.tar.gz: dd41a82424d176336eb5525a15d1399f940e6fe4b5d6721474d751134f1565781585253456882ed3c3964ad34780217566625717f95ff92a1537ab6d7c577dbf