vmware-vra 2.7.2 → 3.0.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/CHANGELOG.md +5 -0
  4. data/README.md +79 -144
  5. data/Rakefile +0 -11
  6. data/lib/vra/catalog.rb +39 -8
  7. data/lib/vra/catalog_base.rb +62 -0
  8. data/lib/vra/catalog_item.rb +28 -74
  9. data/lib/vra/catalog_source.rb +116 -0
  10. data/lib/vra/catalog_type.rb +56 -0
  11. data/lib/vra/client.rb +62 -54
  12. data/lib/vra/deployment.rb +155 -0
  13. data/lib/vra/deployment_request.rb +117 -0
  14. data/lib/vra/{resources.rb → deployments.rb} +26 -17
  15. data/lib/vra/exceptions.rb +1 -1
  16. data/lib/vra/http.rb +11 -6
  17. data/lib/vra/request.rb +28 -36
  18. data/lib/vra/request_parameters.rb +12 -12
  19. data/lib/vra/resource.rb +32 -203
  20. data/lib/vra/version.rb +2 -2
  21. data/lib/vra.rb +15 -12
  22. data/spec/catalog_item_spec.rb +64 -222
  23. data/spec/catalog_source_spec.rb +178 -0
  24. data/spec/catalog_spec.rb +112 -72
  25. data/spec/catalog_type_spec.rb +114 -0
  26. data/spec/client_spec.rb +271 -226
  27. data/spec/deployment_request_spec.rb +192 -0
  28. data/spec/deployment_spec.rb +227 -0
  29. data/spec/deployments_spec.rb +80 -0
  30. data/spec/fixtures/resource/sample_catalog_item.json +18 -0
  31. data/spec/fixtures/resource/sample_catalog_item_2.json +18 -0
  32. data/spec/fixtures/resource/sample_catalog_source.json +20 -0
  33. data/spec/fixtures/resource/sample_catalog_type.json +49 -0
  34. data/spec/fixtures/resource/sample_dep_actions.json +58 -0
  35. data/spec/fixtures/resource/sample_dep_request.json +19 -0
  36. data/spec/fixtures/resource/sample_dep_resource.json +112 -0
  37. data/spec/fixtures/resource/sample_deployment.json +26 -0
  38. data/spec/fixtures/resource/sample_entitlements.json +25 -0
  39. data/spec/http_spec.rb +63 -61
  40. data/spec/request_spec.rb +62 -68
  41. data/spec/resource_spec.rb +71 -390
  42. data/spec/spec_helper.rb +10 -4
  43. data/vmware-vra.gemspec +0 -1
  44. metadata +40 -30
  45. data/.travis.yml +0 -14
  46. data/lib/vra/catalog_request.rb +0 -137
  47. data/lib/vra/requests.rb +0 -41
  48. data/spec/catalog_request_spec.rb +0 -268
  49. data/spec/requests_spec.rb +0 -60
  50. data/spec/resources_spec.rb +0 -71
data/spec/catalog_spec.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
3
  # Author:: Chef Partner Engineering (<partnereng@chef.io>)
4
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
4
+ # Copyright:: Copyright (c) 2022 Chef Software, Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,79 +17,43 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require "spec_helper"
20
+ require 'spec_helper'
21
21
 
22
22
  describe Vra::Catalog do
23
23
  let(:client) do
24
- Vra::Client.new(username: "user@corp.local",
25
- password: "password",
26
- tenant: "tenant",
27
- base_url: "https://vra.corp.local")
24
+ Vra::Client.new(
25
+ username: 'user@corp.local',
26
+ password: 'password',
27
+ tenant: 'tenant',
28
+ base_url: 'https://vra.corp.local'
29
+ )
28
30
  end
29
31
 
30
32
  let(:catalog_item) do
