mortar 0.13.1 → 0.13.2

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.
@@ -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