vmware-vra 2.7.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,192 @@
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
+
20
+ require 'spec_helper'
21
+
22
+ describe Vra::DeploymentRequest do
23
+ let(:client) do
24
+ Vra::Client.new(
25
+ username: 'user@corp.local',
26
+ password: 'password',
27
+ tenant: 'tenant',
28
+ base_url: 'https://vra.corp.local'
29
+ )
30
+ end
31
+
32
+ let(:catalog_id) { 'cat-123456' }
33
+
34
+ let(:request_payload) do
35
+ {
36
+ image_mapping: 'Centos Image',
37
+ name: 'test deployment',
38
+ flavor_mapping: 'Small',
39
+ version: '1',
40
+ project_id: 'pro-123'
41
+ }
42
+ end
43
+
44
+ describe '#initialize' do
45
+ it 'should raise errors for missing arguments' do
46
+ request = described_class.new(
47
+ client,
48
+ catalog_id,
49
+ request_payload
50
+ )
51
+
52
+ expect(request.name).to eq('test deployment')
53
+ expect(request.image_mapping).to eq('Centos Image')
54
+ expect(request.flavor_mapping).to eq('Small')
55
+ expect(request.version).to eq('1')
56
+ expect(request.count).to eq(1)
57
+ end
58
+ end
59
+
60
+ describe '#validate!' do
61
+ it 'should return error if params are missing' do
62
+ request = described_class.new(client, catalog_id)
63
+ expect { request.send(:validate!) }.to raise_error(ArgumentError)
64
+
65
+ request.image_mapping = 'Centos Image'
66
+ request.name = 'test deployment'
67
+ request.flavor_mapping = 'Small'
68
+ request.version = '1'
69
+ request.project_id = 'pro-123'
70
+
71
+ expect { request.send(:validate!) }.not_to raise_error(ArgumentError)
72
+ end
73
+ end
74
+
75
+ describe '#additional parameters' do
76
+ let(:request) do
77
+ described_class.new(client, catalog_id, request_payload)
78
+ end
79
+
80
+ context 'set_parameter' do
81
+ it 'should set the parameter' do
82
+ request.set_parameter('hardware-config', 'stirng', 'Small')
83
+
84
+ expect(request.parameters).to eq({ inputs: { 'hardware-config' => 'Small' } })
85
+ expect(request.parameters[:inputs].count).to be(1)
86
+ end
87
+ end
88
+
89
+ context 'set_parameters' do
90
+ it 'should be able to set multiple parameters' do
91
+ request.set_parameters('test-parent', { 'param1' => { type: 'string', value: 1234 } })
92
+
93
+ expect(request.parameters)
94
+ .to eq({ inputs: { 'test-parent' => { 'inputs' => { 'param1' => 1234 } } } })
95
+ end
96
+
97
+ it 'should set multiple parameters with different data types' do
98
+ request.set_parameters('param1', { key1: { type: 'string', value: 'data' } })
99
+ request.set_parameters('param2', { key2: { type: 'boolean', value: false } })
100
+ request.set_parameters('param3', { key3: { type: 'integer', value: 100 } })
101
+
102
+ expect(request.parameters[:inputs].count).to be 3
103
+ end
104
+ end
105
+
106
+ context 'delete_parameter' do
107
+ before(:each) do
108
+ request.set_parameter('hardware-config', 'string', 'small')
109
+ end
110
+
111
+ it 'should delete the existing parameter' do
112
+ expect(request.parameters[:inputs].count).to be(1)
113
+ request.delete_parameter('hardware-config')
114
+ expect(request.parameters[:inputs].count).to be(0)
115
+ end
116
+ end
117
+
118
+ context '#hash_parameters' do
119
+ it 'should have the correct representation' do
120
+ request.set_parameters(:param1, { key1: { type: 'string', value: 'data' } })
121
+
122
+ expect(request.hash_parameters).to eq({ param1: { :key1 => 'data' } })
123
+ end
124
+ end
125
+ end
126
+
127
+ describe '#submit' do
128
+ let(:request) do
129
+ described_class.new(client, catalog_id, request_payload)
130
+ end
131
+
132
+ before(:each) do
133
+ allow(client).to receive(:authorized?).and_return(true)
134
+ end
135
+
136
+ it 'should call the validate before submit' do
137
+ expect(request).to receive(:validate!)
138
+ stub_request(:post, client.full_url('/catalog/api/items/cat-123456/request'))
139
+ .to_return(status: 200, body: '[{"deploymentId": "123"}]', headers: {})
140
+ allow(Vra::Deployment).to receive(:new)
141
+
142
+ request.submit
143
+ end
144
+
145
+ it 'should call the api to submit the deployment request' do
146
+ response = double('response', body: '[{"deploymentId": "123"}]', success?: true)
147
+ allow(client)
148
+ .to receive(:http_post)
149
+ .with(
150
+ "/catalog/api/items/#{catalog_id}/request",
151
+ {
152
+ deploymentName: 'test deployment',
153
+ projectId: 'pro-123',
154
+ version: '1',
155
+ inputs: {
156
+ count: 1,
157
+ image: 'Centos Image',
158
+ flavor: 'Small'
159
+ }
160
+ }.to_json
161
+ )
162
+ .and_return(response)
163
+ allow(Vra::Deployment).to receive(:new)
164
+
165
+ request.submit
166
+ end
167
+
168
+ it 'should return a deployment object' do
169
+ response = double('response', body: '[{"deploymentId": "123"}]', success?: true)
170
+ allow(client).to receive(:http_post).and_return(response)
171
+ allow(client)
172
+ .to receive(:get_parsed)
173
+ .and_return(JSON.parse(File.read('spec/fixtures/resource/sample_deployment.json')))
174
+
175
+ dep = request.submit
176
+ expect(dep).to be_an_instance_of(Vra::Deployment)
177
+ expect(dep.id).to eq('123')
178
+ end
179
+
180
+ it 'should handle the VRA Errors' do
181
+ allow(request).to receive(:send_request!).and_raise(Vra::Exception::HTTPError)
182
+
183
+ expect { request.submit }.to raise_error(Vra::Exception::RequestError)
184
+ end
185
+
186
+ it 'should handle the generic errors' do
187
+ allow(request).to receive(:send_request!).and_raise(ArgumentError)
188
+
189
+ expect { request.submit }.to raise_error(ArgumentError)
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,227 @@
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
+
20
+ require 'spec_helper'
21
+
22
+ describe ::Vra::Deployment do
23
+ let(:client) do
24
+ Vra::Client.new(
25
+ username: 'user@corp.local',
26
+ password: 'password',
27
+ tenant: 'tenant',
28
+ base_url: 'https://vra.corp.local'
29
+ )
30
+ end
31
+
32
+ let(:sample_data) do
33
+ JSON.parse(File.read('spec/fixtures/resource/sample_deployment.json'))
34
+ end
35
+
36
+ let(:deployment) do
37
+ described_class.new(client, data: sample_data)
38
+ end
39
+
40
+ before(:each) do
41
+ allow(client).to receive(:authorized?).and_return(true)
42
+ end
43
+
44
+ describe '#initialize' do
45
+ let(:deployment) do
46
+ described_class.allocate
47
+ end
48
+
49
+ before(:each) do
50
+ allow(client).to receive(:get_parsed).and_return(sample_data)
51
+ end
52
+
53
+ it 'should validate the attributes' do
54
+ expect(deployment).to receive(:validate!)
55
+
56
+ deployment.send(:initialize, client, id: 'dep-123')
57
+ end
58
+
59
+ it 'should fetch data when id is passed' do
60
+ deployment.send(:initialize, client, id: 'dep-123')
61
+
62
+ expect(deployment.send(:data)).not_to be_nil
63
+ end
64
+
65
+ it 'should set id when data is passed' do
66
+ deployment.send(:initialize, client, data: sample_data)
67
+
68
+ expect(deployment.id).to eq('dep-123')
69
+ end
70
+ end
71
+
72
+ describe '#refresh' do
73
+ it 'should refresh the data correctly' do
74
+ expect(client).to receive(:get_parsed).and_return(sample_data)
75
+
76
+ deployment.refresh
77
+ end
78
+
79
+ it 'should raise an exception if record not found' do
80
+ expect(client).to receive(:get_parsed).and_raise(Vra::Exception::HTTPNotFound)
81
+
82
+ expect { deployment.refresh }.to raise_error(Vra::Exception::NotFound)
83
+ end
84
+ end
85
+
86
+ describe '#attributes' do
87
+ it 'should have the correct attributes' do
88
+ expect(deployment.name).to eq('win-DCI')
89
+ expect(deployment.description).to eq('win-dci deployment')
90
+ expect(deployment.org_id).to eq('origin-123')
91
+ expect(deployment.blueprint_id).to eq('blueprint-123')
92
+ expect(deployment.owner).to eq('administrator')
93
+ expect(deployment.status).to eq('CREATE_SUCCESSFUL')
94
+ expect(deployment.successful?).to be_truthy
95
+ expect(deployment.completed?).to be_truthy
96
+ expect(deployment.failed?).to be_falsey
97
+ end
98
+ end
99
+
100
+ describe '#requests' do
101
+ let(:request_data) do
102
+ JSON.parse(File.read('spec/fixtures/resource/sample_dep_request.json'))
103
+ end
104
+
105
+ it 'should call the api to fetch the requests' do
106
+ expect(client)
107
+ .to receive(:get_parsed)
108
+ .with('/deployment/api/deployments/dep-123/requests')
109
+ .and_return({ 'content' => [request_data] })
110
+
111
+ deployment.requests
112
+ end
113
+
114
+ it 'should return the Vra::Request object' do
115
+ stub_request(:get, client.full_url('/deployment/api/deployments/dep-123/requests'))
116
+ .to_return(status: 200, body: { 'content' => [request_data] }.to_json, headers: {})
117
+
118
+ res = deployment.requests.first
119
+ expect(res).to be_an_instance_of(Vra::Request)
120
+ end
121
+
122
+ it 'should return the correct request data' do
123
+ allow(client)
124
+ .to receive(:get_parsed)
125
+ .with('/deployment/api/deployments/dep-123/requests')
126
+ .and_return({ 'content' => [request_data] })
127
+
128
+ res = deployment.requests.first
129
+ expect(res.status).to eq('SUCCESSFUL')
130
+ expect(res.name).to eq('Create')
131
+ expect(res.requested_by).to eq('admin')
132
+ end
133
+ end
134
+
135
+ describe '#resources' do
136
+ let(:resource_data) do
137
+ JSON.parse(File.read('spec/fixtures/resource/sample_dep_resource.json'))
138
+ end
139
+
140
+ it 'should call the api to fetch the resources' do
141
+ expect(client)
142
+ .to receive(:get_parsed)
143
+ .with('/deployment/api/deployments/dep-123/resources')
144
+ .and_return({ 'content' => [resource_data] })
145
+
146
+ res = deployment.resources.first
147
+ expect(res).to be_an_instance_of(Vra::Resource)
148
+ end
149
+
150
+ it 'should have the correct resource data' do
151
+ expect(client).to receive(:get_parsed).and_return({ 'content' => [resource_data] })
152
+
153
+ res = deployment.resources.first
154
+ expect(res.name).to eq('Cloud_vSphere_Machine_1')
155
+ expect(res.status).to eq('SUCCESS')
156
+ expect(res.vm?).to be_truthy
157
+ expect(res.owner_names).to eq('admin')
158
+ end
159
+ end
160
+
161
+ describe '#actions' do
162
+ let(:actions_data) do
163
+ JSON.parse(File.read('spec/fixtures/resource/sample_dep_actions.json'))
164
+ end
165
+
166
+ def action_req(action)
167
+ {
168
+ actionId: "Deployment.#{camelize(action)}",
169
+ inputs: {},
170
+ reason: "Testing the #{action}"
171
+ }.to_json
172
+ end
173
+
174
+ def action_response(action)
175
+ {
176
+ 'id' => 'req-123',
177
+ 'name' => camelize(action),
178
+ 'requestedBy' => 'admin',
179
+ 'blueprintId' => 'blueprint-123',
180
+ 'inputs' => {
181
+ 'flag' => 'false',
182
+ 'count' => '1',
183
+ 'hardware-config' => 'Medium'
184
+ },
185
+ 'status' => 'SUCCESSFUL'
186
+ }.to_json
187
+ end
188
+
189
+ def camelize(action_name)
190
+ action_name.split('_').map(&:capitalize).join
191
+ end
192
+
193
+ it 'should call the api to fetch the actions' do
194
+ expect(client)
195
+ .to receive(:get_parsed)
196
+ .with('/deployment/api/deployments/dep-123/actions')
197
+ .and_return(actions_data)
198
+
199
+ actions = deployment.actions
200
+ expect(actions).to be_an_instance_of(Array)
201
+ end
202
+
203
+ it 'should return the correct actions' do
204
+ allow(client).to receive(:get_parsed).and_return(actions_data)
205
+
206
+ action_names = deployment.actions.map { |a| a['name'] }
207
+ expect(action_names).to eq(%w[ChangeLease ChangeOwner Delete EditTags PowerOff PowerOn Update])
208
+ end
209
+
210
+ {
211
+ destroy: 'delete',
212
+ power_on: 'power_on',
213
+ power_off: 'power_off'
214
+ }.each do |method, action|
215
+ it "should perform the action: #{action} correctly" do
216
+ allow(client).to receive(:get_parsed).and_return(actions_data)
217
+ stub_request(:post, client.full_url('/deployment/api/deployments/dep-123/requests'))
218
+ .with(body: action_req(action))
219
+ .to_return(status: 200, body: action_response(action), headers: {})
220
+
221
+ action_request = deployment.send(method, "Testing the #{action}")
222
+ expect(action_request).to be_an_instance_of(Vra::Request)
223
+ expect(action_request.name).to eq(camelize(action))
224
+ end
225
+ end
226
+ end
227
+ end
@@ -0,0 +1,80 @@
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
+
20
+ require 'spec_helper'
21
+
22
+ describe ::Vra::Deployments do
23
+ let(:client) do
24
+ Vra::Client.new(
25
+ username: 'user@corp.local',
26
+ password: 'password',
27
+ tenant: 'tenant',
28
+ base_url: 'https://vra.corp.local'
29
+ )
30
+ end
31
+
32
+ let(:deployment_response) do
33
+ JSON.parse(File.read('spec/fixtures/resource/sample_deployment.json'))
34
+ end
35
+
36
+ before(:each) do
37
+ allow(client).to receive(:authorized?).and_return(true)
38
+ end
39
+
40
+ describe '#by_id' do
41
+ it 'should call the api to fetch the deployments' do
42
+ expect(client).to receive(:get_parsed).and_return(deployment_response)
43
+
44
+ described_class.by_id(client, 'dep-123')
45
+ end
46
+
47
+ it 'should return the deployment by id' do
48
+ stub_request(:get, client.full_url('/deployment/api/deployments/dep-123'))
49
+ .to_return(status: 200, body: deployment_response.to_json, headers: {})
50
+
51
+ deployment = described_class.by_id(client, 'dep-123')
52
+ expect(deployment).to be_an_instance_of(Vra::Deployment)
53
+ end
54
+ end
55
+
56
+ describe '#all' do
57
+ it 'should call the api to fetch all deployments' do
58
+ expect(client)
59
+ .to receive(:http_get_paginated_array!)
60
+ .with('/deployment/api/deployments')
61
+ .and_return([deployment_response])
62
+
63
+ described_class.all(client)
64
+ end
65
+
66
+ it 'should return the Vra::Deployment object' do
67
+ stub_request(:get, client.full_url('/deployment/api/deployments?$skip=0&$top=20'))
68
+ .to_return(status: 200, body: { content: [deployment_response], totalPages: 1 }.to_json, headers: {})
69
+
70
+ deployment = described_class.all(client).first
71
+ expect(deployment).to be_an_instance_of(Vra::Deployment)
72
+ end
73
+ end
74
+
75
+ describe 'called with client' do
76
+ it 'should return the class object' do
77
+ expect(client.deployments).to be_an_instance_of described_class
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "123456",
3
+ "name": "centos",
4
+ "description": "Centos Cat",
5
+ "sourceId": "source-123456",
6
+ "sourceName": "Source 123",
7
+ "type": {
8
+ "id": "com.vmw.blueprint",
9
+ "link": "/catalog/api/types/com.vmw.blueprint",
10
+ "name": "VMware Cloud Templates"
11
+ },
12
+ "createdAt": "2021-10-07T14:41:57.691449Z",
13
+ "createdBy": "administrator",
14
+ "lastUpdatedAt": "2021-11-04T00:06:45.835597Z",
15
+ "lastUpdatedBy": "administrator",
16
+ "iconId": "1495b8d9",
17
+ "bulkRequestLimit": 1
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "654321",
3
+ "name": "Centos-80x64",
4
+ "description": "",
5
+ "sourceId": "pro-123456",
6
+ "sourceName": "Devops",
7
+ "type": {
8
+ "id": "com.vmw.blueprint",
9
+ "link": "/catalog/api/types/com.vmw.blueprint",
10
+ "name": "VMware Cloud Templates"
11
+ },
12
+ "createdAt": "2020-09-18T17:38:50.366691Z",
13
+ "createdBy": "administrator",
14
+ "lastUpdatedAt": "2021-12-15T00:18:34.706782Z",
15
+ "lastUpdatedBy": "administrator",
16
+ "iconId": "1ab82fe1",
17
+ "bulkRequestLimit": 1
18
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "id": "123456",
3
+ "name": "Devops",
4
+ "typeId": "com.vmw.blueprint",
5
+ "createdAt": "2020-08-19T20:16:12.160353Z",
6
+ "createdBy": "administrator",
7
+ "lastUpdatedAt": "2021-12-29T12:49:32.186116Z",
8
+ "lastUpdatedBy": "system-user",
9
+ "config": {
10
+ "sourceProjectId": "pro-123456"
11
+ },
12
+ "itemsImported": 20,
13
+ "itemsFound": 20,
14
+ "lastImportStartedAt": "2021-12-29T12:49:30.638320Z",
15
+ "lastImportCompletedAt": "2021-12-29T12:49:32.185967Z",
16
+ "lastImportErrors": [],
17
+ "projectId": "pro-123456",
18
+ "global": false,
19
+ "iconId": "1495b8d9"
20
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "id": "com.vmw.vro.workflow",
3
+ "name": "vRealize Orchestrator Workflow",
4
+ "baseUri": "https://vra.corp.local:8080/vro",
5
+ "createdBy": "vro-gateway-test",
6
+ "createdAt": "2020-08-04T22:37:14.295973Z",
7
+ "iconId": "0616ff81-c13b-32fe-b3b9-de3c2edd85dd",
8
+ "configSchema": {
9
+ "type": "object",
10
+ "properties": {
11
+ "workflows": {
12
+ "type": "array",
13
+ "items": {
14
+ "type": "object",
15
+ "properties": {
16
+ "id": {
17
+ "type": "string"
18
+ },
19
+ "name": {
20
+ "type": "string"
21
+ },
22
+ "version": {
23
+ "type": "string"
24
+ },
25
+ "description": {
26
+ "type": "string"
27
+ },
28
+ "integration": {
29
+ "type": "object",
30
+ "properties": {
31
+ "endpointConfigurationLink": {
32
+ "type": "string"
33
+ }
34
+ },
35
+ "required": [
36
+ "endpointConfigurationLink"
37
+ ]
38
+ }
39
+ },
40
+ "required": [
41
+ "name",
42
+ "id",
43
+ "version"
44
+ ]
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,58 @@
1
+ [
2
+ {
3
+ "id": "Deployment.ChangeLease",
4
+ "name": "ChangeLease",
5
+ "displayName": "Change Lease",
6
+ "description": "Set a deployment's expiration date",
7
+ "valid": true,
8
+ "actionType": "RESOURCE_ACTION"
9
+ },
10
+ {
11
+ "id": "Deployment.ChangeOwner",
12
+ "name": "ChangeOwner",
13
+ "displayName": "Change Owner",
14
+ "description": "Change owner of a deployment",
15
+ "valid": true,
16
+ "actionType": "RESOURCE_ACTION"
17
+ },
18
+ {
19
+ "id": "Deployment.Delete",
20
+ "name": "Delete",
21
+ "displayName": "Delete",
22
+ "description": "Delete a deployment",
23
+ "valid": true,
24
+ "actionType": "RESOURCE_ACTION"
25
+ },
26
+ {
27
+ "id": "Deployment.EditTags",
28
+ "name": "EditTags",
29
+ "displayName": "Edit Tags",
30
+ "description": "Add or remove tags from a deployment's resources",
31
+ "valid": true,
32
+ "actionType": "RESOURCE_ACTION"
33
+ },
34
+ {
35
+ "id": "Deployment.PowerOff",
36
+ "name": "PowerOff",
37
+ "displayName": "Power Off",
38
+ "description": "Power off a deployment",
39
+ "valid": true,
40
+ "actionType": "RESOURCE_ACTION"
41
+ },
42
+ {
43
+ "id": "Deployment.PowerOn",
44
+ "name": "PowerOn",
45
+ "displayName": "Power On",
46
+ "description": "Power on a deployment",
47
+ "valid": false,
48
+ "actionType": "RESOURCE_ACTION"
49
+ },
50
+ {
51
+ "id": "Deployment.Update",
52
+ "name": "Update",
53
+ "displayName": "Update",
54
+ "description": "Update a deployment",
55
+ "valid": true,
56
+ "actionType": "RESOURCE_ACTION"
57
+ }
58
+ ]
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "req-123",
3
+ "name": "Create",
4
+ "requestedBy": "admin",
5
+ "blueprintId": "blueprint-123",
6
+ "inputs": {
7
+ "flag": "false",
8
+ "count": "1",
9
+ "hardware-config": "Medium"
10
+ },
11
+ "status": "SUCCESSFUL",
12
+ "details": "",
13
+ "createdAt": "2021-12-20T13:21:52.699271Z",
14
+ "updatedAt": "2021-12-20T13:31:38.725363Z",
15
+ "totalTasks": 5,
16
+ "completedTasks": 5,
17
+ "dismissed": false,
18
+ "cancelable": true
19
+ }