31
- {
32
- "@type" => "CatalogItem",
33
- "id" => "a9cd6148-6e0b-4a80-ac47-f5255c52b43d",
34
- "version" => 2,
35
- "name" => "CentOS 6.6",
36
- "description" => "Blueprint for deploying a CentOS Linux development server",
37
- "status" => "PUBLISHED",
38
- "statusName" => "Published",
39
- "organization" => {
40
- "tenantRef" => "vsphere.local",
41
- "tenantLabel" => "vsphere.local",
42
- "subtenantRef" => nil,
43
- "subtenantLabel" => nil,
44
- },
45
- "providerBinding" => {
46
- "bindingId" => "33af5413-4f20-4b3b-8268-32edad434dfb",
47
- "providerRef" => {
48
- "id" => "c3b2bc30-47b0-454f-b57d-df02a7356fe6",
49
- "label" => "iaas-service",
50
- },
51
- },
52
- }
33
+ JSON.parse(File.read('spec/fixtures/resource/sample_catalog_item.json'))
53
34
  end
54
35
 
55
36
  let(:entitled_catalog_item) do
56
- {
57
- "@type" => "ConsumerEntitledCatalogItem",
58
- "catalogItem" => {
59
- "id" => "d29efd6b-3cd6-4f8d-b1d8-da4ddd4e52b1",
60
- "version" => 2,
61
- "name" => "WindowsServer2012",
62
- "description" => "Windows Server 2012 with the latest updates and patches.",
63
- "status" => "PUBLISHED",
64
- "statusName" => "Published",
65
- "organization" => {
66
- "tenantRef" => "vsphere.local",
67
- "tenantLabel" => "vsphere.local",
68
- "subtenantRef" => nil,
69
- "subtenantLabel" => nil,
70
- },
71
- "providerBinding" => {
72
- "bindingId" => "59fd02a1-acca-4918-9d3d-2298d310caef",
73
- "providerRef" => {
74
- "id" => "c3b2bc30-47b0-454f-b57d-df02a7356fe6",
75
- "label" => "iaas-service",
76
- },
77
- },
78
- },
79
- }
37
+ JSON.parse(File.read('spec/fixtures/resource/sample_catalog_item_2.json'))
80
38
  end
81
39
 
82
- describe "#all_items" do
83
- it "calls the catalogItems endpoint" do
84
- expect(client).to receive(:http_get_paginated_array!).with("/catalog-service/api/consumer/catalogItems")
85
- .and_return([ catalog_item ])
40
+ before(:each) do
41
+ allow(client).to receive(:authorized?).and_return(true)
42
+ end
43
+
44
+ describe '#all_items' do
45
+ it 'calls the catalogItems endpoint' do
46
+ expect(client).to receive(:http_get_paginated_array!)
47
+ .with('/catalog/api/admin/items', nil)
48
+ .and_return([catalog_item])
86
49
 
87
50
  client.catalog.all_items
88
51
  end
89
52
 
90
- it "returns a Vra::CatalogItem object" do
91
- allow(client).to receive(:http_get_paginated_array!).with("/catalog-service/api/consumer/catalogItems")
92
- .and_return([ catalog_item ])
53
+ it 'returns a Vra::CatalogItem object' do
54
+ allow(client).to receive(:http_get_paginated_array!)
55
+ .with('/catalog/api/admin/items', nil)
56
+ .and_return([catalog_item])
93
57
 
94
58
  items = client.catalog.all_items
95
59
 
@@ -97,29 +61,105 @@ describe Vra::Catalog do
97
61
  end
98
62
  end
99
63
 
100
- describe "#entitled_items" do
101
- it "calls the entitledCatalogItems endpoint" do
102
- expect(client).to receive(:http_get_paginated_array!).with("/catalog-service/api/consumer/entitledCatalogItems")
103
- .and_return([ entitled_catalog_item ])
64
+ describe '#entitled_items' do
65
+ it 'calls the entitledCatalogItems endpoint' do
66
+ expect(client).to receive(:get_parsed)
67
+ .with('/catalog/api/admin/entitlements?projectId=pro-123456')
68
+ .and_return(JSON.parse(File.read('spec/fixtures/resource/sample_entitlements.json')))
104
69
 
105
- client.catalog.entitled_items
70
+ client.catalog.entitled_items('pro-123456')
106
71
  end
107
72
 
