vcloud-core 0.10.0 → 0.11.0

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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.11.0 (2014-09-11)
2
+
3
+ Changes:
4
+
5
+ - As deprecated in 0.7.0, it is now impossible to specify a plaintext
6
+ password in a FOG_RC file. Please use tokens via vcloud-login as per
7
+ the documentation: http://gds-operations.github.io/vcloud-tools/usage/
8
+
1
9
  ## 0.10.0 (2014-08-11)
2
10
 
3
11
  API changes:
@@ -11,15 +11,7 @@ module Vcloud
11
11
  FOG_CREDS_PASS_NAME = :vcloud_director_password
12
12
 
13
13
  def self.check_credentials
14
- pass = fog_credentials_pass
15
- unless pass.nil? or pass.empty?
16
- warn <<EOF
17
- [WARNING] Storing :vcloud_director_password in your plaintext FOG_RC file is
18
- insecure. Future releases of vcloud-core (and tools that depend on
19
- it) will prevent you from doing this. Please use vcloud-login to
20
- get a session token instead.
21
- EOF
22
- end
14
+ check_plaintext_pass
23
15
  end
24
16
 
25
17
  def self.fog_credentials_pass
@@ -33,6 +25,16 @@ EOF
33
25
 
34
26
  pass
35
27
  end
28
+
29
+ private
30
+
31
+ def self.check_plaintext_pass
32
+ pass = fog_credentials_pass
33
+ unless pass.nil? or pass.empty?
34
+ raise "Found plaintext #{Vcloud::Core::Fog::FOG_CREDS_PASS_NAME} entry. Please set it to an empty string as storing passwords in plaintext is insecure. See http://gds-operations.github.io/vcloud-tools/usage/ for further information."
35
+ end
36
+ end
37
+
36
38
  end
37
39
  end
38
40
  end
@@ -6,7 +6,7 @@ module Vcloud
6
6
  module Login
7
7
  class << self
8
8
  def token(pass)
9
- check_plaintext_pass
9
+ Vcloud::Core::Fog.check_credentials
10
10
  token = get_token(pass)
11
11
 
12
12
  return token
@@ -18,13 +18,6 @@ module Vcloud
18
18
 
19
19
  private
20
20
 
21
- def check_plaintext_pass
22
- pass = Vcloud::Core::Fog::fog_credentials_pass
23
- unless pass.nil? || pass.empty?
24
- raise "Found plaintext #{Vcloud::Core::Fog::FOG_CREDS_PASS_NAME} entry. Please set it to an empty string"
25
- end
26
- end
27
-
28
21
  def get_token(pass)
29
22
  ENV.delete(Vcloud::Core::Fog::TOKEN_ENV_VAR_NAME)
