vmware-vra 1.0.0 → 1.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +4 -4
- data/lib/vra/client.rb +10 -9
- data/lib/vra/version.rb +1 -1
- data/spec/client_spec.rb +10 -4
- data/vmware-vra.gemspec +3 -2
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56ccef7bb2c458c16968ac45d3ba00306e0cfe39
|
4
|
+
data.tar.gz: 8023755792111c3fbebb453f3b651c6d12dde66f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24cd4008b751382b4869c1a5e9abb49c35087ad0f65c29e9e2c9911a34a07ada9a31323e16c1867454ba19081b73ec788da3807b9a78d4b0d33148edd4ca2737
|
7
|
+
data.tar.gz: cd5567b6825a179d15a043d048fa5862fd88b6ee8ae3ef1a4ca4ed01acc378ee1cd1a28f148705a8c2d36ee39de2672aae72c0f1f92df471e50440c347012583
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
## v1.1.0
|
2
|
+
* [pr#9](https://github.com/chef-partners/vmware-vra-gem/pull/9) Mask password and bearer token in console/debug/log output.
|
3
|
+
Thanks to [@rubytester](https://github.com/rubytester) for the idea and initial proposal to address in [pr#7](https://github.com/chef-partners/vmware-vra-gem/pull/7)
|
4
|
+
|
5
|
+
## v1.0.0
|
6
|
+
* Initial release.
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Client gem for interacting with VMware's vRealize Automation application.
|
4
4
|
|
5
|
-
Not all vRA functionality is included in this gem; only API calls necessary
|
5
|
+
Not all vRA functionality is included in this gem; only API calls necessary
|
6
6
|
to interact with the catalog, requests, and existing items is included.
|
7
7
|
|
8
8
|
The primary goal of this gem is to provide a reusable set of methods in order
|
@@ -33,7 +33,7 @@ require 'vra'
|
|
33
33
|
=> true
|
34
34
|
```
|
35
35
|
|
36
|
-
Then, set up your client object.
|
36
|
+
Then, set up your client object. You will need to know your tenant ID from your vRA administrator.
|
37
37
|
|
38
38
|
```
|
39
39
|
vra = Vra::Client.new(username: 'devmgr@corp.local', password: 'mypassword', tenant: 'mytenant', base_url: 'https://vra.corp.local', verify_ssl: true)
|
@@ -61,7 +61,7 @@ catalog_request = vra.catalog.request('a9cd6148-6e0b-4a80-ac47-f5255c52b43d', cp
|
|
61
61
|
=> #<Vra::CatalogRequest:0x00000003477c20 ... >
|
62
62
|
```
|
63
63
|
|
64
|
-
vRA requires your sub-tenant (a.k.a. "business group") to be specified when requesting an item from the catalog.
|
64
|
+
vRA requires your sub-tenant (a.k.a. "business group") to be specified when requesting an item from the catalog. If the catalog item you are requesting is specifically created for a given business group, the gem will use that ID automatically without you needing to specify it.
|
65
65
|
|
66
66
|
However, if there is no sub-tenant ID available for us to use, you will receive an error when you submit:
|
67
67
|
|
@@ -124,7 +124,7 @@ new_request.status
|
|
124
124
|
=> "SUCCESSFUL"
|
125
125
|
```
|
126
126
|
|
127
|
-
When the request is successful, you can query the resources created as the result of your request.
|
127
|
+
When the request is successful, you can query the resources created as the result of your request. Assuming that the catalog item blueprint we requested only creates a single VM, we can get that resource and learn more information about it:
|
128
128
|
|
129
129
|
```
|
130
130
|
resource = request.resources.first
|
data/lib/vra/client.rb
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
|
19
19
|
require 'ffi_yajl'
|
20
20
|
require 'rest-client'
|
21
|
+
require 'passwordmasker'
|
21
22
|
|
22
23
|
module Vra
|
23
24
|
# rubocop:disable ClassLength
|
@@ -27,10 +28,10 @@ module Vra
|
|
27
28
|
def initialize(opts)
|
28
29
|
@base_url = opts[:base_url]
|
29
30
|
@username = opts[:username]
|
30
|
-
@password = opts[:password]
|
31
|
+
@password = PasswordMasker.new(opts[:password])
|
31
32
|
@tenant = opts[:tenant]
|
32
33
|
@verify_ssl = opts.fetch(:verify_ssl, true)
|
33
|
-
@bearer_token = nil
|
34
|
+
@bearer_token = PasswordMasker.new(nil)
|
34
35
|
|
35
36
|
validate_client_options!
|
36
37
|
end
|
@@ -60,7 +61,7 @@ module Vra
|
|
60
61
|
def bearer_token_request_body
|
61
62
|
{
|
62
63
|
'username' => @username,
|
63
|
-
'password' => @password,
|
64
|
+
'password' => @password.value,
|
64
65
|
'tenant' => @tenant
|
65
66
|
}
|
66
67
|
end
|
@@ -69,7 +70,7 @@ module Vra
|
|
69
70
|
headers = {}
|
70
71
|
headers['Accept'] = 'application/json'
|
71
72
|
headers['Content-Type'] = 'application/json'
|
72
|
-
headers['Authorization'] = "Bearer #{@bearer_token}" unless @bearer_token.nil?
|
73
|
+
headers['Authorization'] = "Bearer #{@bearer_token.value}" unless @bearer_token.value.nil?
|
73
74
|
headers
|
74
75
|
end
|
75
76
|
|
@@ -80,9 +81,9 @@ module Vra
|
|
80
81
|
end
|
81
82
|
|
82
83
|
def authorized?
|
83
|
-
return false if @bearer_token.nil?
|
84
|
+
return false if @bearer_token.value.nil?
|
84
85
|
|
85
|
-
response = http_head("/identity/api/tokens/#{@bearer_token}", :skip_auth)
|
86
|
+
response = http_head("/identity/api/tokens/#{@bearer_token.value}", :skip_auth)
|
86
87
|
if response.code == 204
|
87
88
|
true
|
88
89
|
else
|
@@ -91,7 +92,7 @@ module Vra
|
|
91
92
|
end
|
92
93
|
|
93
94
|
def generate_bearer_token
|
94
|
-
@bearer_token = nil
|
95
|
+
@bearer_token.value = nil
|
95
96
|
validate_client_options!
|
96
97
|
|
97
98
|
response = http_post('/identity/api/tokens', bearer_token_request_body.to_json, :skip_auth)
|
@@ -99,7 +100,7 @@ module Vra
|
|
99
100
|
raise Vra::Exception::Unauthorized, "Unable to get bearer token: #{response.body}"
|
100
101
|
end
|
101
102
|
|
102
|
-
@bearer_token = FFI_Yajl::Parser.parse(response.body)['id']
|
103
|
+
@bearer_token.value = FFI_Yajl::Parser.parse(response.body)['id']
|
103
104
|
end
|
104
105
|
|
105
106
|
def full_url(path)
|
@@ -191,7 +192,7 @@ module Vra
|
|
191
192
|
end
|
192
193
|
|
193
194
|
def validate_client_options!
|
194
|
-
raise ArgumentError, 'Username and password are required' if @username.nil? || @password.nil?
|
195
|
+
raise ArgumentError, 'Username and password are required' if @username.nil? || @password.value.nil?
|
195
196
|
raise ArgumentError, 'A tenant is required' if @tenant.nil?
|
196
197
|
raise ArgumentError, 'A base URL is required' if @base_url.nil?
|
197
198
|
raise ArgumentError, "Base URL #{@base_url} is not a valid URI." unless valid_uri?(@base_url)
|
data/lib/vra/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -37,10 +37,16 @@ describe Vra::Client do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
describe '#bearer_token_request_body' do
|
41
|
+
it 'gets the correct password from the PasswordMasker object' do
|
42
|
+
expect(client.bearer_token_request_body['password']).to eq('password')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
40
46
|
describe '#request_headers' do
|
41
47
|
context 'when bearer token exists' do
|
42
48
|
it 'has an Authorization header' do
|
43
|
-
client.bearer_token = '12345'
|
49
|
+
client.bearer_token.value = '12345'
|
44
50
|
expect(client.request_headers.key?('Authorization')).to be true
|
45
51
|
end
|
46
52
|
end
|
@@ -95,7 +101,7 @@ describe Vra::Client do
|
|
95
101
|
|
96
102
|
context 'when token exists' do
|
97
103
|
before(:each) do
|
98
|
-
client.bearer_token = '12345'
|
104
|
+
client.bearer_token.value = '12345'
|
99
105
|
end
|
100
106
|
|
101
107
|
url = '/identity/api/tokens/12345'
|
@@ -147,7 +153,7 @@ describe Vra::Client do
|
|
147
153
|
|
148
154
|
client.generate_bearer_token
|
149
155
|
|
150
|
-
expect(client.bearer_token).to eq '12345'
|
156
|
+
expect(client.bearer_token.value).to eq '12345'
|
151
157
|
end
|
152
158
|
end
|
153
159
|
|
@@ -398,7 +404,7 @@ describe Vra::Client do
|
|
398
404
|
describe '#validate_client_options!' do
|
399
405
|
context 'when all required options are supplied' do
|
400
406
|
it 'does not raise an exception' do
|
401
|
-
expect { client.validate_client_options! }.not_to raise_error
|
407
|
+
expect { client.validate_client_options! }.not_to raise_error
|
402
408
|
end
|
403
409
|
end
|
404
410
|
|
data/vmware-vra.gemspec
CHANGED
@@ -18,8 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'rest-client',
|
22
|
-
spec.add_dependency 'ffi-yajl',
|
21
|
+
spec.add_dependency 'rest-client', '~> 1.8'
|
22
|
+
spec.add_dependency 'ffi-yajl', '~> 2.2'
|
23
|
+
spec.add_dependency 'passwordmasker', '~> 1.2'
|
23
24
|
|
24
25
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
25
26
|
spec.add_development_dependency 'rake', '~> 10.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmware-vra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Leff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: passwordmasker
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,6 +131,7 @@ extra_rdoc_files: []
|
|
117
131
|
files:
|
118
132
|
- ".gitignore"
|
119
133
|
- ".rubocop.yml"
|
134
|
+
- CHANGELOG.md
|
120
135
|
- Gemfile
|
121
136
|
- LICENSE.txt
|
122
137
|
- README.md
|