108
- it "returns a Vra::CatalogItem object" do
109
- allow(client).to receive(:http_get_paginated_array!).with("/catalog-service/api/consumer/entitledCatalogItems")
110
- .and_return([ entitled_catalog_item ])
73
+ it 'returns a Vra::CatalogItem object' do
74
+ allow(client).to receive(:get_parsed)
75
+ .with('/catalog/api/admin/entitlements?projectId=pro-123456')
76
+ .and_return(JSON.parse(File.read('spec/fixtures/resource/sample_entitlements.json')))
111
77
 
112
- items = client.catalog.entitled_items
78
+ items = client.catalog.entitled_items('pro-123456')
113
79
 
114
80
  expect(items.first).to be_an_instance_of(Vra::CatalogItem)
115
81
  end
82
+
83
+ it 'return a Vra::CatalogSource object on source entitlements' do
84
+ allow(client).to receive(:get_parsed)
85
+ .with('/catalog/api/admin/entitlements?projectId=pro-123456')
86
+ .and_return(JSON.parse(File.read('spec/fixtures/resource/sample_entitlements.json')))
87
+
88
+ items = client.catalog.entitled_sources('pro-123456')
89
+
90
+ expect(items.first).to be_an_instance_of(Vra::CatalogSource)
91
+ end
116
92
  end
117
93
 
118
- describe "#request" do
119
- it "returns a new Vra::CatalogRequest object" do
94
+ describe '#request' do
95
+ it 'returns a new Vra::CatalogRequest object' do
120
96
  allow(Vra::CatalogItem).to receive(:new)
121
- request = client.catalog.request("blueprint-1", cpus: 2)
122
- expect(request).to be_an_instance_of(Vra::CatalogRequest)
97
+ request = client.catalog.request('blueprint-1', cpus: 2)
98
+ expect(request).to be_an_instance_of(Vra::DeploymentRequest)
99
+ end
100
+ end
101
+
102
+ describe '#sources' do
103
+ let(:source_data) do
104
+ JSON.parse(File.read('spec/fixtures/resource/sample_catalog_source.json'))
105
+ end
106
+
107
+ it 'should call the api to fetch the sources' do
108
+ expect(client).to receive(:http_get_paginated_array!)
109
+ .with('/catalog/api/admin/sources', nil)
110
+ .and_return([source_data])
111
+
112
+ client.catalog.all_sources
113
+ end
114
+
115
+ it 'should return the Vra::CatalogSource object' do
116
+ expect(client).to receive(:http_get_paginated_array!)
117
+ .with('/catalog/api/admin/sources', nil)
118
+ .and_return([source_data])
119
+
120
+ source = client.catalog.all_sources.first
121
+
122
+ expect(source).to be_a(Vra::CatalogSource)
123
+ end
124
+ end
125
+
126
+ describe '#types' do
127
+ let(:type_data) do
128
+ JSON.parse(File.read('spec/fixtures/resource/sample_catalog_type.json'))
129
+ end
130
+
131
+ it 'should call the api to fetch the types' do
132
+ expect(client).to receive(:http_get_paginated_array!)
133
+ .with('/catalog/api/types', nil)
134
+ .and_return([type_data])
135
+
136
+ client.catalog.all_types
137
+ end
138
+
139
+ it 'should return the Vra::CatalogType object' do
140
+ expect(client).to receive(:http_get_paginated_array!)
141
+ .with('/catalog/api/types', nil)
142
+ .and_return([type_data])
143
+
144
+ source = client.catalog.all_types.first
145
+
146
+ expect(source).to be_a(Vra::CatalogType)
147
+ end
148
+ end
149
+
150
+ describe '#fetch_catalog_by_name' do
151
+ let(:catalog_item) do
152
+ JSON.parse(File.read('spec/fixtures/resource/sample_catalog_item.json'))
153
+ end
154
+
155
+ it 'returns the catalogs by name' do
156
+ expect(client).to receive(:http_get_paginated_array!)
157
+ .with('/catalog/api/admin/items', 'search=centos')
158
+ .and_return([catalog_item])
159
+
160
+ cat = client.catalog.fetch_catalog_items('centos').first
161
+
162
+ expect(cat).to be_an_instance_of(Vra::CatalogItem)
123
163
  end