30
23
  vcloud = ::Fog::Compute::VcloudDirector.new({
@@ -1,5 +1,5 @@
1
1
  module Vcloud
2
2
  module Core
3
- VERSION = '0.10.0'
3
+ VERSION = '0.11.0'
4
4
  end
5
5
  end
@@ -1,22 +1,22 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Vcloud::Core::Fog::Login do
4
- before(:each) do
5
- stub_const('ENV', {})
4
+ describe "#token" do
5
+ context "unable to load credentials" do
6
+ before(:each) do
7
+ stub_const('ENV', {})
6
8
 
7
- @orig_credential = ::Fog.credential
8
- ::Fog.credential = 'null'
9
- @orig_credentials_path = ::Fog.credentials_path
10
- ::Fog.credentials_path = '/dev/null'
11
- end
9
+ @orig_credential = ::Fog.credential
10
+ ::Fog.credential = 'null'
11
+ @orig_credentials_path = ::Fog.credentials_path
12
+ ::Fog.credentials_path = '/dev/null'
13
+ end
12
14
 
13
- after(:each) do
14
- ::Fog.credential = @orig_credential
15
- ::Fog.credentials_path = @orig_credentials_path
16
- end
15
+ after(:each) do
16
+ ::Fog.credential = @orig_credential
17
+ ::Fog.credentials_path = @orig_credentials_path
18
+ end
17
19
 
18
- describe "#token" do
19
- context "unable to load credentials" do
20
20
  it "should raise an exception succinctly listing the missing credentials" do
21
21
  # This test is known to fail with a TypeError due to a bug in Ruby 1.9.3 that
22
22
  # has since been fixed. See https://github.com/gds-operations/vcloud-core/pull/100
@@ -30,5 +30,43 @@ describe Vcloud::Core::Fog::Login do
30
30
  )
31
31
  end
32
32
  end
33
+
34
+ context "fog credentials without password" do
35
+ let(:token_length) { 44 }
36
+ let(:envvar_token) { 'FOG_VCLOUD_TOKEN' }
37
+ let(:envvar_password) { 'API_PASSWORD' }
38
+
39
+ before(:each) do
40
+ @real_password = ENV[envvar_password]
41
+ stub_const('ENV', {})
42
+ end
43
+
44
+ context "environment variable VCLOUD_FOG_TOKEN not set" do
45
+ it "should login and return a token" do
46
+ unless @real_password
47
+ pending "Password not available from environment variable #{envvar_password}"
48
+ end
49
+
50
+ expect(ENV).not_to have_key(envvar_token)
51
+ token = subject.token(@real_password)
52
+ expect(token.size).to eq(token_length)
53
+ end
54
+ end
55
+
56
+ context "environment variable VCLOUD_FOG_TOKEN is set" do
57
+ let(:old_token) { 'mekmitasdigoat' }
58
+
59
+ it "should login and return a token, ignoring the existing token" do
60
+ unless @real_password
61
+ pending "Password not available from environment variable #{envvar_password}"
62
+ end
63
+
64
+ ENV[envvar_token] = old_token
65
+ new_token = subject.token(@real_password)
66
+ expect(new_token).to_not eq(old_token)
67
+ expect(new_token.size).to eq(token_length)
68
+ end
69
+ end
70
+ end
33
71
  end
34
72
  end
@@ -4,7 +4,6 @@ require 'stringio'
4
4
  describe Vcloud::Core::Fog::Login do
5
5
  describe "#token" do
6
6
  it "should return the output from get_token" do
7
- expect(subject).to receive(:check_plaintext_pass)
8
7
  expect(subject).to receive(:get_token).and_return('mekmitasdigoat')
9
8
  expect(subject.token('supersekret')).to eq("mekmitasdigoat")
10
9
  end
@@ -40,7 +39,7 @@ describe Vcloud::Core::Fog::Login do
40
39
  expect(subject).to_not receive(:get_token)
41
40
  expect { subject.token('supersekret') }.to raise_error(
42
41
  RuntimeError,
43
- "Found plaintext vcloud_director_password entry. Please set it to an empty string"
42
+ "Found plaintext vcloud_director_password entry. Please set it to an empty string as storing passwords in plaintext is insecure. See http://gds-operations.github.io/vcloud-tools/usage/ for further information."
44
43
  )
45
44
  end
46
45
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vcloud-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-11 00:00:00.000000000 Z
12
+ date: 2014-09-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &5442080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: 1.22.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 1.22.0
24
+ version_requirements: *5442080
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: mustache
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &5461800 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: '0'
38
33
  type: :runtime
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
35
+ version_requirements: *5461800
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: highline
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &5459000 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ! '>='
@@ -53,31 +43,21 @@ dependencies:
53
43
  version: '0'
54
44
  type: :runtime
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
46
+ version_requirements: *5459000
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: gem_publisher
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &5455320 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
- - - '='
52
+ - - =
68
53
  - !ruby/object:Gem::Version
69
54
  version: 1.2.0
70
55
  type: :development
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - '='
76
- - !ruby/object:Gem::Version
77
- version: 1.2.0
57
+ version_requirements: *5455320
78
58
  - !ruby/object:Gem::Dependency
79
59
  name: pry
80
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &5473200 !ruby/object:Gem::Requirement
81
61
  none: false
82
62
  requirements:
83
63
  - - ! '>='
@@ -85,15 +65,10 @@ dependencies:
85
65
  version: '0'
86
66
  type: :development
87
67
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
68
+ version_requirements: *5473200
94
69
  - !ruby/object:Gem::Dependency
95
70
  name: rake
96
- requirement: !ruby/object:Gem::Requirement
71
+ requirement: &5471980 !ruby/object:Gem::Requirement
97
72
  none: false
98
73
  requirements:
99
74
  - - ! '>='
@@ -101,15 +76,10 @@ dependencies:
101
76
  version: '0'
102
77
  type: :development
103
78
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
79
+ version_requirements: *5471980
110
80
  - !ruby/object:Gem::Dependency
111
81
  name: rspec
112
- requirement: !ruby/object:Gem::Requirement
82
+ requirement: &5469500 !ruby/object:Gem::Requirement
113
83
  none: false
114
84
  requirements:
115
85
  - - ~>
@@ -117,15 +87,10 @@ dependencies:
117
87
  version: 2.14.1
118
88
  type: :development
119
89
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ~>
124
- - !ruby/object:Gem::Version
125
- version: 2.14.1
90
+ version_requirements: *5469500
126
91
  - !ruby/object:Gem::Dependency
127
92
  name: rubocop
128
- requirement: !ruby/object:Gem::Requirement
93
+ requirement: &5496580 !ruby/object:Gem::Requirement
129
94
  none: false
130
95
  requirements:
131
96
  - - ~>
@@ -133,15 +98,10 @@ dependencies:
133
98
  version: 0.23.0
134
99
  type: :development
135
100
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ~>
140
- - !ruby/object:Gem::Version
141
- version: 0.23.0
101
+ version_requirements: *5496580
142
102
  - !ruby/object:Gem::Dependency
143
103
  name: simplecov
144
- requirement: !ruby/object:Gem::Requirement
104
+ requirement: &5495720 !ruby/object:Gem::Requirement
145
105
  none: false
146
106
  requirements:
147
107
  - - ~>
@@ -149,15 +109,10 @@ dependencies:
149
109
  version: 0.7.1
150
110
  type: :development
151
111
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ~>
156
- - !ruby/object:Gem::Version
157
- version: 0.7.1
112
+ version_requirements: *5495720
158
113
  - !ruby/object:Gem::Dependency
159
114
  name: vcloud-tools-tester
160
- requirement: !ruby/object:Gem::Requirement
115
+ requirement: &5493500 !ruby/object:Gem::Requirement
161
116
  none: false
162
117
  requirements:
163
118
  - - ~>
@@ -165,12 +120,7 @@ dependencies:
165
120
  version: 0.2.0
166
121
  type: :development
167
122
  prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ~>
172
- - !ruby/object:Gem::Version
173
- version: 0.2.0
123
+ version_requirements: *5493500
174
124
  description: Core tools for interacting with VMware vCloud Director. Includes VCloud
175
125
  Query, a light wrapper round the vCloud Query API.
176
126
  email:
@@ -219,7 +169,6 @@ files:
219
169
  - lib/vcloud/core/vm.rb
220
170
  - spec/integration/README.md
221
171
  - spec/integration/core/edge_gateway_spec.rb
222
- - spec/integration/core/fog/login_manual.rb
223
172
  - spec/integration/core/fog/login_spec.rb
224
173
  - spec/integration/core/query_runner_spec.rb
225
174
  - spec/integration/core/vapp_spec.rb
@@ -277,17 +226,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
226
  version: '0'
278
227
  segments:
279
228
  - 0
280
- hash: -496306917479222394
229
+ hash: 728476648198716353
281
230
  requirements: []
282
231
  rubyforge_project:
283
- rubygems_version: 1.8.23
232
+ rubygems_version: 1.8.11
284
233
  signing_key:
285
234
  specification_version: 3
286
235
  summary: Core tools for interacting with VMware vCloud Director
287
236
  test_files:
288
237
  - spec/integration/README.md
289
238
  - spec/integration/core/edge_gateway_spec.rb
290
- - spec/integration/core/fog/login_manual.rb
291
239
  - spec/integration/core/fog/login_spec.rb
292
240
  - spec/integration/core/query_runner_spec.rb
293
241
  - spec/integration/core/vapp_spec.rb
@@ -1,47 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # These tests, which confirm that the Fog internals are performing a login
4
- # and returning a new token, are not run automatically because they conflict
5
- # with the use of vcloud-login in CI. Because we're using vcloud-login all
6
- # of our tests should fail if the behaviour of Fog changes. However these
7
- # may came in useful when debugging such a scenario.
8
-
9
- describe Vcloud::Core::Fog::Login do
10
- let!(:mock_env) { ENV.clone }
11
-
12
- before(:each) do
13
- stub_const('ENV', mock_env)
14
- end
15
-
16
- describe "#token" do
17
- context "fog credentials without password" do
18
- let(:token_length) { 44 }
19
- let(:env_var_name) { 'FOG_VCLOUD_TOKEN' }
20
- let!(:mock_fog_creds) { ::Fog.credentials.clone }
21
-
22
- before(:each) do
23
- @real_password = mock_fog_creds.delete(:vcloud_director_password)
24
- allow(::Fog).to receive(:credentials).and_return(mock_fog_creds)
25
- end
26
-
27
- context "environment variable VCLOUD_FOG_TOKEN not set" do
28
- it "should login and return a token" do
29
- mock_env.delete(env_var_name)
30
- token = subject.token(@real_password)
31
- expect(token.size).to eq(token_length)
32
- end
33
- end
34
-
35
- context "environment variable VCLOUD_FOG_TOKEN is set" do
36
- let(:old_token) { 'mekmitasdigoat' }
37
-
38
- it "should login and return a token, ignoring the existing token" do
39
- mock_env[env_var_name] = old_token
40
- new_token = subject.token(@real_password)
41
- expect(new_token).to_not eq(old_token)
42
- expect(new_token.size).to eq(token_length)
43
- end
44
- end
45
- end
46
- end
47
- end