124
164
  end
125
165
  end
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Ashique Saidalavi (<ashique.saidalavi@progress.com>)
4
+ # Copyright:: Copyright (c) 2022 Chef Software, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ require 'spec_helper'
20
+
21
+ describe Vra::CatalogType do
22
+ let(:client) do
23
+ Vra::Client.new(
24
+ username: 'user@corp.local',
25
+ password: 'password',
26
+ tenant: 'tenant',
27
+ base_url: 'https://vra.corp.local'
28
+ )
29
+ end
30
+
31
+ let(:sample_data) do
32
+ JSON.parse(File.read('spec/fixtures/resource/sample_catalog_type.json'))
33
+ end
34
+
35
+ describe '#initialize' do
36
+ let(:cat_type) do
37
+ described_class.allocate
38
+ end
39
+
40
+ before(:each) do
41
+ allow(client).to receive(:get_parsed).and_return(sample_data)
42
+ end
43
+
44
+ it 'should validate and fetch data' do
45
+ expect(cat_type).to receive(:validate!)
46
+ expect(cat_type).to receive(:fetch_data)
47
+
48
+ cat_type.send(:initialize, client, id: 'com.vmw.vro.workflow')
49
+ end
50
+
51
+ it 'should fetch data when id is passed' do
52
+ cat_type.send(:initialize, client, id: 'com.vmw.vro.workflow')
53
+
54
+ expect(cat_type.send(:data)).not_to be_nil
55
+ end
56
+
57
+ it 'should set id when data is passed' do
58
+ cat_type.send(:initialize, client, data: sample_data)
59
+
60
+ expect(cat_type.id).to eq('com.vmw.vro.workflow')
61
+ end
62
+ end
63
+
64
+ describe '#validate' do
65
+ let(:cat_type) do
66
+ described_class.allocate
67
+ end
68
+
69
+ it 'should raise exception when neither id nor data passed' do
70
+ expect { cat_type.send(:initialize, client) }.to raise_error(ArgumentError)
71
+ end
72
+
73
+ it 'should raise exception when both id and data is passed' do
74
+ params = [client, { id: 'com.vmw.vra.workflow', data: sample_data }]
75
+ expect { cat_type.send(:initialize, *params) }.to raise_error(ArgumentError)
76
+ end
77
+ end
78
+
79
+ describe '#fetch_data' do
80
+ let(:cat_type) do
81
+ described_class.allocate
82
+ end
83
+
84
+ it 'should fetch the data correctly' do
85
+ allow(client).to receive(:get_parsed).and_return(sample_data)
86
+ cat_type.send(:initialize, client, id: 'com.vmw.vro.workflow')
87
+
88
+ data = cat_type.send(:data)
89
+ expect(data).not_to be_nil
90
+ expect(cat_type.id).to eq(data['id'])
91
+ expect(data['name']).to eq('vRealize Orchestrator Workflow')
92
+ end
93
+
94
+ it 'should raise when catalog with type not found' do
95
+ allow(client).to receive(:get_parsed).and_raise(Vra::Exception::HTTPNotFound)
96
+
97
+ expect { cat_type.send(:initialize, client, id: sample_data['id']) }
98
+ .to raise_error(Vra::Exception::NotFound)
99
+ .with_message("catalog type ID #{sample_data['id']} does not exist")
100
+ end
101
+ end
102
+
103
+ describe 'attributes' do
104
+ it 'should have the correct attributes' do
105
+ allow(client).to receive(:get_parsed).and_return(sample_data)
106
+
107
+ cat_type = described_class.new(client, id: sample_data['id'])
108
+ expect(cat_type.name).to eq('vRealize Orchestrator Workflow')
109
+ expect(cat_type.base_url).to eq('https://vra.corp.local:8080/vro')
110
+ expect(cat_type.config_schema).to eq(sample_data['configSchema'])
111
+ expect(cat_type.icon_id).to eq('0616ff81-c13b-32fe-b3b9-de3c2edd85dd')
112
+ end
113
+ end
114
+ end